苏小红版 c语言程序设计(第三版)系列实验题:学生成绩管理系统V6.0

2023-11-10

github:https://github.com/Jackie0Feng/SAMS
#系统需求描述

某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目最多不超过6门(具体门数由键盘输入)。学生成绩管理系统是一个非常实用的程序,如果能把用户输入的数据存盘,下次运行时独处,就更有用了。增加文件读写的功能编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号,姓名和各科考试成绩;
(2)计算每门课程的总分和平均分;
(3)计算每个学生的总分和平均分
(4)按每个学生的总分由高到低排出名次表;
(5)按每个学生的总分由低到高排出名次表;
(6)按学号由小到大排出成绩表;
(7)按姓名的字典顺序排出成绩表;
(8)按学号查询学生排名及其各科考试成绩;
(9)按姓名查询学生排名及其各科考试成绩;
(10)按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;
(11)输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。
(12)将每个学生的记录信息写入文件。
(13)从文件中读出每个学生的记录信息并显示。
要求程序运行后先显示如下菜单,并提示用户输入选项:
1.Input record
2.Caculate total and average score of every course
3.Caculate total and average score of every student
4.Sort in descending order by total score of every student
5.Sort in ascending order by total score of every student
6.Sort in ascending order by number
7.Sort in dictionary order by name
8.Search by number
9.serch by name
10.Statistic analysis
11.List record
12.Write to a file
13.Read from a file
0.Exit
Please enter your choice:
根据用户输入的选项执行相应的操作
实验目的:在学生管理系统V4.0的基础上,通过增加任务要求,熟悉文件的基本操作,模块化程序设计,增量测试方法。

#顶层设计
最后一个版本就是添加文件功能,其实就是简单的讲我们的数据存储下来,以后要用的时候不用输入了,而是从本地读取。连文件管理都算不上,不过这就算操作系统的最基础的文件管理功能了。以后回看操作系统知识时脑中的概念会更加具象。

/*程序功能:   学生成绩管理
编码者:   JackieFeng
日期:  14/11/2021
版本号:6.0
备注:
某班有最多不超过30人(具体人数由键盘输入)参加期末考试,考试科目最多不超过6门(具体门数由键盘输入)。
学生成绩管理系统是一个非常实用的程序,如果能把用户输入的数据存盘,下次运行时独处,就更有用了。
增加文件读写的功能编程实现如下菜单驱动的学生成绩管理系统:
(1)录入每个学生的学号,姓名和各科考试成绩;
(2)计算每门课程的总分和平均分;
(3)计算每个学生的总分和平均分
(4)按每个学生的总分由高到低排出名次表;
(5)按每个学生的总分由低到高排出名次表;
(6)按学号由小到大排出成绩表;
(7)按姓名的字典顺序排出成绩表;
(8)按学号查询学生排名及其各科考试成绩;
(9)按姓名查询学生排名及其各科考试成绩;
(10)按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;
(11)输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。
(12)将每个学生的记录信息写入文件。
(13)从文件中读出每个学生的记录信息并显示。*/
#include <stdio.h>
#include "SAMS.h"
#include <string.h>
#include <stdlib.h>
//#pragma warning(disable : 4996)

int main()
{
    int order = -1;//用户指令
    
    /*int n;
    long num[STU_NUM];
    float score[STU_NUM];*/
    //初始数据
    int n = 5;//学生人数
    int m = 3;//课程数

    long num[STU_NUM] = { 10001,10002,10003,10004,10005 };
    char name[][MAX_LEN] = { "tom","jack","bill","amy","jackie" };
    float score[STU_NUM] = { 20.0,80.0,50.0,66.0,95.0 };
    float score2[STU_NUM][COURSE_NUM] = { {20.0,80.0,50.0},//2表示二维
                                                                        {66.0,95.0,77.0},
                                                                        {63.0,77.0,81.0},
                                                                        {86.0,43.0,72.0},
                                                                        {96.0,95.0,89.0} };
    /*这次改变了一个字段,将一维的课程升级为了二维数组,
    又新增了一个功能统计每个学生所有课程的平均分和总分,
    所以需要新增两个一维数组sum[],aver[]存储一下此信息.*/
   /* float sum[STU_NUM] = { 0 };
    float aver[STU_NUM] = { 0 };*/
    //AverSumofEveryStudent(score2, sum, aver, n, m);

    //初始化结构体数组数据
    STU students[STU_NUM];
    for (int i = 0; i < n; i++)
    {
        students[i].num = num[i];
        strcpy_s(students[i].name, MAX_LEN, name[i]);
        for (int j = 0; j < m; j++)
        {
            students[i].score[j] = score2[i][j];
        }
    }
    AverSumofEveryStudent(students, n, m);

    Mean();//显示菜单
    //使用系统
    while (1)
    {
        printf("Please enter your choice : \n");
        scanf_s("%d", &order);
        getchar();//读走缓存里的回车符
        switch (order)
        {
        case 1://录入成绩
            //n = ReadScore(num, score, n);
            n = ReadScore(students, n, m);
            AverSumofEveryStudent(students, n, m);//每次录入结束后都得重新计算
            break;
        case 2://计算每门课程的总分和平均分;
            AverSumofEveryCourse(students, n, m);
            break;
        case 3://计算每个学生的总分和平均分
            AverSumofEveryStudent(students, n, m);
            printf("已经重新计算总分和平均分\n");
            break;
        case 4://按每个学生的总分由高到低排出名次表;
            SortbyScore(students, n, m, Descending);
            printf("Descendingly scorted by scores:\n");
            PrintScore(students, n, m);
            break;
        case 5://按每个学生的总分由低到高排出名次表;
            SortbyScore(students, n, m, Ascending);
            printf("Ascendingly scorted by scores:\n");
            PrintScore(students, n, m);
            break;
        case 6://按学号升序排名
            SortbyNum(students, n, m, Ascending);
            printf("Ascendingly scorted by num:\n");
            PrintScore(students, n, m);
            break;
        case 7://按姓名的字典顺序排出成绩表;
            SortbyName(students, n, m);
            printf("Dictionarily scorted by name:\n");
            PrintScore(students, n, m);
            break;
        case 8://按学号查询学生排名及其各科考试成绩;
            SearchbyNum(students, n, m);
            break;
        case 9://按姓名查询学生排名及其各科考试成绩;
            SearchbyName(students, n, m);
            break;
        case 10://按优秀(90- 100)、良好(80- 89)、中等(70-79)、及格(60- 69)、不及格(0-59)5个类别,
                   //统计每个类别的人数以及所占的百分比;
            StatistAnalysis(students, n, m);
            break;
        case 11://输出每个学生的学号、姓名,各科考试成绩,总分,平均分,以及每门课程的总分和平均分。
            PrintScore(students, n, m);
            AverSumofEveryCourse(students, n, m);
            break;
        case 12://将每个学生的记录信息写入文件。
            puts("正在写入students.txt文件");
            WritetoFile(students, n, m);
            break;
        case 13://从文件中读出每个学生的记录信息并显示。
            STU  studentsNew[STU_NUM];
            ReadfromFile(studentsNew, n, m);
            puts("新文件内容如下");
            PrintScore(studentsNew, n, m);
            break;
        case 0://退出系统
            printf("Good Bye!\n");
            exit(0);//建议main函数用exit(0)表示正常结束
        default:
            Mean();
            break;
        }
    }
}

int Mean(void)
{
    printf("1.Input record\n");
    printf("2.Caculate total and average score of every course\n");
    printf("3.Caculate total and average score of every student\n");
    printf("4.Sort in descending order by total score of every student\n");
    printf("5.Sort in ascending order by total score of every student\n");
    printf("6.Sort in ascending order by number\n");
    printf("7.Sort in dictionary order by name\n");
    printf("8.Search by number\n");
    printf("9.Search by name\n");
    printf("10.Statistic analysis\n");
    printf("11.List record\n");
    printf("12.Write to a file\n");
    printf("13.Read from a file\n");
    printf("0.Exit\n");
    printf("666.Show mean\n");
    return 0;
}

头文件

/*
函数名称:   WritetoFile
功能描述:   将每个学生的记录信息写入文件
参数:
    STU students:学生结构体数组
    n:总人数
    m:课程总数
返回:
备注:*/
void WritetoFile(STU students[], int n, int m);
/*
函数名称:   ReadfromFile
功能描述:   从文件中读出每个学生的记录信息并显示
参数:
    STU students:学生结构体数组
    n:总人数
    m:课程总数
返回:
备注:*/
void ReadfromFile(STU students[], int n, int m);

#具体实现

void WritetoFile(STU students[], int n, int m)
{
    FILE* fp;
    if (fopen_s(&fp,"students.txt", "w") != 0)
    {
        puts("文件打开失败");
        exit(0);
    }
    else//按数据块读写文件
    {
        int num = fwrite(students, sizeof(STU), n, fp);
        printf("成功写入%d条数据\n", num);
        fclose(fp);
    }
}

void ReadfromFile(STU students[], int n, int m)
{
    FILE* fp;
    if (fopen_s(&fp, "students.txt", "r") != 0)
    {
        puts("文件打开失败");
        exit(0);
    }
    else//按数据块读写文件
    {
        int num = fread(students, sizeof(STU), n, fp);
        printf("成功写入%d条数据\n", num);
        fclose(fp);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

苏小红版 c语言程序设计(第三版)系列实验题:学生成绩管理系统V6.0 的相关文章

  • 【计算机毕业设计】电影播放平台

    电影播放平台采用B S架构 数据库是MySQL 网站的搭建与开发采用了先进的java进行编写 使用了springboot框架 该系统从两个对象 由管理员和用户来对系统进行设计构建 主要功能包括 个人信息修改 对用户 电影分类 电影信息等功能
  • 【计算机毕业设计】白优校园社团网站的设计与实现

    近些年 随着中国经济发展 人民的生活质量逐渐提高 对网络的依赖性越来越高 通过网络处理的事务越来越多 随着白优校园社团网站的常态化 如果依然采用传统的管理方式 将会为工作人员带来庞大的工作量 这将是一个巨大考验 需要投入大量人力开展对社团
  • 【C++】__declspec含义

    目录 一 declspec dllexport 如果这篇文章对你有所帮助 渴望获得你的一个点赞 一 declspec dllexport declspec dllexport 是 Microsoft Visual C 编译器提供的一个扩展
  • 华为OD统一考试 Python【数字转化】

    描述 我们想要一种特殊的整数编码方式 让数字小的时候 编码占的空间也小 编码的方法如下 我们每7位组成一部分来编码 在每个字节里 用前7位来存数字 如果后面还有数据 最高的那一位就是1 否则就是0 数据要按小端序保存 也就是说 小的数据部分
  • Hutool改变我们的coding方式(二)

    Hutool改变我们的coding方式 Hutool 简介 Hutool如何改变我们的coding方式 文档 安装 Maven
  • 史上最全Java面试八股文(带全部答案)2024年最新版

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • 计算机Java项目|springboot校园台球厅人员与设备管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|在线图书管理

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • Python 文件的复制重命名以及xlsx文件中表格分开保存

    1 需要的头文件 import shutil import os import openpyxl 2 复制文件以及重命名 直接使用shutil库复制 重命名 移动即可 函数封装示例 source path 为全局变量被复制文件路径 dest
  • 计算机Java项目|学生成绩管理系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 计算机Java项目|电影购票系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 面试官:分库分表后如何生成全局ID?

    分库分表后就不能使用自增 ID 来作为表的主键了 因为数据库自增 ID 只适用于单机环境 但如果是分布式环境 是将数据库进行分库 分表或数据库分片等操作时 那么数据库自增 ID 就会生成重复 ID 从而导致业务查询上的问题 所以此时 可以使
  • 详解Java信号量-Semaphore

    第1章 引言 大家好 我是小黑 今天 咱们一起来深入探讨一下Semaphore 在Java中 正确地管理并发是一件既挑战又有趣的事情 当谈到并发控制 大家可能首先想到的是synchronized关键字或者是ReentrantLock 但其实
  • JCMsuite应用:光学环形谐振腔模拟

    本案程演示了环形谐振腔的模拟 这种类型的集成光子器件 例如用作升 降滤波器或在传感应用中 当物质或粒子附着在环上时 通过测量其共振频率的位移来检测 对于集成光子电路中的无源光器件 s矩阵通常是研究的热点 它描述了通过端口 波导进入设备的电磁
  • 【路径规划】基于改进遗传算法求解机器人栅格地图路径规划(Matlab实现实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现
  • 【一种新的Burton-Miller型奇异边界方法(BM-SBM)】用于声学设计灵敏度分析,2D和3D声学设计灵敏度分析的奇异边界方法研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 2D 2 2 3D
  • 计算机Java项目|有机蔬菜商城

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板
  • 2024最强Java面试八股文合集(持续更新)

    今天要谈的主题是关于求职 求职是在每个技术人员的生涯中都要经历多次 对于我们大部分人而言 在进入自己心仪的公司之前少不了准备工作 有一份全面细致 面试题 将帮助我们减少许多麻烦 在跳槽季来临之前 特地做这个系列的文章 一方面帮助自己巩固下基
  • Java开发中不要使用受检异常

    简介 Java是唯一 主流 实现了受检异常概念的编程语言 一开始 受检异常就是争议的焦点 在当时被视为一种创新概念 Java于1996年推出 如今却被视不良实践 本文要讨论Java中非受检异常和受检异常的动机以及它们优缺点 与大多数关注这个
  • 计算机Java项目|java游戏账号交易系统

    作者简介 Java领域优质创作者 CSDN博客专家 CSDN内容合伙人 掘金特邀作者 阿里云博客专家 51CTO特邀作者 多年架构师设计经验 腾讯课堂常驻讲师 主要内容 Java项目 Python项目 前端项目 人工智能与大数据 简历模板

随机推荐

  • 工作日志【 SQL内部规范-ETL银行项目 】

    工作日志 SQL内部规范 ETL银行项目 一 表结构设计 建表时 首先要确定表的业务唯一键 即该表的唯一索引由哪些字段构成 不建议创建没有唯一索引的表 如果要修改表的唯一索引 一定要严格评审 前台 表结构变更 F层的表需要通知JAVA开发
  • SpringCloud项目下使用分布式事务seata TCC模式与AT模式例子

    SpringCloud项目下使用分布式事务seata TCC模式与AT模式例子
  • 3-2 特征二值化

    特征二值化 请参考 数据准备和特征工程 中的相关章节 调试如下代码 基础知识 import pandas as pd pm25 pd read csv home aistudio data data20505 pm2 csv pm25 he
  • 使用Flex&Bison创建新的编程语言

    编译器基本流程 对源文件进行扫描 将源文件的字符流拆分分一个个的词 记号 此为词法分析 根据语法规则将这些记号构造出语法树 此为语法分析 对语法树的各个节点之间的关系进行检查 检查语义规则是否被违背 同时对语法树进行必要的优化 此为语义分析
  • 苹果个人公司类型开发者账号申请(99美元)详解

    最近有用 记录一下 谈到苹果开发者账号 我们需要区分一下个人账号 公司账号和企业账号这三种 还有一种是教育账号 这个就不多说了 个人账号 个人申请用于开发苹果app所使用的账号 仅限于个人使用 申请比较容易 99 公司账号 以公司的名义申请
  • jqgrid 自定义搜索的实现 , 后台实现

    好久没写过博客了 新入职公司比较忙 咳咳 其实是比较懒 最近公司要求做一个后台 于是直接巴拉了bootstrap 的ace折叠菜单改造了下 由于大部分都是数据交互 频繁使用了 ace中包含的 jqgrid 要做后台的朋友可以去搜索一下ace
  • C#中@的用法总结(转)

    本文实例汇总了C 中 的用法 对C 程序设计来说有不错的借鉴价值 具体如下 一 字符串中的用法 1 学过C 的人都知道C 中字符串常量可以以 开头声名 这样的优点是转义序列 不 被处理 按 原样 输出 即我们不需要对转义字符加上 反斜扛 就
  • libxlsxwriter初体验

    C 如何写Excel 大家时间都这么宝贵 没有起因的问题是不值得被优先研究的 这篇博客的起因就是希望找到一个比较合适于C 的开源库 用以在C 中生成Excel文档 其实C 可用的开源Excel库 很多博主都已经撰文提及 例如 c 操作exc
  • 第六篇 TCP协议

    1 专业名词缩写 应用层头 ah Application Header 表示层头 ph Presentation Header 会话层头 sh Session Header 传输层头 th Transport Header 网络层头 nh
  • cJson数组的生成与解析

    cJson数组的生成与解析 cJosn官方源码地址 https sourceforge net projects cjson 使用json偶尔会遇到数组 每次都要去查相关函数 去解析或者生成 在此做一次记录 方便以后使用 按照我自己的使用习
  • 基于opencv视觉图像处理的巡线小车设计(stm32+树莓派+usb摄像头)

    功能说明 1 视觉巡线 usb摄像头 opencv 2 遇到红灯停车 红灯出现在小车右前方时 3 固定动作避障 光电对管 4 按键启动 急停 4 按键调整运行速度 资料说明 本小车图像处理部分在树莓派中实现 小车控制部分在stm32中实现
  • android ListView 滚动加载item

    悉Android的朋友们都知道 不管是微博客户端还是新闻客户端 都离不开列表组件 可以说列表组件是Android数据展现方面最重要的组件 我们今天就要讲一讲列表组件ListView加载数据的相关内容 通常来说 一个应用在展现大量数据时 不会
  • ArcGis系列-java发布空间表为地图服务(map)

    1 实现思路 使用java调用cmd命令执行python脚本 python环境使用arcgis pro安装目录下的 ArcGIS Pro bin Python envs arcgispro py3 作为地图服务应该可以支持添加样式文件 发布
  • 分布式定时任务

    本文引用了谷粒商城的课程 定时任务 定时任务是我们系统里面经常要用到的一些功能 如每天的支付订单要与支付宝进行对账操作 每个月定期进行财务汇总 在服务空闲时定时统计当天所有信息数据等 定时任务有个非常流行的框架Quartz和Java原生AP
  • Latex技巧(持续更新)(\newcommand{}{})

    自定义一个新命令 newcommand tcr textcolor red 为了方便设置文本颜色为红色而定义的简化命令 code documentclass article usepackage xcolor newcommand tcr
  • Protobuf之proto文件编写规则

    一 简单介绍 protobuf文件 就是定义你要的消息 类似java中的类 和消息中的各个字段及其数据类型 类似java类中的成员变量和他的数据类型 二 Protobuf消息定义 1 消息由至少一个字段组合而成 类似于C语言中的结构 每个字
  • 【Docker】docker 执行 apt-get E: Could not open lock file /var/lib/dpkg/lock - open

    1 背景 mac下安装了docker 然后用docker 安装了grafana软件 然后进入grafana base lcc lcc prometheus docker exec it 4b5f517f4340 bash grafana 4
  • Python运维开发(CMDB管理系统)——常用函数

    内置函数 len 返回容器中item的数量 sum 计算可迭代对象的和 字符串不可以和数字相加 str 把其他类型转换成字符串 int 把其他类型转换成int max min 求列表中的最大值或者最小值 range 返回一个可迭代对象 ra
  • Python 删除列表中的'\n'和空格

    要爬取的span标签下的价格730 用的是xpath获取内容 但爬取的结果为 把 i 标签以及后面的div也爬取下来了 导致这部分为 n 和空格 很显然 这不是我要的结果 想过先用xpath 再用正则表达式匹配数字 但一直提示类型不一致 因
  • 苏小红版 c语言程序设计(第三版)系列实验题:学生成绩管理系统V6.0

    github https github com Jackie0Feng SAMS 系统需求描述 某班有最多不超过30人 具体人数由键盘输入 参加期末考试 考试科目最多不超过6门 具体门数由键盘输入 学生成绩管理系统是一个非常实用的程序 如果