1)职工工资管理系统需求与功能分析职工工资的录入、统计排序、检索查询、修改、插入、删除、输出。画出功能结构图。(2)职工工资管理系统的数据内容车间shop、工号num、姓名name、基本工资base_salary、岗位工资post_salary、奖金bonus、应发工资deal_salary、医疗住房基金fund、税金tax、实发工资fact_salary
#include<stdio.h>#define NUM 100void input();void search();void search_num();void dele();void dele_name();void dele_num();void modi();void modi_num();void output();void stat();void fun();void run();struct emploee /*职工数据结构*/{char no[5];char name[8];char sex[3];int age;int salar;}emp[NUM],newemp;main(){int x;printf(" 1. 输入职工记录\n");printf(" 2. 查询职工记录\n");printf(" 3. 修改职工记录\n");printf(" 4. 删除职工记录\n");printf(" 5. 打印职工记录\n");printf(" 6. 调查工资情况\n");printf(" 7. 追加职工记录\n");printf(" 8. 结束使用\n");printf(" 0. 退出系统\n");printf("\n");printf("*** 欢迎使用职工工资管理系统 ***\n");printf("请选择(0-8):\n");scanf("%d",&x);switch(x){ case 1: input();break; case 2: search();break; case 3: modi();break; case 4: dele();break; case 5: output();break; case 6: stat();break; case 7: run();break; case 8: fun();break; default:printf("\n Wrong!"); }if(x==0)break;}}void input(){ FILE *fp; int n,i; if ((fp=fopen("emp","wb"))==NULL) { printf("不能建立emp文件\n"); exit(1); } printf("输入职工人数:"); scanf("%d",&n); printf("输入格式:职工号 姓名 性别 年龄 工资<Enter>\n"); for(i=0;i<n;i++) /* 循环获取n个职工记录 */ { printf("第%d个职工:",i+1); scanf("%s%s%s%d%d",emp[i].no,emp[i].name,emp[i].sex, &emp[i].age,&emp[i].salar); } for(i=0;i<n;i++) /*将n个职工记录写入文件*/ fwrite(&emp[i],sizeof(struct emploee),1,fp); fclose(fp);}/*************************统计模块**********************/void stat( ){ FILE *fp; int n,num; if((fp=fopen("emp","rb"))==NULL) { printf("不能打开emp文件\n"); exit(1); } printf("工资数:"); scanf("%d",&num); printf("记录号 职工号 姓名 性别 年龄 工资\n"); for(n=0;fread(&emp,sizeof(struct emploee),1,fp);n++) if(emp[n].salar>=num) printf("%6d%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].salar); fclose(fp);}/********************删除模块*******************/ void dele(){ int x; while(1) { printf("\n\n\t\t删除子菜单\n"); printf("\t\t*********\n"); printf("\t\t 1.按职工号删除记录\n"); printf("\t\t 0.返回主菜单\n"); printf("\t\t*********\n"); printf("\t 请选择(0-1):"); scanf("%d",&x); switch(x) {case 1:dele_num();break; default:printf("\nWrong!"); } if(x==0)break; } }void dele_num(){ FILE *fp; int i,j,n; char num[5]; if((fp=fopen("emp","rb"))==NULL) { printf("不能打开emp文件\n"); exit(1); } printf("删除前:\n"); printf("记录号 职工号 姓名 性别 年龄 工资\n"); for(n=0;fread(&emp[n],sizeof(struct emploee),1,fp);n++) printf("%6s%6s%9s%4s%5d%6d\n",n+1,emp[n].no,emp[n].name,emp[n].sex, emp[n].age,emp[n].salar); /*n为emp文件中记录数*/ printf("要删除的职工号:"); scanf("%s",num); for(i=0;(strcmp(emp[i].no,num)!=0&&i<n);i++) if(i>=n) { printf("\t没有%s职工号的职工\n",num); exit(2); } fclose(fp); fp=fopen("emp","w+"); if(n==1) /*一个记录已经删除了*/ { fclose(fp); exit(3); } for(j=0;j<i;j++) fwrite(&emp[j],sizeof(struct emploee),1,fp); for(j=i+1;j<n;j++) fwrite(&emp[j],sizeof(struct emploee),1,fp); printf("删除后:\n"); fseek(fp,0,SEEK_SET); printf("记录号 职工号 姓名 性别 年龄 工资\n"); for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++) printf("%6s%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].salar); fclose(fp);}/********************修改模块*******************/void modi(){ int x; while(1){ printf("\n\n\t\t修改子菜单\n"); printf("\t\t*********************\n"); printf("\t\t1. 按职工号修改\n"); printf("\t\t0. 返回主菜单\n"); printf("\t\t*********************\n"); printf("\t请选择(0-1):"); scanf("%d",&x); switch(x){ case 1:modi_num();break; default:printf("\n输错误!");}if(x==0)break;}}void modi_num(){ FILE *fp; int i,j; char num[5]; if((fp=fopen("emp","rb+"))==NULL) { printf("不能 打开emp文件\n"); exit(1); } printf("要修改的职工号:"); scanf("%s",num); for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++) if(!strcmp(emp[i].no,num))break; if(feof(fp)) { printf("\t没有%s职工号的职工\n",num); exit(2); } printf("记录号 职工号 姓名 性别 年龄 工资\n"); printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].salar); printf("输入格式:职工号 姓名 性别 年龄 工资<Enter>\n"); printf("第%d个记录:",i+1); scanf("%s%s%s%d%d",newemp.no,newemp.name,newemp.sex,&newemp.age, &newemp.salar);/*获取新的职工记录*/ fseek(fp,-(long)sizeof(struct emploee),SEEK_CUR); /*文件指针指向该修改的记录开头*/ fwrite(&newemp,sizeof(struct emploee),1,fp);/*用newemp覆盖当前记录*/ printf(" 修改后:\n"); fseek(fp,0,SEEK_SET);/*显示修改后的文件数据*/ printf("记录号 职工号 姓名 性别 年龄 工资\n"); for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++) printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].salar); fclose(fp);} /*************************查询模块***********************/void search( ){ int x; while(1){ printf("\n\n\t\t查子菜单\n"); printf("\t\t********************\n"); printf("\t\t 1.按职工号查询\n"); printf("\t\t 0.返回主菜单\n"); printf("\t\t********************\n"); printf("\t请选择(0-1):"); scanf("%d",&x); switch(x){ case 1:search_num();break; default :printf("\n Wrong!"); }if(x==0) break;}}void search_num(){ FILE *fp; int i;char num; if((fp=fopen("emp","rb"))==NULL) { printf("不能打开emp文件\n"); exit(1); } printf("要查询的职工号:"); scanf("%s",num); for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp);i++) if(!strcmp(emp[i].no,num)) break; if(feof(fp)) { printf("\t查无此人\n"); exit(2); } printf("记录号 职工号 姓名 性别 年龄 工资\n"); printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].salar); fclose(fp);}/*******************输出模块********************/void output(){int i; FILE *fp; if((fp=fopen("emp","r"))==NULL) {printf("不能打开emp文件\n"); exit(0); } printf("记录号 职工号 姓名 性别 年龄 工资\n"); for(i=0;fread(&emp[i],sizeof(struct emploee),1,fp)!=0;i++) { printf("%6d%6s%9s%4s%5d%6d\n",i+1,emp[i].no,emp[i].name,emp[i].sex, emp[i].age,emp[i].salar); } fclose(fp);}/******************追加模块*******************/void run(){ FILE *fp; int n,i,j; if((fp=fopen("emp","ab+"))==NULL) {printf("不能打开emp文件\n"); exit(0); } printf("要追加的职工人数:"); scanf("%d",&n); for(i=0;i<n;i++) { printf("输入格式:职工号 姓名 性别 年龄 工资<enter>\n"); printf("职工记录:"); scanf("%s%s%s%d%d",newemp.no,newemp.name,newemp.sex,&newemp.age, &newemp.salar); /*获取一个职工记录*/ fwrite(&newemp,sizeof(struct emploee),1,fp); /*将该职工记录写入文件*/ } fclose(fp);} /*******************显示模块****************/void fun(){printf("\t\t******************************************\n"); printf("\t\t* *\n"); printf("\t\t* *\n"); printf("\t\t* 谢 谢 使 用 ! *\n"); printf("\t\t* *\n"); printf("\t\t* *\n"); printf("\t\t******************************************\n");}
class Fuck(){private:string shop;int num;string name;float base_salary;float post_salary;float bonus;float deal_salary;float fund;float tax;float fact_salary;void fact_salary(float mbase,float mpost,float mbonus,float mdeal,float mfund,float mtax);public:void input(string mname,string mshop,int mnum,string mname,float mbase,float mpost,float mbonus,float mdeal,float mfund,float mtax);void renew(float mbase,float mpost,float mbonus,float mdeal,float mfund,float mtax);void sort(Fuck & sth);void show();}