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行少一些。

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

 

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

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值