RayGroup Inc

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1679 | 回复: 13

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

[复制链接]

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
发表于 2022-1-1 21:49:45 | 显示全部楼层 |阅读模式
我们知道,C语言中主函数与各个子函数之间为相互调用的关系,

通过对主函数与子函数之间的相互调用,可实现出丰富的功能,

在对程序功能有了简单分析后,便可对相应功能进行模块化设计,便于程序的开发。

在此做出一些总结


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

职业-使用C语言简单实现的员工资管理系统(1)


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

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 10:23:59 | 显示全部楼层
分析

员工工资管理系统进入主菜单选择要操作的选项,实现根据菜单提示输入员工信息,展示员工信息

根据提示输入的员工编号或姓名与已输入的员工信息相比较实现查找功能、删除功能,将操作过的员工信息保存到文件中,退出系统的功能。
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 10:58:01 | 显示全部楼层
前期准备

我们知道,员工的信息包括编号、姓名、年龄、基本工资、绩效工资、总工资等,需要建立一个结构体数组来存放这些信息

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

为便于后续函数使用结构体,需要将其定义在全局变量中
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 10:58:33 | 显示全部楼层

菜单子函数

首先建立员工工资管理系统的菜单,通过自己定义void menu()函数实现在整个系统的循环操作。

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");
}
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 10:58:57 | 显示全部楼层
输入子函数

实现对员工各种基本信息的录入功能

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;
}
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 10:59:48 | 显示全部楼层
删除子函数

实现对员工各种基本信息的删除功能

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;
}
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 11:00:56 | 显示全部楼层
搜索子函数

通过菜单按工号、姓名查找选项,进而查找员工信息

若键盘输入的员工号或姓名正确,则系统会将该工的全部录入信息显示出来

若不正确,则输出“未找到该记录”的提示语

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;
    }
}
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 11:01:53 | 显示全部楼层
修改子函数

实现对员工各种基本信息的修改功能

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");
}
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1640
 楼主| 发表于 2022-1-3 11:02:17 | 显示全部楼层
插入子函数

通过定义的函数将员工信息插入到列表中

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;
}
为灵感而生,让创作自如。
回复

使用道具 举报

57

主题

225

帖子

1640

积分

管理员

Rank: 9Rank: 9Rank: 9

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

通过定义的函数将员工信息保存到文件中

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);
}
为灵感而生,让创作自如。
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-5-20 07:05 Processed in 0.052373 second(s), 23 queries .

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

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