职工信息管理系统系统设计

系统基本信息包括职工工号、姓名、部门、职级、基本工资、加班工资、奖金、公积金、保险、总工资等。建议用结构体数组存储,或动态分配内存。 
系统以菜单方式工作;
职工信息录入、浏览和删除功能;
职工信息查询功能,查询方式:按工号查询或部门查询;
职工信息修改功能;
统计基本工资>3000的人数;
按照总工资排序;

定义结构体数组实现相关功能就是了,都是基本操作

img

代码:

#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//定义职工结构体
typedef struct _employee
{
    char id[10]; //编号
    char name[20];//姓名
    char partment[20];//部门
    int zj; //职级
    float gzBase; //基本工资
    float gzJb; //加班工资
    float jj; //奖金
    float gjj; //公积金
    float bx; //保险
    float zgz; //总工资
}Employee;


//录入信息
void input(Employee emp[],int* n)
{
    system("cls");
    
    printf("请输入员工编号:");
    scanf("%s", emp[*n].id);
    printf("请输入员工姓名:");
    scanf("%s", emp[*n].name);
    printf("请输入员工部门:");
    scanf("%s", emp[*n].partment);
    printf("请输入员工职级:");
    scanf("%d", &emp[*n].zj);
    printf("请输入员工基本工资:");
    scanf("%f", &emp[*n].gzBase);
    printf("请输入员工加班工资:");
    scanf("%f", &emp[*n].gzJb);
    printf("请输入员工奖金:");
    scanf("%f", &emp[*n].jj);
    printf("请输入员工公积金:");
    scanf("%f", &emp[*n].gjj);
    printf("请输入员工保险:");
    scanf("%f", &emp[*n].bx);

    //计算总工资(减去公积金和保险)
    emp[*n].zgz = emp[*n].gzBase + emp[*n].gzJb + emp[*n].jj - emp[*n].gjj - emp[*n].bx;

    *n = (*n) + 1;

    printf("添加成功!\n");
    system("pause");
}

//显示单条员工信息
void showInfo(Employee p)
{
    printf("%s %s %s %d ", p.id, p.name, p.partment, p.zj);
    printf("%.2f %.2f %.2f %.2f %.2f %.2f\n", p.gzBase, p.gzJb, p.jj, p.gjj, p.bx,p.zgz);
}

//查询
void search(Employee emp[],int n)
{
    char tmp[20];
    int flag = 0;
    int i;
    system("cls");
    printf("请输入需要查找的员工编号或者部门:");
    scanf("%s", tmp);
    for(i=0;i<n;i++)
    {
        if (strcmp(emp[i].id, tmp) == 0 || strcmp(emp[i].partment, tmp) == 0)
        {
            flag = 1;
            showInfo(emp[i]);
        }
    }
    if (flag == 0)
        printf("查无此人!\n");
    system("pause");
}

//修改
void changeInfo(Employee emp[],int n)
{
    char id[20];
    int i;
    int flag = 0;
    system("cls");
    printf("请输入需要修改信息的职工编号:");
    scanf("%s", id);
    for(i=0;i<n;i++)
    {
        if (strcmp(emp[i].id, id) == 0)
        {
            flag = 1;
            printf("修改前的职工信息:\n");
            showInfo(emp[i]);
            //修改信息
            //printf("请输入员工编号:"); //默认编号不可更改
            //scanf("%s", emp[i].id);
            printf("请输入员工姓名:");
            scanf("%s", emp[i].name);
            printf("请输入员工部门:");
            scanf("%s", emp[i].partment);
            printf("请输入员工职级:");
            scanf("%d", &emp[i].zj);
            printf("请输入员工基本工资:");
            scanf("%f", &emp[i].gzBase);
            printf("请输入员工加班工资:");
            scanf("%f", &emp[i].gzJb);
            printf("请输入员工奖金:");
            scanf("%f", &emp[i].jj);
            printf("请输入员工公积金:");
            scanf("%f", &emp[i].gjj);
            printf("请输入员工保险:");
            scanf("%f", &emp[i].bx);

            printf("修改后的职工信息:\n");
            showInfo(emp[i]);

            break;
        }
        
    }
    if (flag == 0)
        printf("查无此人!\n");
    system("pause");
}

//删除记录
void deleteInfo(Employee emp[],int *n)
{
    char id[20];
    int op, i, j;
    int flag = 0;
    system("cls");
    printf("请输入要删除的职工编号:");
    scanf("%s", id);
    
    for(i=0;i<*n;i++)
    {
        if (strcmp(emp[i].id, id) == 0)
        {
            flag = 1;
            printf("是否要删除(1.删除 2.取消删除)? ");
            scanf("%d", &op);
            if (op == 1)
            {
                for (j = i; j < *n - 1; j++)
                    emp[j] = emp[j + 1];
                *n = (*n) - 1;
                printf("删除成功!\n");
                break;
            }
        }
    }
    if (flag == 0)
        printf("查无此人!\n");
    system("pause");
}
//统计基本工资>3000的人数
void Tongji(Employee emp[],int n)
{
    int i, cnt = 0;
    system("cls");
    for(i=0;i<n;i++)
    {
        if (emp[i].gzBase > 3000)
            cnt++;
    }
    printf("基本工资大于3000的人数:%d\n", cnt);
    system("pause");
}

//根据总工资排序
void sortByzgz(Employee emp[], int n)
{
    int i, j;
    Employee t;
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (emp[j].zgz < emp[j + 1].zgz)
            {
                t = emp[j];
                emp[j] = emp[j + 1];
                emp[j + 1] = t;
            }
        }
    }
    //显示
    printf("排序完毕:\n");
    for (i = 0; i < n; i++)
        showInfo(emp[i]);
}

//显示所有信息
void showAll(Employee emp[], int n)
{
    int i;
    system("cls");
    if (n == 0)
    {
        printf("目前暂无员工\n");
        system("pause");
        return;
    }
    printf("所有员工信息:\n");
    for (i = 0; i < n; i++)
        showInfo(emp[i]);
    system("pause");
}

int main()
{
    int op;
    Employee all[1000];
    int n = 0; //实际员工人数
    while (1)
    {
        system("cls");
        printf("-------------职工工资管理系统------------\n");
        printf("  1.录入信息\n");
        printf("  2.查询信息\n");
        printf("  3.修改信息\n");
        printf("  4.删除信息\n");
        printf("  5.统计基本工资大于3000的人数\n");
        printf("  6.根据总工资排序\n");
        printf("  7.显示所有员工信息\n");
        printf("  0.退出系统\n");
        printf("请选择:\n");
        scanf("%d", &op);
        switch (op)
        {
        case 0:return 0;
        case 1:input(all,&n); break;
        case 2:search(all,n); break;
        case 3:changeInfo(all,n); break;
        case 4:deleteInfo(all,&n); break;
        case 5:Tongji(all,n); break;
        case 6:sortByzgz(all, n); break;
        case 7:showAll(all, n); break;
        }

    }
}






您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632