大作业_学生成绩管理系统方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大作业
背景说明:
为了能够将本课程所有章节的内容融会贯通,使得大家能够综合应用各章所学内容完成一个规模稍大的任务,特别设计了此任务。
该任务主要实现学生成绩管理的功能。
通过该任务的实现,最终要求大家能够具备综合应用该课程各章的知识实现一个完整的小系统的能力。
任务名称:学生成绩管理系统
任务功能:该系统由多个模块构成,主要包括菜单显示、学生信息批量录入、单个学生信息添加、学生成绩信息显示或输出、学生信息修改、学生记录删除、平均成绩计算、学号或平均分排序等模块。
假设每个学生的信息包括学号、姓名、语文、数学、英语和平均成绩。
成绩单的格式如下:
功能模块图:
实现方法:为了方便实现,通常会将一个复杂的任务分解为多个子任务逐步实现。
任务1:显示“学生成绩管理系统”的菜单。
在VC++6.0集成开发环境下,编程打印输出如下图的菜单。
任务2:在任务1的基础上,编写程序实现选择菜单项的功能。
即从键盘输入0~9之间的一个字符,然后显示输入字符对应的信息。
如输入的字符是1,则显示:您选择了“1——创建成绩单”;如果输入的字符不在0~9之间,则输出:“非法输入”。
任务3:在任务2的基础上,编写程序实现循环点菜功能。
即从键盘输入0~9之间的一个字符,然后显示输入字符对应的信息。
如输入的字符是1,则显示:您选择了“1——创建成绩单”;如果输入的字符不在0~9之间,则输出“非法输入”。
以上过程可以循环往复地执行,直到输入字符0,则显示:您选择了“0——退出”,然后按任意键结束整个程序的执行。
任务4:在任务3的基础上,编写程序实现成绩管理的各菜单项的具体功能,包括创建成绩单(批量录入学生数据)和计算平均成绩、添加单个学生信息、删除某学生信息、编辑学生信息、统计优秀成绩的个数、基于学号或平均成绩排序、显示学生信息等功能。
假设每个学生的信息包括学号、姓名、数学、语文、英语和平均成绩。
重点考虑:
1)学生全部数据的定义和组织:多个基本类型数组?1个结构体数组?
2)各模块的实现顺序:先实现创建成绩单,即成绩单录入模块,然后实现显示成绩模块,然后实现其他模块。
3)无论实现那个模块,当前表中的实际人数和表容纳的最大人数都是需要注意的重要对象。
4)创建成绩单
创建成绩单:实现成绩录入,成绩输入过程如下图:
基本思路:
如果成绩单存在则不可二次创建,即当前表中人数>0时,不可创建;
否则(表中无人)可创建成绩单,即可批量录入学生信息。
每个人的平均成绩在录入后,系统直接计算。
录入时需要注意两点:
a、结束标记,比如可以设计学号为0时,录入结束;
b、成绩表中实际人数达到最大值,也要结束录入。
4)显示成绩
如果表中无人,提示用户无成绩存在,否则输出全部信息。
当前表中的实际人数依然是关键。
5)添加学生
先判断表中人数,如果表中人数达到最大值,则提示用户不可添加学生信息,否则方可添加学生信息。
添加学生后,注意更新表中现有学生人数。
6)编辑学生信息
以学号为修改的关键字。
要求用户输入要修改学生的学号,然后查找该学生
信息,如果表中无该学号,提示用户无此人,否则允许用户输入新的信息来覆盖旧的信息。
7)删除学生信息
以学号为删除的关键字。
要求用户输入要删除学生的学号,然后查找该学生信息,如果表中无该学号,提示用户无此人;否则删除该学生信息,并提示用户已删除。
8)统计成绩
统计每科成绩为优秀(大于等于90分)的学生人数,并输出结果。
依然需要判断表中是否有人,如果无人提示用户,否则统计并输出结果。
9)排序成绩单
最好提供如下图所示的子菜单,否则就只能实现一种排序。
注意:
a、成绩表中少于2人(实际人数<2)不应做排序
b、排序后不要直接输出,提示用户使用菜单项“7—显示成绩”输出排序结果。
尽可能代码重用,不要重复编写功能一样的代码。
任务5:在任务4的基础上,追加从文件读入数据和将数据写入文件的功能。
菜单截图如下:
其中菜单项8“从文件读入”,用于从文件中读入学生成绩信息;相反的,菜单项9“输出到文件”,用于将从键盘上输入的学生数据保存在磁盘文件中。
磁盘文件的好处是可永久保存数据。
将学生数据保存在磁盘文件中,可以让数据独立于程序而存在。
此外,从文件可以读入学生数据进行管理,以减少反复输入的麻烦。
注意:
a、无论读写,文件打开时,应该测试文件是否能正常打开,如果错误给出出错提示。
b、文件的格式,建议为文本文件,即ASCII文件,这样可以用记事本打开查看结果,文件内容如下图所示:
#include<stdio.h>
#define N 10
main()
{
int button,button2,i,max=0,change,del,num[3]={0,0,0};
struct stu
{
int no;
char name[20];
int math;
int chi;
int eng;
}stu[N];
printf("|--------------------------------------------------|\n ");
printf("|
|\n");
printf("| 学生成绩管理系统|\n");
printf("|
|\n");
printf("|--------------------------------------------------|\n ");
printf("|
|\n");
printf("| 1——创建成绩单|\n");
printf("| 2——添加学生|\n");
printf("| 3——编辑学生|\n");
printf("| 4——删除学生
printf("| 5——统计成绩|\n");
printf("| 6——排序成绩单|\n");
printf("| 7——显示成绩|\n");
printf("| 8——从文件读入|\n");
printf("| 9——输出到文件|\n");
printf("| 0——退出|\n");
printf("|--------------------------------------------------|\n");
printf("请输入编号(0 ~ 9):");
scanf("%d",&button);
if(button>=9||button<=0)
printf("非法输入!\n");
if(button==1)
{
printf("您选择了1——创建成绩单:%d\n",button);
if(max>=N)
{
printf("已经超出最大值,不能创建");
//break;
}
printf("输入学号为0时退出。
");
for(i=0;stu[i].no!=0&&i<=N;i++)
printf("学号:");
scanf("%d",&stu[i].no);
printf("姓名:");
scanf("%s",stu[i].name);
printf("数学:");
scanf("%d",&stu[i].math);
printf("语文:");
scanf("%d",&stu[i].chi);
printf("英语:");
scanf("%d",&stu[i].eng);
}
printf("录入结束");
}
if(button==2)
{
printf("输入学号为0时退出。
");
for(i=max;stu[i].no!=0&&i<=N;i++)
{
printf("学号:");
scanf("%d",&stu[i].no);
printf("姓名:");
scanf("%s",stu[i].name);
printf("数学:");
scanf("%d",&stu[i].math);
printf("语文:");
scanf("%d",&stu[i].chi);
printf("英语:");
scanf("%d",&stu[i].eng);
}
printf("添加结束");
}
if(button==3)
{
printf("请输入将要编辑学生的学号:");
scanf("%d",&change);
if(change>=0&&change<=max)
{
printf("姓名:");
scanf("%s",stu[change].name);
printf("数学:");
scanf("%d",&stu[change].math);
printf("语文:");
scanf("%d",&stu[change].chi);
printf("英语:");
scanf("%d",&stu[change].eng);
}
else
printf("查无此人");
}
if(button==4)
{
printf("请输入将要删除学生的学号:");
scanf("%d",&del);
if(del<=max&&del>=0&&del!=0)
{
stu[del].no=0;
stu[del].math=0;
stu[del].chi=0;
stu[del].eng=0;
printf("该学生已删除");
}
else
printf("查无此人");
}
if(button==5)
{
if(max!=0)
for(i=0;i<=max;i++)
{
if(stu[i].math>=90&&stu[i].no!=0)
num[0]++;
if(stu[i].chi>=90&&stu[i].no!=0)
num[1]++;
if(stu[i].eng>=90&&stu[i].no!=0)
num[2]++;
}
printf("数学优秀学生数:%d\n语文优秀学生数: %d\n英语优秀学生数:%d\n",num[0],num[1],num[2]);
}
if(button==6)
{
printf("|-------------------------------------|");
printf("| |");
printf("| 排序菜单 |");
printf("|-------------------------------------|");
printf("| |");
printf("| 1.按学号升序排列 |");
printf("| 2.按平均成绩升序排列 |");
printf("|-------------------------------------|");
printf("请输入选项编号(1 ~ 2):");
scanf("%d",&button2);
if(button2==1)
}
}。