1)系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/d9f8541ad1b3e1e488007dc3d3e3d3e8.png)
2)开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”
![](https://img-blog.csdnimg.cn/img_convert/34d5be2a97ecd9ab4887bf9da045fe24.png)
同理,当输入其他的成绩处理命令时也作相应的处理。
![](https://img-blog.csdnimg.cn/img_convert/9e17f1adadbee7c043788d8cb1b5d7c8.png)
3)输入命令 T,调用Type子函数录入成绩。
界面提示输入学生人数
![](https://img-blog.csdnimg.cn/img_convert/7f09585078b0977a837096e91980d142.png)
输入3 回车 提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1
![](https://img-blog.csdnimg.cn/img_convert/22254fca6e3c2a4ec34139fb78f2e551.png)
输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2
![](https://img-blog.csdnimg.cn/img_convert/2c3d64208e98e8804ebf4e341c9a94b6.png)
输入2号学生的3门课成绩,用空格间隔,回车结束。提示学号:3
![](https://img-blog.csdnimg.cn/img_convert/a2f811c2e374d7f0e6b05cdaae970694.png)
输入3号学生的3门课成绩,用空格间隔,回车结束。Type子函数调用结束,返回。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/e465d8a7413371a99c868c988ccc624b.png)
4)输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/e2dd8a665abff2a80f4f242b8343ea66.png)
5)输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/228ed5ef1a662a832074a76cf5902412.png)
输入命令L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/837817dd05b5330428a3bd3512818d1f.png)
6)输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/667cce67b767e4388ee688cfc0029a34.png)
输入命令L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/125484d9a2d9783e69f7b949d96aec12.png)
7)输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。
![](https://img-blog.csdnimg.cn/img_convert/c9fad261850981c9018f3fdf5acf6b9a.png)
输入2 找到2号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/fa1ac7c2af28e61dea15bcfcebff7a5e.png)
8)输入命令C 执行清屏函数语句system("clear");
![](https://img-blog.csdnimg.cn/img_convert/7c12f57e062f13df4da172e425c46f8d.png)
清除屏幕的所有内容。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/c1e209f3b7f90add0e204837efbe6daf.png)
9)输入命令H调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令。
![](https://img-blog.csdnimg.cn/img_convert/f6cf99fa24b5e6bcdfb6965a07746e09.png)
10)输入命令Q 则退出系统。
![](https://img-blog.csdnimg.cn/img_convert/c928e914af64f5890df2181ae94ac676.png)
全部代码如下:
#include"stdio.h"
#include"stdlib.h"
#define MAX 10
void menu();
void order();
struct student
{
int id;
double china;
double english;
double math;
};
struct student stu[MAX];
int count=0;
double ave[MAX]={0.0};
void Type()
{
int num,i=0;
printf("请输入学生人数:");
scanf("%d",&num);
printf("请输入%d名学生的三门成绩\n",num);
printf("学号\t语文\t英语\t数学\n");
while (num)
{
if(count>=MAX)
{
printf("学生数量以达到上限\n");
return;
}
stu[count].id=++i;
printf("%d\t",stu[count].id);
scanf("%lf%lf%lf",&stu[count].china,&stu[count].english,&stu[count].math);
count++;
num--;
}
printf("录入成功!\n");
order();
}
void List()
{
if(count==0)
{
printf("成绩表为空!请先使用命令T录入学生成绩\n");
order();
}
printf("学号\t语文\t英语\t数学\t平均分\n");
for(int i=0;i<count;i++)
{
printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n",stu[i].id,stu[i].china,stu[i].english,stu[i].math,ave[i]);
}
order();
}
void search()
{
int id;
if(count==0)
{
printf("成绩表为空!请先使用命令T录入学生成绩\n");
order();
}
printf("请输入要查询的学生学号:\n");
scanf("%d",&id);
for(int i=0;i<count;i++)
{
if(stu[i].id==id)
{
printf("学号\t语文\t英语\t数学\t平均分\n");
printf("%d\t%.1f\t%.1f\t%.1f\t%.1f\n",stu[i].id,stu[i].china,stu[i].english,stu[i].math,ave[i]);
order();
}
}
order();
}
void average()
{
if(count==0)
{
printf("成绩表为空!请先使用命令T录入学生成绩\n");
order();
}
for(int i=0;i<count;i++)
{
ave[i]=(stu[i].id+stu[i].china+stu[i].english+stu[i].math)/3;
}
printf("平均分已计算。请使用命令L查看\n");
order();
}
void sort()
{
if(count==0)
{
printf("成绩表为空!请先使用命令T录入学生成绩\n");
order();
}
for(int i=0;i<count-1;i++)
{
for(int j=0;j<count-1;j++)
{
if(ave[j]<ave[j+1])
{
int tem=ave[j];
ave[j]=ave[j+1];
ave[j+1]=tem;
int tem1=stu[j].id;
stu[j].id=stu[j+1].id;
stu[j+1].id=tem1;
int tem2=stu[j].china;
stu[j].china=stu[j+1].china;
stu[j+1].china=tem2;
int tem3=stu[j].english;
stu[j].english=stu[j+1].english;
stu[j+1].english=tem3;
int tem4=stu[j].math;
stu[j].math=stu[j+1].math;
stu[j+1].math=tem3;
}
}
}
printf("完成排序,请使用命令L查看。");
order();
}
void help()
{
menu();
printf("请输入命令=");
}
void menu()
{
printf("**********************************************************\n");
printf("\t*\t学生成绩管理系统————帮助菜单\t*\t\n");
printf("**********************************************************\n");
printf("\t*\t H = 显示帮助菜单\t\t*\t\n");
printf("\t*\t T = 成绩录入 \t\t*\t\n");
printf("\t*\t A = 计算学生平均分\t\t*\t\n");
printf("\t*\t L = 列出成绩表 \t\t*\t\n");
printf("\t*\t P = 按平均成绩由高到低排序 \t*\t\n");
printf("\t*\t S = 按学号查询学生成绩 \t*\t\n");
printf("\t*\t C = 清屏 \t\t*\t\n");
printf("\t*\t Q = 退出系统 \t\t*\t\n");
printf("**********************************************************\n");
printf("\t*\tCopyright<C>2016.06.12 By 姓名 *\t\n");
printf("**********************************************************\n");
}
void order()
{
printf("请输入命令=");
while(1)
{
char choice;
scanf(" %c",&choice);
switch (choice)
{
case 'T':
Type();
break;
case 'L':
List();
break;
case 'S':
search();
break;
case 'A':
average();
break;
case 'P':
sort();
break;
case 'H':
help();
break;
case 'C':
system("clear");
printf("请输入命令=");
break;
case 'Q':
exit(0);
break;
default:
printf("指令错误,请重新输入命令:\n");
printf("请输入命令=");
break;
}
}
}
int main(int argc, char const *argv[])
{
menu();
order();
return 0;
}