C语言实现职工工资管理系统的示例代码

下面是对于“C语言实现职工工资管理系统的示例代码”的完整攻略,包含了过程、示例说明以及代码实现:

1. 需求分析

该工资管理系统主要包括以下功能:

  1. 录入职工信息
  2. 查询职工信息
  3. 删除职工信息
  4. 修改职工信息
  5. 计算职工工资

根据上述需求,我们可以将职工信息抽象为一个结构体,包括工号、姓名、性别、年龄、基本工资等成员变量。通过调用各种函数实现各项功能,并将所有信息存储在文件中。

2. 代码实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAXSIZE 100

// 定义职工信息结构体
struct Employee {
    char id[10];
    char name[20];
    char sex[5];
    int age;
    double baseSalary;
};

// 初始化职工数组
struct Employee employees[MAXSIZE];
int size = 0;

// 显示主菜单
void showMenu() {
    printf("====== 工资管理系统 ======\n");
    printf("1. 录入职工信息\n");
    printf("2. 查询职工信息\n");
    printf("3. 删除职工信息\n");
    printf("4. 修改职工信息\n");
    printf("5. 计算职工工资\n");
    printf("6. 退出系统\n");
    printf("==========================\n");
    printf("请选择操作选项:");
}

// 录入职工信息
void addEmployee() {
    printf("\n====== 录入职工信息 ======\n");

    // 输入职工信息
    printf("请输入工号:");
    scanf("%s", employees[size].id);

    printf("请输入姓名:");
    scanf("%s", employees[size].name);

    printf("请输入性别:");
    scanf("%s", employees[size].sex);

    printf("请输入年龄:");
    scanf("%d", &employees[size].age);

    printf("请输入基本工资:");
    scanf("%lf", &employees[size].baseSalary);

    size++;

    printf("\n录入成功!\n");
}

// 查询职工信息
void showEmployee() {
    printf("\n====== 查询职工信息 ======\n");

    // 输入要查询的工号
    char id[10];
    printf("请输入要查询的工号:");
    scanf("%s", id);

    // 查找职工信息
    int i;
    for (i = 0; i < size; i++) {
        if (strcmp(employees[i].id, id) == 0) {
            printf("工号:%s\n", employees[i].id);
            printf("姓名:%s\n", employees[i].name);
            printf("性别:%s\n", employees[i].sex);
            printf("年龄:%d\n", employees[i].age);
            printf("基本工资:%lf\n", employees[i].baseSalary);
            printf("\n");
            return;
        }
    }

    // 没有找到该职工
    printf("职工不存在!\n");
}

// 删除职工信息
void deleteEmployee() {
    printf("\n====== 删除职工信息 ======\n");

    // 输入要删除的工号
    char id[10];
    printf("请输入要删除的工号:");
    scanf("%s", id);

    // 查找要删除的职工信息
    int i;
    for (i = 0; i < size; i++) {
        if (strcmp(employees[i].id, id) == 0) {
            // 将该职工后面的所有职工前移
            memcpy(&employees[i], &employees[i+1], sizeof(struct Employee) * (size - 1 - i));
            size--;
            printf("删除成功!\n");
            return;
        }
    }

    // 没有找到要删除的职工
    printf("职工不存在!\n");
}

// 修改职工信息
void modifyEmployee() {
    printf("\n====== 修改职工信息 ======\n");

    // 输入要修改的工号
    char id[10];
    printf("请输入要修改的工号:");
    scanf("%s", id);

    // 查找要修改的职工信息
    int i;
    for (i = 0; i < size; i++) {
        if (strcmp(employees[i].id, id) == 0) {
            printf("原始工号:%s\n", employees[i].id);

            // 输入修改后的职工信息
            printf("请输入新工号:");
            scanf("%s", employees[i].id);

            printf("请输入新姓名:");
            scanf("%s", employees[i].name);

            printf("请输入新性别:");
            scanf("%s", employees[i].sex);

            printf("请输入新年龄:");
            scanf("%d", &employees[i].age);

            printf("请输入新基本工资:");
            scanf("%lf", &employees[i].baseSalary);

            printf("修改成功!\n");
            return;
        }
    }

    // 没有找到要修改的职工
    printf("职工不存在!\n");
}

// 计算职工工资
void calculateSalary() {
    printf("\n====== 计算职工工资 ======\n");

    // 输入要计算工资的工号
    char id[10];
    printf("请输入要计算工资的工号:");
    scanf("%s", id);

    // 查找要计算工资的职工信息
    int i;
    for (i = 0; i < size; i++) {
        if (strcmp(employees[i].id, id) == 0) {
            double bonus, tax, totalSalary;
            printf("请输入绩效奖金:");
            scanf("%lf", &bonus);

            totalSalary = employees[i].baseSalary + bonus;
            if (totalSalary < 3000) {
                tax = totalSalary * 0.1;
            } else if (totalSalary < 5000) {
                tax = totalSalary * 0.15;
            } else {
                tax = totalSalary * 0.2;
            }

            double actualSalary = totalSalary - tax;
            printf("应发工资:%lf\n", totalSalary);
            printf("所得税:%lf\n", tax);
            printf("实发工资:%lf\n", actualSalary);
            return;
        }
    }

    // 没有找到要计算工资的职工
    printf("职工不存在!\n");
}

int main() {
    int option;

    while (1) {
        // 显示主菜单
        showMenu();

        // 获取用户输入的操作选项
        scanf("%d", &option);

        // 根据用户选择执行不同的操作
        switch (option) {
            case 1:
                addEmployee();
                break;

            case 2:
                showEmployee();
                break;

            case 3:
                deleteEmployee();
                break;

            case 4:
                modifyEmployee();
                break;

            case 5:
                calculateSalary();
                break;

            case 6:
                printf("\n再见!\n");
                return 0;

            default:
                printf("\n非法的操作选项,请重新选择!\n");
                break;
        }
    }
}

3. 示例说明

示例1:录入职工信息

====== 工资管理系统 ======
1. 录入职工信息
2. 查询职工信息
3. 删除职工信息
4. 修改职工信息
5. 计算职工工资
6. 退出系统
==========================
请选择操作选项:1

====== 录入职工信息 ======
请输入工号:1001
请输入姓名:张三
请输入性别:男
请输入年龄:25
请输入基本工资:3000

录入成功!

示例2:查询职工信息

====== 工资管理系统 ======
1. 录入职工信息
2. 查询职工信息
3. 删除职工信息
4. 修改职工信息
5. 计算职工工资
6. 退出系统
==========================
请选择操作选项:2

====== 查询职工信息 ======
请输入要查询的工号:1001
工号:1001
姓名:张三
性别:男
年龄:25
基本工资:3000.000000

以上就是C语言实现职工工资管理系统的示例代码及攻略。

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

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

相关文章

  • C语言中分支和循环的6种实现形式总结

    C语言中分支和循环的6种实现形式总结如下。 1. if语句 if语句是C语言中最基本的分支语句,用于根据条件的真假来选择性地执行不同的语句。 if (condition) { // if语句执行的代码块 } 示例代码: #include <stdio.h> int main() { int num; printf("请输入一个整数:&q…

    C 2023年5月23日
    00
  • C语言中的内联函数(inline)与宏定义(#define)详细解析

    C语言中的内联函数(inline)与宏定义(#define)详细解析 什么是内联函数 内联函数是C语言中的一种函数定义方式,它的定义和普通的函数定义方式不同,它以inline关键字开始,并与函数名之间不包含参数列表的括号。内联函数通常用于需要频繁调用、耗时短且代码比较简单的函数,例如加减乘除等算数运算。 内联函数的特点是函数调用时不需要进行栈帧的创建和销毁,…

    C 2023年5月23日
    00
  • c++11封装thread库的方法示例

    C++11封装thread库的方法示例 本文讲解在C++11中如何使用thread库进行线程管理,通过封装实现线程安全的应用程序。 为什么要使用线程 在计算机科学中,线程表示程序中执行的一条路径。一个进程通常包含一个或多个线程,多个线程可以并行执行,提高程序的处理效率;同时,也方便了对于程序中复杂、耗时的操作的调度和管理。 介绍封装thread库的方法 C+…

    C 2023年5月22日
    00
  • C++实现一个简单的线程池的示例代码

    下面是实现简单线程池的代码攻略。 什么是线程池? 线程池是一种用于管理多线程执行的机制,允许在需要时提供可分配的工作线程集中的线程。使用线程池的好处是可以减少线程的创建和销毁次数,避免线程频繁创建和销毁所带来的开销,也可以避免同时开启大量的线程造成系统资源的过度占用。在实际生产环境中,线程池通常具有限制线程数量、任务队列、线程管理等功能。 C++实现线程池的…

    C 2023年5月24日
    00
  • C语言 实现输入任意多个整数

    要实现输入任意多个整数,可以使用C语言中的循环和数组来完成。以下是具体实现的步骤: 步骤一:定义变量和数组 首先要定义一个整型数组,用来存储输入的整数。同时还要定义一个变量来记录输入的整数个数,以此方便后续的循环。 int nums[100]; // 定义一个数组,用来存储输入的整数 int count = 0; // 定义一个变量,用来记录输入的整数个数 …

    C 2023年5月23日
    00
  • C++ 智能指针深入解析

    C++ 智能指针深入解析 什么是智能指针? 在C++中,一个指针指向某个变量,但是由于指针是”裸”的,需要程序员显式地管理其生命周期。为了解决这个问题,C++11引入了智能指针。智能指针的用法和裸指针类似,但是会自动管理指针所指对象的生命周期。 智能指针的分类 C++中常用的智能指针有三种,它们分别是: unique_ptr:独占所有权的智能指针 share…

    C 2023年5月22日
    00
  • 中国式家长特长有哪些 特长种类及品质一览

    中国式家长特长有哪些 1. 家长特长一览 中国式家长的特长主要包括以下领域: 学术特长:对学术成果有着强烈的追求,希望自己的孩子在学术上有所突出。 才艺特长:对于音乐、美术、舞蹈、书法等领域有一定的天赋或爱好,希望孩子能够在这方面有所发展。 运动特长:注重体育锻炼,希望孩子在体育运动领域能够有所表现。 社交特长:去关注孩子的人际关系及社交技巧。 实用特长: …

    C 2023年5月22日
    00
  • C++继承中的对象构造与析构和赋值重载详解

    C++继承中的对象构造与析构和赋值重载详解 介绍 在C++面向对象编程中,继承是一种非常强大的设计模式。继承允许您创建一个新类,该新类从一个或多个现有类继承属性。在继承过程中,有几个重要的概念,包括对象构造和析构以及赋值操作符的重载。本文将重点介绍这些概念,以及在继承过程中如何正确使用它们。 对象构造 当从一个类派生出另一个类时,基类构造函数不会自动调用。相…

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