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

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语言数组的使用攻略 数组的概念 在C语言中,数组(Array)是一种可存储多个相同类型数据的结构。数组中的每个元素可以通过下标(int)来唯一确定。数组下标从0开始,最大下标为数组长度-1。 数组的声明 在C语言中,声明数组需要指定数组的类型和长度。以下是一个数组的声明示例: int array[5]; // 声明一个长度为5的int类型数组 数组的初始化…

    C 2023年5月9日
    00
  • C++ assert()函数用法案例详解

    C++ assert()函数用法案例详解 什么是assert()函数 assert()函数是C和C++中的一个标准库函数,用于在程序运行过程中对一个条件进行判断,如果该条件为假,则触发一个断言错误(Assertion Failed),程序会停止运行并输出错误信息,方便程序员进行调试。 assert()函数使用起来简单,其语法如下: void assert(i…

    C 2023年5月23日
    00
  • 从C语言中读取Python 类文件对象

    要从C语言中读取Python类文件对象,需要使用Python提供的C API。下面是一些步骤: 导入必要的头文件 在使用Python的C API之前,需要包含必要的头文件,其中最重要的是Python.h。在C语言中,导入头文件通常使用#include指令。 #include <Python.h> 初始化Python解释器 在使用Python的C …

    C 2023年5月22日
    00
  • Java使用Arrays.asList报UnsupportedOperationException的解决

    当我们使用Java中Arrays.asList方法时,有时会遇到UnsupportedOperationException异常。这是因为Arrays.asList返回的是一个固定大小的列表,它不支持添加和移除元素的操作。如果我们尝试对这个列表进行添加或移除元素的操作,就会抛出UnsupportedOperationException异常。那么该如何解决这个问…

    C 2023年5月22日
    00
  • C++中try throw catch异常处理的用法示例

    C++中异常处理是一种用于处理程序运行期间发生的错误或异常情况的机制。一般情况下,C++中的异常处理包括三个关键字:try、throw、catch。 try:try语句块中的代码是需要被监控的代码。当try语句块中的代码抛出异常时,异常会被传递到catch块中进行处理。 throw:throw语句抛出一个异常,它抛出的值可以是任意类型的,包括一个简单的数字类…

    C 2023年5月23日
    00
  • C语言打印杨辉三角形的示例代码

    下面我将为你详细讲解如何用C语言打印杨辉三角形的示例代码的完整攻略。 步骤一:了解杨辉三角形 在编写代码之前,我们需要先了解一下杨辉三角形的规律。杨辉三角形是一种规律的数字三角形。它的第一行为1,第二行为1,1,第三行为1,2,1,第四行为1,3,3,1,以此类推。每一行的数字都是由上一行相邻两个数字相加得到的。 步骤二:使用循环打印杨辉三角形 为了打印杨辉…

    C 2023年5月24日
    00
  • C++隐式类型转换运算符operator type()用法详解

    C++隐式类型转换运算符operator type()用法详解 隐式类型转换是 C++ 一个重要的特性,在某些情况下可以简化代码并方便编程。其中,使用 operator type() 运算符可以指定自定义类型转换规则。本文将详细讲解该运算符的用法。 语法 operator type() { /* … */ } 其中,type 指定了你希望将自定义类型转换…

    C 2023年5月22日
    00
  • 带你粗略了解c++的最大乘积

    带你粗略了解c++的最大乘积 简介 在c++编程中,求最大乘积是一个常见的问题,本攻略将带你通过实例详细讲解在c++中如何求出最大乘积。 解题思路 我们可以通过以下步骤来解决这个问题: 记录数组中绝对值最大和次大的两个数。 记录数组中绝对值最小和次小的两个数。 对比以上4个数字,得出最大乘积。 代码实现 以下是实现该思路的c++代码: #include &l…

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