# 学生成绩管理系统
程序设计基础课程设计作业,基于顺序结构的学生成绩管理系统
## 小组分工情况
> 略
## 设计目的与要求
1. 本课程是为了配合程序设计基础开设的,通过本次设计巩固编程基础知识,完成大纲所要求的任务。
2. 要求设计一个菜单驱动的学生成绩管理程序。
## 设计内容
设计一个菜单驱动的学生成绩管理程序,管理n个学生的m门考试科目成绩,实现以下基本功能:
(1)能够新增学生信息,并计算总分和平均分。
(2)能够根据学号修改和删除某学生信息。
(3)能够显示所有学生的成绩信息。
(4)能够分别按总分和学号进行排序。
(5)能够根据学号查询该学生的基本信息。
(6)学生成绩数据最终保存在文件中,能够对文件读、写学生数据。
### 使用语言
C语言(基于C99标准)
### 测试环境
TDM-GCC 4.7.1 64-bit Release(基于Windows 10 Home Version 1903操作系统)
### 使用IDE
Dev-C++ 5.5.3
Visual Studio 2019 Community 16.2.3
## 设计分析
整体思路采用模块化的程序构建,将各个功能封装完好地实现在不同函数内。主函数采用了事件驱动式的设计思想,通过不断监听用户输入,根据输入采用多分支判断执行并完成对应功能。设计时充分考虑到用户的异常输入,程序可以在一定范围内判断用户输入的合法性,并加以处理。本程序采用顺序表作为主要数据结构构建,其在实现上相对链表更易,存储区域简单且更易维护。由于本程序设计设计适用学生数量较小,线性表结构存在性能缺陷的时间复杂度为`O(n)`的移动操作是可以令人接受的。
首先统一设计编写主函数,确定结构类型与函数名,根据题目要求确定成员分工后,各部分功能由成员分别补充分别测试,初步测试无误后将所有功能合并,并进行代码风格的统一。完成初步的整合后再进行多次测试,确保程序没有逻辑错误,并保证有一定的鲁棒性,最后对界面增加一些细节美化,使其对用户更加友好。
下表为本程序使用的函数列表。
| **函数名** | **实现功能** |
| ---------------------------------------------------- | ------------------------------ |
| void appendRecord(); | 增加一条记录 |
| void listRecord(); | 显示所有记录 |
| void deleteRecord(); | 删除一条记录 |
| void modifyRecord(); | 修改一条记录 |
| void searchRecord(); | 查找一条记录 |
| void sortDesBySum(); | 以总分为规则降序排序 |
| void sortAscBySum(); | 以总分为规则升序排序 |
| void sortDesByNum(); | 以学号为规则降序排序 |
| void sortAscByNum(); | 以学号为规则升序排序 |
| void writeToFile(); | 将学生信息写入到文件 |
| void readFromFile(); | 从文件中读取学生信息 |
| void exitProgram(); | 退出程序 |
| void getUserInput(); | 获取用户输入 |
| void slowDisplay(const char* p); | 缓慢输出达到动画效果的核心方法 |
| void intervalOutput(DWORD time, const char* text); | 输出一行字符串后暂停某一时间 |
| void slowDisplayMenu(); | 以动画(缓慢输出)形式打印菜单 |
| void displayMenu(); | 直接打印菜单 |
## 设计结构图
![](https://s2.ax1x.com/2019/12/20/QO3e7d.png)
## 总结心得
暂无 待补充