1、学生成绩管理系统实训报告题 目: 宿舍信息管理系统院 系: 信息科技学院专 业: 通信工程姓 名: 周士杰学 号: 1051100214指导教师: 刘欣日 期: 2011年9月09日桂林电子科技大学信息科技学院目录1. 问题定义.32. 程序设计.32.1总体设计32.2详细设计32.2.1主界面.32.2.2主程序.42.2.3结构体.52.2.4前定义函数.52.2.5输入记录模块.62.2.6修改记录模块.72.2.7删除记录模块.92.2.8查询记录模块.132.2.9排序模块.142.2.10退出模块.163. 主要函数分析.163.1主要函数.163.2 swich()函数163.
2、3 strut()函数.163.4 while()函数174. 函数调试.174.1输入调试.174.2修改调试.184.3查询调试.194.4排序调试.194.5删除调试204.6退出调试215. 总结.21学生成绩管理系统1.问题定义以数组结构为主体设计一个学生成绩管理系统。假设系统只包括学生学号、姓名、数学成绩、英语成绩、计算机成绩、平均成绩。程序主界面如图2.1所示,编译过程将这些假设依依实行。下面将详细介绍程序编译过程以及程序源代码等。2.程序设计2.1总体设计本成绩管理系统采用数组结构,由于不涉及链表和文件系统,程序存在相应弊端性,暂不支持文件录入与保存功能。本程序写入6个模块,分
3、别是增加学生记录、修改学生记录、删除学生记录、查询学生记录、按平均成绩排序和退出系统。 增加学生记录:此模块将写入学生学号、姓名、数学成绩、英语成绩、C语言成绩,同 时系统内部计算出该学生平均成绩。 修改学生记录:此模块可以按学号修改该生写入的信息。由于时间与技术问题,暂时只支持以学号方式修改学生信息。 删除学生记录:此模块根据使用者要求删除某学生信息。 查询学生记录:此模块将列出输入学生的信息,包括学号、姓名、3科成绩和平均分。由于时间与技术问题,暂时只支持以姓名方式查询具体学生信息。 按平均分排序:此模块将输入的学生信息按照平均分高低重新排序学生位置。 退出系统:此模块将以正常方式关闭程序
4、。2.2详细设计2.2.1主界面主界面的设计可谓一个完整程序中最简单的地方,我们所有做的就是尽量美化界面,给使用者一目了然的感觉。主界面如下图2.1所示,界面设计源程序如下:printf(n学生成绩管理系统n);printf(n);printf(菜单n);printf( 1.增加学生记录 2.修改学生记录 n);printf( n);printf( 3.删除学生记录 4.查询学生记录 n);printf( n);printf( 5.按平均分排序 6.退出系统 n);printf(n);printf(n 选择菜单内数字(1-6)进入系统 n);图2.1 学生成绩系统成绩系统主界面当然有以上还远远
5、不够,因为他还只支持“看”的功能,这时候我们输入1-6数字是不会有任何效果的,于是开始了主程序的编译。2.2.2主程序主程序代码如下:#include /*输入输出函数库*/#include /*字符串函数库*/ #include /*标准函数库*/#include /*屏幕操作函数库*/main() int choice; while(1) /*主菜单(前文以列出主菜单界面,此处省略)*/ scanf(%d,&choice); getchar(); switch(choice) case 1:Student_Insert();break; case 2:Student_Modify();br
6、eak; case 3:Student_Delete();break; case 4:Student_Select();break; /*自定义函数*/ case 5:Student_SortByAverage(); Student_Display();break; case 6:printf(您即将退出系统,欢迎下次访问!n按任意键退出n);exit(0); 2.2.3结构体由于本程序采用数组结构定义学生成绩等信息,所以开头以struct Student定义学生信息,本段程序包括对学号(ID)、姓名(Name)、成绩(Mark1、2、3分别代表数学、英语、C语言成绩)、平均分(Average
7、):struct Student char ID20; char Name20; float Mark1; float Mark2; float Mark3; float Average;/*声明学生数组及学生数量*/struct Student students100;int num=0;2.2.4 前定义函数考虑到以下代码会在模块结构中频繁使用,为增加各个模块的简洁性,于是在前文首先定义以下4各函数:/*求平均值*/float Avg(struct Student stu) return (stu.Mark1+stu.Mark2+stu.Mark3)/3;/*通过学号返回数组下标*/int
8、 Student_SearchByIndex(char id) int i; for (i=0;inum;i+) if (strcmp(studentsi.ID,id)=0) return i; return -1; /*通过姓名返回数组下标*/int Student_SearchByName(char name) int i; for (i=0;inum;i+) if (strcmp(studentsi.Name,name)=0) return i; return -1;/*显示单条学生记录*/void Student_DisplaySingle(int index) printf(-n);
9、 printf(%8s%8s%8s%8s%8s%10sn, 学号,姓名, 数学成绩 , 英语成绩 , C语言成绩 , 平均成绩); printf(-n); printf(%6s%9s %8.2f %8.2f %8.2f %10.2fn,studentsindex.ID,studentsindex.Name, studentsindex.Mark1,studentsindex.Mark2,studentsindex.Mark3,studentsindex.Average); printf(-n);4个函数将在后文各模块中使用。2.2.5 输入记录模块此模块由使用者写入学生信息,源代码如下:/*输
10、入学生信息*/void Student_Insert() while(1) printf(请输入学号:); scanf(%s,&studentsnum.ID); getchar(); printf(请输入姓名:); scanf(%s,&studentsnum.Name); getchar(); printf(请输入数学成绩:); scanf(%f,&studentsnum.Mark1); getchar(); printf(请输入英语成绩:); scanf(%f,&studentsnum.Mark2); getchar(); printf(请输入C语言成绩:); scanf(%f,&stude
11、ntsnum.Mark3); getchar(); studentsnum.Average=Avg(studentsnum); num+; printf(是否继续?(y/n); if (getchar()=n) break; 以上输入模块将由使用者输入学生学号、姓名、3科成绩,当输入完成后,“printf(是否继续?(y/n);”代码将询问使用者是否继续输入,输入学生上限由定义的学生数量100决定。2.2.6修改记录模块此模块可以修改学生写入的信息,以便更改输入错误:/*修改学生信息*/void Student_Modify() float mark1,mark2,mark3; while(1
12、) char id20; int index; printf(请输入要修改的学生的学号:); scanf(%s,&id); getchar(); index=Student_SearchByIndex(id); /*2.2.4前定义函数在此运用*/ if (index=-1) printf(学生不存在!n); else printf(你要修改的学生信息为:n); Student_DisplaySingle(index); /*2.2.4前定义函数在此引用*/ printf(- 请输入新值-n); printf(请输入学号:); scanf(%s,&studentsindex.ID); getc
13、har(); printf(请输入姓名:); scanf(%s,&studentsindex.Name); getchar(); printf(请输入数学成绩:); scanf(%f,&studentsindex.Mark1); getchar(); printf(请输入英语成绩:); scanf(%f,&studentsindex.Mark2); getchar(); printf(请输入C语言成绩:); scanf(%f,&studentsindex.Mark3); getchar(); studentsindex.Average=Avg(studentsindex); printf(是否
14、继续?(y/n); if (getchar()=n) break; 可以看出,此模块已经运用到2.2.4设计的前定义函数,本模块是根据使用者按照提示输入学生学号来一步步修改学生信息的。2.2.7删除记录模块此模块根据使用者要求按照学号来删除学生信息,代码如下:/*删除学生信息*/void Student_Delete() int i; while(1) char id20; int index; printf(请输入要删除的学生的学号:); scanf(%s,&id); getchar(); index=Student_SearchByIndex(id); /*在此运用前定义函数*/ if (
15、index=-1) printf(输入错误,该学生不存在!n); else printf(你要删除的学生信息为:n); Student_DisplaySingle(index); /*在此引用前定义函数*/ printf(是否真的要删除?(y/n); if (getchar()=y) for (i=index;inum-1;i+) studentsi=studentsi+1; num-; getchar(); printf(是否继续?(y/n); if (getchar()=n) break; 可以看出前定义函数的重要性,在自定义函数之前写入前定义函数大大减轻了后文繁复使用代码和调试的弊端。2
16、.2.8查询记录模块此模块主要是查询功能的实现,由于时间与经验不足,暂时只支持输入姓名查询成绩功能,代码如下:/*按姓名查询*/void Student_Select() while(1) char name20; int index; printf(请输入要查询的学生的姓名:); scanf(%s,&name); getchar(); index=Student_SearchByName(name); /*运用前定义的名字返回下标函数*/ if (index=-1) printf(输入错误,该学生不存在!n); else printf(你要查询的学生信息为:n); Student_Displ
17、aySingle(index); /*在此引用前定义函数*/ printf(是否继续?(y/n); if (getchar()=n) break; 2.2.9排序模块由于查询模块只实行单人信息查询,于是加入排序模块查看所有输入学生信息功能。当然本排序模块暂时只支持按平均成绩的高低排序,代码如下:/*按平均值排序*/void Student_SortByAverage() int i,j; struct Student tmp; for (i=0;inum;i+) for (j=1;jnum-i;j+) if (studentsj-1.Averagestudentsj.Average) tmp=
18、studentsj-1; studentsj-1=studentsj; studentsj=tmp; /*显示学生信息*/void Student_Display() int i; printf(-n); printf(%8s%8s%8s%8s%8s%10sn, 学号,姓名, 数学成绩 , 英语成绩 , C语言成绩 , 平均成绩); printf(-n); for (i=0;inum;i+) printf(%6s%9s %8.2f %8.2f %8.2f %10.2fn,studentsi.ID,studentsi.Name,studentsi.Mark1,studentsi.Mark2,st
19、udentsi.Mark3,studentsi.Average); printf(-n);可以很明显的看出,本排序模块由两个独立程序段组成,一个是按平均成绩排序,另一个是显示信息。二者结合,使用者将可以清晰的查看学生平均成绩和高低排名。2.2.10退出模块为保证系统的正常,使用者可以有此模块安全正常的退出系统,而“printf(您即将退出系统,欢迎下次访问!n按任意键退出n);”即实现退出温馨提示功能。3.主要函数分析3.1 主要函数函数是程序的灵魂,本程序在主程序段运用到main()函数以及模块函数Student_Insert()、Student_Modify()、Student_Delet
20、e()、Student_Select()、Student_Display()和前定义函数Student_SearchByName、Student_SearchByIndex、Student_DisplaySingle。3.2 swich()函数switch(choice) case 1:Student_Insert();break; case 2:Student_Modify();break; case 3:Student_Delete();break; case 4:Student_Select();break; case 5:Student_SortByAverage(); Student
21、_Display();break; case 6:printf(您即将退出系统,欢迎下次访问!n按任意键退出n);exit(0); swich()函数的运用,以便在主界面菜单当使用者输入相应数字后进入下一步操作。3.3 strut()函数struct Student char ID20; char Name20; float Mark1; float Mark2; float Mark3; float Average;struct Student students100;int num=0;数组编译结构中的strut()函数用于定义学生的信息,包括各种信息的定义。为了方便简化程序,只定于学生的学号、姓名和3科成绩。3.4 while()函数while()函数在本程序中于各段代码中都有运用,主要实现死循环的操作,直到使用者停止录入或达到定义上限为止。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1