1、学生成绩登记系统C语言程序#include#include#include#defineLENsizeof(structscorenode)#defineDEBUG#includestructscorenodeintnumber;/*学号*/charname10;/*姓名*/floatyuwen;/*语文成绩*/floatyingyu;/*英语成绩*/floatshuxue;/*数学成绩*/structscorenode*next;typedefstructscorenodescore;intn,k;/*n,k为全局变量,本程序中的函数均可以使用它*/*=*/score*creat2311(v
2、oid)/*函数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-numbernumber);/*输入学号为字符或小于0时,程序报错,提示重新输入学号*/if(
3、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*/scanf(%f,&p1-yuwen);while(p1-yuwenyuwen100)getc
4、har();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
5、);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):);scanf(%d,&p1-number);/*输入学号,学号应大于0*/while(p1-n
6、umbernumber);/*输入学号为字符或小于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);/*输入学生姓名*/printf(请输入语文成绩(0100):);scanf(%f,&p1-yuwen);/
7、*输入语文成绩,成绩应在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(请输入数学成绩(0
8、100):);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;/*交换前后结点中的学号值,使得学号大者移到后面的结点中*/str
9、cpy(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;/*交换前后结点中的数学成绩,使之与学号相匹
10、配*/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=fopen(filepn,r+)=NULL)printf(不能打开文件!n);return
11、0;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*)malloc(LEN);/*开辟一个新单元*/fscanf(fp,%d%s%f%f
12、%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%fn,&p1-number,p1-name,&p1-yuwen,&p1-yingyu,
13、&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,
14、*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时,转到末尾,结束追加*/elsep3=head;if(n0)for(i=0;inumber!=p3-nu
15、mber)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,&stu-yuwen);/*输入错误,重新输入语文成绩直到正确为止*/printf(请输
16、入英语成绩(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-sh
17、uxue);/*输入错误,重新输入数学成绩直到正确为止*/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=NULL;n=n+1;p1=head;p0=stu;for(i=1;in;i+)for
18、(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,功能:查询学生成绩*/intnumber
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1