📜  C中使用双向链表的员工管理系统(1)

📅  最后修改于: 2023-12-03 15:14:24.799000             🧑  作者: Mango

双向链表员工管理系统介绍

本文介绍了使用C语言编写的双向链表员工管理系统。该系统具有以下特点:

  • 使用双向链表作为数据结构,能够高效地进行添加、删除、修改等操作。
  • 可以实现员工信息的增、删、改、查功能,包括员工ID、姓名、性别、部门、职位、薪水等信息。
  • 可以对员工信息进行排序、统计等操作,方便管理和分析。
  • 采用交互式界面,用户友好,操作简便。
实现原理
双向链表

双向链表是一种常用的数据结构,它的每个节点都包含三个部分:数据、前驱指针和后继指针。通过前驱指针和后继指针,可以将许多节点连接成链表,实现高效的数据操作。

在本系统中,每个节点表示一个员工信息,包含员工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;
}

以上是本文对双向链表员工管理系统的介绍,相信读者已经对其实现原理和功能有了一定的了解。如果想要深入学习双向链表和文件操作,可以查阅相关的资料和教程。