C语言链表实现工资管理系统

yizhihongxing

C语言链表实现工资管理系统的完整攻略如下:

系统功能介绍

该系统主要实现以下功能:

  1. 添加员工信息

  2. 删除员工信息

  3. 修改员工信息

  4. 查询员工信息

  5. 显示所有员工信息

  6. 退出系统

系统设计

员工信息结构体

首先我们需要定义一个员工信息结构体,其中包括员工的姓名、工号、部门、职位和工资等信息。代码如下:

struct Employee {
    char name[20];       //员工姓名
    int number;          //员工工号
    char department[20]; //员工部门
    char position[10];   //员工职位
    float salary;        //员工工资
    struct Employee *next; //指向下一位员工的指针
};

添加员工信息

添加员工信息是一个比较简单的过程,具体实现如下:

void addEmployee(struct Employee **head) {
    struct Employee *new_employee = (struct Employee*)malloc(sizeof(struct Employee)); //创建新员工结点
    printf("请输入员工姓名:");
    scanf("%s", new_employee->name);
    printf("请输入员工工号:");
    scanf("%d", &new_employee->number);
    printf("请输入员工部门:");
    scanf("%s", new_employee->department);
    printf("请输入员工职位:");
    scanf("%s", new_employee->position);
    printf("请输入员工工资:");
    scanf("%f", &new_employee->salary);
    new_employee->next = NULL; //新员工结点指针指向空

    if (*head == NULL) {
        *head = new_employee; //链表为空时,将头结点指针指向新员工结点
    } else { //链表不为空时,遍历到尾部,将新员工结点添加到链表中
        struct Employee *p = *head;
        while (p->next != NULL) {
            p = p->next;
        }
        p->next = new_employee;
    }

    printf("员工添加成功!\n");
}

删除员工信息

删除员工信息分为两种情况,一种是删除头结点,一种是删除非头结点。这里以删除非头结点为例,具体实现如下:

void deleteEmployee(struct Employee **head, int number) {
    if (*head == NULL) {
        printf("员工链表为空!\n");
        return;
    }

    struct Employee *p = *head;

    //要删除结点为头结点时,直接将头结点指针指向第二个结点即可
    if (p->number == number) {
        *head = p->next;
        free(p);
        printf("员工删除成功!\n");
        return;
    }

    //遍历链表,找到要删除的结点
    while (p->next != NULL && p->next->number != number) {
        p = p->next;
    }

    if (p->next == NULL) {
        printf("未找到要删除的员工!\n");
        return;
    }

    //将要删除结点的前一个结点的指针指向要删除结点的后一个结点
    struct Employee *temp = p->next;
    p->next = temp->next;
    free(temp);

    printf("员工删除成功!\n");
}

修改员工信息

修改员工信息实现起来比较简单,和添加员工信息类似,只需要遍历链表找到要修改的员工结点,然后进行修改即可。具体实现如下:

void modifyEmployee(struct Employee *head, int number) {
    if (head == NULL) {
        printf("员工链表为空!\n");
        return;
    }

    struct Employee *p = head;
    while (p != NULL && p->number != number) {
        p = p->next;
    }

    if (p == NULL) {
        printf("未找到要修改的员工!\n");
        return;
    }

    printf("请输入员工姓名:");
    scanf("%s", p->name);
    printf("请输入员工工号:");
    scanf("%d", &p->number);
    printf("请输入员工部门:");
    scanf("%s", p->department);
    printf("请输入员工职位:");
    scanf("%s", p->position);
    printf("请输入员工工资:");
    scanf("%f", &p->salary);

    printf("员工信息修改成功!\n");
}

查询员工信息

查询员工信息也很简单,遍历链表找到要查询的员工结点即可。具体实现如下:

void queryEmployee(struct Employee *head, int number) {
    if (head == NULL) {
        printf("员工链表为空!\n");
        return;
    }

    struct Employee *p = head;
    while (p != NULL && p->number != number) {
        p = p->next;
    }

    if (p == NULL) {
        printf("未找到要查询的员工!\n");
        return;
    }

    printf("员工姓名:%s\n", p->name);
    printf("员工工号:%d\n", p->number);
    printf("员工部门:%s\n", p->department);
    printf("员工职位:%s\n", p->position);
    printf("员工工资:%f\n", p->salary);
}

显示所有员工信息

此功能是将链表中所有员工信息遍历输出,具体实现如下:

void showAllEmployee(struct Employee *head) {
    if (head == NULL) {
        printf("员工链表为空!\n");
        return;
    }

    struct Employee *p = head;
    while (p != NULL) {
        printf("员工姓名:%s\n", p->name);
        printf("员工工号:%d\n", p->number);
        printf("员工部门:%s\n", p->department);
        printf("员工职位:%s\n", p->position);
        printf("员工工资:%f\n", p->salary);
        printf("=======================\n");
        p = p->next;
    }
}

示例说明

示例1:添加操作

一般情况下执行完添加操作,会输出"员工添加成功!",以下为一条添加操作的输出示例:

请输入员工姓名:张三
请输入员工工号:1001
请输入员工部门:开发部
请输入员工职位:程序员
请输入员工工资:6000
员工添加成功!

示例2:删除操作

删除操作会输出一条"员工删除成功!"或"未找到要删除的员工!"的语句,以下为一条删除操作的输出示例:

请输入要删除的员工工号:1001
员工删除成功!

至此,C语言链表实现工资管理系统的完整攻略介绍完毕。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言链表实现工资管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++回溯算法深度优先搜索举例分析

    当需要在一个问题的所有解中搜索特定解时,可以使用回溯算法。在搜索过程中,如果到达一个点不能通过它继续搜索了,回溯算法会回溯到上一个点继续搜索。 深度优先搜索是回溯算法的一种形式。在深度优先搜索中,我们尽可能深地搜索一个解的分支,如果达到一个结束点或无法进一步搜索,则回溯回到上一个状态并继续搜索其他分支。 在使用回溯算法解决问题时,首先必须明确问题的解空间。然…

    C 2023年5月22日
    00
  • Windows10系统遇到”不能打开要写入的文件”怎么办

    下面是关于“Windows10系统遇到’不能打开要写入的文件’怎么办”的完整攻略,分为以下几个步骤: 1. 检查文件权限 首先,我们需要确认文件是否有正确的权限限制。当一个文件受限时,您可能无法访问它,甚至将其写入到其中。 如何检查文件权限 单击鼠标右键并选择 “属性” 选项 选择 “安全” 标签页并检查是否与您的用户帐户相关联。 如果您有权限,请在相应的区…

    C 2023年5月23日
    00
  • C C++ 题解LeetCode1417重新格式化字符串

    C/C++ 题解 LeetCode 1417 重新格式化字符串 题目描述 给定一个由字母、数字和空格组成的字符串 s,你需要将其重新格式化,使得任意两个相邻字符之间都有且仅有一个空格,并且首尾字符之间也不能有空格。 返回 重新格式化后的字符串,如果无法按要求重新格式化,则返回一个 空字符串。 示例说明 示例 1 输入:s = “a0b1c2″输出:”a 0b…

    C 2023年5月24日
    00
  • C语言中%c与%s的区别与划分详解

    C语言中%c与%s的区别与划分详解 在C语言中,%c和%s是格式化输出的常见控制字符,这两个字符在使用时有所不同。 %c的用法 %c表示输出一个字符,一般和变量类型char搭配使用。在使用%c输出时,必须提供一个字符型参数。 以下是一个示例: #include <stdio.h> int main() { char letter = ‘a’; p…

    C 2023年5月22日
    00
  • Ubuntu安装Jupyter Notebook教程

    下面是Ubuntu安装Jupyter Notebook的完整攻略: 安装Jupyter Notebook: 首先,在终端中执行以下命令来更新系统: bash sudo apt-get update 然后,可以通过以下命令来安装Python和pip: bash sudo apt-get install python3 python3-pip 在Python3中…

    C 2023年5月22日
    00
  • 深入了解C语言结构化的程序设计

    深入了解C语言结构化的程序设计攻略 为了深入了解C语言结构化的程序设计,需要掌握以下几个方面的知识: 1. C语言基础知识 在学习C语言结构化的程序设计前,需要先掌握C语言的基础知识,如数据类型、运算符、控制结构、函数等等。如果你还没有接触过C语言,可以先参考以下的学习资料: C语言教程 C语言入门教程 2. 结构化编程的基础原理 结构化编程是一种编写可读性…

    C 2023年5月23日
    00
  • SQL查询语句行转列横向显示实例解析

    SQL查询语句行转列横向显示是一种在SQL语句中对行进行转换的简便方法。一般来说,数据表中的记录是按行排列的,而一条记录包含了一些列的信息。使用行转列的方法,我们可以把数据表中的每个记录都转换成一个横向的信息集合,列字段的值变为列的字段名。 实例一:使用PIVOT函数 Pivot函数是SQL Server中的一个内置函数,它可以实现行转列。 以下是一个示例:…

    C 2023年5月22日
    00
  • C++11中的chrono库详解

    C++11中的chrono库详解 C++11中的chrono库提供了一种方便的方法来处理时间和日期。它具有高度的可移植性和更好的精度。 我们将了解该库中主要的三个组件:duration,time_point和clock。 duration duration表示一段时间,它拥有以下属性: 精度:例如浮点、整数 长度:例如秒、毫秒、微秒、纳秒 在 chrono …

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部