为学弟学妹整理的学生成绩管理系统案例,适合小白

简介: 为学弟学妹整理的学生成绩管理系统案例,适合小白

案例描述


案例要求模拟开发一个学生成绩管理系统,此系统具有以下功能:


添加学生信息,包括学号、姓名、语文成绩、数学成绩;


显示学生信息,将所有学生信息打印输出;


修改学生信息,可以根据姓名查找到学生,然后可以修改学生姓名、成绩项;


删除学生信息,根据学号查找到学生,将其信息删除;


查找学生信息,根据学生姓名,将其信息打印输出;


按学生总成绩进行从高到低排序。


程序员必备资源,值得收藏!点击下载


这些功能之间的逻辑关系如下图所示:

image.png



案例分析


分析案例需求可知,该系统首先会向用户展现一个菜单选择界面,用户可以根据菜单界面的提示,选择不同的功能进入子界面,因此可以针对每一个功能定义一个函数,通过函数调用实现相应功能。由系统需求可知,该系统主要有6大功能,因此需要定义6个函数。


添加记录——add()函数当用户在功能菜单中选择数字1时,会调用add()函数进入添加记录模块,提示用户输入学生的学号、姓名、计算机基础成绩、数据结构成绩。当用户输入完毕后,会提示用户是否继续添加,Y表示继续,N表示返回。需要注意的是,在添加学号时不能重复,如果输入重复的学号就会提示此学号已存在。


void add(struct student stu[])
{
    int i, id = 0; //i作为循环变量,id用来保存新学号
    char quit;  //保存是否退出的选择
    do
    {
        printf("学号:");
        scanf("%d", &id);
        for (i = 0; i < n; i++)
        {
             if (id == stu[i].id)
            {
                printf("此学号存在!\n");
                 return;
            }
        }
       stu[i].id = id;
       printf("姓名:");
       scanf("%s", &stu[i].name);
       printf("计算机基础成绩:");
       scanf("%d", &stu[i].chinese);
       printf("数据结构成绩:");
       scanf("%d", &stu[i].math);
       stu[i].sum = stu[i].chinese + stu[i].math;
       n++;  //记录条数加1
       printf("是否继续添加?(Y/N)");
       scanf("\t%c", &quit);
    } while (quit != 'N');
}

显示记录——showAll()函数当用户在功能菜单中选择数字2时,会调用show()函数进入显示记录模块,并向控制台输出录入的所有学生的学号、姓名、数据结构成绩、计算机基础成绩和成绩总和。


void show(struct student stu[], int i)
{
    printf("%-10d", stu[i].id);
    printf("%-10s", stu[i].name);
    printf("%-10d", stu[i].chinese);
    printf("%-10d", stu[i].math);
    printf("%-10d\n", stu[i].sum);
}

修改记录——modify()函数当用户在功能菜单中选择数字3时,会调用modify()函数进入修改记录模块,输入要修改的学生姓名,当用户输入了已录入的学生姓名后,如果学生信息存在即可修改除学号以外的其他信息,否则输出没有找到该生的记录。


void modify(struct student stu[])
{
    char name[8], ch;
    int i;
    printf("修改学生的记录。\n");
    printf("请输入学生的姓名:");
    scanf("%s", &name);
    for (i = 0; i < n; i++)
    {
        if (strcmp(name, stu[i].name) == 0)
        {
             getchar();
             printf("找到该生的记录,如下所示:\n");
             HH;  //显示记录的标题
             show(stu, i);
             printf("是否修改?(Y/N)\n");
            scanf("%c", &ch);
            if (ch == 'Y' || ch == 'y')
            {
                 getchar();
                 printf("姓名:");
                 scanf("%s", &stu[i].name);
                 printf("计算机基础成绩:");
                 scanf("%d", &stu[i].chinese);
                 printf("数据结构成绩:");
                 scanf("%d", &stu[i].math);
                 stu[i].sum = stu[i].chinese + stu[i].math;
                 printf("修改完毕。\n");
            }
            return;
        }
    }
    printf("没有找到该生的记录。\n");
}

删除记录——del()函数当用户在功能菜单中选择数字4时,会调用del()函数进入删除记录模块,对学生学号进行判断,如果学号存在即可删除该生的所有信息,否则输出没有找到该生的记录。


void del(struct student stu[])
{
    int id, i;
    char ch;
    printf("删除学生的记录。\n");
    printf("请输入学号:");
    scanf("%d", &id);
    for (i = 0; i < n; i++)
    {
        if (id == stu[i].id)
        {
            getchar();
            printf("找到该生的记录,如下所示:\n");
            HH;  //显示记录的标题
            show(stu, i);   //显示数组stu中的第i条记录
            printf("是否删除?(Y/N)\n");
            scanf("%c", &ch);
            if (ch == 'Y' || ch == 'y')
            {
                 for (; i < n; i++)
                     // 被删除记录后面的记录均前移一位
                     stu[i] = stu[i + 1];
                     n--;   //记录总条数减1
                     printf("删除成功!");
            }
            return;
        }
    }
    printf("没有找到该生的记录!\n");
}

查找记录——search()函数当用户在功能菜单中输入数字5时,会调用search()进入查找记录模块,在该模块中输入查找的学生姓名,如果该学生存在则输出该学生的全部信息,否则输出没有找到该生的记录。


void search(struct student stu[])
{
    char name[8];
    int i;
    printf("查找学生的记录。\n");
    printf("请输入学生的姓名:");
    scanf("%s", &name);
    for (i = 0; i < n; i++)
    {
        if (strcmp(name, stu[i].name) == 0)
        {
             printf("找到该生的记录,如下所示:\n");
             HH;  //显示记录的标题
             show(stu, i); //显示数组stu中的第i条记录
            return;
        }
    }
    printf("没有找到该生的记录。\n");
}

排序——sort()函数当用户在功能菜单中输入数字6时,会调用sort()函数进入排序记录模块,该模块会输出所有学生的信息,并按总成绩由高到低进行排序。

void sort(struct student stu[])
{
    int i, j;
    struct student t;
    printf("按总成绩进行排序,");
    for (i = 0; i < n - 1; i++)
    {
        for (j = i + 1; j < n; j++)
        {
            if (stu[i].sum < stu[j].sum)
            {
                 t = stu[i];
                 stu[i] = stu[j];
                 stu[j] = t;
            }
        }
    }
    printf("排序结果如下:\n");
    showAll(stu); //显示排序后的所有记录
}

案例实现


由于该系统需要定义6个函数,而且还涉及变量,代码较多,因此可以分文件实现该系统,将函数声明与定义在头文件student.h中实现,函数实现在student.c文件中完成,函数调用在main.c文件中执行。


定义student.h文件在student.h文件中定义项目需要的变量与函数声明。在定义变量时,因为学生信息包括学号、姓名和成绩等不同数据类型的属性,所以需要定义一个学生类型的结构体。在存储学生信息时,可选用数组、字符串指针,考虑到学生要根据总成绩来排序,为方便排序,我们选用数组来存储学生信息。


struct student
{
    int  id;               // 学号
    char name[8];  //姓名
    int chinese;     //计算机基础成绩
    int math;         //数据结构成绩
    int sum;          //总分
};

定义student.c文件在student.c文件中实现各个功能函数。


定义main.c文件在main.c文件中,定义保存学生信息的结构体数组,构建学生成绩管理系统主界面,使用while(1)循环控制是否退出系统,在while循环中使用switch语句判断用户所选择的功能,根据用户选择的功能调用相应的函数。


相关文章
|
5月前
|
存储 编解码 网络协议
一文搞懂:专升本招生考试应试宝典之计算机基础知识(下)
一文搞懂:专升本招生考试应试宝典之计算机基础知识(下)
|
6月前
|
前端开发 程序员 开发工具
2024年最全0基础程序员如何快速进阶成为编程老司机?_码农速成(2),字节跳动面试攻略
2024年最全0基础程序员如何快速进阶成为编程老司机?_码农速成(2),字节跳动面试攻略
2024年最全0基础程序员如何快速进阶成为编程老司机?_码农速成(2),字节跳动面试攻略
|
6月前
|
算法
覃超老师 算法面试通关40讲
无论是阿里巴巴、腾讯、百度这些国内一线互联网企业,还是 Google、Facebook、Airbnb 等硅谷知名互联网公司,在招聘工程师的过程中,对算法和数据结构能力的考察都是重中之重。本课程以帮助求职者在短时间内掌握面试中最常见的算法与数据结构相关知识点,学会面试中高频算法题目的分析思路,同时给大家从面试官的角度来分析算法题的解答技巧,从而更有效地提升求职者的面试通过率。
52 3
覃超老师 算法面试通关40讲
|
6月前
|
移动开发 前端开发 JavaScript
【前端面试】前端面试题300道~~熬夜吐血整理,2024年最新大厂面试经验分享稿
【前端面试】前端面试题300道~~熬夜吐血整理,2024年最新大厂面试经验分享稿
|
6月前
|
机器学习/深度学习 物联网 定位技术
保研夏令营面试、考研复试自我介绍、个人展示模板与撰写注意事项
保研夏令营面试、考研复试自我介绍、个人展示模板与撰写注意事项
323 1
|
存储 算法 数据安全/隐私保护
【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)
【强烈推荐收藏】坚持3个月爆肝华为机试108题C++全解(适合新手入门,就业必刷套题)
215 2
|
C++
2023-1-10-C++知识点宝藏文章
2023-1-10-C++知识点宝藏文章
43 0
|
JavaScript 前端开发 Java
【程序员小白入门】这几个宝藏菜鸟教程网站记得收藏!!!
其实菜鸟教程相关的网站内容都大同小异,推荐这几个原因是页面交互比较简单,重要的是没有任何广告。
|
存储 编解码
数电/数字电子技术期末考前突击复习(小白稳过,看这一篇就够了)
期末考试必过and不挂科and争高分😶‍🌫️还有其他科目的考试突击日后会陆续更新
249 0
|
前端开发 小程序 网络协议
面试刷题哪里找?这个软件测试题库小程序太香了!
现如今,不仅学习卷、考证卷,就连找工作也开始卷得没边了。就如最近几年新崛起的软件测试岗位,很多人为了能过快速通过面试,或者拿到offer,纷纷在面试前几周左右,不惜花重金,购买面试题目,开始疯狂地刷题、背题。
279 0