1、源代码:#include#include#include#define LEN sizeof(Student1)typedef struct Student long long xuehao;char xingming20; char xingbie2; int nianji;int banji;int yuwen;int shuxue;int yingyu;int lizong;int zongfen;struct Student *next;Student1;void chazhao()/查找。先将文件中的数据加入链表中,然后在链表中进行查找 FILE *fp;int i=0,n=0,k;
2、if(fp=fopen(grade.txt,r)=NULL) printf(%sn,打开错误); Student1 *p1,*p2,*p3,*head; p2=head=(Student1 *)malloc(LEN);/head中不存数据 head-next=NULL; while(!feof(fp) p1=(Student1 *)malloc(LEN); fscanf(fp,%lld %s %s %d%d%d%d%d%d%d,&p1-xuehao,p1-xingming,p1-xingbie,&p1-nianji,&p1-banji,&p1-yuwen,&p1-shuxue,&p1-ying
3、yu,&p1-lizong,&p1-zongfen); printf(%lldt%stt%stt%dt%dt%dt%dt%dt%dt%dtn,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zongfen); p2-next=p1; p2=p1; fclose(fp); p1-next=NULL;void xuehaochazhao(Student1 *p);void xingmingchazhao(Student1 *p);/#while(1)syste
4、m(clear);printf(%sn,1.按学号查找输入1);printf(%sn,2.按姓名查找输入2);scanf(%d,&i);system(clear);switch(i)case 1:xuehaochazhao(head);break;case 2:xingmingchazhao(head);break;default:printf(%sn,输入错误);printf(%sn,输入0结束查找,输入其他数继续查找);scanf(%d,&k);system(clear);if(k=0)/结束整个查找过程时,将链表内存释放 p1=head;while(p1!=NULL)p3=p1-next
5、;free(p1); p1=p3;break;void xuehaochazhao(Student1 *p)int i,k; Student1 *p1,*p2,*p3,*head;while(1)p1=p-next;long long m;printf(%sn,请输入要查找的学生的学号);scanf(%lld,&m); while(p1-next!=NULL & p1-xuehao!=m)p1=p1-next;if(p1-xuehao=m)printf(学号为%lld的学生姓名为%s,性别%s,年级为%d,班级为%d,成绩 语文:%d 数学:%d 英语:%d 理综:%d 总分:%dn,p1-x
6、uehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zongfen);elseprintf(%sn,暂未录入此学生信息);printf(%sn,输入0返回查找界面,输入其他数继续按学号查找);scanf(%d,&k);system(clear);if(k=0)/不能在这里将链表内存释放break;void xingmingchazhao(Student1 *p) char a20; int k; Student1 *p1,*p2,*p3,*head;while(1)p
7、1=p-next;printf(%sn,请输入要查找的学生的姓名);scanf(%s,a); while(p1-next!=NULL & strcmp(p1-xingming,a)!=0)p1=p1-next;if(strcmp(p1-xingming,a)=0)printf(%s同学的学号为%lld,性别%s,年级为%d,班级为%d,成绩 语文:%d 数学:%d 英语:%d 理综:%d 总分:%dn,p1-xingming,p1-xuehao,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zon
8、gfen);elseprintf(%sn,暂未录入此学生信息);printf(%sn,输入0返回查找界面,输入其他数继续按姓名查找);scanf(%d,&k);system(clear);if(k=0)break;/#void xiugai()/修改int i=0,n=0,g,k;long long m;FILE *fp;system(clear);if(fp=fopen(grade.txt,r)=NULL)printf(%sn,打开错误);printf(%st,学号);printf(%stt,姓名);printf(%stt,性别);printf(%st,年级);printf(%st,班级);
9、printf(%st,语文);printf(%st,数学);printf(%st,英语);printf(%st,理综);printf(%stn,总分);Student1 *p1,*p2,*p3,*head; p2=head=(Student1 *)malloc(LEN);/head中不存数据 head-next=NULL; while(!feof(fp) p1=(Student1 *)malloc(LEN); fscanf(fp,%lld %s %s %d%d%d%d%d%d%d,&p1-xuehao,p1-xingming,p1-xingbie,&p1-nianji,&p1-banji,&p
10、1-yuwen,&p1-shuxue,&p1-yingyu,&p1-lizong,&p1-zongfen); printf(%lldt%stt%stt%dt%dt%dt%dt%dt%dt%dtn,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zongfen); p2-next=p1; p2=p1; fclose(fp); p1-next=NULL;while(1)p1=head-next;char a5;printf(%sn,请输入要修改的学生的学号,要
11、修改的学科和该学科的正确成绩,中间用空格隔开);scanf(%lld%s %d,&m,a,&g);while(p1-xuehao!=m)p1=p1-next;if(p1-xuehao=m)p3=p1;if(strcmp(a,语文)=0)p1-yuwen=g;else if(strcmp(a,数学)=0)p1-shuxue=g;else if(strcmp(a,英语)=0)p1-yingyu=g;else if(strcmp(a,理综)=0)p1-lizong=g;elseprintf(%sn,输入错误);elseprintf(%sn,未录入此学生成绩);p1-zongfen=p1-yuwen+
12、p1-shuxue+p1-yingyu+p1-lizong;p1=head-next;if(fp=fopen(grade.txt,r+)=NULL)printf(%sn,打开错误);while(p1!=NULL)if(p1-next=NULL)fprintf(fp,%lld %s %s %d %d %d %d %d %d %d,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zongfen);elsefprintf(fp,%lld %s %s %d %d
13、%d %d %d %d %dn,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zongfen); p1=p1-next; fclose(fp);printf(%sn,修改成功);printf(%sn,输入0结束修改,输入其他数继续修改);scanf(%d,&k);if(k=0) p1=head;while(p1!=NULL)p3=p1-next;free(p1); p1=p3;break;/#void tianjia()/添加。先将文件中存在的数据加入链
14、表,再输入新添加的数据加入链表,最后将链表中的数据以只写方式写入文件system(clear); int i=1,k; long long m; FILE *fp; if(fp=fopen(grade.txt,r)=NULL) fp=fopen(grade.txt,w); Student1 *p1,*p2,*p3,*head; p2=head=(Student1 *)malloc(LEN);/head中不存数据 head-next=NULL; while(!feof(fp) p1=(Student1 *)malloc(LEN); fscanf(fp,%lld %s %s %d%d%d%d%d%
15、d%d,&p1-xuehao,p1-xingming,p1-xingbie,&p1-nianji,&p1-banji,&p1-yuwen,&p1-shuxue,&p1-yingyu,&p1-lizong,&p1-zongfen); printf(%lld %s %s %d %d %d %d %d %d %dn,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zongfen); p2-next=p1; p2=p1; fclose(fp);while(1)sy
16、stem(clear);p1=(Student1 *)malloc(LEN);printf(请输入要添加的第%d个学生的学号,姓名,性别,年级,班级,语文,数学,英语,理综成绩,中间用空格隔开n,i);scanf(%lld %s %s %d%d%d%d%d%d,&p1-xuehao,p1-xingming,p1-xingbie,&p1-nianji,&p1-banji,&p1-yuwen,&p1-shuxue,&p1-yingyu,&p1-lizong);p1-zongfen=p1-yuwen+p1-shuxue+p1-yingyu+p1-lizong; p2-next=p1; p2=p1;i
17、+;printf(%sn,输入0结束添加,输入其他数继续添加);scanf(%d,&k);if(k=0) p1-next=NULL;break; /printf(*n);if(fp=fopen(grade.txt,w)=NULL)printf(%sn,打开错误);p1=head-next; while(p1!=NULL) if(p1-next=NULL)fprintf(fp,%lld %s %s %d %d %d %d %d %d %d,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingy
18、u,p1-lizong,p1-zongfen); p3=p1-next;free(p1);p1=p3;elsefprintf(fp,%lld %s %s %d %d %d %d %d %d %dn,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zongfen); p3=p1-next;free(p1);p1=p3; fclose(fp);printf(%sn,添加成功);/#void shanchu()/删除FILE *fp;if(fp=fopen(gr
19、ade.txt,r)=NULL)printf(%sn,打开错误);printf(%st,学号);printf(%stt,姓名);printf(%stt,性别);printf(%st,年级);printf(%st,班级);printf(%st,语文);printf(%st,数学);printf(%st,英语);printf(%st,理综);printf(%stn,总分);Student1 *p1,*p2,*p3,*head;int i=0,k; p2=head=(Student1 *)malloc(LEN);/head中不存数据 head-next=NULL; while(!feof(fp) p
20、1=(Student1 *)malloc(LEN); fscanf(fp,%lld %s %s %d%d%d%d%d%d%d,&p1-xuehao,p1-xingming,p1-xingbie,&p1-nianji,&p1-banji,&p1-yuwen,&p1-shuxue,&p1-yingyu,&p1-lizong,&p1-zongfen); printf(%lldt%stt%stt%dt%dt%dt%dt%dt%dt%dtn,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p
21、1-lizong,p1-zongfen); p2-next=p1; p2=p1; fclose(fp); p1-next=NULL;while(1)system(clear);/+long long m;printf(%sn,请输入要删除的学生的学号);scanf(%lld,&m); p2=head; p1=head-next;while(p1-xuehao!=m & p1-next!=NULL)p2=p1;p1=p1-next;if(p1-xuehao=m)p2-next=p1-next;free(p1);elseprintf(%sn,未收录此学生成绩);if(fp=fopen(grade.
22、txt,w)=NULL)printf(%sn,打开错误);printf(%st,学号);printf(%stt,姓名);printf(%stt,性别);printf(%st,年级);printf(%st,班级);printf(%st,语文);printf(%st,数学);printf(%st,英语);printf(%st,理综);printf(%stn,总分);p1=head-next;while(p1) if(p1-next)fprintf(fp,%lld %s %s %d %d %d %d %d %d %dn,p1-xuehao,p1-xingming,p1-xingbie,p1-nianji,p1-banji,p1-yuwen,p1-shuxue,p1-yingyu,p1-lizong,p1-zongfen);printf(%lldt%stt%stt%dt%dt%dt%dt%dt%