学生考试成绩数据处理系统
系统使用说明
各级菜单间关系如下: 1.建立新的数据文件 2.载入数据 菜单 3.编辑数据 4.保存 5.退出 3.编辑数据
1.增加学生记录 1.增加或删除学生的记录 2.删除学生记录 3.返回
1.输入学号查成绩(包括平均成绩) 2.查询成绩 2.平均成绩顺序输出学生成绩 3.按学号顺序输出学生成绩 4.按某门课成绩好坏顺序输出学生成绩 5.返回
3.统计平均成绩 1输出总平均成绩
2.输出每门课程平均成绩
3.返回
1.考试有不及格的学生名单
4..不及格统计 2.指定课程有不及格的学生名单
3.有三门或三门以上课程不及格的学生名单
4.每门课不及格比例
5.返回
1.每门课成绩最好和最差的学生名单 5.特定查询 2.总成绩分段查询(如总成绩在300~400)
3.各门成绩分段查询(如各门成绩均在80~90)
4.返回 返回
简要说明:
1. 以上红色字体的选项为备选要求。
2. <载入数据>指读取保存在文件中的数据,需输入文件名,<编辑数据>指对数据进行各种操
作,<保存>将输入的数据保存在现有文件中,需输入文件名,可用<新建>建立多个文件保
存不同数据。
3. <增加学生记录>需输入学生的各项信息即学号、姓名、成绩。<删除学生记录>只需输入学
生的学号。
4. 学号查成绩>只需输入学号即可。<平均成绩顺序输出学生成绩>按平均成绩高低顺序输出
成绩。
5. <每门课不及格比例>输出每门课不及格人数与总人数。
6. <每门课成绩最好和最差的学生名单>输出每门课成绩最好与最差的学生,只输出一个。<
总成绩分段查询>输入上限、下限(如300~400),查找总分处在该分数段内的学生。<各
门成绩分段查询>输入上限、下限(如80~90),查找各门成绩均处在该分数段内的学生。
7. 选择菜单时,只需键入数字,不需按回车键。
系统
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
报告
主要
流程
快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计
图如下:
Edit() Choice=’3’
主函数
Choice=’1’
调用newfile()
函数Choice1() Ch=getch()
Ch=getch() Ch=’1’
Ch=’2’ Choice=’1’
Ch=’3’ Choice=’2’
Loaad() New file
Save() Ch=’4’ Choice=’3’
Add() Dle() Ch=’5’
返回
退出
Choice=’2’ Choice=’3’ Choice=’4’
函数Choice2() 函数Choice3() 函数Choice3()
Choice=’5’
函数Choice2()
本程序设计优缺点:
采用数组实现各项功能,简洁易懂,便于操作。功能包括: 1. 建立文件:能建立多个文件保存不同数据;载入:可从现有任意文件中载入数据;保存:
可将输入的数据保存到现有文件中,
建议
关于小区增设电动车充电建议给教师的建议PDF智慧城市建议书pdf给教师的36条建议下载税则修订调整建议表下载
新建文件,否则会覆盖
原文
少年中国说原文俱舍论原文大医精诚原文注音大学原文和译文对照归藏易原文
件中数据。
2. 增加或删除学生数据,按学号查学生姓名、成绩(包括平均成绩),求总平均成绩和各科平
均成绩。
3. 有各种排序功能:按学号排序、平均成绩排序、某门课成绩排序。 4. 不及格类统计:统计考试有不及格的学生、指定课程有不及格的学生、三门或三门以上课
程不及格的学生及每门课不及格学生与总人数之比。 5. 分数段查询:.总成绩分段查询(如总成绩在300~400)、各门成绩分段查询(如各门成绩
均在80~90),可轻松查询各分数段内的学生。
不足之处是学生数组以静态方式存储内存,利用率不高,且数组长度有限,不能动态添
加。还有一点就是输出每门课成绩最好和最差的学生名单时,只能输出一位学生,即如果有
俩个学生的成绩相同时,只能输出平均分高的学生。
学生考试成绩数据处理系统
本程序设计优缺点:
采用数组实现各项功能,简洁易懂,便于操作。功能包括:
1. 建立文件:能建立多个文件保存不同数据;载入:可从现有任意文件中载入数据;保存:
可将输入的数据保存到现有文件中,建议新建文件,否则会覆盖原文件中数据。
2. 增加或删除学生数据,按学号查学生姓名、成绩(包括平均成绩),求总平均成绩和各科平均成绩。
3. 有各种排序功能:按学号排序、平均成绩排序、某门课成绩排序。
4. 不及格类统计:统计考试有不及格的学生、指定课程有不及格的学生、三门或三门以上
课程不及格的学生及每门课不及格学生与总人数之比。
5. 分数段查询:.总成绩分段查询(如总成绩在300~400)、各门成绩分段查询(如各门成绩均在80~90),可轻松查询各分数段内的学生。
不足之处是学生数组以静态方式存储内存,利用率不高,且数组长度有限,不能动态添加。
还有一点就是输出每门课成绩最好和最差的学生名单时,只能输出一位学生,即如果有俩个
学生的成绩相同时,只能输出平均分高的学生。
#include
#include
void file();
void init(); //声明函数
void init1();
void init2();
void init3();
void init4();
void doChoice1();
void doChoice2();
void doChoice3();
void doChoice4();
void doChoice5();
///////////////////////////////////////////////////////////////////////////////////////////////
#define FORMAT "%-7s%-9s%-10.3f%-14.3f%-12.3f%-14.3f%.3f" //定义FORMAT输出格式 float total_ave,math_ave,data_ave,eng_ave,c_ave;
//定义全局变量 total_ave总平均分,math_ave数学,data_ave数据库,eng_ave英语,c_ave C语言平均分
int n=0; //n学生个数 FILE *fp;
struct student //定义student结构体 {
char num[7]; //学号
char name[20]; //姓名
float score[4]; //成绩
float average; //平均分 }stu[80]; //学生数组长度 struct student *p; //定义全局结构体指针变量
void load(char filename[]) //定义读取文件中数据的函数
{
n=0; //学生个数n
if((fp=fopen(filename,"rb"))==NULL) //判断文件是否存在
{
printf("Cannot open file.\n");
return; //文件不存在,返回主函数
}
do //读取数据
{
if(fread(&stu[n],sizeof(struct student),1,fp)!=1) //判断读取是否成功
{
if(feof(fp)) return; //若读取结束,返回主函数
printf("file read error!!!\n\n"); //读取出错
}
n++; //n学生人数加1
}while(1);
fclose(fp); //关闭文件 }
void save(char filename[]) //保存数据
{
int i;
if((fp=fopen(filename,"wb"))==NULL) //判断文件是否存在
{
printf("Cannot open file.\n");
return;
}
else //保存数据
{
for(i=0;i成绩:");
scanf("%f",&stu[n].score[0]);
printf("请输入<数据库概论>成绩:");
scanf("%f",&stu[n].score[1]);
printf("请输入<英语>成绩:");
scanf("%f",&stu[n].score[2]);
printf("请输入成绩:");
scanf("%f",&stu[n].score[3]);
getchar();
n++; //人数增加1
printf("继续录入附否?(按y继续,其他退出)");
c=getch();
printf("\n");
}while(c=='y'||c=='Y');
printf("\t数据已成功输入^_^!\n"); }
void Del() //删除记录
{
int i,flag=1; //定一变量,flag作记号
char number[8];
printf("请输入学生的学号:"); //输入学号
gets(number);
for(i=0;iaverage=(p->score[0]+p->score[1]+p->score[2]+p->score[3])/4;
sum=sum+p->average;
sum0=sum0+p->score[0];
sum1=sum1+p->score[1];
sum2=sum2+p->score[2];
sum3=sum3+p->score[3];
}
total_ave=sum/n; //总成绩求平均
math_ave=sum0/n; //数学平均成绩
data_ave=sum1/n; //数据库概论平均成绩
eng_ave=sum2/n; //英语平均成绩
c_ave=sum3/n; //c语言平均成绩 }
void doChoice2_1() //输入学号查成绩 {
char number[8]; //学号字符数组
int flag=1;
printf("\n请输入学号:"); //输入学号
gets(number);
for(p=stu;pnum)==0) //寻找该学生数据
{ //输出成绩
printf("\n姓名%s 数学%.3f 数据库概论%.3f ",p->name,p->score[0],p->score[1]);
printf("\n英语%.3f C语言程序设计%.3f 平均成绩%.3f",p->score[2],p->score[3],p->average);
flag=0; //判断是否存在该学生数据
}
printf("\n");
if(flag) printf("输入有误,没有该学生数据!!!\n"); //不存在该数据 }
void Oder1() //按成绩排序 {
int i,j;
struct student t; //定义结构体t
for(i=0;i<=n-2;i++) //冒泡法排序
for(j=0;j<=n-2-i;j++)
if(stu[j].average0)
{
t=stu[j];
stu[j]=stu[j+1];
stu[j+1]=t;
}
}
Print() //输出成绩
{
printf("\n");
printf("学号 姓名 数学 数据库概论 英语 C语言程序设计 平
均分 \n ");
printf("-----------------------------------------------------------------------------\n");
for(p=stu;pnum,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->average);
printf("\n\n");
}
printf("\n");
}
void Order3(int i) //按某门课成绩排序,i课序号
{
int j,k;
struct student t;
for(j=0;j<=n-2;j++) //冒泡法排序
{
for(k=0;k<=n-2-j;k++)
if(stu[k].score[i]=0) //判断i的范围
{
Order3(i); //排序
Print(); //输出
}
else printf("i值不合要求!!!"); //i值不合要求
printf("\n");
}
void doChoice2() //选项2 {
char choice2;
average(); //调用函数求平均成绩
do
{
init2(); //输出菜单
choice2=getch();
if(choice2=='1') doChoice2_1(); //执行命令
else if(choice2=='2')
{
Oder1(); //调用函数,按成绩排序
Print(); //输出
}
else if(choice2=='3')
{
Oder2(); //调用函数,按学号排序
Print(); //输出
}
else if(choice2=='4') doChoice2_4(); //执行命令4
else if(choice2=='5') return; //返回上一级菜单
else printf("Input error!!!!\n");
}while(1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void init3() //菜单 {
printf("\n请选择操作菜单:\n");
printf("\t?.输出总平均成绩\n");
printf("\t?.输出每门课程平均成绩\n");
printf("\t?.返回!!\n");
}
void doChoice3_1() //输出总平均成绩 {
printf("\n所有学生所有课程的平均成绩为:%.3f\n",total_ave);
printf("\n");
}
void doChoice3_2() //输出各门平均成绩 {
printf("\n");
printf("数学平均成绩:%.3f\n数据库概论平均成绩:%.3f\n",math_ave,data_ave);
printf("英语平均成绩:%.3f\nC语言程序设计平均成绩:%.3f\n",eng_ave,c_ave);
printf("\n");
}
void doChoice3() //选项3 {
char choice3;
average(); //求平均成绩
do
{
init3();
choice3=getch();
if(choice3=='1') doChoice3_1();
else if(choice3=='2') doChoice3_2();
else if(choice3=='3') return; //返回上一级菜单
else printf("Input error!!!!\n");
}while(1);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
void init4() //菜单 {
printf("\n请选择操作菜单:\n");
printf("\t?.输出课程有不及格的学生名单\n");
printf("\t?.输出指定课程有不及格的学生名单\n");
printf("\t?.输出有三门或三门以上课程不及格的学生名单\n");
printf("\t?.计算并输出每门课不及格比例\n");
printf("\t?.返回!!\n");
}
void doChoice4_1() //输出课程有不及格的学生
{
int flag=1,i;
for(p=stu;pscore[i]<60) //寻找不及格学生数据
{
printf("%s ",p->name); //输出不及格学生姓名
flag=0; //flag记号,判断有无不及格学生
break; //跳向下一学生数据
}
}
if(flag) printf("无人不及格^_^。\n"); //flag=1,无不及格学生
else printf("有不及格课程。\n");
}
pass2(int i) //寻找某课不及格学生 {
int flag=1; //flag记号
for(p=stu;pscore[i]<60) //判断score是否小于60
{
printf("%s ",p->name); //输出学生姓名
flag=0;
}
if(flag) printf("无人不及格^_^。\n"); //flag=1,无人不及格
else printf("不及格\n");
}
void doChoice4_2() //输出指定课程有不及格的学生名单
{
int i;
printf("\n请输入课程代号(数学0, 数据库概论1, 英语2, C语言程序设计3):"); //输出
scanf("%d",&i); //取值
getchar(); //区空格符
if(i<4&&i>=0) pass2(i); //调用函数,
else printf("i值不合要求!!!"); //i值不合要求
printf("\n");
}
void doChoice4_3() //输出有三门或三门以上课程不及格的学
生名单
{
int i,flag,flag1=1; //flag,flag1作记号
for(p=stu;pscore[i]<60)
flag++;
if(flag>=3)
{
printf("\t%s有%d门课程不及格\n",p->name,flag);
flag1=0; //flag1,判断有无学生三门或三门以上不
及格
}
}
if(flag1) printf("无人有三门或三门以上课程不及格^_^!\n"); //flag1=1
printf("\n");
}
void doChoice4_4() //输出每门课不及格比例 {
int fail[4]={0,0,0,0},i; //fail数组记录各科不及格人数
for(i=0;i<4;i++) //for循环计算各科不及格人数
for(p=stu;pscore[i]<60)
fail[i]++;
printf("\n"); //输出
printf("课程 不及格人数 总人数 \n");
printf("**********************************************************\n");
printf("数学 %d %d \n",fail[0],n);
printf("数据库概论 %d %d \n",fail[1],n);
printf("英语 %d %d \n",fail[2],n);
printf("C语言程序设计 %d %d
\n",fail[3],n);
printf("\n");
}
void doChoice4() //选项4 {
char choice4;
do
{
init4(); //输出菜单
choice4=getch();
if(choice4=='1') doChoice4_1(); //执行命令
else if(choice4=='2') doChoice4_2();
else if(choice4=='3') doChoice4_3();
else if(choice4=='4') doChoice4_4();
else if(choice4=='5') return; //返回上一级菜单
else printf("Input error!!!!\n");
}while(1);
printf("\n");
}
////////////////////////////////////////////////////////////////////////////////////////////////
void init5() //菜单 {
printf("\n请选择操作菜单:\n");
printf("\t?.输出每门课成绩最好和最差的学生\n");
printf("\t?.总成绩分段查询(如总成绩在300~400)\n");
printf("\t?.各门成绩分段查询(如各门成绩均在80~90)\n");
printf("\t?.返回\n");
}
void doChoice5_1()
{
Oder1();
printf("\n 成绩最好的学生 成绩最差学生\n" );
Order3(0); //调用函数,输出数学成绩最好学生
printf("数
学 %s %s\n",stu[0].name,stu[n-1].name);
Order3(1); //调用函数,输出数据库概论成绩最好学生
printf("数据库概
论 %s %s\n",stu[0].name,stu[n-1].name);
Order3(2); //调用函数,输出英语成绩最好学生
printf("英语 %s %s\n",stu[0].name,stu[n-1].name);
Order3(3); //调用函数,输出c语言成绩最好学生
printf("C语言程序设
计 %s %s\n",stu[0].name,stu[n-1].name);
printf("\n\n");
}
void doChoice5_2() //总成绩分段查询 {
int flag=0;
float M,m; //M上限,m下限
printf("请输入上限:");
scanf("%f",&M);
printf("\n请输入下限:");
scanf("%f",&m);
getchar(); //去空格符
average(); //调用函数求平均成绩
if(Maverage>(m/4)&&p->average<(M/4))
{
printf("%s ",p->name);
flag=1;
}
if(flag) printf("总分处在该分数段之间。"); //flag=1
else printf("没有总分处在该分数段之间的学生。"); //没符合要求的学生
printf("\n");
}
void doChoice5_3() //各门成绩分段查询 {
int flag=1,flag1=1,i;
float M,m; //M上限,m下限
printf("请输入上限:");
scanf("%f",&M);
printf("\n请输入下限:");
scanf("%f",&m);
getchar(); //去空格符
if(Mscore[i]score[i]>M) flag1=0;
}
if(flag1) printf("%s ",p->name); //flag1=1
flag=0; //flag记号,判断是否存在符合条件的学生
}
if(flag) printf("没有符合条件的学生!"); //flag=1,
else printf("所有课程成绩都处在该分数段之间。");
printf("\n");
}
void doChoice5() //选项5 {
char choice5;
average();
do
{
init5();
choice5=getch();
if(choice5=='1') doChoice5_1();
else if(choice5=='2') doChoice5_2();
else if(choice5=='3') doChoice5_3();
else if(choice5=='4') return;
else printf("Input error!!!!\n");
}while(1);
printf("\n");
}