学生成绩管理系统

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 ¿ 则退出系统。

注意:

1)输出数组元素时,要将学号单独处理,输出为整数(即保留0位小数)。同理,在计算成绩时也要将第1列的学号撇开,只计算第2列之后的。成绩保留1位小数。

2)学生人数n贯穿始终,通过n的值判断当前命令的子函数是否能够调用执行。例如:当n=0时,说明还没有录入成绩。而一旦输入命令T,也即调用Type子函数录入了成绩,则n的值就不再是0。当n!=0时,就可以进行其他的成绩操作,但不能再执行录用成绩的操作。所以当用户输入的命令无法执行时,应当给出提示。

#ifndef _stu_h_
#define _stu_h_
#define N 10
typedef struct stu //定义学生
{
    int id;   //学号
    int math;    //数学成绩
    int chinese; //语文成绩
    int english; //英语成绩
    double avr;    //平均分
    int num;
} STU;

void menu();
void input();
void list();
void avr();
void sort();
void search();
#endif
#include <stdio.h>
#include <stdlib.h>
#include "stu.h"
STU st[N];
int n;
void menu()
{
    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> 2023.08.08 By 宋志鹏    * \n");
    printf("************************************************\n");
}
//成绩录入
void input()
{
    int i;
    printf("请输入学生人数:");
    scanf("%d", &n);
    printf("请输入%d名学生的三门成绩:\n", n);
    printf("学号  语文  数学  英语\n");

    for (i = 1; i <= n; i++)
    {
        st[i - 1].num = i;
        printf("%d ", st[i - 1].num);
        scanf(" %d  %d  %d", &st[i - 1].chinese, &st[i - 1].math, &st[i - 1].english);
    }
}
//计算平均分
void avr()
{
    int i;
    printf("学号  语文  数学  英语  平均分\n");
    for (i = 1; i <= n; i++)
    {
        st[i - 1].avr = ((st[i - 1].chinese + st[i - 1].math + st[i - 1].english) / 3);
        printf("%d  %d  %d  %.2lf\n", st[i - 1].chinese, st[i - 1].math, st[i - 1].english, st[i - 1].avr);
    }
}
//列出成绩
void list()
{
    int i;
    printf("学号  语文  数学  英语  平均分\n");
    for (i = 1; i <= n; i++)
    {
        printf("%d  %d  %d  %.2lf\n", st[i - 1].chinese, st[i - 1].math, st[i - 1].english, st[i - 1].avr);
    }
}
//按平均分由高到低排序
void sort()
{
    int i;
    int max;
    for (i = 0; i <= n; i++)
    {
        max = i ;
        for (int j = 0; j < n ; j++)
        {
            if (st[max].avr < st[i + j].avr)
            {
                max = i + j;
            }
        }
        struct stu temp = st[max];
        st[max] = st[i];
        st[i] = temp;
    }
    printf("学号  语文  数学  英语  平均分\n");
    for (i = 1; i <= n; i++)
    {
        printf("%d  %d  %d  %.2lf\n", st[i - 1].chinese, st[i - 1].math, st[i - 1].english, st[i - 1].avr);
    }
}
//按学号查询成绩
void search()
{
    int i, a;
    int flag = 0;
    printf("请输入要查询学生的学号:");
    scanf("%d", &a);
    for (i = 0; i <= n; i++)
    {
        flag = 0;
        if (st[i].num == a)
        {
            flag = 1;
            printf("学号  语文  数学  英语  平均分\n");
            printf("%d  %d  %d  %.2lf\n", st[i].chinese, st[i].math, st[i].english, st[i].avr);
            break;
        }
    }
    if (flag == 0)
    {
        printf("该生不存在\n");
    }
}

#include <stdio.h>
#include <stdlib.h>
#include "stu.h"

int main(int argc, char const *argv[])
{
    char order;
    int n;
    menu();
    while (1)
    {
        printf("输入的命令=");
        scanf("%c", &order);
        switch (order)
        {
        case 'H':
            menu();
            break;
        case 'T':
            input();
            break;
        case 'A':
            avr();
            break;
        case 'L':
            list();
            break;
        case 'P':
            sort();
            break;
        case 'S':
            search();
            break;
        case 'C':
            system("clear");
            break;
        case 'Q':
            return 0;
        default:
            printf("输入错误");
        }
        getchar();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值