还剩44页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
学生管理系统源代码#includestdio.h#includestdlib.h#includestring.h#include__lloc.h#defineLENsizeofstructscorenode#defineDEBUGstructscorenode{intnumber;/*学号*/charname
[10];/*姓名*/floatyuwen;/*语文成绩*/floatyingyu;/*英语成绩*/floatshu___;/*数学成绩*/structscorenode*next;};typedefstructscorenodescore;intnk;/*nk为全局变量,本程序中的函数均可以使用它*/score*creatvoid/*函数creat功能创建链表,此函数带回一个指向链表头的指针*/{score*head;score*p1*p2*p3*__x;intij;floatfen;chart
[10];n=0;p1=p2=p3=score*__llocLEN;head=p3;/*开辟一个新单元*/printf请输入学生资料,输0退出!\n;repeat1:printf请输入学生学号学号应大于0;/*输入学号,学号应大于0*/scanf%dp1-number;whilep1-number0{getchar;printf输入错误,请重新输入学生学号:;scanf%dp1-number;}/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/ifp1-number==0gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;ifn0{fori=0;in;i++{ifp1-number!=p3-numberp3=p3-next;else{printf学号重复请重输!\n;gotorepeat1;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf请输入学生姓名;scanf%sp1-name;/*输入学生姓名*/printf请输入语文成绩0~100;/*输入语文成绩,成绩应在0-100*/scanf%fp1-yuwen;whilep1-yuwen0||p1-yuwen100{getchar;printf输入错误,请重新输入语文成绩;/*输入错误,重新输入语文成绩直到正确为止*/scanf%fp1-yuwen;}printf请输入英语成绩0~100;/*输入英语成绩,成绩应在0-100*/scanf%fp1-yingyu;whilep1-yingyu0||p1-yingyu100{getchar;printf输入错误,请重新输入英语成绩;/*输入错误,重新输入英语成绩直到正确为止*/scanf%fp1-yingyu;}printf请输入数学成绩0~100;/*输入数学成绩,成绩应在0-100*/scanf%fp1-shu___;whilep1-shu___0||p1-shu___100{getchar;printf输入错误,请重新输入数学成绩;scanf%fp1-shu___;}/*输入错误,重新输入数学成绩直到正确为止*/head=NULL;whilep1-number!=0{n=n+1;ifn==1head=p1;elsep2-next=p1;p2=p1;p1=score*__llocLEN;printf请输入学生资料,输0退出!\n;repeat2:printf请输入学生学号学号应大于0;scanf%dp1-number;/*输入学号,学号应大于0*/whilep1-number0{getchar;printf输入错误请重新输入学生学号:;scanf%dp1-number;}/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/ifp1-number==0gotoend;/*当输入的学号为0时,转到末尾,结束创建链表*/else{p3=head;ifn0{fori=0;in;i++{ifp1-number!=p3-numberp3=p3-next;else{printf学号重复请重输!\n;gotorepeat2;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}printf请输入学生姓名;scanf%sp1-name;/*输入学生姓名*/printf请输入语文成绩0~100;scanf%fp1-yuwen;/*输入语文成绩,成绩应在0-100*/whilep1-yuwen0||p1-yuwen100{getchar;printf输入错误,请重新输入语文成绩;scanf%fp1-yuwen;}/*输入错误,重新输入语文成绩直到正确为止*/printf请输入英语成绩0~100;scanf%fp1-yingyu;/*输入英语成绩,成绩应在0-100*/whilep1-yingyu0||p1-yingyu100{getchar;printf输入错误,请重新输入英语成绩;scanf%fp1-yingyu;}/*输入错误,重新输入英语成绩直到正确为止*/printf请输入数学成绩0~100;scanf%fp1-shu___;/*输入数学成绩,成绩应在0-100*/whilep1-shu___0||p1-shu___100{getchar;printf输入错误,请重新输入数学成绩;scanf%fp1-shu___;}/*输入错误,重新输入数学成绩直到正确为止*/}end:p1=head;p3=p1;fori=1;in;i++{forj=i+1;j=n;j++{__x=p1;p1=p1-next;if__x-numberp1-number{k=__x-number;__x-number=p1-number;p1-number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpyt__x-name;strcpy__x-namep1-name;strcpyp1-namet;/*交换前后结点中的姓名,使之与学号相匹配*/fen=__x-yuwen;__x-yuwen=p1-yuwen;p1-yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=__x-yingyu;__x-yingyu=p1-yingyu;p1-yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=__x-shu___;__x-shu___=p1-shu___;p1-shu___=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}__x=head;p1=head;/*重新使__xp指向链表头*/}p2-next=NULL;/*链表结尾*/printf输入的学生数为:%d个!\nn;returnhead;}score*loadscore*head/*函数load,功能:从文件读入学生记录*/{score*p1*p2;intm=0;charfilepn
[10];FILE*fp;printf请输入文件路径及文件名:;scanf%sfilepn;/*输入文件路径及名称*/iffp=fopenfilepnr+==NULL{printf不能打开文件!\n;return0;}fscanffp考试成绩管理系统\n;fscanffp__:袁杰班级计科七班学号2009301500206\n;fscanffp-----------------------------------------\n;fscanffp|学号\t|姓名\t|语文\t|英语\t|数学\t|\n;fscanffp-----------------------------------------\n;/*读入表格域*/printf考试成绩管理系统\n;printf__:袁杰班级计科七班学号2009301500206\n;printf-----------------------------------------\n;printf|学号\t|姓名\t|语文\t|英语\t|数学\t|\n;printf-----------------------------------------\n;/*打印表格域*/m=m+1;ifm==1{p1=score*__llocLEN;/*开辟一个新单元*/fscanffp%d%s%f%f%fp1-numberp1-namep1-yuwenp1-yingyup1-shu___;printf|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\np1-numberp1-namep1-yuwenp1-yingyup1-shu___;/*文件读入与显示*/head=NULL;do{n=n+1;ifn==1head=p1;elsep2-next=p1;p2=p1;p1=score*__llocLEN;/*开辟一个新单元*/fscanffp%d%s%f%f%f\np1-numberp1-namep1-yuwenp1-yingyup1-shu___;printf|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\np1-numberp1-namep1-yuwenp1-yingyup1-shu___;/*文件读入与显示*/}while!feoffp;p2-next=p1;p1-next=NULL;n=n+1;}printf-----------------------------------------\n;/*表格下线*/fclosefp;/*结束读入,关闭文件*/returnhead;}score*addscore*headscore*stu/*函数add功能追加学生资料并且将所有学生资料按学号排序*/{score*p0*p1*p2*p3*__x;intij;floatfen;chart
[10];p3=stu=score*__llocLEN;/*开辟一个新单元*/printf\n输入要增加的学生的资料!;repeat4:printf请输入学生学号学号应大于0;scanf%dstu-number;/*输入学号,学号应大于0*/whilestu-number0{getchar;printf输入错误,请重新输入学生学号:;scanf%dstu-number;}/*输入错误,重新输入学号*/ifstu-number==0gotoend2;/*当输入的学号为0时,转到末尾,结束追加*/else{p3=head;ifn0{fori=0;in;i++{ifstu-number!=p3-numberp3=p3-next;else{printf学号重复请重输!\n;gotorepeat4;/*当输入的学号已经存在,程序报错,返回前面重新输入*/}}}}/******************************************************/printf输入学生姓名;scanf%sstu-name;/*输入学生姓名*/printf请输入语文成绩0~100;scanf%fstu-yuwen;/*输入语文成绩,成绩应在0-100*/whilestu-yuwen0||stu-yuwen100{getchar;printf输入错误,请重新输入语文成绩;scanf%fstu-yuwen;}/*输入错误,重新输入语文成绩直到正确为止*/printf请输入英语成绩0~100;scanf%fstu-yingyu;/*输入英语成绩,成绩应在0-100*/whilestu-yingyu0||stu-yingyu100{getchar;printf输入错误,请重新输入英语成绩;scanf%fstu-yingyu;}/*输入错误,重新输入英语成绩直到正确为止*/printf请输入数学成绩0~100;scanf%fstu-shu___;/*输入数学成绩,成绩应在0-100*/whilestu-shu___0||stu-shu___100{getchar;printf输入错误,请重新输入数学成绩;scanf%fstu-shu___;}/*输入错误,重新输入数学成绩直到正确为止*/p1=head;p0=stu;ifhead==NULL{head=p0;p0-next=NULL;}/*当原来链表为空时,从首结点开始存放资料*/else/*原来链表不为空*/{ifp1-next==NULL/*找到原来链表的末尾*/{p1-next=p0;p0-next=NULL;/*将它与新开单元相连接*/}else{whilep1-next!=NULL/*还没找到末尾,继续找*/{p2=p1;p1=p1-next;}p1-next=p0;p0-next=NULL;}}n=n+1;p1=head;p0=stu;fori=1;in;i++{forj=i+1;j=n;j++{__x=p1;p1=p1-next;if__x-numberp1-number{k=__x-number;__x-number=p1-number;p1-number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpyt__x-name;strcpy__x-namep1-name;strcpyp1-namet;/*交换前后结点中的姓名,使之与学号相匹配*/fen=__x-yuwen;__x-yuwen=p1-yuwen;p1-yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=__x-yingyu;__x-yingyu=p1-yingyu;p1-yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=__x-shu___;__x-shu___=p1-shu___;p1-shu___=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}__x=head;p1=head;/*重新使__xp指向链表头*/}end2:printf现在的学生数为:%d个!\nn;returnhead;}score*searchscore*head/*函数search功能查询学生成绩*/{intnumber;score*p1*p2;printf输入要查询的学生的学号;scanf%dnumber;whilenumber!=0{ifhead==NULL{printf\n没有任何学生资料!\n;returnhead;}printf-----------------------------------------\n;printf|学号\t|姓名\t|语文\t|英语\t|数学\t|\n;printf-----------------------------------------\n;/*打印表格域*/p1=head;whilenumber!=p1-numberp1-next!=NULL{p2=p1;p1=p1-next;}ifnumber==p1-number{printf|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\np1-numberp1-namep1-yuwenp1-yingyup1-shu___;printf-----------------------------------------\n;}/*打印表格域*/elseprintf%d不存在此学生!\nnumber;printf输入要查询的学生的学号;scanf%dnumber;}printf已经退出了!\n;returnhead;}score*delscore*head/*函数del,功能删除学生资料*/{score*p1*p2;intnumber;printf输入要删除的学生的学号输入0时退出:;scanf%dnumber;getchar;whilenumber!=0/*输入学号为0时退出*/{ifhead==NULL{printf\n没有任何学生资料!\n;returnhead;}p1=head;whilenumber!=p1-numberp1-next!=NULL/*p1指向的不是所要找的首结点,并且后面还有结点*/{p2=p1;p1=p1-next;}/*p1后移一个结点*/ifnumber==p1-number/*找到了*/{ifp1==headhead=p1-next;/*若p1指向的是首结点,把地二个结点地址赋予head*/elsep2-next=p1-next;/*否则将下一个结点地址赋给前一结点地址*/printf删除:%d\nnumber;n=n-1;}elseprintf%d不存在此学生!\nnumber;/*找不到该结点*/printf输入要删除的学生的学号:;scanf%dnumber;getchar;}#ifdefDEBUGprintf已经退出了!\n;#endifprintf现在的学生数为:%d个!\nn;returnhead;}voidprintscore*head/*函数print功能显示学生成绩*/{score*p;ifhead==NULL{printf\n没有任何学生资料!\n;}else{printf%d\nn;printf-----------------------------------------\n;printf|学号\t|姓名\t|语文\t|英语\t|数学\t|\n;printf-----------------------------------------\n;/*打印表格域*/p=head;do{printf|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|\np-numberp-namep-yuwenp-yingyup-shu___;printf-----------------------------------------\n;/*打印表格域*/p=p-next;}whilep!=NULL;/*打印完成了*/}}score*statisticsscore*head/*函数statistics功能统计学生成绩*/{floatsum1=0sum2=0sum3=0__e1=0__e2=0__e3=0__x=0min;score*p;intxy=0i=0;p=head;printf1个人总分和平均分\t2单科平均分\t3总分最高分\t4总分最低分\n;scanf%dx;getchar;switchx{case1:ifhead==NULL{printf\n没有任何学生资料!\n;returnhead;}/*链表为空*/else{printf---------------------------------------------------------\n;printf|学号\t|姓名\t|语文\t|英语\t|数学\t|总分\t|平均分\t|\n;printf---------------------------------------------------------\n;/*打印表格域*/whilep!=NULL{sum1=p-yuwen+p-yingyu+p-shu___;/*计算个人总分*/__e1=sum1/3;/*计算个人平均分*/printf|%d\t|%s\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|%.1f\t|\np-numberp-namep-yuwenp-yingyup-shu___sum1__e1;/*打印结果*/printf---------------------------------------------------------\n;/*打印表格域*/p=p-next;}}returnhead;break;case2:ifhead==NULL{printf\n没有任何学生资料!\n;returnhead;}/*链表为空*/whilep!=NULL{sum1=sum1+p-yuwen;sum2=sum2+p-yingyu;sum3=sum3+p-shu___;/*计算总分*/y=y+1;__e1=sum1/y;__e2=sum2/y;__e3=sum3/y;/*计算平均分*/p=p-next;/*使p指向下一个结点*/}printf语文平均分是%.1f\n__e1;printf英语平均分是%.1f\n__e2;printf数学平均分是%.1f\n__e3;/*打印结果*/returnhead;break;case3:ifhead==NULL{printf\n没有任何学生资料!\n;returnhead;}/*链表为空*/__x=p-yuwen+p-yingyu+p-shu___;whilein{i=i+1;sum1=p-yuwen+p-yingyu+p-shu___;/*计算个人总分*/if__xsum1__x=sum1;p=p-next;}printf总分最高分:%.1f__x;printf\n;returnhead;break;case4:ifhead==NULL{printf\n没有任何学生资料!\n;returnhead;}/*链表为空*/whilep!=NULL{min=p-yuwen+p-yingyu+p-shu___;whilep!=NULL{sum2=p-yuwen+p-yingyu+p-shu___;ifminsum2min=sum2;p=p-next;}}printf总分最低分:%.1fmin;printf\n;returnhead;break;default:printf输入错误请重试!\n;}returnhead;}s__escore*p1/*函数s__e功能保存学生的资料*/{FILE*fp;charfilepn
[20];/*用来存放文件保存路径以及文件名*/printf请输入文件路径及文件名:;scanf%sfilepn;iffp=fopenfilepnw+==NULL{printf不能打开文件!\n;return0;}fprintffp考试成绩管理系统\n;fprintffp__:袁杰班级计科七班学号2009301500206\n;fprintffp-----------------------------------------\n;fprintffp|学号\t|姓名\t|语文\t|英语\t|数学\t|\n;fprintffp-----------------------------------------\n;/*打印表格域*/whilep1!=NULL{fprintffp%d\t%s\t%.1f\t%.1f\t%.1f\t\np1-numberp1-namep1-yuwenp1-yingyup1-shu___;p1=p1-next;/*下移一个结点*/}fclosefp;printf文件已经保存!\n;return0;}score*taxisscore*head/*定义排序函数此函数带回一个指向链表头的指针*/{score*p*__x;intijx;floatfen;chart
[10];ifhead==NULL{printf\n没有任何学生资料,请先建立链表!\n;returnhead;}/*链表为空*/__x=p=head;fori=0;i80;i++printf*;printf1按学生学号排序\t2按学生姓名排序\t3按语文成绩排序\n;printf4按英语成绩排序\t5按数学成绩排序\t\n;fori=0;i80;i++printf*;printf请选择操作:;scanf%dx;/*选择操作*/getchar;switchx/*用switch语句实现功能选择*/{case1:fori=1;in;i++{forj=i+1;j=n;j++{__x=p;p=p-next;if__x-numberp-number{k=__x-number;__x-number=p-number;p-number=k;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/strcpyt__x-name;strcpy__x-namep-name;strcpyp-namet;/*交换前后结点中的姓名,使之与学号相匹配*/fen=__x-yuwen;__x-yuwen=p-yuwen;p-yuwen=fen;/*交换前后结点中的语文成绩,使之与学号相匹配*/fen=__x-yingyu;__x-yingyu=p-yingyu;p-yingyu=fen;/*交换前后结点中的英语成绩,使之与学号相匹配*/fen=__x-shu___;__x-shu___=p-shu___;p-shu___=fen;/*交换前后结点中的数学成绩,使之与学号相匹配*/}}__x=head;p=head;/*重新使__xp指向链表头*/}printhead;break;/*打印值排序后的链表内容*/case2:fori=1;in;i++{forj=i+1;j=n;j++{__x=p;p=p-next;ifstrcmp__x-namep-name0/*strcmp=字符串比较函数*/{strcpyt__x-name;/*strcpy=字符串__函数*/strcpy__x-namep-name;strcpyp-namet;/*交换前后结点中的姓名,使得姓名字符串的值大者移到后面的结点中*/k=__x-number;__x-number=p-number;p-number=k;/*交换前后结点中的学号值,使之与姓名相匹配*/fen=__x-yuwen;__x-yuwen=p-yuwen;p-yuwen=fen;/*交换前后结点中的语文成绩,使之与姓名相匹配*/fen=__x-yingyu;__x-yingyu=p-yingyu;p-yingyu=fen;/*交换前后结点中的英语成绩,使之与姓名相匹配*/fen=__x-shu___;__x-shu___=p-shu___;p-shu___=fen;/*交换前后结点中的数学成绩,使之与姓名相匹配*/}}p=head;__x=head;}printhead;break;case3:fori=1;in;i++{forj=i+1;j=n;j++{__x=p;p=p-next;if__x-yuwenp-yuwen{fen=__x-yuwen;__x-yuwen=p-yuwen;p-yuwen=fen;/*交换前后结点中的语文成绩,使得语文成绩高者移到后面的结点中*/k=__x-number;__x-number=p-number;p-number=k;/*交换前后结点中的学号,使之与语文成绩相匹配*/strcpyt__x-name;strcpy__x-namep-name;strcpyp-namet;/*交换前后结点中的姓名,使之与语文成绩相匹配*/fen=__x-yingyu;__x-yingyu=p-yingyu;p-yingyu=fen;/*交换前后结点中的英语成绩,使之与语文成绩相匹配*/fen=__x-shu___;__x-shu___=p-shu___;p-shu___=fen;/*交换前后结点中的数学成绩,使之与语文成绩相匹配*/}}p=head;__x=head;}printhead;break;case4:fori=1;in;i++{forj=i+1;j=n;j++{__x=p;p=p-next;if__x-yingyup-yingyu{fen=__x-yingyu;__x-yingyu=p-yingyu;p-yingyu=fen;/*交换前后结点中的英语成绩,使得英语成绩高者移到后面的结点中*/k=__x-number;__x-number=p-number;p-number=k;/*交换前后结点中的学号,使之与英语成绩相匹配*/strcpyt__x-name;strcpy__x-namep-name;strcpyp-namet;/*交换前后结点中的姓名,使之与英语成绩相匹配*/fen=__x-yuwen;__x-yuwen=p-yuwen;p-yuwen=fen;/*交换前后结点中的语文成绩,使之与英语成绩相匹配*/fen=__x-shu___;__x-shu___=p-shu___;p-shu___=fen;/*交换前后结点中的数学成绩,使之与英语成绩相匹配*/}}p=head;__x=head;}printhead;break;case5:fori=1;in;i++{forj=i+1;j=n;j++{__x=p;p=p-next;if__x-shu___p-shu___{fen=__x-shu___;__x-shu___=p-shu___;p-shu___=fen;/*交换前后结点中的数学成绩,使得数学成绩高者移到后面的结点中*/k=__x-number;__x-number=p-number;p-number=k;/*交换前后结点中的学号,使之与数学成绩相匹配*/strcpyt__x-name;strcpy__x-namep-name;strcpyp-namet;/*交换前后结点中的姓名,使之与数学成绩相匹配*/fen=__x-yuwen;__x-yuwen=p-yuwen;p-yuwen=fen;/*交换前后结点中的语文成绩,使之与数学成绩相匹配*/fen=__x-yingyu;__x-yingyu=p-yingyu;p-yingyu=fen;/*交换前后结点中的英语成绩,使之与数学成绩相匹配*/}}p=head;__x=head;}printhead;break;default:printf输入错误请重试!\n;}return0;}intmenuintt/*函数menu功能菜单选择界面*/{inti;printf\n\t\t\t\t\t^_^\n;printf\n\t\t\t\t欢迎您进入考试成绩管理系统\n\n;printf\t\t\t(__:袁杰班级计科七班学号2009301500206)\n;fori=0;i80;i++printf*;printf
1.输入学生的资料\t\t
2.从文件调入资料\t\t
3.查询学生的成绩\n;printf
4.删除学生的资料\t\t
5.增加学生的资料\t\t
6.显示学生的成绩\n;printf
7.统计学生的成绩\t\t
8.保存输入的资料\t\t
9.对成绩进行排序\n;/*菜单选择界面*/fori=0;i80;i++printf*;printf请选择您所要的操作选择0退出:;scanf%dk;/*选择操作*/getchar;returnk;}charpassword
[7]=123456;int__invoid/*主函数__in功能通过调用creatsearchdeladdprintststisticss__etaxis等函数,实现学生成绩查询系统功能*/{score*head=0*stu=0;chars
[7];printf\t\t\t\t请输入登录__:\n\t\t\n\t\t\t\t\t;scanf%ss;ifstrcmpspassword==0{k=menuk;switchk{case1:head=creat;break;/*调用创建链表函数*/case2:head=loadhead;break;/*从文件调入记录函数*/case3:head=searchhead;break;/*调用成绩查询函数*/case4:head=delhead;break;/*调用删除学生资料函数*/case5:head=addheadstu;break;/*调用追加学生资料函数*/case6:printhead;break;/*调用显示学生资料函数*/case7:statisticshead;break;/*调用统计函数*/case8:s__ehead;break;/*调用保存函数*/case9:taxishead;break;/*调用排序函数*/case0:exit0;/*退出系统,返回主界面*/default:printf输入错误请重试!\n;}}}。