📅  最后修改于: 2023-12-03 15:14:24.799000             🧑  作者: Mango
本文介绍了使用C语言编写的双向链表员工管理系统。该系统具有以下特点:
双向链表是一种常用的数据结构,它的每个节点都包含三个部分:数据、前驱指针和后继指针。通过前驱指针和后继指针,可以将许多节点连接成链表,实现高效的数据操作。
在本系统中,每个节点表示一个员工信息,包含员工ID、姓名、性别、部门、职位、薪水等信息。通过双向链表的操作,可以实现员工信息的添加、删除、修改、查找、排序、统计等功能。
员工信息被保存在文件中,通过文件操作可以实现员工信息的读取、写入和管理。文件读写操作使用了fread、fwrite函数,文件管理操作使用了fseek、ftell函数等。
本系统使用了C语言中的stdio.h头文件,实现了交互式界面。用户可以通过命令行输入不同的指令,实现各种功能。
本系统支持如下功能:
用户可以通过命令行输入员工信息,包括员工ID、姓名、性别、部门、职位、薪水等信息。系统将自动为这个员工创建一个节点,并将其添加到双向链表中。
用户可以根据员工ID输入需要修改的员工信息,系统将根据ID查找到该员工,并允许用户修改其信息。
用户可以根据员工ID输入需要删除的员工信息,系统将根据ID查找到该员工,并将其从双向链表中删除。
用户可以根据员工ID或员工姓名输入需要查找的员工信息,系统将根据ID或姓名查找到该员工,并在屏幕上显示其所有信息。
用户可以选择根据员工ID、姓名、职位或薪水对员工信息进行排序,系统将自动将双向链表中的所有员工信息按照用户要求排序,并在屏幕上显示排序结果。
用户可以选择统计员工数量、男女比例、总工资等信息,系统将自动计算并在屏幕上显示相应结果。
用户可以选择显示所有员工信息,系统将在屏幕上按照一定格式显示所有员工的信息。
用户可以选择将当前所有员工信息保存到文件中,系统将使用文件操作将员工信息写入到磁盘中,以便下次打开软件时读取。
用户可以选择退出软件,系统将自动保存当前所有员工信息,并退出程序。
以下是程序中的一个函数,用于添加员工信息。代码注释详细,可以帮助读者理解其实现原理。
/**
* 添加新的员工信息
*/
void addEmployee() {
Employee *newEmployee = (Employee *) malloc(sizeof(Employee)); // 创建一个新的员工节点
printf("请输入员工ID:");
scanf("%d", &newEmployee->id); // 输入员工ID
printf("请输入员工姓名:");
scanf("%s", newEmployee->name); // 输入员工姓名
printf("请输入员工性别(M/F):");
scanf("%s", newEmployee->sex); // 输入员工性别
printf("请输入员工部门:");
scanf("%s", newEmployee->department); // 输入员工部门
printf("请输入员工职位:");
scanf("%s", newEmployee->position); // 输入员工职位
printf("请输入员工薪水:");
scanf("%f", &newEmployee->salary); // 输入员工薪水
newEmployee->prev = NULL; // 新节点的前驱指针为NULL
newEmployee->next = NULL; // 新节点的后继指针为NULL
if (head == NULL) { // 若链表为空,将新节点设为头结点
head = newEmployee;
return;
}
Employee *p = head;
while (p->next != NULL) { // 找到链表最后一个节点
p = p->next;
}
newEmployee->prev = p; // 将新节点插入到链表末尾
p->next = newEmployee;
newEmployee->next = NULL;
}
以上是本文对双向链表员工管理系统的介绍,相信读者已经对其实现原理和功能有了一定的了解。如果想要深入学习双向链表和文件操作,可以查阅相关的资料和教程。