在这个数据结构课程设计中,学生被要求实现一个职工信息管理系统,使用单链表作为数据结构。这个系统包含了多种操作,如添加、删除、查询、统计、排序、修改和保存职工信息。下面将详细解释每个功能的实现:
1. **单链表**:
单链表是一种线性数据结构,其中每个节点包含数据部分和一个指向下一个节点的指针。在这个系统中,定义了一个`struct employee`来存储职工信息,包括姓名(name)、工号(num)、性别(sex)、部门(bm)、职位(zc)和工资(gz)。另外,定义了一个`struct node`来表示链表中的节点,包含一个`employee`结构体和一个指向下一个节点的指针。
2. **类型定义**:
使用`typedef`关键字定义了一个别名`Node`,代表`struct node`,以及`Link`,代表`Node *`,使得代码更易读。
3. **全局变量**:
`saveflag`是一个全局变量,用于标记是否需要将数据存盘。
4. **函数原型**:
- `add(Link l)`:向链表`l`中添加一个新的职工信息。
- `disp(Link l)`:显示链表`l`中的所有职工信息。
- `del(Link l)`:删除链表`l`中的指定职工信息。
- `Locate(Link l, char findmess[], char nameornum[])`:根据`findmess`(姓名或工号)在链表`l`中查找职工信息。
- `Qur(Link l)`:查询链表`l`中的职工信息。
- `Tongji(Link l)`:统计链表`l`中的职工信息,如总人数、平均工资等。
- `Sort(Link l)`:对链表`l`中的职工信息进行排序,可能基于工号、姓名或其他属性。
- `Modify(Link l)`:修改链表`l`中指定职工的信息。
- `save(Link l)`:将链表`l`中的数据保存到文件。
- `printe(Node *p)`:打印链表中特定节点的数据。
5. **辅助函数**:
- `printstart()`、`Wrong()`、`Nofind()` 和 `printc()` 用于输出系统提示和菜单,例如打印横线、错误提示、未找到信息提示等。
- `menu()`:展示系统主菜单,供用户选择操作。
6. **主流程**:
系统首先显示菜单,用户输入选项进行相应操作。`Disp(Link l)`函数负责显示链表中的所有职工记录。在执行每项操作时,程序会检查链表状态,如是否为空,然后调用相应的函数处理数据。
通过这个项目,学生可以深入理解单链表的操作,同时锻炼了C语言编程和文件操作的能力。此外,它还涉及到了用户交互和错误处理,这些都是实际软件开发中不可或缺的部分。