# 1. 分析
## 1.1 背景分析
考试报名系统是一个学校不可缺少的部分,它对于学校的管理者和学生来说都至关重要,所以一个良好的考试报名系统应该能够为用户提供充足的信息和功能。考试报名系统对于学校加强考试管理有极其重要的作用。随着学生数量和考试数量的日益庞大,如何管理如此庞大的数据显得极为复杂,传统的手工管理工作量大且容易出错。
随着计算机科学技术的不断成熟,使用计算机对考试报名系统进行管理,具有手工管理所无法比拟的优势。这些优点能够极大地提高学校和学生的效率,也是学校走向信息化、科学化、国际化的重要条件。因此,开发一套考试报名系统具有十分重要的意义。
## 1.2 功能分析
作为一个最简易的考试报名系统,首先应该有的功能就是输入同学们的考试报名情况并且可以予以显示。
其次,考试报名系统还应该具有插入、删除、修改功能,以保证同学可以随时更改自己的考试报名情况。最后,考试报名系统软件还应该确保软件可以正常关闭,以及如果用户输入的数据有问题的时候可以做出简单的检查和提示。
综上所述,一个考试报名系统至少应该具有输入、输出、插入、删除、修改、退出、健壮性的检测等功能。
# 2. 设计
## 2.1 数据结构设计
如上功能分析所述,该系统要求频繁的插入、删除、修改操作,而链表进行插入、删除等操作十分简便,因此考虑使用链表数据结构。同时,为了实现简易,在第一个结点之前附加一个头结点,并用头指针指向头结点,使得增加或者删除头结点与处理其他结点方法相同,使得程序简洁,更方便单链表的前插法的设计,也不需要将第一个和最后一个结点做特殊处理。
## 2.2 类结构设计
经典的链表一般包括两个抽象数据类型(ADT)——链表结点类(NODE)与链表类(LinkList),而两个类之间的耦合关系可以采用嵌套、继承等多种关系。为方便处理,本系统将链表类(LinkList)声明为链表结点类(NODE)的友元,这样使得链表结点类(LinkList)可以访问链表结点。
同时将考生的信息封装到 Stu 结构体中,使得结点类的定义更简洁,更方便插入、删除、修改等功能。
## 2.3 成员与操作设计
考生信息类(Stu)
公有成员:
```c++
int _ExamNum; //准考证号
string _name; //姓名
string _sex; //性别
int _age; //年龄
string _AppCate; //报考类别
```
考生信息的构造函数:
```c++
Stu() = default; //默认构造函数
Stu(const int ExamNum, const string &name, const string &sex,
const int age, const string &AppCate); //新考生信息的构造函数
Stu::Stu(const int ExamNum, const string &name, const string &sex,
const int age, const string &AppCate)
:_ExamNum(ExamNum),_name(name),_sex(sex),_age(age),_AppCate(AppCate) {}
```
链表结点类(NODE)
私有成员:
```c++
Stu data; //封装考生信息于变量data
NODE *next; //指针域,用于指向下一结点信息
```
友元:
```c++
friend class LinkList; //将LinkList类声明为NODE类的友元
//使得LinkList可以访问结点类的私有成员
//而其他地方不可以方位节点类,防止对数据的误处理
```
链表类(LinkList)
私有成员:
```c++
NODE * head = NULL; //头指针, 指向头结点
int _size = 0; //链表中有效信息的数量
```
公有操作:
```c++
LinkList() = default; //默认构造函数
LinkList(int size); //指定长度的链表构造函数
~LinkList(); //析构函数: 用于销毁链表中所有结点
void InitLink(); //用于已经构建好的链表的数据填充
void OutputLink(); //打印考生信息表
void DestroyLink(); //从头结点开始销毁链表中所有结点
bool FindLink(int num, Stu &buf);
//寻找考生号为num的考生信息,如果找到储存到buf中, 否则返回false
void InsertLink(int index, bool flag);
//flag用于标识前插法和后插法, 在index位置的(前或后)插入考生信息
bool DeleteLink(int num, Stu &buf);
//删除考生号为num的考生信息, 如果存在该考生则储存到buf中
void ChangeLink(int num);
//修改考生号为num的考生信息, 否则输出相应的信息提示
```
## 2.4 系统设计
系统首先调用 StuSystem()函数实现对屏幕的初始化,完成对链表 list 的创建和输入数据工作,然后根据用户所输入的操作码(operatorCode)执行链表 list 对应的成员函数。
# 3. 实现
## 3.1 插入功能的实现
### 3.1.1 插入功能流程图
![](https://www.writebug.com/myres/static/uploads/2022/8/15/eed1ab8cedf339414c8ff3d5796ae23c.writebug)
### 3.1.2 插入功能核心代码
用户输入插入位置部分
```c++
while (index<0 || index>this->_size)
//如果插入的位置非法, 则终止程序
{
cerr << "插入位置非法!\n";
cerr << "请重新输入: ";
cin >> index;
}
```
初始化 move 结点部分
```c++
NODE *move = (flag == BACK ? head->next : head);
//后插法初始化为首结点; 前插法初始化为头结点,用move->next指向链表的每个结点
```
插入部分
```c++
for (int i=1; (flag == BACK ? move : move->next) != NULL; move = move->next,++i)
{
if (i == index)
{
NODE *fresh = new NODE;
if (!fresh)
{
cerr << "Memory Alloction Error!\n";
exit(-1);
}
cout << "请依次输入考生的考号, 姓名, 性别, 年龄及报考类型: " << endl;
cin >> fresh->data._ExamNum >> fresh->data._name >> fresh->data._sex
>> fresh->data._age >> fresh->data._AppCate;
//将新结点链到链表上
fresh->next = move->next;
move->next = fresh;
break;
}
}
```
### 3.1.3 插入功能截屏示例
![](https://www.writebug.com/myres/static/uploads/2022/8/15/287affc18f080b5d37dd1d41d6049e42.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/8/15/2be7720bf1f0d8f1f562e2479bf822aa.writebug)
## 3.2 删除功能的实现
### 3.2.1 删除功能流程图
![](https://www.writebug.com/myres/static/uploads/2022/8/15/581af766d53050461817a7404d085217.writebug)
### 3.2.2 删除功能核心代码
```c++
if (!FindLink(num, buf))
//如果不存在该结点, 返回false
{
return false;
}
NODE *move = head;
//因为需要获取删除结点的前一个结点, 所以move只能指向头结点
NODE *save;
for (; move->next != NULL; move = move->next)
{
if (move->next->data._ExamNum == num)
{
save = move->next; //储存要删除的结点
buf = save->data;
move->next = move->next->next;
//将前一个结点链接到后一个结点上
//释放被删除的空间
delete save;
save = NULL;
break;
}
}
```
### 3.2.3 删除功能截屏示例
![](https://www.writebug.com/myres/static/uploads/2022/8/15/80b94c6854580fd58c9f63ead159d0d3.writebug)
![](https://www.writebug.com/myres/static/uploads/2022/8/15/de81d011dbd61e9b61fe97b9dab3be69.writebug)
## 3.3 查找功能的实现
### 3.3.1 查找功能流程图
![](https://www.writebug.com/myres/static/uploads/2022/8/15/5095493a0279a33ac99e1ceaf4a7666f.writebug)
### 3.3.2 查找功能核心代码
```c++
NODE *move = head->next;
//用move指向每一个链表的结点, 初始化为首结点
for (; move != NULL; move = move->next)
{
if (move->data._ExamNum == num)
{
buf = move->data;
return true;
}
}
return false;
```
### 3.3.3 查找功能截图示例
![](https://www.writebug.com/myres/static/uploads/2022/8/15/5b05dd5023229e56cd1d286628dadb08.writebug)
![](https://www.writebug.com/
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
资源包含文件:课程论文word+代码 考试报名系统至少应该具有输入、输出、插入、删除、修改、退出、健壮性的检测等功能。详细介绍参考:https://blog.csdn.net/newlw/article/details/126360629
资源推荐
资源详情
资源评论
收起资源包目录
基于C++实现考试报名系统.zip (6个子文件)
课程论文.docx 1.87MB
problem1_程序框图.vsdx 66KB
LICENSE 1KB
problem1_测试用例.txt 127B
problem1.cpp 8KB
README.md 16KB
共 6 条
- 1
资源评论
shejizuopin
- 粉丝: 1w+
- 资源: 1288
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于C语言+AT89C52单片机搭建的PID直流电机控制程序,用于Proteus电路仿真+源码+开发文档(高分优秀项目)
- HBuilder X.zip
- 基于C++开发的unreal 数字电路仿真+源码(毕业设计&课程设计&项目开发)
- Modeling_three_phase_inverter.slx
- 营销人员;绩效管理;绩效考核
- 基于Vue+TypeScript开发的数字电路仿真软件+源码(毕业设计&课程设计&项目开发)
- Survival Animations 1.0
- 基于 Python Flask 的微博系统
- 深度学习训练数据转化脚本 实体检测
- 2.27 house of botcake例题附件
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功