简单的学生成绩管理系统——C语言

        这个系统中,有成绩录入、计算平均值、根据平均值进行排序、展示学生成绩、清屏、退出、通过学号查询成绩、展示帮助菜单这几个功能。比较简单,不过也是对之前的学习的一个汇总和检测,以后再进行复杂的系统开发。

        话不多说,直接上程序

ps:这个清屏功能是Linux系统中的。Windows系统换一下它自己的就可以了。

也就是把这个改掉就行。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdlib.h>

int n = 0;  //记录有多少名同学的分数已经被录入

struct student
{
    char id[10];
    float chinese;
    float math;
    float english;
    float avg;
}stu[50];   //定义一个结构体数组,用来保存学生的学号和成绩

void help_menu();//帮助菜单
void score_get();//录入分数
void score_average();//获取某个同学的平均分数
void show_list();//展示学生的成绩列表
void sort_average();//根据平均值从高到低排序
int selectById(char *p); //通过学生的学号查询成绩
int main(int argc, char const *argv[])
{
    char menu_ch;
    help_menu();
    while (1)
    {
        printf("请输入指令\n");
        scanf("%c",&menu_ch);
        getchar();                  //这个getchar的功能是回收你在控制台输入的回车操作
        switch (menu_ch)            //对menu_ch进行判断,然后执行其操作
        {
            case 'H':
                help_menu();        //展示帮助菜单
                break;
            case 'T':
                score_get();        //成绩录入
                break;
            case 'A':
                score_average();     //计算平均值
                break;
            case 'L':
                show_list();        //展示成绩列表
                break;
            case 'P':
                sort_average();     //以平均值从高到低排序
                break;
            case 'S':
                printf("请输入你想查询学生的学号\n");
                char ch[10];
                scanf("%s",ch);
                getchar();
                int t = selectById(ch);      //通过学号查询成绩
                if(t != -1)
                    printf("%s的成绩:语文:%4.2f 数学:%4.2f 英语:%4.2f 平均分:%4.2f\n",stu[t].id,stu[t].chinese,stu[t].math,stu[t].english,stu[t].avg);
                break;
            case 'C':
                system("clear");        //清屏
                break;
            case 'Q':
                exit(0);            //退出
            default:
                printf("您输入有误,请重新输入\n");
                break;
        }
    }
    return 0;
}
void help_menu()
{
    printf("*******************************************\n");
    printf("  *\t学生成绩管理系统——帮助菜单\t*\n");
    printf("*******************************************\n");
    printf("  *\tH = 显示帮助菜单\t\t*\n");
    printf("  *\tT = 成绩录入    \t\t*\n");
    printf("  *\tA = 计算学生平均分\t\t*\n");
    printf("  *\tL = 列出成绩表\t\t*\n");
    printf("  *\tP = 按平均成绩从高到低排序\t*\n");
    printf("  *\tS = 按学号查询学生成绩\t\t*\n");
    printf("  *\tC = 清屏\t\t*\n");
    printf("  *\tQ = 退出系统\t\t*\n");
    printf("*******************************************\n");
    printf("  *For man is man and master of his fate.*\n");
    printf("*******************************************\n");
}
void score_get()
{
    printf("请输入学生人数:");
    int num;                //学生的人数
    scanf("%d",&num);
    printf("请输入%d名学生的三门课成绩:\n",num);
    printf("学号  语文  数学  英语\n");
    char id_1[10];
    float C,M,E;            //用来记录你输入的成绩,以便于之后的比较,看看是否已经录入过了
    while (num)
    {
        scanf("%s %f %f %f",id_1,&C,&M,&E);
        getchar();
        int flag = 0;  //学号没有存入过
        if(n == 0)     //没有录入过成绩,直接录入
        {
            strcpy(stu[n].id,id_1);
            stu[n].chinese = C;
            stu[n].math = M;
            stu[n].english = E;
            n++;
        }
        else           //如果已经录入了成绩,那就和之前的学号进行比较,如果发现和之前的相等,那就flag=1,否则录入
        {
            for (int i = 0; i < n; i++)
            {
                if(strcmp(id_1,stu[i].id))  //当他们相等时返回值为0时,执行else中的语句.
                {
                    continue;
                }
                else
                {
                    flag = 1;
                    break;
                }
            }
            if(flag)              //flag为1说明录入的学号已经存在,则重新输入
            {
                printf("该学生已经录入,请重新输入\n");
                continue;
            }
            else                //否则录入
            {
                strcpy(stu[n].id,id_1);
                stu[n].chinese = C;
                stu[n].math = M;
                stu[n].english = E;
                n++;
            }
        }
        num--;
    }
}
void score_average()
{
    if(n == 0)
        printf("成绩为空!请先录入成绩!\n");
    else
    {
        for (int i = 0; i < n; i++)
        {
            stu[i].avg = (stu[i].english + stu[i].chinese + stu[i].math)/3;         //计算平均值
        }
    }
}
void show_list()
{
    if(n == 0)
        printf("成绩为空!请先录入成绩!\n");
    else
    {
        for(int i = 0;i < n;i++)
        {
            printf("%s的成绩:语文:%4.2f 数学:%4.2f 英语:%4.2f 平均分:%4.2f\n",stu[i].id,stu[i].chinese,stu[i].math,stu[i].english,stu[i].avg);
        }
    }
}
void sort_average()
{
    if(n == 0)
        printf("成绩为空!请先录入成绩!\n");
    else
    {
        struct student temp;                //下面进行的是冒泡排序
        for(int i = 0;i < n-1;i++)
        {
            for(int j = 0;j < n-i-1;j++)
            {
                if(stu[j].avg < stu[j+1].avg)
                {
                    temp = stu[j];
                    stu[j] = stu[j+1];
                    stu[j+1] = temp;
                }
            }
        }
    }
}
int selectById(char *p)          //这个函数返回的是一个结构体类型的数据
{
    if(n == 0)
    {
        printf("成绩为空!请先录入成绩!\n");
        return -1;
    }
    else
    {
        while (1)
        {
            for(int i = 0;i < n;i++)
            {
                if(strcmp(p,stu[i].id))     //遍历每一个元素,并且进行学号比较
                    continue;
                else
                {
                    return i;          //如果相等,就返回这个学号所在的结构体
                }
            }
            printf("您输入的学号不存在,请重新输入:\n");
        }
    }
}

1. 帮助菜单

2. 成绩录入

 

3. 展示学生成绩

4. 计算平均值

5. 按平均值排序

6. 按学号查询

7. 清屏

加油努力!!

  • 9
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学生成绩管理系统是一个用于记录和管理学生的成绩信息的软件系统。它可以帮助教师或管理员轻松地录入、查询和统计学生的成绩数据。 在C语言中,实现学生成绩管理系统需要使用一些基本的数据结构和算法。以下是一个简单的示例程序来演示如何实现学生成绩管理系统: ```c #include <stdio.h> #include <stdlib.h> #define MAX_STUDENTS 100 struct Student { char name[50]; int rollNumber; float marks; }; void addStudent(struct Student students[], int *count) { if (*count >= MAX_STUDENTS) { printf("无法添加更多的学生。\n"); return; } struct Student newStudent; printf("请输入学生姓名:"); scanf("%s", newStudent.name); printf("请输入学生学号:"); scanf("%d", &newStudent.rollNumber); printf("请输入学生分数:"); scanf("%f", &newStudent.marks); students[*count] = newStudent; (*count)++; printf("成功添加学生。\n"); } void displayStudents(struct Student students[], int count) { if (count == 0) { printf("没有学生可显示。\n"); return; } printf("所有学生的成绩如下:\n"); for (int i = 0; i < count; i++) { printf("姓名:%s\n", students[i].name); printf("学号:%d\n", students[i].rollNumber); printf("分数:%.2f\n", students[i].marks); printf("--\n"); } } int main() { struct Student students[MAX_STUDENTS]; int count = 0; int choice; do { printf("学生成绩管理系统\n"); printf("1. 添加学生\n"); printf("2. 显示所有学生\n"); printf("3. 退出\n"); printf("请选择操作:"); scanf("%d", &choice); switch (choice) { case 1: addStudent(students, &count); break; case 2: displayStudents(students, count); break; case 3: printf("感谢使用学生成绩管理系统。\n"); exit(0); default: printf("无效的选择,请重新输入。\n"); } printf("\n"); } while (1); return 0; } ``` 这个示例程序实现了一个简单学生成绩管理系统,可以通过菜单选项来添加学生和显示所有学生的成绩信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值