### 通讯录C++课程设计知识点
#### 一、编程目的
本课程设计的主要目标是构建一个教职工信息管理系统。该系统需具备以下功能:
- 输入教职工的基本信息:工号、姓名、出生年月、学历、职务、工资、职称、教研室、电话等,并确保工号的唯一性。
- 输出教职工的信息至屏幕或者文件。
- 支持对教职工信息的删除操作。
- 实现基于姓名、工号、职称的查询功能,并支持复合查询。
- 提供统计数据的功能,如按职称统计各类别的人数百分比、按教研室统计人数、按年龄段统计人数等。
- 具备打印功能,能够在屏幕上展示教职工的详细信息。
#### 二、设计要求
- 设计时需考虑系统的启动和退出界面。
- 应用程序应通过菜单或按钮来引导用户选择不同的功能选项。
- 必须实现上述列出的所有基本功能,以确保系统的完整性和实用性。
#### 三、各函数功能说明
1. **结构体定义** (`struct stu`): 定义了教职工的基本信息结构,包括工号、姓名、性别、出生年月等。
- `int num`: 教职工的工号。
- `char name[10]`: 教职工的姓名。
- `char sex[10]`: 性别。
- `int both`: 出生年月。
- `char xl[10]`: 学历。
- `char zw[10]`: 职务。
- `float gz`: 工资。
- `char zc[10]`: 职称。
- `char jys[10]`: 教研室。
- `int phone`: 电话号码。
2. **类定义** (`class zhigong`): 实现了教职工信息管理的核心逻辑。
- `studata[max]`: 用于存储教职工信息的数组。
- `int count`: 记录当前已录入的教职工数量。
- `char start_del`: 控制程序是否继续运行的标志位。
3. **成员函数说明**
- `void input(int num, char* ch1, char* ch2, int b, char* ch3, char* ch4, float gz, char* ch5, char* ch6, int phone)`: 用于输入教职工信息。
- 参数依次对应教职工的各个属性。
- 使用 `strcpy` 函数复制字符串到对应的结构体成员变量中。
- 更新 `count` 计数器,记录新录入的教职工信息。
- `void find(int num)`: 按工号查询教职工信息。
- 遍历 `data` 数组,查找指定工号的教职工信息。
- 若找到,则显示该教职工的信息;若未找到,则提示用户。
- `void del(int num)`: 删除指定工号的教职工信息。
- 类似于查找功能,先定位到目标教职工信息的位置。
- 将后续教职工的信息前移一位,覆盖被删除的教职工信息。
- 更新 `count` 计数器,减少已录入教职工的数量。
- `void insert(int x)`: 在指定位置插入新的教职工信息。
- 将原有教职工信息后移一位,为新教职工信息腾出空间。
- 调用 `input` 函数插入新的教职工信息。
- 更新 `count` 计数器。
- `void tjzc()`: 按职称统计教职工数量。
- 遍历 `data` 数组,根据职称分类计数。
- 输出每种职称下的教职工数量及其占总教职工的比例。
- `void tjjys()`: 按教研室统计教职工数量。
- 同上,但统计依据变更为教研室。
- `void tjage()`: 按年龄段统计教职工数量。
- 根据教职工的出生年月计算其年龄,并按照年龄范围进行统计。
- `int check_num(int num)`: 检查工号是否重复。
- 通过遍历 `data` 数组来判断。
- 若存在重复,则返回 `1` 表示重复;否则返回 `0` 表示不重复。
- `void show()`: 展示所有教职工的信息。
- 遍历 `data` 数组,将所有教职工的信息输出至屏幕。
#### 四、流程图
虽然具体的流程图在提供的文档中并未给出,但可以根据上述说明大致绘制出主要功能的流程图。例如,对于输入教职工信息的流程,可以从初始化界面开始,通过获取用户输入的数据,验证数据的有效性(如工号是否重复),然后保存数据,并提供用户继续输入下一条信息的选项。
#### 五、总结
通过本课程设计项目,学生不仅可以加深对C++语言的理解与应用能力,还能够掌握面向对象编程的基本思想以及如何利用结构体和类来组织复杂的数据。此外,通过对教职工信息管理系统的开发,还能锻炼解决实际问题的能力,提高代码质量和程序的可维护性。该项目涵盖了数据结构、算法设计、面向对象编程等多个方面,是一次综合性的实践学习体验。