信息管理系统

员工信息管理系统

要求:

输入5个员工的信息(输入),每个员工含有成员名为“工号、姓名、基本工资、补贴、奖金、水电费、房租、实发工资、工资排名”,编写函数完成下列要求:
(1)输入一个员工的工号,查询该员工的信息并输出,若不存在显示没找到;(查询) 
(2)输入一个新员工的信息,按工号顺序将该员工的信息插入后输出;(显示)
(3)输入一个已存在员工的姓名信息,删除该员工的信息后输出;(删除)
(4)修改某员工的信息;(修改)
(5)求每个员工的实发工资(实发工资=基本工资+补贴+奖金-水电费-房租); 
(6)求所有员工的基本工资、补贴、奖金、水电费、房租和实发工资的总和并输出; 
(7)对所有员工的信息按实发工资升序排序,并填写工资排名后输出。
(由四个人分别完成各种函数,然后进行函数的调用,汇总,完成主程序。)

环境:

语言:C
编译工具:Dev C++

主页面:

在这里插入图片描述

代码

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

#define MAX_STAFF 100  // 最大员工数量

typedef struct {
    int number;        // 工号
    char name[20];     // 姓名
    int basePay;       // 基本工资
    int allowance;     // 补贴
    int bonus;         // 奖金
    int wePay;         // 水电费
    int houseRent;     // 房租
    int netPayRoll;    // 实际工资
} Staff;

Staff a[MAX_STAFF];
int M = 0;  // 当前员工数量

void netPayRoll() { // 计算每个员工的实际工资
    for (int i = 0; i < M; i++) {
        a[i].netPayRoll = a[i].basePay + a[i].allowance + a[i].bonus - a[i].wePay - a[i].houseRent;
    }
}

void refer() { // 查询员工信息
    int x, t, found = 0;
    if (M == 0) {
        printf("无数据\n");
        return;
    }

    printf("输入要查询员工的工号: ");
    scanf("%d", &x);

    for (int i = 0; i < M; i++) {
        if (x == a[i].number) { // 按工号查找员工
            netPayRoll();
            printf("工号\t姓名\t基本工资\t补贴\t奖金\t水电费\t房租\t实发工资\t工资排名\n");
            printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\n",
                   a[i].number, a[i].name, a[i].basePay, a[i].allowance,
                   a[i].bonus, a[i].wePay, a[i].houseRent, a[i].netPayRoll, i + 1);
            found = 1;
            break;
        }
    }

    if (!found) {
        printf("员工未找到。\n");
    }

    printf("\n继续查询请按1,返回主菜单请按0: ");
    scanf("%d", &t);
    if (t == 1) {
        refer();
    }
}

void add() { // 添加员工信息
    int b = 1, c;
    while (b) {
        if (M >= MAX_STAFF) {
            printf("员工信息已满,无法添加更多员工。\n");
            break;
        }
        printf("工号   姓名   基本工资   补贴   奖金   水电费   房租 \n");
        scanf("%d %s %d %d %d %d %d", &a[M].number, a[M].name, &a[M].basePay,
              &a[M].allowance, &a[M].bonus, &a[M].wePay, &a[M].houseRent);
        M++;
        printf("是否继续录入?请输入1(继续输入) OR 0(结束输入)\n");
        scanf("%d", &c);
        if (c == 0) {
            b = 0;
            printf("输入完成\n");
        }
    }
}

void change() { // 修改员工信息
    int z, found = 0;
    char x[20];
    if (M == 0) {
        printf("无数据\n");
        return;
    }

    printf("请输入要修改的员工号:");
    scanf("%d", &z);

    for (int i = 0; i < M; i++) {
        if (z == a[i].number) {
            printf("请输入新的工号:");
            scanf("%d", &a[i].number);
            printf("请输入新的姓名:");
            scanf("%s", x);
            strcpy(a[i].name, x);
            printf("请输入新的基本工资:");
            scanf("%d", &a[i].basePay);
            printf("请输入新的补贴:");
            scanf("%d", &a[i].allowance);
            printf("请输入新的奖金:");
            scanf("%d", &a[i].bonus);
            printf("请输入新的水电费:");
            scanf("%d", &a[i].wePay);
            printf("请输入新的房租:");
            scanf("%d", &a[i].houseRent);
            found = 1;
            break;
        }
    }

    if (!found) {
        printf("没有找到你要修改的信息。\n");
    } else {
        display();
    }
}

void Delete() { // 删除员工信息
    int n, found = 0;
    char Name[20];
    if (M == 0) {
        printf("无数据\n");
        return;
    }

    printf("请输入要删除的职工的姓名: ");
    scanf("%s", Name);

    for (int i = 0; i < M; i++) {
        if (strcmp(a[i].name, Name) == 0) {
            printf("已找到此人\n");
            printf("确认删除请按 1,取消删除请按 0: ");
            scanf("%d", &n);
            if (n == 1) {
                for (int j = i; j < M - 1; j++) {
                    a[j] = a[j + 1];
                }
                M--;
                found = 1;
            }
            break;
        }
    }

    if (found) {
        printf("删除成功!\n");
    } else {
        printf("对不起,贵公司没有该员工!\n");
    }

    printf("继续删除请按1,返回主菜单请按0: ");
    scanf("%d", &n);
    if (n == 1) {
        Delete();
    }
}

void synthesis() { // 各项数据之和
    int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, sum5 = 0, sum6 = 0;
    if (M == 0) {
        printf("无数据\n");
        return;
    }

    for (int i = 0; i < M; i++) {
        sum1 += a[i].basePay;
        sum2 += a[i].allowance;
        sum3 += a[i].bonus;
        sum4 += a[i].wePay;
        sum5 += a[i].houseRent;
        sum6 += a[i].netPayRoll;
    }

    printf("员工基本工资的总和为:%d\n", sum1);
    printf("员工的补贴总和为:%d\n", sum2);
    printf("员工的奖金总和为:%d\n", sum3);
    printf("员工的水电费总和为:%d\n", sum4);
    printf("员工的房租总和为:%d\n", sum5);
    printf("员工的实发工资总和为:%d\n", sum6);
}

void rank() { // 按实发工资排序
    Staff temp;
    for (int j = 0; j < M - 1; j++) {
        for (int i = 0; i < M - 1 - j; i++) {
            if (a[i].netPayRoll < a[i + 1].netPayRoll) {
                temp = a[i];
                a[i] = a[i + 1];
                a[i + 1] = temp;
            }
        }
    }
}

void display() { // 显示所有员工信息
    if (M == 0) {
        printf("数据空\n");
        return;
    }

    netPayRoll();
    rank();
    printf("工号\t姓名\t基本工资\t补贴\t奖金\t水电费\t房租\t实发工资\t工资排名\n");
    for (int i = 0; i < M; i++) {
        printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\n",
               a[i].number, a[i].name, a[i].basePay, a[i].allowance,
               a[i].bonus, a[i].wePay, a[i].houseRent, a[i].netPayRoll, i + 1);
    }
}

int main() {
    int n;
    while (1) {
        printf("\n");
        printf("\t*****职 工 信 息 管 理 系 统*****\n");
        printf("\t*    1. 输 入 职 工 信 息       *\n");
        printf("\t*    2. 查 询 职 工 信 息       *\n");
        printf("\t*    3. 添 加 职 工 信 息       *\n");
        printf("\t*    4. 修 改 职 工 信 息       *\n");
        printf("\t*    5. 浏 览 职 工 信 息       *\n");
        printf("\t*    6. 删 除 职 工 信 息       *\n");
        printf("\t*    7. 职 工 信 息 总 和       *\n");
        printf("\t*    0. 退 出 系 统             *\n");
        printf("\t*********************************\n");
        printf("\n");
        printf("输入你选择的序号:");
        scanf("%d", &n);

        switch (n) {
            case 1: input(); break;
            case 2: refer(); break;
            case 3: add(); break;
            case 4: change(); break;
            case 5: display(); break;
            case 6: Delete(); break;
            case 7: synthesis(); break;
            case 0: return 0;
            default: printf("无该选项,请重新输入!\n"); break;
        }
    }
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

? Adore ?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值