1)系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令。
2)开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”
同理,当输入其他的成绩处理命令时也作相应的处理。
3)输入命令 T,调用Type子函数录入成绩。
界面提示输入学生人数
输入3 提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1
输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2
输入2号学生的3门课成绩,用空格间隔,回车结束。提示学号:3
输入3号学生的3门课成绩,用空格间隔,回车结束。Type子函数调用结束,返回。提示输入命令。
4)输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
5)输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令。
输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
6)输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令。
输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。
7)输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。
输入2 找到2号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令。
8)输入命令C 执行清屏函数语句system("clear");
清除屏幕的所有内容。提示输入命令。
9)输入命令H 调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令。
10)输入命令Q 则退出系统。
#include<stdio.h>
#include <stdlib.h>
float avg[] = {0};
float *avg1= avg;
int student;
struct score
{
int xuehao;
float yuwen;
float shuxue;
float waiyu;
}number[10];
void type(struct score *p){
printf("学号 语文 数学 外语\n");
int i;
for (i = 0; i < student; i++)
{
number[i].xuehao = i+1;
printf(" %d ",i+1);
scanf("%f %f %f",&number[i].yuwen,&number[i].shuxue,&number[i].waiyu);
}
}
void list(struct score number[]){
printf("学号 语文 数学 外语 平均分\n");
for (int i = 0; i < student; i++)
{
printf("%d %.2f %.2f %.2f %.2f\n",number[i].xuehao,number[i].yuwen,number[i].shuxue,number[i].waiyu,avg[i]);
}
}
int Average(struct score number[]){
for (int i = 0; i < student; i++)
{
float sum = 0;
*(avg1+i) = (number[i].shuxue+number[i].waiyu+number[i].yuwen) / 3;
}
}
int Sort(){
for (int i = 0; i <student - 1; i++)
{
for (int j = 0; i < student - i - j; j++)
{
if (avg1[j] < avg1[j+1])
{
float tem = avg1[j];
avg1[j] = avg1[j+1];
avg1[j+1] = tem;
float tem1 = number[j].shuxue;
number[j].shuxue = number[j+1].shuxue;
number[j+1].shuxue = tem1;
float tem2 = number[j].waiyu;
number[j].waiyu = number[j+1].waiyu;
number[j+1].waiyu = tem2;
float tem3 = number[j].yuwen;
number[j].yuwen = number[j+1].yuwen;
number[j+1].yuwen = tem3;
float tem4 = number[j].xuehao;
number[j].xuehao = number[j+1].xuehao;
number[j+1].xuehao = tem4;
}
}
}
}
void Search(){
printf("请输入要查询的学号:");
int select_xuehao;
scanf("%d",&select_xuehao);
for (int i = 0; i < student; i++)
{
if (select_xuehao == number[i].xuehao)
{
printf("学号 语文 数学 外语 平均分\n");
printf("%d %.2f %.2f %.2f %.2f\n",number[i].xuehao,number[i].yuwen,number[i].shuxue,number[i].waiyu,avg[i]);
}
}
}
void Help(){
printf("*************************************\n");
printf("* 学生成绩管理系统————帮助菜单 *\n");
printf("*************************************\n");
printf("* H = 显示帮助菜单 *\n");
printf("* T = 成绩录入 *\n");
printf("* A = 计算学生平均分 *\n");
printf("* L = 列出成绩单 *\n");
printf("* P = 按平均成绩又高到低排序 *\n");
printf("* S = 按学号查询学生成绩 *\n");
printf("* C = 清屏 *\n");
printf("* Q = 退出系统 *\n");
printf("*************************************\n");
printf("* Copyright (C)2024.08.10 By 潘健 *\n");
printf("*************************************\n");
printf("请输入命令=");
}
int main(int argc, char const *argv[])
{
Help();
int num = 0;
while (1)
{
//printf("进入下次循环\n");
//printf("请输入命令=");
char b;
b = getchar();
if (b == 'L')
{
if (num == 0)
{
printf("成绩表为空!请先使用T录入学生成绩\n");
continue;
}else
{
printf("进入L\n");
//printf("%d",number[1].shuxue);
list(number);
puts("\n");
continue;
}
}else if (b == 'A')
{
if (num == 0)
{
printf("成绩表为空!请先使用T录入学生成绩\n");
continue;
}else
{
Average(number);
printf("平均分已计算。请使用命令L查看");
}
}else if (b == 'P')
{
if (num == 0)
{
printf("成绩表为空!请先使用T录入学生成绩\n");
continue;
}else
{
//输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。”
//Sort子函数调用结束,返回。提示输入命令。
Sort();
printf("完成排序。请使用命令L查看。\n");
}
}else if (b == 'S')
{
if (num == 0)
{
printf("成绩表为空!请先使用T录入学生成绩\n");
continue;
}else
{
Search();
}
}else if (b == 'T')
{
printf("请输入学生人数:");
scanf("%d",&student);
type(number);
num+=1;
printf("退出T");
continue;
}else if (b == 'Q')break;
else if(b=='\n'){
printf("进入下次循环\n");
printf("请输入命令=");
}else if (b == 'C')
{
system("clear");
}else if (b == 'H')
{
Help();
}
}
return 0;
}