# 基于C++实现的考试报名系统
# 一、使用说明
### 1.1 项目简介
考试报名工作给各高校报名工作带来了新的挑战,给教务管理部门增加了很大的工作量。本项目是对考试报名管理的简单模拟,用控制台选项的选择方式完成下列功能:输入考生信息;输出考生信息;查询考生信息;添加考生信息;修改考生信息;删除考生信息。
### 1.2 项目功能要求
本项目的实质是完成对考生信息的建立,查找,插入,修改,删除等功能。其中考生信息包括准考证号,姓名,性别,年龄和报考类别等信息。项目在设计时应首先确定系统的数据结构,定义类的成员变量和成员函数;然后实现各成员函数以完成对数据操作的相应功能;最后完成主函数以验证各个成员函数的功能并得到运行结果。
### 1.3 操作手册
运行程序后,进入欢迎界面,首先要输入考生的数据。
第一步,输入所有考生的信息。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/6c5342ef0018232c0014dfc829ba68a5.writebug)
之后会显示所有考生的信息。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/d258d02fcd1dc872c85ee0fe6f15a7bc.writebug)
在指定位置插入一个考生信息,例如:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/a2283e91c0dd9e77cc4909345378a5f2.writebug)
在位置5插入stu5的信息。
成功后,系统会显示插入完成后的所有信息。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/921955e8b831c0e29977decf117130ad.writebug)
删除指定考号的考生信息,例如:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/697de90f9c63580bfa8ff42d875d19c1.writebug)
删除考号为2的学生。删除后系统会显示删除的考生信息和删除操作后的所有信息。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/0e689328bc553276c436230a57957224.writebug)
查找指定考号的考生信息,例如:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/fe4d35537870922a03298184e2191721.writebug)
查找考号为3的考试信息。查找完成后系统会显示查找到的考生信息。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/e8dcb0495c7e2b9b958a073ce32a0423.writebug)
修改指定考号的考生信息,例如:
![](http://www.writebug.com/myres/static/uploads/2021/10/19/df0101ff0a80356be1916886c388b023.writebug)
修改考号为3的考生的信息。修改完成后系统会显示所有考生信息。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/b10510fb3e639027b207fff51da8560d.writebug)
既统计考生人数又可以统计报考某一类别的考生数量,系统会显示报考该类别的人数。
![](http://www.writebug.com/myres/static/uploads/2021/10/19/b41b2ea1b71f5c3f7306cb9f013ce924.writebug)
### 1.4 注意事项
- 本系统的考号请勿超过9位(16位操作系统请勿超过5位)
- 本系统不自动储存考生信息,请自行复制系统打印的信息另行保存
- 本系统没有设计排序功能,所以所有查找都采用顺序查找,大数据量可能较慢,请耐心等待
# 二、概述
### 2.1 基本思路
使用双向链表来存储考生的基本信息,对考生报名系统的所有操作都是通过对双向链表来进行,用链表存储数据更加灵活方便,对双向链表进行插入、删除、查找等操作比较方便。链表是用linkedList类来实现,考生的信息是存储在结构体STU中。链表的头指针和尾指针作为全局变量使用。
### 2.2 文件目录
- test.cpp (主文件)
- 1.h (定义linkedlist类和STU结构体)
- 2.h (linkedlist类相关函数的具体实现方法)
- test.exe (程序可执行文件)
- 设计报告.doc (项目文档)
### 2.3 具体实现
**linkedlist接口**
| 成员函数名 | 功能 | 参数 |
| ------------------------------------ | -------------------------- | ----------------------------- |
| linkedlist () | 默认构造函数,设定链表长度为0。 | |
| ~linkedlist () | 析构函数,清空全表 | |
| insertStu() | 插入函数,在输入pos位置后插入*insertStu | |
| copyStu(STU *student1,STU &student2) | 将student2的信息复制给student1 | 被拷贝的信息student2 拷贝的信息student1 |
| addStu(STU &item) | 添加考生信息 | 添加的信息item |
| editStu() | 按考号编辑考生信息 | |
| findStu () | 查找考生信息 | |
| findStu(int item) | 按考号查找考生信息 | item为考号 |
| showStu() | 展示所有考生信息 | |
| StaStu() | 按报考类别统计考生信息 | |
### 2.2 结构体STU
- 考生姓名 stuName(string)
- 考号 stuTestNum(int)
- 年龄 stuAge(int)
- 性别 stuSex(string)
- 报考类别 stuCategory(string)
- 前指针 pre (STU\*)
- 后指针 next (STU\*)
### 2.3 方法实现具体说明
- 构造函数:将链表长度设置为 0
- 析构函数:释放结构体
- 插入函数:用户输入插入位置,插入方式为调用类方法findStu(int pos)找到该位置,判断该位置是第一个、最后一个还是中间的位置。然后操作前后指针进行插入,同时动态生成需要插入的数据,最后链表长度加一
- 查找函数:根据用户插入的位置,建立一个头指针,依次从头寻找到该位置,将该位置考生的信息输出
- 删除函数:根据输入的考生的考号,先判断其位置,找到需要删除的结构体之后,对其前后指针进行操作,将其从链表中脱离出来,然后将其内存释放
- 编辑函数:根据输入的考生的考号,找到考生的位置,重新输入考生的信息
- 统计函数:先是统计出所有考生人数,然后根据输入的考生的报考类别,对当前链表进行一次遍历,遍历过程中,通过字符串比较,得出报考人数