资源描述
大作业
背景阐明:
为了可以将本课程所有章节内容融会贯通,使得人们可以综合应用各章所学内容完毕一种规模稍大任务,特别设计了此任务。该任务重要实现学生成绩管理功能。通过该任务实现,最后规定人们可以具备综合应用该课程各章知识实现一种完整小系统能力。
任务名称:学生成绩管理系统
任务功能:该系统由各种模块构成,重要涉及菜单显示、学生信息批量录入、单个学生信息添加、学生成绩信息显示或输出、学生信息修改、学生记录删除、平均成绩计算、学号或平均分排序等模块。
假设每个学生信息涉及学号、姓名、语文、数学、英语和平均成绩。成绩单格式如下:
学号
姓名
语文成绩
数学成绩
英语成绩
平均成绩
1001
sarah
80
90
90
系记录算
1002
micheal
70
90
80
1003
linda
90
85
80
1004
lee
80
88
92
…
…
…
…
…
…
功能模块图:
主模块
菜
单
显
示
学
生
成
绩
信
息
输
入
学
生
成
绩
信
息
输
出
编
辑
或
修
改
学
生
信
息
删
除
某
学
生
信
息
统
计
成
绩
按
学
号
或
成
绩
排
序
从
文
件
读
入
数
据
输
出
到
文
件
实现办法:为了以便实现,普通会将一种复杂任务分解为各种子任务逐渐实现。
任务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——删除学生 |\n");
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)
}
}
展开阅读全文