C语言项目——学生管理系统

目录

题目要求:

思路:

1、总体思路

2、具体思路

代码

功能实现


题目要求:

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、总体思路

根据题目要求,我们可以读出需要做的事情有:

定义一个结构体类型;

构建一个结构体数组用于存放多个学生信息;

构建一个help函数用于打印说明;

构建一个type函数用于输入学生信息;

构建一个list函数用于显示出学生信息;

构建一个average函数用于求学生的平均成绩;

构建一个sort函数用于按照平均成绩排序;

实现输入C清屏以及输入Q结束程序;

主函数内实现这些功能;

2、具体思路

我们通过代码注释讲解

代码

#include <stdio.h>
#include <stdlib.h>
#define N 32

void help()//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> 2023.6.1 By zl  *\n");
    printf("**************************************\n");
}

typedef struct student  //定义结构体并且重定义为简化的名称,便于书写
{
    int id;
    float chinese;
    float math;
    float english;
    float av;
} STU;

void type(int *p, STU *s) //构建函数实现输入功能,无返回值,参数为指向整型变量n的指针和指向结构体数组的指针,通过地址传递,形参可以修改实参
{
    printf("请输入学生人数\n");
    scanf("%d", p);
    getchar();// 垃圾字符回收
    printf("请输入%d名学生的三门课成绩:\n", *p);
    printf("学号 语文 数学 英语\n");
    for (int i = 1; i < *p + 1; i++) //循环遍历对结构体数组中的元素分别输入学生信息
    {
        s->id = i;  //由于每次输入需要有学号提示,所以学号必须单独操作
        printf("%d", s->id);  //打印出学号,实现每次输入成绩前的学号输入
        scanf(" %f %f %f", &(s->chinese), &(s->math), &(s->english)); //输入三科成绩,中间使用空格隔开
        getchar(); //垃圾字符回收
        s++;  //每次循环S指针向后移动一位
    }
    for (int i = 0; i <= *p; i++)  //将还未计算时的平均成绩赋值为0,防止出现随机值
        s[i].av = 0;
}

void list(int *p, STU *s)  //构建函数实现打印功能
{
    if (*p == 0)
        printf("成绩列表为空!请先使用命令T输入成绩\n"); //如果没有学生信息,进行提示
    else
    {
        printf("学生成绩如下:\n");
        printf("学号\t 语文\t 数学\t 英语\t 平均分\n");
        for (int i = 0; i < *p; i++) //循环遍历打印
        {
            printf("%d\t", s->id);
            printf("%.1f\t %.1f\t %.1f\t %.1f\n", s->chinese, s->math, s->english, s->av);
            s++;
        }
    }
}

void average(int *p, STU *s)  //构建函数用于求平均值
{
    if (*p == 0)
        printf("成绩列表为空!请先使用命令T输入成绩\n");
    else
    {
        for (int i = 0; i < *p; i++)
        {
            s->av = (s->chinese + s->math + s->english) / 3;  //计算公式
            s++;
        }
        printf("平均分已计算,请使用命令L查看\n");
    }
}

void sort(int *p, STU *s)  //构建函数实现排序
{
    if (*p == 0)
        printf("成绩列表为空!请先使用命令T输入成绩\n");
    else
    {
        for (int i = 0; i < *p - 1; i++)
        {
            for (int j = 0; j < *p - 1 - i; j++)
            {
                if (s[j].av < s[j + 1].av)  //利用双重for循环和if条件判断实现从大到小排序
                {
                    STU temp = s[j];
                    s[j] = s[j + 1];
                    s[j + 1] = temp;
                }
            }
        }
        printf("完成排序,请使用命令L查看\n");
    }
}

void search(int *p, STU *s)  //构建函数,实现可以通过搜索查看某学生信息
{
    if (*p == 0)
        printf("成绩列表为空!请先使用命令T输入成绩\n");
    else
    {
        printf("请输入需要查询的学生学号:\n");
        int a = 0;
        scanf("%d", &a);
        printf("学号\t 语文\t 数学\t 英语\t 平均分\n");
        for (int i = 0; i < *p; i++)
        {
            if (s[i].id == a)
                printf("%d\t %.1f\t %.1f\t %.1f\t %.1f\n", s[i].id, s[i].chinese, s[i].math, s[i].english, s[i].av);
        }
    }
}

int main(int argc, char const *argv[])
{
    help();  //引入help函数,先打印一份说明
    int n = 0;  //表示一共有几个学生信息,初值为零
    STU stu[N];  //构建结构体数组
    char mingling;  //构建字符变量,用于结束输入的命令
    while (1)   //死循环,实现连续操作
    {
        printf("请输入命令=");
        scanf("%c", &mingling);
        getchar();
        switch (mingling)  //switch语句实现针对不同的输入命令选择不同的功能
        {
        case 'T':
            type(&n, stu);  //输入T时调用type函数,进行学生信息输入
            break;
        case 'L':
            list(&n, stu);  //输入L时调用list函数,打印出学生信息
            break;
        case 'A':
            average(&n, stu);  //输入A时调用average函数,实现求平均成绩
            break;
        case 'P':
            sort(&n, stu);  //输入P时调用sort函数,实现排序
            break;
        case 'S':
            search(&n, stu);  //输入S时调用search函数,实现搜索功能
            break;
        case 'C':
            system("clear");  //输入C时实现清屏功能
            break;
        case 'H':
            help();  //输入H时调用help函数,显示帮助信息
            break;
        case 'Q':
            return 0;  //输入Q时结束程序
        }
    }
    return 0;
}

功能实现

  • 23
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的C语言学生成绩管理系统的实现,包括添加学生信息、删除学生信息、修改学生信息、查询学生信息和显示所有学生信息等功能。具体实现如下: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_STUDENT_NUM 100 // 最大学生数 // 学生结构体 typedef struct { char name[20]; // 姓名 int id; // 学号 float score; // 成绩 } Student; // 学生数组 Student students[MAX_STUDENT_NUM]; int studentNum = 0; // 学生数 // 添加学生信息 void addStudent() { if (studentNum >= MAX_STUDENT_NUM) { printf("学生数已达到最大值,无法添加新学生!\n"); return; } printf("请输入学生姓名:"); scanf("%s", students[studentNum].name); printf("请输入学生学号:"); scanf("%d", &students[studentNum].id); printf("请输入学生成绩:"); scanf("%f", &students[studentNum].score); studentNum++; printf("添加成功!\n"); } // 删除学生信息 void deleteStudent() { int id; printf("请输入要删除的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentNum; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生!\n"); return; } for (int i = index; i < studentNum - 1; i++) { students[i] = students[i + 1]; } studentNum--; printf("删除成功!\n"); } // 修改学生信息 void modifyStudent() { int id; printf("请输入要修改的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentNum; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生!\n"); return; } printf("请输入学生姓名:"); scanf("%s", students[index].name); printf("请输入学生学号:"); scanf("%d", &students[index].id); printf("请输入学生成绩:"); scanf("%f", &students[index].score); printf("修改成功!\n"); } // 查询学生信息 void queryStudent() { int id; printf("请输入要查询的学生学号:"); scanf("%d", &id); int index = -1; for (int i = 0; i < studentNum; i++) { if (students[i].id == id) { index = i; break; } } if (index == -1) { printf("未找到该学生!\n"); return; } printf("姓名:%s,学号:%d,成绩:%.2f\n", students[index].name, students[index].id, students[index].score); } // 显示所有学生信息 void showAllStudents() { printf("姓名\t学号\t成绩\n"); for (int i = 0; i < studentNum; i++) { printf("%s\t%d\t%.2f\n", students[i].name, students[i].id, students[i].score); } } int main() { int choice; while (1) { printf("请选择操作:\n"); printf("1.添加学生信息\n"); printf("2.删除学生信息\n"); printf("3.修改学生信息\n"); printf("4.查询学生信息\n"); printf("5.显示所有学生信息\n"); printf("6.退出程序\n"); scanf("%d", &choice); switch (choice) { case 1: addStudent(); break; case 2: deleteStudent(); break; case 3: modifyStudent(); break; case 4: queryStudent(); break; case 5: showAllStudents(); break; case 6: exit(0); default: printf("无效的选择!\n"); break; } } return 0; } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值