Skip to content

Latest commit

 

History

History
165 lines (118 loc) · 10.4 KB

README.md

File metadata and controls

165 lines (118 loc) · 10.4 KB

使用说明

这是一个包含输入学生信息,课程信息,分数功能,增加删除修改学生,课程信息功能,排序,统计,查询,打印功能的学生成绩管理系统

点击此处下载exe文件免去编译过程。

由于每次运行需要重新输入学生信息,课程信息,成绩信息,不便于快速展示功能。

故将示例输入信息列在下方便测试。

运行exe文件后,将以下内容粘贴在弹出的终端然后回车(包括第一个空格和所有换行):

 1 1 5
201911082434 Tom m
202111973456 Jack m
202012345394 Mike m
201911348934 Alice f
202012341234 Linda f


2 3
1 Math 4
2 English 4
3 History 4

3
89 78 89
97 98 96
89 87 67
90 98 87
78 79 90

p

复制并回车后应当处于"打印所有信息"页面,之后便可根据指示自由选择功能。

点击此处查看源码。

项目要求

学生成绩管理系统设计

1. 输入基本信息

  • 学生信息输入:
    • 学号
    • 姓名
    • 性别
    • 各科成绩等
  • 课程信息输入:
    • 课程号
    • 课程名
    • 学分
    • 简介等

2. 显示和输出信息

  • 显示所有信息(美观格式)
  • 按以下要求输出信息:
    • 按学号显示
    • 按姓名显示
    • 按年级显示
    • 按专业显示
    • 按科目显示

3. 排序

  • 在排序菜单下有子菜单实现以下功能:
    • 按学号排序
    • 按姓名排序
    • 按年级排序
    • 按专业排序
    • 按每位学生总分排序
    • 按平均分排序
    • 按某门课程平均分排序
    • 全年级按学号总分排序

4. 查询

  • 在查询菜单下有子菜单实现以下功能:
    • 按学号查询
    • 按姓名查询
    • 按年级查询
    • 按专业查询

5. 修改

  • 按以下属性修改:
    • 学号
    • 其他属性根据需要添加

6. 删除

  • 实现以下删除功能:
    • 按学号删除一个学生的所有记录
    • 按年级删除整个年级的记录
    • 按专业删除整个专业的记录

7. 统计

  • 实现以下统计功能:
    • 每人的所有科目总分、平均分、总学分
    • 各科的平均分、分数
    • 方差、标准方差
    • 自由扩充的统计功能

8. 课程库管理

  • 实现以下功能:
    • 添加新课程及属性
    • 修改课程的学分
    • 浏览所有课程信息
    • 删除某课程

学号规范化要求

  1. 学号长度统一
  2. 学号格式统一定义:
    • 1-4位是年级
    • 5-6位是学院
    • 7-8位是专业
    • 9-12位是序号

技术分析

技术分析简洁版:

本程序有着多项功能,其中包括对学生信息、课程信息和分数的输入,增加,删除、修改和显示,还有在此基础上的多种排序功能,包括对总分、对学号的单字段排序,按年级、专业、学院+课程的双字段排序,此外还有按不同条件进行信息筛选的查询功能,最后也少不了对数据进行处理的统计功能,统计功能可以计算所有学生的总分、平均分、获得学分,可以统计不同学科各分数段的学生人数、平均分、方差、标准差以及得分的最大值和最小值。

本程序为操作便捷设计了不用确定出总人数就能输入的功能,当输入完成时用stop单词作为结束即可,总人数会自动统计,在打印所有信息时就可以查看。

此外,为了防止意外二次选择输入功能导致原有输入信息的丢失,系统设计了二次确认功能以确保使用者确实需要重新输入,不会由于意外导致有用信息的丢失。

最后,在界面设计上采用简约风,以最少的文字实现最丰富的功能,在运行的首页会出现一次包括程序设计者和注意事项的总说明,确认后会进入菜单页面,每个菜单页面采用居中显示,逐条排列,实际功能页面有标题显示相应功能和必要的使用说明,使用者不会因为多级菜单和跳转输入的功能而迷失方向也不会不知道通过键入stop停止输入的特殊设计。

技术分析详细版:

该程序的第一个优势是功能多。在主菜单中显示该系统有11种功能,它们分别是录入学生信息、录入课程信息、录入分数、修改学生记录、删除学生记录、添加学生信息、课程库、排序、统计、查询和打印所有信息。但实际上该系统的功能远不止这些,如果选择1、4、5、6、7、8、10功能就会发现在这些主菜单选项之下还分别设有2、2、5、3、4、6、5条子菜单选项。

录入学生信息功能下设2条子选项,分别是人数确定和人数不确定。这二者的区别是人数确定适合学生人少的情况,可以轻松得到总人数;而人数不确定适合学生人数很多的情况使用,输入时通过输入stop随时结束,所以对于人多的情况不需要事先得出总人数,事实上人少的时候也可以选2进行输入。设计功能2很大原因就是为了减少输入前的统计人数步骤,直接输入也更加顺滑。

修改学生记录也下设两条子选项,分别是按学号修改记录和按姓名修改记录。设计初衷同样是为了方便使用者使用,如果只是通过输入12位学号就会花费很多时间在确定学号和比对数字顺序上,而如果知道名字就只需要输入两个或三个字,方便许多。 删除学生记录下设5条子选项,他它们分别是按学号删除记录、按姓名删除记录、按年级删除记录、按专业删除记录和按学院删除记录。前两个子选项一次只能删除一条记录而后三个选项都可以实现批量删除。

添加学生信息下设三个子选项分别是添加单个学号信息,添加一定人数信息和添加不定人数信息。输入需要添加的学生信息后会自动进入输入分数环节从而完成整条记录的输入这三项功能可以说是层层递进的,第1项一次只能添加一个学生;第2项可以通过指定人数实现一次添加多条信息;而第三项可以在不输入人数的情况下自由输入,直到输入单词stop系统会判定学生信息输入完毕,进而自动转入输分环节,而操作方法在选择功能后会清楚地提示。

课程库包括四条子选项,分别是添加课程,删除课程,修改课程信息和浏览所有课程信息。由于课程数一般不会很多所以增添改三条功能一次操作一条课程记录。浏览课程信息会显示课程号、课程名、学分和各分数段人数。

排序包括6条子选项,分别是1.按总分排序2.按学号排序3.按年级-课程排序4.按专业-课程排序5.按学院-课程排序。3、4、5选项分别可以看到不同年级、不同专业、不同学院的学生在某一课程的分数情况,通过输入课程名可以选择课程,标题里的课程两字也会相应的换成输入的课程名。

查询包括1.按学号查询、2.按姓名查询、3.按年级查询、4.按专业查询和5.按学院查询。其中3、4、5可以批量查询,1是一次查询一条记录,2在没有重名的情况下是查询一条记录,如果有重名就会显示多条记录。

选择主菜单的统计功能就会显示两组信息:学生信息和课程信息。学生信息包括学号、姓名、性别、总分、平均分和总学分;课程信息包括课程号、课程名、课程学分、各分数段学生人数、平均分、方差、标准差和最值。

选择打印所有信息就会显示所有信息。它的显示信息覆盖了统计的信息,在学生信息中多出了各科分数和年级、专业、学院的显示。课程信息部分与统计的课程部分相同。

以最小子选项进行统计,功能之和多达39种(有子菜单的主菜单选项不单算一条,退出也不被计入)。

除了功能多,该系统的另一项优点在于对细节处理到位,除了以上提到的为了输入顺滑和方便输入多人而设计的不定人数功能之外,系统还设计了信息保护机制。

如果在输入了学生信息后却又意外二次选择了输入学生信息功能,这会导致必须重新输入而原有信息被覆盖吗?不会的,在输入一次信息后,之后的每次输入前都会要求输入yes表示确定,如果是误点,那刚好按顺序输入y、e、s并回车的概率是极小的,所以这就形成了对原有信息的保护。如果真的想要重新输入学生信息,每次重新输入一条学生信息后,存储结构体学生信息部分的分数部分也会自动清零,这样即使没有输入分数也不会出现查询信息时显示存储单元的原分数而是分数显示0。

对于课程信息的二次输入采用了跟学生信息保护机制同样的方法,也同样会清空相关原有信息,知道输入分数后重新计算并赋值。

此外如果没有首先选择输入功能之外的功能,系统会自动跳转到输入功能,完成输入后才会显示选择的功能。

在统计方面除了统计显示平均分和显示离散程度的方差、标准差之外,还会统计各分数段的人数,从各分数段人数可以看出某一课程学生成绩分布情况,也能由此判断出分数集中范围和考试对于学生的难易程度。

在程序方面编写时采用了本学期课程知识中最重要的三大部分函数、指针和结构体的结合形式,使用函数可实现模块化程序设计,便于程序的维护和增强可读性;使用指针作为函数形参则打破了值传递单向传递的约束,使得在函数内也可以改变主函数变量的值;使用结构体则大大减少了存储变量与交换一组相关数据的工作量,如果使用数组存储数据,在作排序时则需要交换很多组数据,而使用结构体,只需要一行使用调换结构体顺序的函数的代码就可以完成交换,这也是只用千余行代码就实现多种功能的关键所在。

在显示方面主要通过两个关键函数实现简约清爽的使用效果。一个是system(“cls”)函数,合理调用此函数可以保持屏幕的整洁,只显示需要的内容;第二个函数是借用system(“cls”)函数自定义的void title(char *s)函数,使用此函数可以在首行居中的地方显示功能标题,让使用者不会再众多功能中迷失了方向。

最关键的优势当然就是计算准确,排序和增删改等功能都有着正确合理的程序作为底层支撑,经过多轮测试并不会出现计算错误、排序错误或显示错误等程序故障。