




免费预览已结束,剩余16页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#include #include #include #define LEN sizeof(struct scorenode)#define DEBUG#include struct scorenodeint number;/*学号*/char name10;/*姓名*/float yuwen;/*语文成绩*/float yingyu;/*英语成绩*/float shuxue;/*数学成绩 */struct scorenode *next;typedef struct scorenode score;int n,k;/*n,k为全局变量,本程序中的函数均可以使用它*/*=*/score *creat2311(void)/*函数creat2311,功能:创建链表,此函数带回一个指向链表头的指针*/score*head;score *p1,*p2,*p3,*max;int i,j;float fen; char t10; n=0; p1=p2=p3=(score *)malloc(LEN);head=p3; /*开辟一个新单元*/ printf(请输入学生资料,输0退出!n);repeat1: printf(请输入学生学号(学号应大于0):);/*输入学号,学号应大于0*/ scanf(%d,&p1-number); while(p1-numbernumber); /*输入学号为字符或小于0时,程序报错,提示重新输入学号*/ if(p1-number=0) goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/ else p3=head; if(n0) for(i=0;inumber!=p3-number) p3=p3-next; else printf(学号重复,请重输!n); goto repeat1; /*当输入的学号已经存在,程序报错,返回前面重新输入*/ printf(请输入学生姓名:); scanf(%s,&p1-name);/*输入学生姓名*/ printf(请输入语文成绩(0100):);/*输入语文成绩,成绩应在0-100*/ scanf(%f,&p1-yuwen); while(p1-yuwenyuwen100)getchar(); printf(输入错误,请重新输入语文成绩);/*输入错误,重新输入语文成绩直到正确为止*/ scanf(%f,&p1-yuwen); printf(请输入英语成绩(0100):);/*输入英语成绩,成绩应在0-100*/ scanf(%f,&p1-yingyu); while(p1-yingyuyingyu100)getchar(); printf(输入错误,请重新输入英语成绩);/*输入错误,重新输入英语成绩直到正确为止*/ scanf(%f,&p1-yingyu); printf(请输入数学成绩(0100):);/*输入数学成绩,成绩应在0-100*/ scanf(%f,&p1-shuxue); while(p1-shuxueshuxue100)getchar(); printf(输入错误,请重新输入数学成绩); scanf(%f,&p1-shuxue);/*输入错误,重新输入数学成绩直到正确为止*/ head=NULL;while(p1-number!=0) n=n+1;if(n=1) head=p1;else p2-next=p1; p2=p1; p1=(score *)malloc(LEN); printf(请输入学生资料,输0退出!n);repeat2:printf(请输入学生学号(学号应大于0):); scanf(%d,&p1-number);/*输入学号,学号应大于0*/ while(p1-numbernumber); /*输入学号为字符或小于0时,程序报错,提示重新输入学号*/ if(p1-number=0) goto end;/*当输入的学号为0时,转到末尾,结束创建链表*/ else p3=head; if(n0) for(i=0;inumber!=p3-number) p3=p3-next; else printf(学号重复,请重输!n); goto repeat2; /*当输入的学号已经存在,程序报错,返回前面重新输入*/ printf(请输入学生姓名:); scanf(%s,&p1-name);/*输入学生姓名*/ printf(请输入语文成绩(0100):); scanf(%f,&p1-yuwen);/*输入语文成绩,成绩应在0-100*/ while(p1-yuwenyuwen100) getchar(); printf(输入错误,请重新输入语文成绩); scanf(%f,&p1-yuwen);/*输入错误,重新输入语文成绩直到正确为止*/ printf(请输入英语成绩(0100):); scanf(%f,&p1-yingyu);/*输入英语成绩,成绩应在0-100*/ while(p1-yingyuyingyu100) getchar(); printf(输入错误,请重新输入英语成绩); scanf(%f,&p1-yingyu);/*输入错误,重新输入英语成绩直到正确为止*/ printf(请输入数学成绩(0100):); scanf(%f,&p1-shuxue);/*输入数学成绩,成绩应在0-100*/ while(p1-shuxueshuxue100) getchar(); printf(输入错误,请重新输入数学成绩); scanf(%f,&p1-shuxue);/*输入错误,重新输入数学成绩直到正确为止*/ end: p1=head; p3=p1; for(i=1;in;i+) for(j=i+1;jnext; if(max-numberp1-number) k=max-number; max-number=p1-number; p1-number=k; /*交换前后结点中的学号值,使得学号大者移到后面的结点中*/ strcpy(t,max-name); strcpy(max-name,p1-name); strcpy(p1-name,t); /*交换前后结点中的姓名,使之与学号相匹配*/ fen=max-yuwen; max-yuwen=p1-yuwen; p1-yuwen=fen; /*交换前后结点中的语文成绩,使之与学号相匹配*/ fen=max-yingyu; max-yingyu=p1-yingyu; p1-yingyu=fen; /*交换前后结点中的英语成绩,使之与学号相匹配*/ fen=max-shuxue; max-shuxue=p1-shuxue; p1-shuxue=fen; /*交换前后结点中的数学成绩,使之与学号相匹配*/ max=head;p1=head;/*重新使max,p指向链表头*/ p2-next=NULL;/*链表结尾*/ printf(输入的学生数为:%d个!n,n); return(head);/*=*/*=*/score *load2311(score *head)/*函数load2311,功能:从文件读入学生记录*/ score *p1,*p2; int m=0; char filepn10; FILE *fp; printf(请输入文件路径及文件名:); scanf(%s,filepn);/*输入文件路径及名称*/ if(fp=fopen(filepn,r+)=NULL) printf(不能打开文件!n); return 0; fscanf(fp, 考试成绩管理系统 n); fscanf(fp,作者:周纯钢 班级: 信息023 学号:11 n); fscanf(fp,-n); fscanf(fp,|学号t|姓名t|语文t|英语t|数学t|n); fscanf(fp,-n);/*读入表格域*/ printf( 考试成绩管理系统 n); printf( 作者:周纯钢 班级: 信息023 学号:11 n); printf(-n); printf(|学号t|姓名t|语文t|英语t|数学t|n); printf(-n);/*打印表格域*/ m=m+1; if(m=1) p1=(score *)malloc(LEN); /*开辟一个新单元*/ fscanf(fp,%d%s%f%f%f,&p1-number,p1-name,&p1-yuwen,&p1-yingyu,&p1-shuxue); printf(|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name,p1-yuwen,p1-yingyu,p1-shuxue); /*文件读入与显示*/ head=NULL; do n=n+1; if(n=1) head=p1; else p2-next=p1; p2=p1; p1=(score *)malloc(LEN); /*开辟一个新单元*/ fscanf(fp,%d%s%f%f%fn,&p1-number,p1-name,&p1-yuwen,&p1-yingyu,&p1-shuxue); printf(|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name,p1-yuwen,p1-yingyu,p1-shuxue); /*文件读入与显示*/ while(!feof(fp); p2-next=p1; p1-next=NULL; n=n+1; printf(-n);/*表格下线*/ fclose(fp);/*结束读入,关闭文件*/ return (head);/*=*/*=*/score *add2311(score *head,score *stu)/*函数add2311,功能:追加学生资料,并且将所有学生资料按学号排序*/score *p0,*p1,*p2,*p3,*max; int i,j;float fen; char t10; p3=stu=(score *)malloc(LEN);/*开辟一个新单元*/ printf(n输入要增加的学生的资料!); repeat4: printf(请输入学生学号(学号应大于0):); scanf(%d,&stu-number); /*输入学号,学号应大于0*/ while(stu-numbernumber);/*输入错误,重新输入学号*/ /*/ if(stu-number=0) goto end2;/*当输入的学号为0时,转到末尾,结束追加*/ else p3=head; if(n0) for(i=0;inumber!=p3-number) p3=p3-next; else printf(学号重复,请重输!n); goto repeat4; /*当输入的学号已经存在,程序报错,返回前面重新输入*/ /*/ printf(输入学生姓名:); scanf(%s,stu-name); /*输入学生姓名*/ printf(请输入语文成绩(0100):); scanf(%f,&stu-yuwen); /*输入语文成绩,成绩应在0-100*/ while(stu-yuwenyuwen100) getchar(); printf(输入错误,请重新输入语文成绩); scanf(%f,&stu-yuwen); /*输入错误,重新输入语文成绩直到正确为止*/ printf(请输入英语成绩(0100):); scanf(%f,&stu-yingyu);/*输入英语成绩,成绩应在0-100*/ while(stu-yingyuyingyu100) getchar(); printf(输入错误,请重新输入英语成绩); scanf(%f,&stu-yingyu);/*输入错误,重新输入英语成绩直到正确为止*/ printf(请输入数学成绩(0100):); scanf(%f,&stu-shuxue);/*输入数学成绩,成绩应在0-100*/ while(stu-shuxueshuxue100) getchar(); printf(输入错误,请重新输入数学成绩); scanf(%f,&stu-shuxue);/*输入错误,重新输入数学成绩直到正确为止*/p1=head;p0=stu;if(head=NULL)head=p0;p0-next=NULL;/*当原来链表为空时,从首结点开始存放资料*/else/*原来链表不为空*/ if(p1-next=NULL)/*找到原来链表的末尾*/ p1-next=p0; p0-next=NULL;/*将它与新开单元相连接*/ else while(p1-next!=NULL)/*还没找到末尾,继续找*/ p2=p1;p1=p1-next; p1-next=p0; p0-next=NULL; n=n+1;p1=head;p0=stu; for(i=1;in;i+) for(j=i+1;jnext; if(max-numberp1-number) k=max-number; max-number=p1-number; p1-number=k; /*交换前后结点中的学号值,使得学号大者移到后面的结点中*/ strcpy(t,max-name); strcpy(max-name,p1-name); strcpy(p1-name,t); /*交换前后结点中的姓名,使之与学号相匹配*/ fen=max-yuwen; max-yuwen=p1-yuwen; p1-yuwen=fen; /*交换前后结点中的语文成绩,使之与学号相匹配*/ fen=max-yingyu; max-yingyu=p1-yingyu; p1-yingyu=fen; /*交换前后结点中的英语成绩,使之与学号相匹配*/ fen=max-shuxue; max-shuxue=p1-shuxue; p1-shuxue=fen; /*交换前后结点中的数学成绩,使之与学号相匹配*/ max=head;p1=head;/*重新使max,p指向链表头*/ end2:printf(现在的学生数为:%d个!n,n); return(head);/*=*/*=*/score *search2311(score *head)/*函数search2311,功能:查询学生成绩*/int number;score *p1,*p2;printf(输入要查询的学生的学号,);scanf(%d,&number);while(number!=0) if(head=NULL) printf(n没有任何学生资料!n);return(head); printf(-n); printf(|学号t|姓名t|语文t|英语t|数学t|n); printf(-n);/*打印表格域*/ p1=head; while(number!=p1-number&p1-next!=NULL) p2=p1;p1=p1-next; if(number=p1-number) printf(|%dt|%st|%.1ft|%.1ft|%.1ft|n,p1-number,p1-name,p1-yuwen,p1-yingyu,p1-shuxue); printf(-n);/*打印表格域*/ else printf(%d不存在此学生!n,number); printf(输入要查询的学生的学号,); scanf(%d,&number);printf(已经退出了!n);return(head);/*=*/*=*/score *del2311(score *head)/*函数del2311,功能:删除学生资料*/score *p1,*p2;int number;printf(输入要删除的学生的学号(输入0时退出):);scanf(%d,&number);getchar();while(number!=0)/*输入学号为0时退出*/ if(head=NULL) printf(n没有任何学生资料!n); return(head); p1=head; while(number!=p1-number&p1-next!=NULL) /*p1指向的不是所要找的首结点,并且后面还有结点*/ p2=p1;p1=p1-next; /*p1后移一个结点*/ if(number=p1-number) /*找到了*/ if(p1=head) head=p1-next; /*若p1指向的是首结点,把地二个结点地址赋予head*/ else p2-next=p1-next; /*否则将下一个结点地址 赋给前一结点地址*/ printf(删除:%dn,number);n=n-1; else printf(%d不存在此学生!n,number); /*找不到该结点*/ printf(输入要删除的学生的学号:); scanf(%d,&number); getchar();#ifdef DEBUG printf(已经退出了!n);#endifprintf(现在的学生数为:%d个!n,n);return(head); /*=*/*=*/void print2311(score *head)/*函数print2311,功能:显示学生成绩*/score *p;if(head=NULL) printf(n没有任何学生资料!n);elseprintf(%dn,n);printf(-n);printf(|学号t|姓名t|语文t|英语t|数学t|n);printf(-n);/*打印表格域*/p=head; do printf(|%dt|%st|%.1ft|%.1ft|%.1ft|n,p-number,p-name,p-yuwen,p-yingyu,p-shuxue); printf(-n);/*打印表格域*/ p=p-next;while (p!=NULL);/*打印完成了*/*=*/*=*/score *statistics2311(score *head) /*函数statistics2311,功能:统计学生成绩*/ float sum1=0,sum2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min; score *p; int x,y=0,i=0; p=head; printf(1个人总分和平均分t2单科平均分t3总分最高分t4总分最低分n); scanf(%d,&x); getchar();switch(x) /*用switch语句实现功能选择*/case 1: if(head=NULL) printf(n没有任何学生资料!n);return(head);/*链表为空*/ else printf(-n); printf(|学号t|姓名t|语文t|英语t|数学t|总分t|平均分t|n); printf(-n);/*打印表格域*/ while(p!=NULL) sum1=p-yuwen+p-yingyu+p-shuxue; /*计算个人总分*/ ave1=sum1/3;/*计算个人平均分*/ printf(|%dt|%st|%.1ft|%.1ft|%.1ft|%.1ft|%.1ft|n,p-number,p-name,p-yuwen,p-yingyu,p-shuxue,sum1,ave1); /*打印结果*/ printf(-n);/*打印表格域*/ p=p-next; return(head); break; case 2: if(head=NULL) printf(n没有任何学生资料!n);return(head);/*链表为空*/ while(p!=NULL) sum1=sum1+p-yuwen; sum2=sum2+p-yingyu; sum3=sum3+p-shuxue;/*计算总分*/ y=y+1; ave1=sum1/y; ave2=sum2/y; ave3=sum3/y;/*计算平均分*/ p=p-next;/*使p指向下一个结点*/ printf(语文平均分是%.1fn,ave1); printf(英语平均分是%.1fn,ave2); printf(数学平均分是%.1fn,ave3);/*打印结果*/ return(head); break; case 3: if(head=NULL) printf(n没有任何学生资料!n);return(head);/*链表为空*/ max=p-yuwen+p-yingyu+p-shuxue; while(iyuwen+p-yingyu+p-shuxue; /*计算个人总分*/ if(maxnext; printf(总分最高分:%.1f,max); printf(n); return(head); break; case 4: if(head=NULL) printf(n没有任何学生资料!n);return(head);/*链表为空*/ while(p!=NULL) min=p-yuwen+p-yingyu+p-shuxue; while(p!=NULL) sum2=p-yuwen+p-yingyu+p-shuxue; if(minsum2) min=sum2; p=p-next; printf(总分最低分:%.1f,min); printf(n); return(head); break; default :printf(输入错误,请重试!n);return(head);/*=*/*=*/save2311(score *p1) /*函数save2311,功能:保存学生的资料*/ FILE *fp;char filepn20;/*用来存放文件保存路径以及文件名*/printf(请输入文件路径及文件名:);scanf(%s,filepn);if(fp=fopen(filepn,w+)=NULL) printf(不能打开文件!n); return 0; fprintf(fp, 考试成绩管理系统 n);fprintf(fp, 作者:周纯钢 班级: 信息023 学号:11 n); fprintf(fp,-n);fprintf(fp,|学号t|姓名t|语文t|英语t|数学t|n); fprintf(fp,-n);/*打印表格域*/while(p1!=NULL)fprintf(fp,%dt%st%.1ft%.1ft%.1ftn,p1-number,p1-name,p1-yuwen,p1-yingyu,p1-shuxue); p1=p1-next;/*下移一个结点*/fclose(fp);printf(文件已经保存!n);return 0;/*=*/*=*/score *taxis2311(score *head) /*定义排序函数。此函数带回一个指向链表头的指针*/ score *p,*max; int i,j,x; float fen; char t10; if(head=NULL) printf(n没有任何学生资料,请先建立链表!n);return(head);/*链表为空*/ max=p=head; for(i=0;i80;i+) printf(*); printf(1按学生学号排序t2按学生姓名排序t3按语文成绩排序n); printf(4按英语成绩排序t5按数学成绩排序tn); for(i=0;i80;i+) printf(*); printf(请选择操作:); scanf(%d,&x);/*选择操作*/ getchar(); switch(x) /*用switch语句实现功能选择*/ case 1 : for(i=1;in;i+) for(j=i+1;jnext; if(max-numberp-number) k=max-number; max-number=p-number; p-number=k; /*交换前后结点中的学号值,使得学号大者移到后面的结点中*/ strcpy(t,max-name); strcpy(max-name,p-name); strcpy(p-name,t); /*交换前后结点中的姓名,使之与学号相匹配*/ fen=max-yuwen; max-yuwen=p-yuwen; p-yuwen=fen; /*交换前后结点中的语文成绩,使之与学号相匹配*/ fen=max-yingyu; max-yingyu=p-yingyu; p-yingyu=fen; /*交换前后结点中的英语成绩,使之与学号相匹配*/ fen=max-shuxue; max-shuxue=p-shuxue; p-shuxue=fen; /*交换前后结点中的数学成绩,使之与学号相匹配*/ max=head;p=head;/*重新使max,p指向链表头*/ print2311(head);break;/*打印值排序后的链表内容*/ case 2 : for(i=1;in;i+) for(j=i+1;jnext; if(strcmp(max-name,p-name)0)/*strcmp=字符串比较函数*/ strcpy(t,max-name);/*strcpy=字符串复制函数*/ strcpy(max-name,p-name); strcpy(p-name,t); /*交换前后结点中的姓名,使得姓名字符串的值大者移到后面的结点中*/ k=max-number; max-number=p-number; p-number=k; /*交换前后结点中的学号值,使之与姓名相匹配*/ fen=max-yuwen; max-yuwen=p-yuwen; p-yuwen=fen; /*交换前后结点中的语文成绩,使之与姓名相匹配*/ fen=max-yingyu; max-yingyu=p-yingyu; p-yingyu=fen; /*交换前后结点中的英语成绩,使之与姓名相匹配*/ fen=max-shuxue; max-shuxue=p-shuxue; p-shuxue=fen; /*交换前后结点中的数学成绩,使之与姓名相匹配*/ p=head; max=head; print2311(head); break; case 3 : for(i=1;in;i+) for(j=i+1;jnext; if(max-yuwenp-yuwen) fen=max-yuwen; max-yuwen=p-yuwen; p-yuwen=fen;/*交换前后结点中的语文成绩,使得语
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025秋开学全体教师大会,分管安全副校长讲话:以安全为纲,以德育为翼,共筑新学期校园安全与育人新征程
- 2025年高级技师题库及答案
- 2025年高级保安员模拟试题及参考答案
- 高级收纳师题库及答案
- 政务员礼仪考试题及答案
- 电工复审新试题及答案
- 装备服务保障管理办法
- 西藏土豆存货管理办法
- 老土地登记管理办法
- 产品报废销毁管理办法
- 2022年《上海市初中语文课程终结性评价指南》中规定的个文言实词
- 苏教版四年级上册科学全册课件
- 仪表安装规范以及验收
- 《观潮》课件.ppt2
- 人教版(PEP)小学英语_3~6年级_单词表(带有音标)
- 地下连续墙施工质量控制要点(北京17号线)
- 织造工艺设计指导书
- 冀教版五年级下册数学应用题专项综合练习题
- 鲫鱼的外形与内部解剖
- CPS21F变频恒压供水调节器使用说明书1
- 600MW发电机组海水脱硫工艺特点及调试
评论
0/150
提交评论