《学生成绩管理系统C源代码(共7页).doc》由会员分享,可在线阅读,更多相关《学生成绩管理系统C源代码(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上学生成绩管理系统C源代码 搜集者:海水发布时间:06-01-27浏览次数:23242 #include#include#include#defineLENsizeof(structscorenode)#defineDEBUG#includestructscorenodeintnumber;/*学号*/charname10;/*姓名*/floatyuwen;/*语文成绩*/floatyingyu;/*英语成绩*/floatshuxue;/*数学成绩*/structscorenode*next;typedefstructscorenodescore;intn,k;/*n,
2、k为全局变量,本程序中的函数均可以使用它*/*=*/score*creat2311(void)/*函数creat2311,功能:创建链表,此函数带回一个指向链表头的指针*/score*head;score*p1,*p2,*p3,*max;inti,j;floatfen;chart10;n=0;p1=p2=p3=(score*)malloc(LEN);head=p3;/*开辟一个新单元*/printf(请输入学生资料,输0退出!n);repeat1:printf(请输入学生学号(学号应大于0):);/*输入学号,学号应大于0*/scanf(%d,&p1-number);while(p1-numb
3、ernumber);/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(p1-number=0)gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/elsep3=head;if(n0)for(i=0;inumber!=p3-number)p3=p3-next;elseprintf(学号重复,请重输!n);gotorepeat1;/*当输入的学号已经存在,程序报错,返回前面重新输入*/printf(请输入学生姓名:);scanf(%s,&p1-name);/*输入学生姓名*/printf(请输入语文成绩(0100):);/*输入语文成绩,成绩应在0-100*/scan
4、f(%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
5、):);/*输入数学成绩,成绩应在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;elsep2-next=p1;p2=p1;p1=(score*)malloc(LEN);printf(请输入学生资料,输0退出!n);repeat2:printf(请输入学生学号(学号应大于0):);sca
6、nf(%d,&p1-number);/*输入学号,学号应大于0*/while(p1-numbernumber);/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(p1-number=0)gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/elsep3=head;if(n0)for(i=0;inumber!=p3-number)p3=p3-next;elseprintf(学号重复,请重输!n);gotorepeat2;/*当输入的学号已经存在,程序报错,返回前面重新输入*/printf(请输入学生姓名:);scanf(%s,&p1-name);/*输入学生姓名*/p
7、rintf(请输入语文成绩(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-ying
8、yu);/*输入错误,重新输入英语成绩直到正确为止*/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
9、-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-
10、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;intm=0;charfilepn10;FILE*fp;printf(请输入文件路径及文件名:);scanf(%s,filepn);/*输入文件路径及名称*/if(fp=fo
11、pen(filepn,r+)=NULL)printf(不能打开文件!n);return0;fscanf(fp,考试成绩管理系统n);fscanf(fp,作者:周纯钢班级:信息023学号:11n);fscanf(fp,-n);fscanf(fp,|学号t|姓名t|语文t|英语t|数学t|n);fscanf(fp,-n);/*读入表格域*/printf(考试成绩管理系统n);printf(作者:周纯钢班级:信息023学号:11n);printf(-n);printf(|学号t|姓名t|语文t|英语t|数学t|n);printf(-n);/*打印表格域*/m=m+1;if(m=1)p1=(score
12、*)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;don=n+1;if(n=1)head=p1;elsep2-next=p1;p2=p1;p1=(score*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,%d%s%f%f%
13、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)/*函数
14、add2311,功能:追加学生资料,并且将所有学生资料按学号排序*/score*p0,*p1,*p2,*p3,*max;inti,j;floatfen;chart10;p3=stu=(score*)malloc(LEN);/*开辟一个新单元*/printf(n输入要增加的学生的资料!);repeat4:printf(请输入学生学号(学号应大于0):);scanf(%d,&stu-number);/*输入学号,学号应大于0*/while(stu-numbernumber);/*输入错误,重新输入学号*/*/if(stu-number=0)gotoend2;/*当输入的学号为0时,转到末尾,结束追
15、加*/elsep3=head;if(n0)for(i=0;inumber!=p3-number)p3=p3-next;elseprintf(学号重复,请重输!n);gotorepeat4;/*当输入的学号已经存在,程序报错,返回前面重新输入*/*/printf(输入学生姓名:);scanf(%s,stu-name);/*输入学生姓名*/printf(请输入语文成绩(0100):);scanf(%f,&stu-yuwen);/*输入语文成绩,成绩应在0-100*/while(stu-yuwenyuwen100)getchar();printf(输入错误,请重新输入语文成绩);scanf(%f,&
16、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)getcha
17、r();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;/*将它与新开单元相连接*/elsewhile(p1-next!=NULL)/*还没找到末尾,继续找*/p2=p1;p1=p1-next;p1-next=p0;p0-next=
18、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;/*交换前后结点中的语文成绩
19、,使之与学号相匹配*/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,功能:查询学生成绩*/
20、intnumber;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|%.1
21、ft|n,p1-number,p1-name,p1-yuwen,p1-yingyu,p1-shuxue);printf(-n);/*打印表格域*/elseprintf(%d不存在此学生!n,number);printf(输入要查询的学生的学号,);scanf(%d,&number);printf(已经退出了!n);return(head);/*=*/*=*/score*del2311(score*head)/*函数del2311,功能:删除学生资料*/score*p1,*p2;intnumber;printf(输入要删除的学生的学号(输入0时退出):);scanf(%d,&number);ge
22、tchar();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*/elsep2-next=p1-next;/*否则将下一个结点地址赋给前
23、一结点地址*/printf(删除:%dn,number);n=n-1;elseprintf(%d不存在此学生!n,number);/*找不到该结点*/printf(输入要删除的学生的学号:);scanf(%d,&number);getchar();#ifdefDEBUGprintf(已经退出了!n);#endifprintf(现在的学生数为:%d个!n,n);return(head);/*=*/*=*/voidprint2311(score*head)/*函数print2311,功能:显示学生成绩*/score*p;if(head=NULL)printf(n没有任何学生资料!n);elsepr
24、intf(%dn,n);printf(-n);printf(|学号t|姓名t|语文t|英语t|数学t|n);printf(-n);/*打印表格域*/p=head;doprintf(|%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,功能:统计学生成绩*/floatsum1=0,sum
25、2=0,sum3=0,ave1=0,ave2=0,ave3=0,max=0,min;score*p;intx,y=0,i=0;p=head;printf(1个人总分和平均分t2单科平均分t3总分最高分t4总分最低分n);scanf(%d,&x);getchar();switch(x)/*用switch语句实现功能选择*/case1:if(head=NULL)printf(n没有任何学生资料!n);return(head);/*链表为空*/elseprintf(-n);printf(|学号t|姓名t|语文t|英语t|数学t|总分t|平均分t|n);printf(-n);/*打印表格域*/whil
26、e(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;case2:if(head=NULL)printf(n没有任何学生资料!n);return(head);/*链表为空*/while(p!=
27、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;case3:if(head=NULL)printf(n没有任何学生资料!n);return(head);/*链表
28、为空*/max=p-yuwen+p-yingyu+p-shuxue;while(iyuwen+p-yingyu+p-shuxue;/*计算个人总分*/if(maxnext;printf(总分最高分:%.1f,max);printf(n);return(head);break;case4: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,功能:保存学生的资料