c程序设计-职工管理系统

职工管理系统


在这里插入图片描述

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 20
///
struct Earned//应得收入
{
    int basic;//基本工资
    int duty;//职务工资
    int allowance;//津贴
};
struct actual//实际工资
{
    int medical;//medical insurance医疗保险
    int fund;//accumulation fund公积金
    int water;//water and electricity水电费
};
struct staff//staff salaries职工工资
{
    char no[20];
    char name[20];
    struct Earned income;//收入
    struct actual expend;//支出
    int EAENDINCOME;
    int ACTUALINCOME;
}s[M];
///
void input();//读取数据
void print();//输出数据
void menu();//主目录
void OPEN();//主运行函数
void menu2();//查询菜单
void refermenu();//查询函数 
void referno();//按职工号查询
void refername();//按姓名查询
void referincome();//查询最低工资信息
void modify();//修改数据 
void AddData();//添加数据
void Delete();//删除数据
void menu3();//排序菜单
void ordering();//排序函数
void orbasic();//按基本工资排序
void oractual();//按实际工资排序
void statistics();//统计
//
int i = 0;//全局变量i用来表示数据的行数
char title[100];
/
int main()
{
    input();
    OPEN();
}
//
void menu()//主菜单
{
    printf("______________________________\n");
    printf("|        主   目  录          |\n");
    printf("|____________________________|\n");
    printf("|      1.打印工资条           |\n");
    printf("|      2.查询信息             |\n");
    printf("|      3.修改信息             |\n");
    printf("|      4.添加信息             |\n");
    printf("|      5.删除信息             |\n");
    printf("|      6.进行排序             |\n");
    printf("|      7.统计信息             |\n");
    printf("|____________________________|\n");
}
///
void OPEN()//主运行函数
{
    int	Q;
    do
    {
    	menu();
        printf("请输入你要执行的功能->");
        scanf("%d",&Q);

        switch (Q)
        {
        case 1:
            print();
            break;
        case 2:
			refermenu();
            break;
        case 3:
            modify();
            break;
        case 4:
            AddData();
            break;
        case 5:
            Delete();
            break;
        case 6:
            ordering();
            break;
        case 7:
            statistics();
            break;
        
        
        default:
            printf("你输入的数字有误,请在1——7中选择!\n");
            break;
        }
    } while (Q);
    
}

void menu2()//查询菜单
{
    printf("______________________________\n");
    printf("|        查 询  页 面         |\n");
    printf("|____________________________|\n");
    printf("|      1.按职工号查询         |\n");
    printf("|      2.按姓名查询           |\n");
    printf("|      3.查询最低工资信息     |\n");
    printf("|      0.返回上一级目录       |\n");
    printf("|____________________________|\n");
}
///
void refermenu()//查询函数
{
    int Q;
    do
    {
    	menu2();
        printf("请输入你要执行的功能->");
        scanf("%d",&Q);

        switch (Q)
        {
        case 1:
            referno();
            break;
        case 2:
            refername();
            break;
        case 3:
			referincome();
			break; 
        case 0:
            OPEN();
            break;
        
        default:
            printf("你输入的数字有误,请在0-2中选择!\n");
            break;
        }
    } while (Q);
    
}
///
void menu3()
{
    printf("______________________________\n");
    printf("|        查 询  页 面         |\n");
    printf("|____________________________|\n");
    printf("|      1.按基本工资排序       |\n");
    printf("|      2.按实发工资排序       |\n");
    printf("|      0.返回上一级目录       |\n");
    printf("|____________________________|\n");
}
/
void ordering()
{
    int Q;
    do
    {
    	menu3();
        printf("请输入你要执行的功能->");
        scanf("%d",&Q);

        switch (Q)
        {
        case 1:
            orbasic();
            break;
        case 2:
            //oractual();
            break;
        case 0:
            OPEN();
            break;
        
        default:
            printf("你输入的数字有误,请在0-2中选择!\n");
            break;
        }
    } while (Q);
}
///
void input()//读取数据
{
    FILE  *fp; 
	fp=fopen("ZDH0121.txt","r");  //以只读方式打开文件,并用文件指针FP指向它 
	if(fp==NULL)   //文件打开失败 
	{
	    printf("文件打开失败!");
	    exit(0);
	}
    fgets(title,100,fp);
    while (!feof(fp))
    {
        fscanf(fp,"%s%s%d%d%d%d%d%d",s[i].no,s[i].name,
        &s[i].income.basic,&s[i].income.duty,&s[i].income.allowance,
        &s[i].expend.medical,&s[i].expend.fund,&s[i].expend.water);
        //计算应得收入和实际收入
        s[i].EAENDINCOME = s[i].income.basic + s[i].income.duty + s[i].income.allowance;
        s[i].ACTUALINCOME = s[i].EAENDINCOME - (s[i].expend.fund + s[i].expend.medical + s[i].expend.water);
        i++;
    }
     
    fclose(fp);
}

void print()//输出数据
{
    FILE *fp;
    fp = fopen("工资条信息.txt","w");
    if (fp==NULL)
    {
        printf("文件打开失败!");
        exit(0);
    }
    //fputs(fp,title);
    fprintf(fp,"职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    int j = 0;
    for ( j = 0; j < i; j++)
    {
        fprintf(fp,"%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
        s[j].income.basic,s[j].income.duty,s[j].income.allowance,
        s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
        s[j].EAENDINCOME,s[j].ACTUALINCOME);

    }
    printf("工资条信息已成功存放在 工资条信息.txt 文件中\n");
    printf("工资条打印信息如下:\n");
    printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
        s[j].income.basic,s[j].income.duty,s[j].income.allowance,
        s[j].expend.medical,s[j].expend.fund,s[j].expend.water,s[j].EAENDINCOME,s[j].ACTUALINCOME);

    }

    fclose(fp);
}

void referno()//按职工号查询
{
    char nokey[100];
    printf("请输入你要查询的职工号->");
    scanf("%s",nokey);
    int j,flag = 0;

    for ( j = 0; j < i; j++)
    {

        if (strcmp(nokey,s[j].no)==0)
        {
            printf("已经查询到你要查找的信息->\n");
            printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
            printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
            s[j].income.basic,s[j].income.duty,s[j].income.allowance,
            s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
            s[j].EAENDINCOME,s[j].ACTUALINCOME);
            flag = 1;
            break;
        }
    }

    if (flag == 0)
    {
        printf("抱歉!你要查找的信息不存在!\n");
    }
    

}
//
void refername()//按职工姓名查询
{
    char nokey[100];
    printf("请输入你要查询的职工姓名->");
    scanf("%s",nokey);
    int j,flag = 0;

    for ( j = 0; j < i; j++)
    {

        if (strcmp(nokey,s[j].name)==0)
        {
            printf("已经查询到你要查找的信息->\n");
            printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
            printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
            s[j].income.basic,s[j].income.duty,s[j].income.allowance,
            s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
            s[j].EAENDINCOME,s[j].ACTUALINCOME);
            flag = 1;
            break;
        }
    }

    if (flag == 0)
    {
        printf("抱歉!你要查找的信息不存在!\n");
    }
    

}
///
void referincome()
{
    int key;
    printf("请输入你要查询最低实发工资->");
    scanf("%d",&key);
    int j,flag = 0;
    printf("已经查询到你要查找的信息->\n");
    printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {

        if (key <= s[j].ACTUALINCOME)
        {
            
            printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
            s[j].income.basic,s[j].income.duty,s[j].income.allowance,
            s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
            s[j].EAENDINCOME,s[j].ACTUALINCOME);
        }
    }

}
//
void modify()//修改数据
{
    char namekey[100];
    printf("请输入你要修改的职工姓名->");
    scanf("%s",namekey);
    int j,a,flag = 0;
    for ( j = 0; j < i; j++)
    {
        if (strcmp(namekey,s[j].name)==0)
        {
            printf("已经查到你要修改的信息!\n");
            printf("确定修改请输入1\n");
            printf("放弃修改请输入0\n");
            scanf("%d",&a);

            if (a==1)
            {
                printf("请输入你要修改的信息->\n");
                printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费\n");
                scanf("%s%s%d%d%d%d%d%d",s[j].no,s[j].name,
                    &s[j].income.basic,&s[j].income.duty,&s[j].income.allowance,
                    &s[j].expend.medical,&s[j].expend.fund,&s[j].expend.water);
                s[j].EAENDINCOME = s[j].income.basic + s[j].income.duty + s[j].income.allowance;
                s[j].ACTUALINCOME = s[j].EAENDINCOME - (s[j].expend.fund + s[j].expend.medical + s[j].expend.water);
                flag = 1;
                break;
            }
            
            
        }
        
    }
    FILE *fp;
    fp = fopen("修改后的工资信息.txt","w");
    if (fp==NULL)
    {
        printf("文件打开失败!");
        exit(0);
    }
    fprintf(fp,"职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        fprintf(fp,"%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
        s[j].income.basic,s[j].income.duty,s[j].income.allowance,
        s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
        s[j].EAENDINCOME,s[j].ACTUALINCOME);

    }
    printf("工资条信息已成功存放在 修改后的工资信息.txt 文件中\n");
    printf("修改后的所有信息打印如下\n");
    printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        
        printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
                    s[j].income.basic,s[j].income.duty,s[j].income.allowance,
                    s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
                    s[j].EAENDINCOME,s[j].ACTUALINCOME);
    }
    

    if(flag == 0||a == 0)
    {
        printf("抱歉!你要修改的信息不存在!\n");
    }
    fclose(fp);
}
/
void AddData()//添加数据
{
    char namekey[100];
    printf("请输入你要添加的职工信息->\n");
    printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费\n");
    scanf("%s%s%d%d%d%d%d%d",s[i].no,s[i].name,
                            &s[i].income.basic,&s[i].income.duty,&s[i].income.allowance,
                            &s[i].expend.medical,&s[i].expend.fund,&s[i].expend.water);
    s[i].EAENDINCOME = s[i].income.basic + s[i].income.duty + s[i].income.allowance;
    s[i].ACTUALINCOME = s[i].EAENDINCOME - (s[i].expend.fund + s[i].expend.medical + s[i].expend.water);
    int j,a,flag = 0;
    for ( j = 0; j < i+1; j++)
    {
        if (strcmp(namekey,s[j].name)==0)
        {
                flag = 1;
                break;
            
            
        }
        
    }
    if (flag==0)
    {
        FILE *fp;
        fp = fopen("添加后的工资信息.txt","w");
        if (fp==NULL)
        {
            printf("文件打开失败!");
            exit(0);
        }
        fprintf(fp,"职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
        for ( j = 0; j < i+1; j++)
        {
            fprintf(fp,"%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
            s[j].income.basic,s[j].income.duty,s[j].income.allowance,
            s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
            s[j].EAENDINCOME,s[j].ACTUALINCOME);

        }
        printf("工资条信息已成功存放在 添加后的工资信息.txt 文件中\n");
        printf("添加后的所有信息打印如下\n");
        printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n"); 
        for ( j = 0; j < i+1; j++)
        {
            printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
                    s[j].income.basic,s[j].income.duty,s[j].income.allowance,
                    s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
                    s[j].EAENDINCOME,s[j].ACTUALINCOME);
        }
        fclose(fp);
    }
    if(flag == 1)
    {
        printf("抱歉!你修改的信息重复!\n");
    }

}
//
void Delete()//删除数据
{
    char namekey[100];
    printf("请输入你要删除的职工姓名->");
    scanf("%s",namekey);
	int j,a,k,flag=0; 
    struct staff t;
    for ( j = 0; j < i; j++)
    {
        if (strcmp(namekey,s[j].name)==0)
        {
            printf("已经查到你要删除的信息!\n");
            printf("确定修改请输入1\n");
            printf("放弃修改请输入0\n");
            scanf("%d",&a);

            if (a==1)
            {
                for ( k = j; k < i; k++)
                {
                    t = s[j];
                    s[j] = s[j+1];
                    //s[j+1] = s[j];
                }
                flag = 1;
                break;
            }
            
            
        }
    }
    FILE *fp;
    fp = fopen("删除后的工资信息.txt","w");
    if (fp==NULL)
    {
        printf("文件打开失败!");
        exit(0);
    }
    fprintf(fp,"职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        fprintf(fp,"%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
        s[j].income.basic,s[j].income.duty,s[j].income.allowance,
        s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
        s[j].EAENDINCOME,s[j].ACTUALINCOME);

    }
    printf("工资条信息已成功存放在 删除后的工资信息.txt 文件中\n");
    printf("删除后的所有信息打印如下\n");
    printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        
        printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
                    s[j].income.basic,s[j].income.duty,s[j].income.allowance,
                    s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
                    s[j].EAENDINCOME,s[j].ACTUALINCOME);
    }
    

    if(flag == 0||a == 0)
    {
        printf("抱歉!你要删除的信息不存在!\n");
    }
    fclose(fp);

}
/
void orbasic()
{
    int m,n,k,j;
    struct staff t;
    for(m = 0;m < i;m++ )
    {
    	k = m;
	    for( n = m+1;n < i;n++)
	    {    
			if(s[n].income.basic > s[m].income.basic)//从小到大
	        {
	            k = n;
	        } 	
			t = s[k];
		    s[k] = s[n];
		    s[n] = t;			
		}
	}
    FILE *fp;
    fp = fopen("按基本工资排序后的工资信息.txt","w");
    if (fp==NULL)
    {
        printf("文件打开失败!");
        exit(0);
    }
    fprintf(fp,"职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        fprintf(fp,"%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
        s[j].income.basic,s[j].income.duty,s[j].income.allowance,
        s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
        s[j].EAENDINCOME,s[j].ACTUALINCOME);

    }
    printf("工资条信息已成功存放在 按基本工资排序后的工资信息.txt 文件中\n");
    printf("排序后的所有信息打印如下\n");
    printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        
        printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
                    s[j].income.basic,s[j].income.duty,s[j].income.allowance,
                    s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
                    s[j].EAENDINCOME,s[j].ACTUALINCOME);
    }
}
/
void oractual()
{
    int m,n,k,j;
    struct staff t;
    for(m = 0;m < i;m++ )
    {
    	k = m;
	    for( n = m+1;n < i;n++)
	    {    
			if(s[n].ACTUALINCOME > s[m].ACTUALINCOME)//从小到大
	        {
	            k = n;
	        } 	
			t = s[k];
		    s[k] = s[n];
		    s[n] = t;			
		}
	}
    FILE *fp;
    fp = fopen("按实际工资排序后的工资信息.txt","w");
    if (fp==NULL)
    {
        printf("文件打开失败!");
        exit(0);
    }
    fprintf(fp,"职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        fprintf(fp,"%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
        s[j].income.basic,s[j].income.duty,s[j].income.allowance,
        s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
        s[j].EAENDINCOME,s[j].ACTUALINCOME);

    }
    printf("工资条信息已成功存放在 按实际工资排序后的工资信息.txt 文件中\n");
    printf("排序后的所有信息打印如下\n");
    printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        
        printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
                    s[j].income.basic,s[j].income.duty,s[j].income.allowance,
                    s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
                    s[j].EAENDINCOME,s[j].ACTUALINCOME);
    }
}
//
void statistics()
{
    int j,sum = 0,sum2 = 0;
    for ( j = 0; j < i; j++)
    {
        sum = sum + s[j].income.basic;//基本工资的总和
        sum2 = sum2 + s[j].ACTUALINCOME;//实际工资的总和
    }
    float average1,average2;
    average1 = sum / float(i);
    average2 = sum2 / float(i);
	
    FILE *fp;
    fp = fopen("按基本工资排序后的工资信息.txt","w");
    if (fp==NULL)
    {
        printf("文件打开失败!");
        exit(0);
    }
    fprintf(fp,"职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        fprintf(fp,"%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
        s[j].income.basic,s[j].income.duty,s[j].income.allowance,
        s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
        s[j].EAENDINCOME,s[j].ACTUALINCOME);


    }
    fprintf(fp,"\n%d个员工的基本工资的平均值为:%.2f\n",i,average1);
    fprintf(fp,"%d个员工的实际工资的平均值为:%.2f\n",i,average2);
    fclose(fp);
    
    printf("工资统计信息已成功存放在 统计工资信息.txt 文件中\n");
    printf("统计后的所有信息打印如下\n");
    printf("职工号 姓名 基本工资 职务工资 津贴 医疗保险 公积金 水电费 应发工资 实发工资\n");
    for ( j = 0; j < i; j++)
    {
        
        printf("%-5s %-9s %-7d %-5d %-6d %-7d %-7d %-7d %-7d %-7d\n",s[j].no,s[j].name,
                    s[j].income.basic,s[j].income.duty,s[j].income.allowance,
                    s[j].expend.medical,s[j].expend.fund,s[j].expend.water,
                    s[j].EAENDINCOME,s[j].ACTUALINCOME);
    }
    printf("\n%d个员工的基本工资的平均值为:%.2f\n",i,average1);
    printf("%d个员工的实际工资的平均值为:%.2f\n",i,average2);
    
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值