C语言数据结构学生成绩 顺序表

一个简单的顺序表实现一组学生信息增,删,查,取功能。其中文件导入部分的处理花费了较多时间
代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<errno.h>

#define maxsize 30
#define OVERFLOW -2
#define OK 1


typedef struct{
  char name[8];
  int  id;
  int score;
}student;

typedef struct{
 student *elem;
 int length ;
}sqlist;

函数方法:
初始化


int InitList(sqlist *L)
{
   L->elem=(student*)malloc(sizeof(student)*maxsize);
   if(!L->elem)  exit(OVERFLOW);
	L->length=0;
	return OK;
}

void Openfile(sqlist *L){
   int i=0;
   FILE *fp;
   fp =fopen("mmp.txt","r");     
    if((fp=fopen("mmp.txt","r"))==NULL)
     {
      printf("can't open the file!!!\n");
      printf("error:%s\n",strerror(errno));
      exit(0);
     }
    while(!feof(fp))
	{
		fscanf(fp,"%s%d%d",L->elem[i].name,&L->elem[i].id,&L->elem[i].score); 
		 /*fscanf()格式化读文件函数,这个函数以空格或换行区分两个不同的数据,如果使     
		 用自己编写的文本,文本每个元素之间最好保持一个空格不要多个空格以免
		 出现不必要的错误*/
		printf("%s%d%d\n",L->elem[i].name,L->elem[i].id,L->elem[i].score);
		i++;
		L->length++;
	}
	fclose(fp);
}

插入与删除


int InsertList(sqlist *L){
    int j,i;
    student s;
    printf("================输入要插入的学生信息==============\n");
    printf("*****姓名:");	scanf("%s",s.name);
	printf("*****学号:");	scanf("%d",&s.id);
	printf("*****成绩:");	scanf("%d",&s.score);
	printf("输入完成\n\n");
    printf("输入要插入的位置信息:");
    scanf("%d",&i);
    if((i<1)||(i>L->length+1)) return 0;
    if(L->length==maxsize) return 0;
    for(j=L->length-1;j>=i-1;j--){
      L->elem[j+1]=L->elem[j];
   }
   L->elem[i-1]=s;
   L->length++;
}

int DeleteList(sqlist *L){
  int j,i;
  printf("输入要删除位置");
  scanf("%d",&i);
  if((i<1)||(i>L->length+1)) return 0;
  for(j=i-1;j<L->length-1;j++){
  L->elem[j]=L->elem[j+1];
  }
  L->length--;
  return OK;
}

查找取值


int LocateElem(sqlist *L){
   int k,i=0;
   printf("输入要查找的学号\n") ;
   scanf("%d",&k);
   for(i=0;i<L->length;i++){
    if(L->elem[i].id==k) printf("该生的成绩为:%d\n",L->elem[i].score);
}
   return 0 ;
}

int GetElement(sqlist *L){
    int i;
    student e;
    printf("输入取值位置信息\n");      scanf("%d",&i);
    if((i<1)||(i>L->length+1)) return 0;
    e=L->elem[i-1];
    printf("********该学生的信息********\n");
    printf("姓名: %s\n",e.name);
	printf("学号: %d\n",e.id);
	printf("成绩: %d\n",e.score);

    return OK;
}

打印


void printList(sqlist *L){
   int i=0;
   printf("====================学生成绩表==================\n");
   for(i=0;i<L->length;i++){
   printf("姓名:%s\n",L->elem[i].name);
   printf("学号:%d\n",L->elem[i].id);
   printf("成绩:%d\n\n",L->elem[i].score);
}
   printf("\n");
}

主函数:

int main(){
    sqlist L;
    InitList(&L);             /*初始化*/
    Openfile(&L);             /*导入文件*/
    printList(&L);

    InsertList(&L);          /*增,删,查,取*/
    printList(&L);

    DeleteList(&L);
    printList(&L);

    LocateElem(&L);
    GetElement(&L);
    return 0;
}



发布了21 篇原创文章 · 获赞 10 · 访问量 2666

猜你喜欢

转载自blog.csdn.net/weixin_42199022/article/details/89196359