//为什么我输入1再输入3,输入1 1 1回车3 3 3回车2 2 2后输入5输入1之后并没有进行按照学号升序排列?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
int main_menu(); //主界面
int menu_5(); //输入'5'时的界面
void overview(); //实现全览功能的函数
void ID_select(); //按学号顺序
int menu_6(); //输入'6'时的界面
void statistics(); //实现统计功能的函数
void add(); //学生成绩新增
void mark_statistics(); //成绩分布统计
//定义学生结构体
struct Student
{
char ID[20];
char Name[20];
int Mark;
};
//声明学生数组及学生数量
struct Student students[1000];
int num=0;
int main()
{
char ch;
while(1)
{
switch(main_menu()) //获取main_menu()函数输入的数据
{
case 1:
system("CLS");
add();
break;
case 2:
system("CLS");
printf("\n查询学生成绩信息功能待完成!\n");
//以后版本插入函数 check()
break;
case 3:
system("CLS");
printf("\n修改学生成绩信息功能待完成!\n");
//以后版本插入函数 revise()
break;
case 4:
system("CLS");
printf("\n删除学生成绩信息功能待完成!\n");
//以后版本修改函数 deleted()
break;
case 5:
//system("CLS");
overview();
break;
case 6:
system("CLS");
statistics();
break;
case 0:
system("CLS");
printf("\n确认退出系统?(Y/N) ");
scanf(" %c",&ch);
if (ch == 'Y'||ch == 'y')
{
return 0;
}
else if (ch == 'N'||ch == 'n')
{
return main();
}
}
}
return 0;
}
//主界面函数
int main_menu()
{
char ch;
do
{
printf("----- 学生成绩管理系统 V2.0 -----\n");
printf("\t1. 学生成绩新增\n");
printf("\t2. 学生成绩查询\n");
printf("\t3. 学生成绩修改\n");
printf("\t4. 学生成绩删除\n");
printf("\t5. 班级成绩全览\n");
printf("\t6. 班级成绩统计\n");
printf("\t0. 退出\n");
printf("输入 : \n");
ch = getch();
if(ch < '0'||ch > '7') //判断输入错误
{
printf("\n error!\n");
return (ch - 48);
}
}while(ch < '0'||ch > '7');
return (ch - 48);
}
//学生成绩新增
void add()
{
int i;
system("CLS");
printf("请输入班级人数: ");
scanf("%d",&num);
printf("请输入每个学生学号、姓名及成绩\n");
for(i = 0;i < num;i++)
{
scanf("%s%s%d",students[i].ID,students[i].Name,&students[i].Mark);
}
printf("成绩录入已完成!\n");
}
//输入'5'时的界面
int menu_5()
{
char ch;
do{
printf("\t1---按学号顺序浏览\n");
printf("\t2---按成绩排名浏览\n");
printf("\t0---返回上一级\n");
printf("输入 : \n");
ch = getch();
}while(ch < '0'||ch > '2');
return (ch - 48);
}
//实现全览功能的函数
void overview()
{
system("CLS");
char ch = 0;
do{
switch(menu_5())
{
case 0:
system("CLS");
return;
case 1:
printf("按学号顺序成绩列表如下:\n");
ID_select();
break;
case 2:
system("CLS");
printf("按成绩顺序浏览成绩功能待完成!\n");
break;
}
}while(ch < '0'||ch > '2');
return;
}
//按学号顺序
void ID_select()
{
int i,j;
struct Student t; //中间变量t
for(i = 0;i < num;i++)
{
for(j = 0;j < num-1;j++)
{
if (students[j-1].ID>students[j].ID)
{
t = students[j-1];
students[j-1] = students[j];
students[j] = t;
}
}
printf("%s %s %d\n",students[i].ID,students[i].Name,students[i].Mark);
}
}
//输入'6'时的界面
int menu_6()
{
char ch;
do{
system("CLS");
printf("\t1----成绩分布统计\n");
printf("\t2----统计不及格人数及名单\n");
printf("\t3----统计优秀人数及名单\n");
printf("\t4----统计及格人数及名单\n");
printf("\t0----返回上一级\n");
printf("输入 : ");
ch = getch();
}while(ch < '0'||ch > '4');
return (ch - 48);
}
//实现统计功能的函数
void statistics()
{
system("CLS");
char ch = 0;
do{
switch(menu_6())
{
case 0:
system("CLS");
return;
case 1:
mark_statistics();
break;
case 2:
system("CLS");
printf("功能待完成!\n");
break;
case 3:
system("CLS");
printf("功能待完成!\n");
break;
case 4:
system("CLS");
printf("功能待完成!\n");
break;
}
}while(ch < '0'||ch > '4');
}
//成绩分布统计
void mark_statistics()
{
int fail=-1; //不及格
int pass=0; //及格
int secondary=0; //中等
int good=0; //良好
int excellent=0; //优秀
int i;
double ratio_1,ratio_2,ratio_3,ratio_4,ratio_5;
printf("成绩分布如下 :\n");
printf("总人数\t不及格\t及格\t中等\t良好\t优秀\n");
for(i = 0;i <= num;i++)
{
if(students[i].Mark < 60 && students[i].Mark >= 0)
fail++;
else if(students[i].Mark >= 60 && students[i].Mark < 70)
pass++;
else if(students[i].Mark >= 70 && students[i].Mark < 80)
secondary++;
else if(students[i].Mark >= 80 && students[i].Mark < 90)
good++;
else if(students[i].Mark >= 90 && students[i].Mark <= 100)
excellent++;
}
ratio_1 = (double)fail/num*100;
ratio_2 = (double)pass/num*100;
ratio_3 = (double)secondary/num*100;
ratio_4 = (double)good/num*100;
ratio_5 = (double)excellent/num*100;
printf("%d\t%d\t%d\t%d\t%d\t%d\n",num,fail,pass,secondary,good,excellent);
printf("比例:\t%.1lf%%\t%.1lf%%\t%.1lf%%\t%.1lf%%\t%.1lf%%\n",ratio_1,ratio_2,ratio_3,ratio_4,ratio_5);
getch();
}
1 回答
- 1 回答
- 2 关注
- 1185 浏览
添加回答
举报
0/150
提交
取消