1、目 录目 录第1章 引言11.1 设计目的11.2 设计目标11.3 研究思路21.4小组分工21.5 本章小结2第2章 总体设计32.1 系统需求32.2功能结构32.3 本章小结4第3章 详细设计53.1 学生信息定义53.2 功能模块53.3 本章小结6第4章 系统实现74.1系统主界面74.2 学生信息录入界面94.3 学生成绩管理界面104.4 学生成绩统计界面194.5 学生成绩查询界面274.6 本章小结32第5章 测试和调试335.1 测试和调试335.2 系统存在的问题335.3 收获及心得335.4 本章小结34参考文献35致 谢36I第1章 引言第1章 引言1.1 设计目
2、的目前,学校工作繁杂、资料重多,虽然各类管理信息系统已进入社会,但还未普及,而对于学生信息管理来说,目前还没有一套完整的、统一的系统。因此,开发一套适和大众的、兼容性好的学生管理系统是很有必要的。1.2 设计目标设计一个小型学生成绩管理系统。该系统将完成学生信息的查询、添加、修改,学生成绩的查询等功能。1.2.1 基本功能对学校学生信息管理的系统,主要划分为以下三个模块:录入:包括录入学生基本个人信息。管理:包括对学生成绩信息的修改,增加,删除。查询:按学号,姓名查询、输出学生所有信息。统计:按总分和平均分进行排名,以及统计及格人数,优秀的人数。学生成绩管理系统的功能结构图如图1-1所示。 图
3、1-1 学生成绩管理系统功能模块图1.2.2 扩展功能可以增加新学生的信息,统计及格人数和。1.3 研究思路首先确定要实现的功能,在我们的学生成绩管理系统中主要体现对学生成绩信息的操作如添加,查询,修改等;其次体现了学生对自己信息的查询,及浏览本人成绩信息的功能。在具体实现时,利用C+的输出格式显示操作的界面,利用函数实现相应的模块功能,再利用循环、选择可灵活进行重复操作。1.4小组分工本次实训由衡欣、魏千森、王跃霖、王晓峰我们四位同学一组,每位同学的具体分工如下:衡 欣:负责整个系统的框架以及整个界面的实现和学生成绩管理函数的实现以及各个函数的衔接;王晓峰:负责学生成绩信息录入函数的实现;王
4、跃霖:负责学生成绩统计函数的实现;魏千森:负责学生成绩查询函数的实现;1.5 本章小结本章主要对学生成绩管理系统以及研究思路进行了简单的介绍,为后面的工作做铺垫。39第2章 总体设计第2章 总体设计2.1 系统需求管理人员在学生成绩信息录入界面可以录入多位学生信息,录入完毕后可以在学生成绩管理界面完成修改、增加、查询学生成绩信息等功能。管理人员也可以在学生信息查询界面完成查询学生的基本信息的功能,以及在学生成绩统计界面查询学生成绩的总分排名和平均分排名以及学生及格的人数和优秀的人数。2.2功能结构通过前面的分析,可以得到学生成绩管理系统如图2-1所示。其功能如下:(1)录入学生信息 管理员输入
5、学生基本信息和成绩信息。(2)学生成绩操作 成绩管理界面,可以对学生成绩信息进行修改,增加,删除。(3)学生成绩统计 进入成绩统计界面,可以查询学生成绩的排名和及格,优秀人数信息。(4)学生成绩查询 进入查询界面可查询所有学生的成绩或按学号以及姓名查询学生成绩。 图2-1 学生成绩管理系统体系结构图2.3 本章小结本章主要从总体上对学生成绩管理系统的各功能模块进行了分析。第3章 详细设计第3章 详细设计3.1 学生信息定义本系统中主要考虑了学生的姓名、学号、性别、班级、科任老师、高等数学、大学英语、c+成绩等信息,利用结构体来定义每个学生的具体信息,利用结构体数组来存放多个学生的信息。学生结构
6、定义如下:struct stuent /定义一个结构体变量int number; /学生学号char name20; /学生姓名char sex20; /性别int grade; /班级char teacher20; /科任老师float math; /高等数学float english; /大学英语float c; /c+语言float java; /java成绩float sum; /总成绩float ave; /平均成绩stu200,a; /定义一个能容下200个学生信息的静态结构体数组以存放学生的相关信息,和一个空闲的静态结构体变量a,为后面的排名函数作准备。3.2 功能模块(1)主模
7、块这一模块是系统的主界面,在main()函数中包括以下几个函数,它们的函数名以及主要功能如下:void menu():主菜单功能。(2)学生信息录入,管理模块学生信息录入模块由input()函数实现,具体实现学生信息的录入。学生成绩管理模块由menu2()函数实现,具体实现学生成绩修改、增加、删除等操作通过调用三个函数完成,分别为:void revamp_student(); /主菜单2的学生成绩修改void increase_student(); /增加void delete_student(); /删除(3)学生成绩统计,查询模块学生成绩统计,查询模块由menu3()和menu4()函数实
8、现,可以统计学生的总成绩和平均成绩排名、及格和优秀人数。查询所有学生和按学号和姓名查询学生成绩信息。通过调用如下函数来实现:void rank_total_score(); /总成绩排名void rank_average_score(); /平均成绩排名int pass_score(float m); /及格人数int pass_total_score(float m); /总分及格人数int excellent_score(float m); /优秀人数int escellent_total_score(float m); /总分优秀人数void display(); /菜单4下的所有学生成
9、绩显示 void number_check(); /按姓名查询void name_check(); /按学号查询3.3 本章小结本章主要对学生成绩管理系统学生的结构定义、管理员的操作做简单描述,为下一章的具体实现做准备。第4章 系统实现第4章 系统实现4.1系统主界面在学生成绩管理系统主界面有五个选项,分别为学生成绩录入、学生成绩管理、学生成绩统计、学生成绩查询以及退出系统。运行效果如图4-1所示。图4-1 学生成绩管理系统主界面设计思路:利用do-while循环实现反复显示主界面各信息,利用cout语句输出主界面的各信息,利用switch-case实现选择操作,input函数实现学生信息录入
10、,menu2()函数实现学生成绩管理,利用menu3()函数实现学生成绩统计,利用menu4()函数实现学生成绩查询,利用exit()函数实现退出系统。核心代码如下:void menu() /定义一个主界面函数docoutntt-学 生 成 绩 管 理 系 统-endln;couttt 1. 学生成绩录入 endln;couttt 2. 学生成绩管理 endln;couttt 3. 学生成绩统计 endln;couttt 4. 学生成绩查询 endln;couttt 0. 退出系统 endln;couttt 请输入0-4之间的任意一数字(仅限数字) endl;coutchoose;switch
11、(choose) case 1: input(); break; /录入学生信息 case 2: menu2(); break; /学生成绩管理,包括修改、增加、删除 case 3: menu3(); break; /学生成绩统计,包括总分排名、及格人数等 case 4: menu4(); break; /学生成绩查询,按姓名,学号 case 0: exit(); break; /退出系统 default:coutt对不起,输入有误endl; break;while(choose!=0);4.2 学生信息录入界面在学生成绩录入界面里管理员可以进行学生信息的录入,运行效果如图4-2所示。图4-2
12、 学生信息录入界面设计思路:利用for循环可以一次性输入多个学生信息,在for循环内利用cout和cin语句实现根据提示录入学生信息。核心代码如下:void input() /定义一个学生录入函数coutn; /学生数量for(i=0;in;i+)coutn请输入第i+1个学生信息:endl; /输入信息 cout学号:stui.number; cout姓名:stui.name; cout性别:stui.sex; cout班级:stui.grade;cout科任老师:stui.teacher; cout高等数学成绩:stui.math; cout大学英语成绩:stui.english; cou
13、tc+语言成绩:stui.c;coutjava成绩:stui.java; stui.sum=stui.math+stui.english+stui.c+stui.java; /总分计算 stui.ave=(stui.sum)/4.0; /平均分计算 coutn输入成功,0 返回主界面endl; coutpress; switch(press) /选择操作 case 0 : break; 4.3 学生成绩管理界面在学生信息操作界面有四个选项,分别为学生成绩修改、学生成绩、学生成绩删除以及返回到学生成绩管理系统主界面。运行效果如图4-3所示。图4-3 学生成绩管理界面设计思路:利用do-while
14、循环反复显示这一子界面的信息,利用cout语句输出信息,利用revamp_student()函数实现学生成绩的修改,increase_student()函数实现学生成绩的增加,delete_student()函数实现新学成绩的删除。核心代码如下:void menu2() /主界面下2号菜单函数 do coutntt-学 生 成 绩 管 理-endln; couttt 1. 学生成绩修改 endln; couttt 2. 学生成绩增加 endln; couttt 3. 学生成绩删除 endln; couttt 4. 返回主界面 endln; couttt 请输入1-4之间的任意一数字(仅限数字)
15、 endl; coutchoose; switch(choose) case 1: revamp_student();break; /学生信息修改 case 2: increase_student();break; /学生信息增加 case 3: delete_student();break; /学生成绩删除 case 4: menu();break; /返回主界面 default:coutt对不起,输入有误endl; break;while(choose!=0);4.3.1学生成绩修改界面在学生成绩管理界面可以按照姓名对学生成绩进行修改,运行效果如图4-4所示。图4-4 学生成绩修改界面设计
16、思路:利用for循环语句以及if条件语句实现按照姓名匹配修改,利用cout语句实现信息的输出。核心代码如下:void revamp_student() char rs20; int choose_2_1; cout请输入你想修改的学生姓名:rs; for(i=0;in;i+)if(strcmp(rs,stui.name)=0) cout你要修改的学生信息如下:endlendl; cout学号:stui.numberendl; cout姓名:stui.nameendl; cout性别:stui.sexendl; cout班级:stui.gradeendl; cout科任教师:stui.teach
17、erendl; cout高等数学成绩:stui.mathendl; cout大学英语成绩:stui.englishendl; coutc+语言成绩:stui.cendl; coutjava成绩:stui.javaendl; cout总分数:stui.sumendl; cout平均成绩:stui.aveendlendl; cout确认修改请按1,返回请按2:endlchoose_2_1;switch(choose_2_1) case 1: cout学号:stui.number; cout姓名:stui.name; cout性别:stui.sex; cout班级:stui.grade; cout科
18、任老师:stui.teacher; cout高等数学成绩:stui.math; cout大学英语成绩:stui.english; coutc+语言成绩:stui.c; coutjava成绩:stui.java; stui.sum=stui.math+stui.english+stui.c+stui.java; stui.ave=(stui.sum)/4.0; cout修改成功。endl; break; case 2: menu2(); break; 4.3.2 学生成绩增加界面在学生成绩增加界面可以对学生成绩进行增加。运行效果如图4-5。图4-5 学生成绩增加界面设计思路:定义一个i_s来保存
19、要增加的学生人数,利用for循环来录入新增加的学生成绩信息,并使n=n+i_s确保整个数组中元素个数的正确性。核心代码如下:void increase_student() cout请输入你想增加的学生人数:i_s; for(i=n;in+i_s;i+) cout请输入你要增加的学生的数据:endl;coutn请输入第i+1个学生信息:endl; /输入信息 cout学号:stui.number;cout姓名:stui.name;cout性别:stui.sex;cout班级:stui.grade;cout科任老师:stui.teacher;cout高等数学成绩:stui.math;cout大学英
20、语成绩:stui.english;coutc+语言成绩:stui.c;coutjava成绩:stui.java;stui.sum=stui.math+stui.english+stui.c+stui.java; /总分计算stui.ave=(stui.sum)/4.0; /平均分计算 n=n+i_s; 4.3.3 学生成绩删除界面在学生信息删除界面管理员可以删除学生的信息,运行效果如图4-6所示。图4-6 学生成绩删除界面设计思路:利用if和for循环来匹配要删除的学生的姓名然后利用逐个替换法用要删除的对象的后一个元素替换前一个元素,在匹配找到要删除的对象前利用cout语句以及cin语句来实现
21、根据提示要删除的学生的信息。利用switch-case确认删除后n自减1,以保证后续查询所有学生成绩信息的正确。核心代码如下:void delete_student() char ds20;int choose_2_3; cout请输入你想要删除的学生姓名:ds; for(i=0;in;i+)if(strcmp(ds,stui.name)=0)cout你要删除的学生信息如下:endlendl;cout学号:stui.numberendl; cout姓名:stui.nameendl; cout性别:stui.sexendl; cout班级:stui.gradeendl; cout科任教师:stu
22、i.teacherendl; cout高等数学成绩:stui.mathendl; cout大学英语成绩:stui.englishendl; coutc+语言成绩:stui.cendl; coutjava成绩:stui.javaendl; cout总分数:stui.sumendl; cout平均成绩:stui.aveendlendl;cout确认删除请按1,返回请按2:endlchoose_2_3;switch(choose_2_3) case 1: stui=stui+1;n=n-1; cout删除成功。endl; break; case 2: menu2(); break; 4.4 学生成绩
23、统计界面在学生成绩统计界面可以统计学生总分和平均分的排名,也可以统计成绩及格和优秀的学生人数。运行效果如图4-7所示。图4-7 学生成绩统计界面分析:利用do-while语句实现反复显示学生成绩统计界面,利用switch-case语句来选择需要统计的内容。利用rank_total_score()函数实现总分的排名,利用rank_average_score()实现平均分的排名,利用pass_score(float m)函数统计及格人数,利用pass_total_score(float m)统计总分及格人数,利用excellent_score(float m)和escellent_total_sc
24、ore(float m)函数实现统计优秀人数和总分优秀人数。核心代码如下:void menu3() do coutntt-学 生 成 绩 统 计-endln;couttt 1. 总 分 排 名 endln;couttt 2. 平均成绩排名 endln;couttt 3. 及 格 人 数 endln;couttt 4. 优 秀 人 数 endln;couttt 5. 返 回 主界面 endln;couttt 请输入1-5之间的任意一数字(仅限数字) endl;coutchoose;switch(choose) case 1: rank_total_score();break; /总分排名 cas
25、e 2: rank_average_score();break; /平均成绩排名 case 3: menu3_3();break; /及格人数 case 4: menu3_4();break; /优秀人数 case 5: menu();break; /返回主界面 default:coutt对不起,输入有误endl; break;while(choose!=0); 4.4.1总分排名,平均成绩排名设计思路:定义一个新的循环变量j然后利用双循环和if语句对前后成绩进行对比,利用开始定义的空闲的结构体a存放要调换的成绩,然后再把成绩高的和成绩低的作调换。核心代码如下:void rank_total_
26、score()int j;for(j=0;jn-1;j+) for(i=0;in;i+) if(stui.sum=stui+1.sum) a=stui; stui=stui+1; stui+1=a; for(i=0;in;i+) cout第i+1名;endl;cout姓名:stui.nameendl;cout总成绩:stui.sumendlendl;void rank_average_score()int j;for(j=0;jn-1;j+) for(i=0;in;i+) if(stui.ave=stui+1.ave) a=stui; stui=stui+1; stui+1=a; for(i=
27、0;in;i+) cout第i+1名;endl;cout姓名:stui.nameendl;cout平均分:stui.aveendl=60) cout姓名;stui.nameendl;cout分数:mendl=240) cout姓名;stui.nameendl; cout分数:mendl=90) cout姓名;stui.nameendl;cout分数:mendl=360) cout姓名;stui.nameendl; cout分数:mendlendl; return 1;return 0;调用函数如下(大都一致只出示一个做代表):void menu3_3() do coutntt-及 格 人 数
28、统 计-endln;couttt 1. 高 等 数 学 endln;couttt 2. 大 学 英 语 endln;couttt 3. c+ 语 言 endln;couttt 4. java 成 绩 endln;couttt 5. 总 成 绩 endln; couttt 6. 平 均 成 绩 endln;couttt 7. 返 回 上一页 endln; couttt 8. 返 回 主界面 endln;couttt 请输入1-8之间的任意一数字(仅限数字) endl;coutchoose;switch(choose) case 1: coutendl及格的学生:endl; num=0; for(
29、i=0;in;i+) num=num+pass_score(stui.math); cout及格人数num; break; /高等数学 case 2: coutendl及格的学生:endl; num=0; for(i=0;in;i+) num=num+pass_score(stui.english); cout及格人数num; break; /大学英语 case 3: coutendl及格的学生:endl; num=0; for(i=0;in;i+) num=num+pass_score(stui.c); cout及格人数num; break; /c+语言 case 4: num=0; coutendl及格的学生:endl; for(i=0;in;i+) num=num+pass_score(stui.java); cout及格人数num; break; /java成绩 case 5: num=0; coutendl及格的学生:endl; for(i=0;in;i+) num=num+pass_total_score(stui.sum); cout及格人数num; break; /总成绩 case 6: num=0; coutendl及格的学生:endl; for(i=0;in;i+) num=num+pass_s