1福建工程学院计算机与信息科学系实验报告2010–2011学年第一学期任课老师:实验题目设计一个简单实用班级成绩管理系统实验时间实验开始日期:报告提交日期:实验目的、要求1.该实验的课内学时是4个课时。2.程序完成后应该完成如下基本功能:1)用自定义结构体typedefstruct设计该软件的数据结构;2)用数组或指针链表将所有学生的数据按照学号顺序链接起来。3)程序能够按照学号顺序输入学生的三门成绩,并计算平均成绩和总成绩。4)程序能够显示已经输入的指定学号的学生成绩以及平均成绩和总成绩。5)程序能够按要求显示指定分数段的学生成绩以及平均成绩和总成绩。6)能够统计班级总人数、班级平均成绩。7)能够增加和删除指定学生的成绩。8)按照指定的要求以及顺序(升序或降序)显示学生成绩以及平均成绩和总成绩。3.在完成上述基本功能的前提下,有能力的同学可以完成如下加强功能:1)能够输入的数据长期存储在文件中,再次运行程序时从文件中读取数据,无须重复输入。5)在程序的提示语言清晰明确,界面美观并且适用。实验设计内容2(1)实验设计的数据结构typedefstruct{charname[60];charID[7];floatChinese,Math,English,sum,average;}student;(2)层次图(3)各个函数分析主函数main()创建文件增加和删除学生的成绩||按学号录入学生平均成绩,总成绩计算查询查询指定学号学生的成绩平均成绩总成绩指定分数段的学生成绩以及平均成绩和总成绩按指定条件对学生成绩进行排序统计班级总人数、班级平均成绩结束程序31.主函数main(){Intn;FILEfp;判断是否存在data.txt这个文件,不存在就创建该文件;输入n选择要进行的操作,根据n的值调用相应的函数;}2.录入学生成绩structstudent*init(intn){定义变量;打开文件;While(){输入学生成绩放入变量p;把p里面的内容打印到文件上;}关掉文件;}3.插入学生成绩voidinsert(structstudent*head){定义变量;打开文件;While(){输入学生成绩放入变量pi;插入到指定学号后面;}关闭文件;}4.查看学生成绩voidlist(structstudent*head){定义变量;打开文件;While(){显示学生成绩}4}5.查看指定学号或成绩段学生成绩voidsearch(structstudent*head){定义变量;打开文件;1.按学号查找输入要查找的学号;2.按分数段查找录入成绩段;While(){显示学生成绩}6.统计班级总人数及班级平均成绩voidtongji(structstudent*head){定义变量;打开文件While(){累计班级人数,计算班级总成绩,各科总成绩}计算班级平均成绩,显示结果;}7.删除指定学生的成绩structstudent*del(structstudent*head,intn){定义变量;打开文件;删除指定学生的成绩;保存并关闭文件;}7.排序voidsumas(structstudent*head){定义变量;比较升序排序;}voidsumdes(structstudent*head)5{定义变量;比较降序排序;}(4)测试数据的设计及预期结果1.录入的学生信息:姓名学号英语数学语文张三1100100100倩倩2808080小丽11909090李四12606060阿香305050502.预期结果:(1)删除李四张三1100100100倩倩2808080小丽11909090阿香30505050(2)添加李四张三1100100100倩倩2808080小丽11909090李四12606060阿香30505050(3)统计总人数和成绩总人数为:5班级英语平均成绩:76班级数学平均成绩:76班级语文平均成绩:76(4)查找指定学生成绩查找总分200~300的学生姓名学号英语数学语文总分张三1100100100300倩倩2808080240小丽11909090270(5)按总分降序排序张三1100100100300小丽11909090270倩倩2808080240李四12606060180阿香305050501506(4)程序界面①.主界面②.学生成绩录入界面③.成绩查询界面④.排序界面⑤.退出程序的界面7(5)流程图1.录入学生成绩2.显示学生成绩3.插入学生信息是开始显示学生数据p-next=Null?是结束否输入要创建的学生人数n是开始输入学生信息i=n?是结束否84.删除数据5.查看指定学号或成绩段学生成绩输入要插入学生信息的位置n开始输入学生信息结束i=n?是否输入要删除学生的学号np-num=n?是否删除数据开始结束9调试过程记录本次课题除了排序的函数在调试的时候有问题外,其他的都没有问题.下面主要写调试排序时的错误.实验结果记录以及与预期结果比较以及分析输入要查找学生的学号n(或分数段)p-num=n或(p-sum=a&&p-sum=b)是否显示学生成绩开始结束10排序结果截图:分析:排序结果搜正确,而且能按照不同项目排序.所以该算法基本上没问题.总结以及心得体会指导老师评阅意见指导老师:年月日代码:#includestdio.h#includestdlib.h#includectype.h#includeconio.h#defineNull0structstudent{intnum;charname[20];floatchinese,math,english,ave,sum;structstudent*next;};11voidprint(){printf(|------------------------------------------------|\n);printf(|欢迎光临学生成绩管理系统|\n);printf(|------------------------------------------------|\n);printf(|1==创建学生数据|\n);printf(|2==载入学生数据|\n);printf(|3==添加学生数据|\n);printf(|4==查询学生数据|\n);printf(|5==删除学生数据|\n);printf(|6==统计班级人数|\n);printf(|7==排序|\n);printf(|0==退出学生管理系统|\n);printf(|------------------------------------------------|\n);}structstudent*init(intn){inti;structstudent*head,*p,*s;for(i=1;i=n;i++){if(i==1){printf(请输入第%d个学生信息:\n,i);p=(structstudent*)malloc(sizeof(structstudent));printf(学号\n);scanf(%d,&p-num);printf(姓名\n);scanf(%s,&p-name);printf(语文\n);scanf(%f,&p-chinese);printf(数学\n);scanf(%f,&p-math);printf(英语\n);scanf(%f,&p-english);p-sum=p-chinese+p-math+p-english;p-ave=p-sum/3;head=p;if(n==1)p-next=Null;}else{printf(请输入第%d个学生信息:\n,i);s=(structstudent*)malloc(sizeof(structstudent));printf(学号\n);scanf(%d,&s-num);printf(姓名\n);scanf(%s,&s-name);printf(语文\n);scanf(%f,&s-chinese);printf(数学\n);scanf(%f,&s-math);printf(英语\n);scanf(%f,&s-english);12s-sum=s-chinese+s-math+s-english;s-ave=s-sum/3;p-next=s;p=s;s-next=Null;}}returnhead;}voidinsert(structstudent*head){structstudent*p,*pi;intxuehao;printf(请问要在哪个学生后面插入数据(输入学号):);scanf(%d,&xuehao);pi=(structstudent*)malloc(sizeof(structstudent));p=head;printf(学号\n);scanf(%d,&pi-num);printf(姓名\n);scanf(%s,&pi-name);printf(语文\n);scanf(%f,&pi-chinese);printf(数学\n);scanf(%f,&pi-math);printf(英语\n);scanf(%f,&pi-english);pi-sum=pi-chinese+pi-math+pi-english;pi-ave=pi-sum/3;if(head==Null){head=pi;pi-next=Null;}else{while((p-num!=xuehao)&&(p-next!=Null)){p=p-next;}if(p-next!=Null){pi-next=p-next;p-next=pi;}else{p-next=pi;pi-next=Null;}}}voidsearch(structstudent*head){intno;13structstudent*p;p=head;intn=0;printf(1按学号查找\n);printf(2按分数段查找\n);scanf(%d,&n);switch(n){case1:printf(请输入要查找同学的学号:);scanf(%d,&no);while(p!=Null){if(p-num==no){printf(------------------学生成绩表-----------------------\n);printf(===================================================\n);printf(%-5s%-8s%-8s%-8s%-8s%-8s%-8s\n,学号,姓名,语文,数学,英语,总分,平均分);printf(===================================================\n);printf(%-5d%-8s%-8.1f%-8.1f%-8.1f%-8.1f%-8.1f\n,p-num,p-name,p-chinese,p-math,p-english,p-sum,p-ave);printf(===================================================\n);break;}p=p-next;}break;case2:{floata,b;intchoose;charc;for(;;){printf(\t|---------------------------------------|\n);printf(\t|分数段查询|\n);printf(\t|---------------------------------------|\n);printf(\t|1==按总分成绩查询|\n);printf(\t|2==按语文成绩查询|\n);printf(\t|3==按数学成绩查询|\n);printf(\t|4==按英语成绩查询|\n);printf(\t|0==返回上