RayGroup Inc

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
楼主: IceTeacher

使用C语言简单实现的员工资管理系统

[复制链接]

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 11:03:47 | 显示全部楼层
展示子函数

通过定义的函数将员工信息在屏幕上输出

int display(ZGGZ a[], int n)
{
    int i = 0;

    if (n == 0)
    {
        printf("无数据\n\n");
        return n;
    }

    do
    {
        printf("————————————————————————————————\n");
        printf("员工编号:%s\n", a[i].num);
        printf("员工姓名:%s\n", a[i].name);
        printf("员工年龄:%s\n", a[i].old);
        printf("基本工资:%0.2f\n", a[i].jbgz);
        printf("绩效工资:%0.2f\n", a[i].jxgz);
        printf("总工资:%0.2f\n", a[i].zgz);
        i++;
    } while (i < n);

    return n;
}
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 11:05:30 | 显示全部楼层
主函数

首先在文件中读取已经保存在文件中的数据,再调用菜单,并根据用户输入调用各个子函数,实现各项功能

int main()
{
    int selete, c = 0;
    int i = 0;
    int z = 0;
    char q, p, x, s;
    ZGGZ b[100];
    FILE *fp;
    if ((fp = fopen("sj.txt", "rb")) == NULL)
        printf("找不到文件\n");
    else
    {
        do
        {
            fread(&b[i], sizeof(struct employee), 1, fp);
            i++;
        } while (!feof(fp));
        fclose(fp);
        c = i - 1;
    }

    while (1)
    {
        menu();
        scanf("%d", &selete);
        if (selete == 0)
        {
            printf("感谢您的使用,谢谢  o(* ̄▽ ̄*)o \n");
            break;
        }

        switch (selete)
        {
        case 1:
            c = input(b, c);
            break;

        case 2:
        {
            display(b, c);
            do
            {
                c = del(b, c);
                printf("是否继续删除,是按y,否则请按其他值\n");
                getchar();
                scanf("%c", &p);
            } while (p == 'Y' || p == 'y');

            break;
        }

        case 3:
        {
            do
            {
                search(b, c);
                printf("是否继续查找,是按y,否则请按其他值\n");
                getchar();
                scanf("%c", &x);
            } while (x == 'Y' || x == 'y');
            break;
        }

        case 4:
        {
            display(b, c);
            do
            {
                mod(b, c);
                printf("是否继续修改,是按y,否则请按其他值\n");
                getchar();
                scanf("%c", &q);
            } while (q == 'Y' || q == 'y');
            break;
        }

        case 5:
        {
            do
            {
                c = insert(b, c);
                printf("是否继续插入,是按y,否则请按其他值\n");
                getchar();
                scanf("%c", &s);
            } while (s == 'Y' || s == 'y');
            break;
        }

        case 6:
        {
            char ch1;
            printf("您是否确定保存员工信息?\n\n输入y确认,否则请输入其他值\n");
            getchar();
            scanf("%c", &ch1);

            if (ch1 == 'y' || ch1 == 'Y')
            {
                save(b, c);

                printf("\n输入任意值继续\n");
                getchar();
                scanf("%c", &s);
                break;
            }
            else
                break;
        }

        case 7:
        {

            c = display(b, c);
            printf("\n输入任意值继续\n");
            getchar();
            scanf("%c", &s);

            break;
        }

        default:
            printf("请重新输入范围为0-7的数字\n");
        }
    }
    return 0;
}
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 11:08:35 | 显示全部楼层
运行结果

职业-使用C语言简单实现的员工资管理系统(1)
图1   输入员工信息功能界面

职业-使用C语言简单实现的员工资管理系统(2)
图2   按员工编号号查询员工信息界面

职业-使用C语言简单实现的员工资管理系统(3)
图3  按工号删除指定员工的信息

职业-使用C语言简单实现的员工资管理系统(4)
图4  将员工信息保存到指定文件中界面

职业-使用C语言简单实现的员工资管理系统(5)
图5  展示员工信息

为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 11:33:27 | 显示全部楼层
附录

本程序使用msvc编译器正常运行,

由于在菜单子函数调用清屏函数system("cls"),使用头文件<stdlib.h>,不保证在GCC或者Clang编译器下可正常运行

本人未进一步测试,理论上删除清屏函数system("cls")和头文件<stdlib.h>后,任意编译环境下即可正常运行

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

typedef struct employee
{
    char num[10];  //保存员工编号
    char name[15]; //保存员工姓名
    char old[15];  //保存员工年龄
    float jbgz;    //保存员工基本工资
    float jxgz;    //保存绩效工资
    float zgz;     //保存总工资
} ZGGZ;

void menu()
{
    system("cls");
    printf("菜单\n");
    printf("1. 输入员工信息\n");
    printf("2. 删除员工信息\n");
    printf("3. 查找员工信息\n");
    printf("4. 修改员工信息\n");
    printf("5. 插入员工信息\n");
    printf("6. 保存员工信息\n");
    printf("7. 查看员工信息\n");
    printf("0. 退出\n");
    printf("请选择您要进行的操作\n");
}

int input(ZGGZ a[], int k)
{
    int j, x, z = 0;
    char str[10];
    j = x = 0;

    printf("请输入员工的编号:\n");
    scanf("%s", str);
    strcpy(a[k].num, str);
    for (j = 0; j < k; j++) //判断是否有重复值
    {
        if (strcmp(a[j].num, str) == 0)
        {
            printf("已经有工号为%s的员工信息!请重新输入员工号。\n\n", str);
            k = input(a, k);
            return k;
        }
    }

    printf("请输入员工的姓名:");
    scanf("%s", a[k].name);

    printf("请输入员工的年龄:");
    scanf("%s", a[k].old);

    printf("请输入员工的基本工资:");
    scanf("%f", &a[k].jbgz);

    printf("请输入员工的绩效工资:");
    scanf("%f", &a[k].jxgz);

    a[k].zgz = a[k].jbgz + a[k].jxgz;

    k++;

    return k;
}

int del(ZGGZ a[], int y)
{
    int i = 0;
    int x = 0;
    char str[15];
    printf("请输入你要删除的编号或姓名:");
    scanf("%s", str);
    printf("--------删除中--------\n");
    for (i = 0; i < y; i++)
        if (!strcmp(str, a[i].num) || !strcmp(str, a[i].name))
        {
            while (i < y)
            {
                strcpy(a[i].num, a[i + 1].num);
                strcpy(a[i].name, a[i + 1].name);
                strcpy(a[i].old, a[i + 1].old);
                a[i].jbgz = a[i + 1].jbgz;
                a[i].jxgz = a[i + 1].jxgz;
                a[i].zgz = a[i + 1].zgz;
                i++;
            }
            x++;
        }

    if (x == 0)
    {
        printf("输入的编号或姓名不存在,请重新输入:\n\n");
    }

    else
        printf("删除成功\n\n");
    return y - x;
}

int search(ZGGZ a[], int y)
{
    int i;
    int x = 0;
    char str[15];
    printf("请输入你要查找的编号或姓名:");
    scanf("%s", str);
    for (i = 0; i < y; i++)
        if (!strcmp(str, a[i].num) || !strcmp(str, a[i].name))
        {
            printf("员工编号:%s\n", a[i].num);
            printf("员工姓名:%s\n", a[i].name);
            printf("员工年龄:%s\n", a[i].old);
            printf("基本工资:%0.2f\n", a[i].jbgz);
            printf("绩效工资:%0.2f\n", a[i].jxgz);
            printf("总工资:%0.2f\n", a[i].zgz);

            x++;
        }

    if (x == 0)
    {
        printf("未找到该记录\n");
        return 0;
    }
}
void mod(ZGGZ a[], int y)
{
    int i;
    int x = 0;
    char str[15];
    printf("\n请输入你要修改的编号:");
    scanf("%s", str);
    for (i = 0; i < y; i++)
        if (!strcmp(str, a[i].num) || !strcmp(str, a[i].name))
        {
            printf("请输入修改后员工的姓名:");
            scanf("%s", a[i].name);

            printf("请输入修改后员工的年龄:");
            scanf("%s", a[i].old);

            printf("请输入修改后员工的基本工资:");
            scanf("%f", &a[i].jbgz);

            printf("请输入修改后员工的绩效工资:");
            scanf("%f", &a[i].jxgz);

            a[i].zgz = a[i].jbgz + a[i].jxgz;

            printf("-------------修改成功------------\n");
            x++;
        }
    if (x == 0)
        printf("未找到要修改的编号\n");
}

int insert(ZGGZ a[], int y)
{
    int i;
    int x = 0;
    char str[15];
    printf("请输入你要插入的编号:");
    scanf("%s", str);
    printf("请输入一条新的记录信息:\n");
    for (i = 0; i < y; i++)
        if (strcmp(str, a[i].num) == 0)
        {
            x = i;
            for (i = y; i > x + 1; i--)
            {
                strcpy(a[i].num, a[i - 1].num);
                strcpy(a[i].name, a[i - 1].name);
                strcpy(a[i].old, a[i - 1].old);
                a[i].jbgz = a[i - 1].jbgz;
                a[i].jxgz = a[i - 1].jxgz;
                a[i].zgz = a[i - 1].zgz;
            }
        }
    x++;

    printf("请输入员工的编号:");
    scanf("%s", a[x].num);

    printf("请输入员工的姓名:");
    scanf("%s", a[x].name);

    printf("请输入员工的年龄:");
    scanf("%s", a[x].old);

    printf("请输入员工的基本工资:");
    scanf("%f", &a[x].jbgz);

    printf("请输入员工的绩效工资:");
    scanf("%f", &a[x].jxgz);

    a[x].zgz = a[x].jbgz + a[x].jxgz;
    return y + 1;
}

void save(ZGGZ a[], int n)
{
    FILE *fp;
    int i, n1 = 0;

    if ((fp = fopen("sj.txt", "wb")) == NULL)
    {
        printf("不能打开文件\n");
        return;
    }

    for (i = 0; i < n; i++)
    {
        if (fwrite(&a[i], sizeof(struct employee), 1, fp) != 1)
        {
            printf("文件写入错误\n");
            n1++;
        }
    }

    if (n1 == 0)
        printf("保存成功\n");

    fclose(fp);
}

int display(ZGGZ a[], int n)
{
    int i = 0;

    if (n == 0)
    {
        printf("无数据\n\n");
        return n;
    }

    do
    {
        printf("————————————————————————————————\n");
        printf("员工编号:%s\n", a[i].num);
        printf("员工姓名:%s\n", a[i].name);
        printf("员工年龄:%s\n", a[i].old);
        printf("基本工资:%0.2f\n", a[i].jbgz);
        printf("绩效工资:%0.2f\n", a[i].jxgz);
        printf("总工资:%0.2f\n", a[i].zgz);
        i++;
    } while (i < n);

    return n;
}

int main()
{
    int selete, c = 0;
    int i = 0;
    int z = 0;
    char q, p, x, s;
    ZGGZ b[100];
    FILE *fp;
    if ((fp = fopen("sj.txt", "rb")) == NULL)
        printf("找不到文件\n");
    else
    {
        do
        {
            fread(&b[i], sizeof(struct employee), 1, fp);
            i++;
        } while (!feof(fp));
        fclose(fp);
        c = i - 1;
    }

    while (1)
    {
        menu();
        scanf("%d", &selete);
        if (selete == 0)
        {
            printf("感谢您的使用,谢谢  o(* ̄▽ ̄*)o \n");
            break;
        }

        switch (selete)
        {
        case 1:
            c = input(b, c);
            break;

        case 2:
        {
            display(b, c);
            do
            {
                c = del(b, c);
                printf("是否继续删除,是按y,否则请按其他值\n");
                getchar();
                scanf("%c", &p);
            } while (p == 'Y' || p == 'y');

            break;
        }

        case 3:
        {
            do
            {
                search(b, c);
                printf("是否继续查找,是按y,否则请按其他值\n");
                getchar();
                scanf("%c", &x);
            } while (x == 'Y' || x == 'y');
            break;
        }

        case 4:
        {
            display(b, c);
            do
            {
                mod(b, c);
                printf("是否继续修改,是按y,否则请按其他值\n");
                getchar();
                scanf("%c", &q);
            } while (q == 'Y' || q == 'y');
            break;
        }

        case 5:
        {
            do
            {
                c = insert(b, c);
                printf("是否继续插入,是按y,否则请按其他值\n");
                getchar();
                scanf("%c", &s);
            } while (s == 'Y' || s == 'y');
            break;
        }

        case 6:
        {
            char ch1;
            printf("您是否确定保存员工信息?\n\n输入y确认,否则请输入其他值\n");
            getchar();
            scanf("%c", &ch1);

            if (ch1 == 'y' || ch1 == 'Y')
            {
                save(b, c);

                printf("\n输入任意值继续\n");
                getchar();
                scanf("%c", &s);
                break;
            }
            else
                break;
        }

        case 7:
        {

            c = display(b, c);
            printf("\n输入任意值继续\n");
            getchar();
            scanf("%c", &s);

            break;
        }

        default:
            printf("请重新输入范围为0-7的数字\n");
        }
    }
    return 0;
}



为灵感而生,让创作自如。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2024-5-9 17:38 Processed in 0.054120 second(s), 21 queries .

© 2024 RayGroup Inc Powered by Discuz! X3.4 Theme by Jvmao 豫ICP备19036546号

快速回复 返回顶部 返回列表