C语言大作业:2000+行代码的学生成绩管理系统(想要完整源代码请私聊作者)

一、题目(题目有点长,希望没有吓到大家)

(一)学校现状分析

1、某学校有本科生和研究生两类学生,学生信息包括基本资料数据和成绩数据两部分。

A.本科生:基本资料数据包括学号、姓名、性别、专业、班级,学号自动生成,其他全部是输入项;成绩数据包括高数成绩、英语成绩、C语言成绩、总成绩、班级排名、校级排名,其中:高数成绩、英语成绩、C语言成绩为输入项,总成绩、班级排名、校级排名是计算项,班级排名是总成绩在班内的名次,校级排名是总成绩在校内的名次。

B.研究生:基本资料数据包括学号、姓名、性别、专业、班级、研究方向、导师,学号自动生成,其他全部是输入项;成绩数据包括课程综合成绩、论文成绩、总成绩、班级排名、校级排名,其中:课程综合成绩、论文成绩为输入项,总成绩、班级排名、校级排名是计算项,班级排名是总成绩在班内的名次,校级排名是总成绩在校内的名次。

2、现在需要开发一个学生成绩管理系统对学生成绩进行有效管理。

(二)系统的功能要求

数据维护管理:要求对学生的基本资料数据和成绩数据分开管理。基本资料数据的维护管理功能包括添加(批量、单个)、修改、删除、查询等;成绩数据的维护管理功能包括输入(批量、单个)、修改、删除、查询等。

A. 基本资料数据的维护管理

(1).添加:(批量、单个)添加学生基本资料数据。本科生的基本资料数据包括学号、姓名、性别、专业、班级,学号自动生成,其他全部是输入项。研究生的基本资料数据包括学号、姓名、性别、专业、班级、研究方向、导师,学号自动生成,其他全部是输入项

(2).修改:根据学号来修改任意学生的除学号外的其他基本资料数据。

(3).删除:根据学号删除一个学生。

(4).查询:根据学号查询一个学生的基本资料数据。

B. 成绩数据的维护管理

(1).输入:(批量、单个)输入学生成绩数据。成绩数据根据学生类型的不同而有区别,输入的相关数据也应不同。注意:总成绩、班级排名、校级排名是计算项,不能输入。

(2).修改:根据学号来修改任意学生的相关成绩数据(注意:不同类别学生相关数据不同)。

(3).删除:根据学号删除一个学生(不能删除,只需将相关数据项设置成-1)。

(4).查询:根据学号查询一个学生的成绩数据。

(5).计算:批量计算所有学生的总成绩、班级排名、校级排名。注意,只有各项数据都为有效数据时(-1为无效数据),才能计算。

排名功能

A:班级排名:分本科生和研究生两类学生,计算每个学生总成绩在班级中的名次。

B:校级排名:分本科生和研究生两类学生,计算每个学生总成绩在全校中的名次。

排序功能:分本科生和研究生两类人员,实现下列排序功能。

  1. 所有学生信息按总成绩从高到低排序并显示。
  2. 某个班学生信息按总成绩从高到低排序并显示。

查询功能

分本科生和研究生两类人员,实现下列查询功能。

  1. 分页显示全部学生的信息。分页功能:每页显示10条学生的信息,有上一页、下一页、首页和最后一页的功能。
  2. 能够按班级显示本班全部学生信息。注意:无需分页显示。
  3. 能够根据学号或者姓名查询学生信息。
  4. 能够在某个班级中查询某门课成绩不及格学生信息。注意:无需分页显示。

统计功能

分本科生和研究生两类人员,实现下列统计功能。

  1. 统计并显示某门课每个班的平均成绩。如果学生该门课没有成绩,则统计时忽略该生。
  2. 在某个班中统计并显示某门课程不同等级的学生人数。等级标准:优—成绩大于等于90;良—成绩大于等于80且小于90;中:成绩大于等于70且小于80;及格:成绩大于等于60且小于70;不及格:成绩小于60。

(三)系统的实现技术要求

  1. 学生用结构体表示,本科生和研究生分别用两个链表来存储表示。
  2. 必须用文件来存储学生信息。

A.建立本科生和研究生两个文件,分别存放两类学生的信息。

B. 开始运行程序时,从文件中读取学生信息链入到两个不同的链表。

C. 退出程序时将学生信息保存到不同的文件。

D. 主菜单有一个菜单项能够将学生信息保存到文件。

数据约束:

  1. 学号:整型、不能重复、从1开始依次递增、由软件自动计算产生,不能修改。
  2. 性别:男和女,必须使用枚举类型。
  3. 各种成绩:整型,取值范围为0-100。-1表示未有此项成绩。
  4. 其他:至少有两层菜单。

 

二、运行结果视频

视频中展示了程序的一部分功能

C语言大作业:2000+行代码的学生信息管理系统

 

三、作者写代码过程中的一点小感悟

一开始写代码时,我是纯纯地自己敲。敲出来的代码虽然没有语法错误,可就是得不到正确的运行结果。后来才发觉,我的代码写出来有问题,是因为文件的知识没有过关,于是我先去敲了六个与文件有关的程序设计题,也就是我前几天发在CSDN上的那几个题。回头再敲这个大作业,果然熟练多了,代码也能得到正确的运行结果了。

后来听同学说书上有代码的一小部分片段,我就看了书,我的代码和书上的一对比,我发现我写的代码很不专业,不能够很好地处理用户输入的非法数据。于是我模仿书上的代码改进了自己的代码,使其更健壮,更有逻辑性。所以说,不要脱离课本,要多看看专业的、有权威性的代码,不要完全根据自己的“一厢情愿”去敲。

后来敲完了所有代码之后,我开始在主函数中测试我之前编写的自定义函数是否正确,这是一个漫长而且有点痛苦的过程,还好我用的是多文件代码,模块化处理,不然的话调试会花费更长时间。但这也给了我一个教训,以后写有很多个自定义函数的代码时,要写一个函数测试一个函数,如果敲完所有代码再进行测试,那工程量可就大了。

整个程序敲完,我用了2445行代码,但是后来上高数课(没错,不是C语言课)的时候,我灵光乍现,想到了一个排名函数的优化算法,时间复杂度和空间复杂度都能得到优化。于是上完高数课,我就冲回宿舍改代码,改完之后是2319行,但是包含了空行和注释行,净行数会比2319行少一些。

这个程序的成功运行给了我极大的成就感和自信心,在敲代码的过程中也学到了一些经验,可以为后续的学习铺平道路。

 

四、想要完整源代码的小伙伴请私聊我!!!

 

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
这个C++管理系统基本涵盖了“学生成绩管理系统”的所有功能,你可以从中借鉴到C++链表、类、封装、继承、文件操作、排序等等很多知识,极具借鉴意义,以下为本项目的功能介绍: 1. 建立文件 (1)可以使用默认文件名或指定文件名将记录存储到 (2)设置适当的标志位,作为对记录进操作的 (3)写同名文件将覆盖原来文件的 2.增加学生记录 (1) 可在已有记录后面追加新的记录 (2) 可以随时增加新的记录,它们仅保存在向量数组中 (3) 可以将一个文件读入,追加在已有记录之后 (4) 采取文件追加方式时,在没有保存到文件之前,将继续保持文件追加状态,以便实现连续追加操作方式 3. 新建学生信息文件 (1) 用来新建学生信息记录 (2) 如果已经有记录存在,可以覆盖原记录或者在原记录后面追加,也可以将原有记录信息保存 到一个指定文件,然后重新建立记录 (3) 给出相应的提示信息 4. 显示记录 (1) 如果没有记录可供显示,给出提示信息 (2) 可以随时显示内存中的记录 (3) 显示表头 5. 文件存储 (1) 可以按默认名字或指定名字存储记录文件 6. 读取文件 (1) 可以按默认名字或指定名字将记录文件读入内存 (2) 可以将指定或默认文件追加到现有记录的尾部 (3) 可以将文件连续追加到现有记录并更新记录中的“名次” 7. 删除记录 (1) 可以按“学号”、“姓名”或“名次”方式删除记录 (2) 标志将被删除的记录, 可以再次取消标志, 经确认后删除已经标志的记录(3) 如果记录是空表, 删除时应给出提示信息并返回主菜单 (4) 如果没有要删除的信息, 输出“没有找到”的信息 (5) 更新其他记录的名次 (6) 删除操作仅限于内存, 只有执行存储操作时, 才能覆盖原记录 8. 修改记录 (1) 可以按“学号”、“姓名”或“名次”方式查找要修改的记录内容 (2) 给出将被修改记录的信息, 经确认后进修改 (3) 如果记录已经是空表,应给出提示信息并返回主菜单 (4) 如果没有找到需要修改的信息, 输出“没有找到”的信息 (5) 更新其他记录的名次 (6) 修改操作仅限于内存, 只有执行存储操作时, 才能覆盖原记录 9. 查询记录 (1) 可以按“学号”、“姓名”或“名次”方式查询记录 (2) 能给出查询记录的信息 (3) 如果查询的信息不存在, 输出提示信息 10. 对记录进排序 (1) 可以按”学号”进升序和降序排列 (2) 可以按”姓名”进升序和降序排列 (3) 可以按”名次”进升序和降序排列 (4) 如果属于选择错误, 可以立即退出程序
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值