最近可能是接近考试,有小伙伴微信私聊让找个学生成绩管理系统,今天发一下,比较简洁。

案例描述

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

  1. 添加学生信息,包括学号、姓名、语文成绩、数学成绩;
  2. 显示学生信息,将所有学生信息打印输出;
  3. 修改学生信息,可以根据姓名查找到学生,然后可以修改学生姓名、成绩项;
  4. 删除学生信息,根据学号查找到学生,将其信息删除;
  5. 查找学生信息,根据学生姓名,将其信息打印输出;
  6. 按学生总成绩进行从高到低排序。

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

学生成绩管理系统

案例分析

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

  1. 添加记录——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');}

  1. 显示记录——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);}

  1. 修改记录——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");}

  1. 删除记录——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");}

  1. 查找记录——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");}

  1. 排序——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文件中执行。

  1. 定义student.h文件在student.h文件中定义项目需要的变量与函数声明。在定义变量时,因为学生信息包括学号、姓名和成绩等不同数据类型的属性,所以需要定义一个学生类型的结构体。在存储学生信息时,可选用数组、字符串指针,考虑到学生要根据总成绩来排序,为方便排序,我们选用数组来存储学生信息。
struct student{    int  id;               // 学号    char name[8];  //姓名    int chinese;     //计算机基础成绩    int math;         //数据结构成绩    int sum;          //总分};
  1. 定义student.c文件在student.c文件中实现各个功能函数。

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

备注:公众号回复“学生成绩管理系统”获取完整代码

最近原创推荐

字符串操作的全面总结

代码防御性编程的十条技巧

九种查找算法

十大经典排序算法(动态演示+代码)

C语言与C++面试知识总结

数据结构之堆栈

一文轻松理解内存对齐

点【在看】是最大的支持 

c语言数组用户注册登入管理系统_学生成绩管理系统案例相关推荐

  1. C语言链表学生成绩制作成链表,C语言程序设计课程设计基于链表的学生成绩管理系统.doc...

    C语言程序设计课程设计基于链表的学生成绩管理系统 华北科技学院计算机系综合性实验报告 PAGE 第 PAGE 10 页 华北科技学院计算机系综合性实验 实 验 报 告 课程名称 C语言程序设计 实验学 ...

  2. 成绩管理系统c语言流程图,C语言可视化程序课程的设计:学生成绩管理系统.doc...

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspC/C++资料 C语言可视化程序课程的设计:学生成绩管理系统.d ...

  3. C语言基础篇02:单链表实现学生成绩管理系统

    单链表实现学生成绩管理系统 前言 需求分析 详细设计 增加成绩信息 删除成绩信息 修改成绩信息 查询学生信息和浏览学生信息 总结 前言 上篇已经讲过单链表的基本实现,这篇将以一个简单的管理系统入手. ...

  4. 基于go语言的史上最流弊的学生成绩管理系统

    简介 一个基于go语言的学生成绩管理系统,没有花里胡哨的界面,但有你想象不到的功能:没有mysql,redis做支撑,但文件管理也不赖 :没有高大上的高级语法,但经验告诉我:大道至简! 刚刚学习完go ...

  5. python学生管理系统设计实验报告_学生成绩管理系统实验报告(新鲜出炉)

    C语言课程设计报告 源码下载方式 关注微信公众号 跨时代的jay 回复 学生成绩管理系统 为大家提供一些帮助! 获取链接后复制到浏览器即可下载 课题题目: 学生信息管理系统 班 级: 信卓11801 ...

  6. 学生成绩管理系统mysql课程设计_学生成绩管理系统数据库课程设计报告.doc

    目 录 TOC \o "1-2" \h \z \u HYPERLINK \l "_Toc303696065" 1.开发背景 PAGEREF _Toc303696 ...

  7. Java根据学号提取班级_学生成绩管理系统 1. 能够实现根据以下关键字查询:学生姓名 、学号、班级、课 联合开发网 - pudn.com...

    学生成绩管理系统 所属分类:Java编程 开发工具:Java 文件大小:1204KB 下载次数:0 上传日期:2020-12-06 16:50:53 上 传 者:sunyue111 说明:  1. 能 ...

  8. php有成绩预警的学生管理系统,PHP学生成绩管理系统

    学生成绩管理是每一个学校都会面临的一个问题,传统的管理模式已经明显到和时代不同步.通过我对当前学校成绩管理的需求和自己的实习经验整理出了一个能够满足大多数学校的学生成绩管理系统.本系统分为管理人员,教 ...

  9. 数据库成绩管理系统Mysql_学生成绩管理系统数据库模板1.doc

    学生成绩管理系统数据库模板1 计算机系综合性实验 <数据库课程设计>设计报告 设计题目 实验学期 至 学年第 学期 学生所在系部 年级 专业班级 学生姓名 学号 任课教师 实验成绩 计算机 ...

最新文章

  1. 自动检索、修复Python代码bug,微软推出DeepDebug
  2. 跟我学算法聚类(kmeans)
  3. Linux的RPM管理
  4. JS字符转为json对象
  5. OpenCV4每日一练day10:图像校正
  6. 一场谷歌与苹果的合作:TensorFlow Lite开始支持Core ML
  7. 使用ApiPost测试接口时需要先登录的接口怎么办(基于Cookie)?
  8. int 转换成 string 四种方法你们喜欢用那种呢?
  9. C++ 调用 python
  10. VMware虚拟机、centos以及securecrt的安装
  11. Linux中的jobs、fg与bg命令
  12. 计算机维汉输入法表格,维语输入法
  13. 浅谈安全攻防场景下面的安全检测
  14. 项目管理java_java项目管理经验总结
  15. 如何选择和使用现货白银
  16. 走进脑计划(四):linux下安装SPM、DPABI
  17. caj转word是怎么进行转换的
  18. 一篇文让你看懂NB-IoT、LoRa、eMTC、Sigfox及ZigBee的应用场景
  19. App Thinning研究
  20. androidQ系统新特性

热门文章

  1. jquery仿搜狐投票动画代码
  2. 高性能web系统的架构和系统优化
  3. null 和{}的那点事
  4. C#数字日期转成中文日期
  5. C++11多线程03
  6. https://gogs.io/
  7. tablix“Tablix1”有一个具有内部成员的详细信息成员
  8. 设置View的四个角为圆角
  9. 从些知道公钥密钥了,呜呜,激动ing~
  10. 重写render,利用ClientScript,在客户端注册select,回发到服务器,触发服务器端的行选择事件。...