学院教职工工资管理系统C语言程序设计

  • 格式:doc
  • 大小:81.50 KB
  • 文档页数:23

学院教职工工资管理系统C语言程序设计#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 100int n;/*职工总数*/struct teacher{char name[20];/*姓名*/char sex[5];/*性别*/int year,mounth;/*出生年月*/int age;/*年龄*/char marrige[5];/*婚姻状况*/char addr[30];/*家庭住址*/char engineer[20];/*职称*/float wage;/*工资级别*/}teac[N];float sum=0;/*总工资*/void save();/*数据输入函数*/void all();/*计算工资总额函数*/void ave();/*计算平均工资函数*/void sort1();/*排序函数*/void sort2();/*排序函数*/void same();/*找工资级别相同职工名单函数*/void reviwe();/*修改函数*/void find();/*查询函数*/void print();/*数据输出函数*/void main(){char ch;printf(" ※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※\n");printf("╱********欢◇☆○进◇☆○院◇☆○工◇☆○资◇☆○理◇☆○统************╲\n");printf("╲********○☆◇迎○☆◇入○☆◇职○☆◇工○☆◇管○☆◇系○************╱\n");printf(" ※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※◆※\n");printf("\n☆请选择你所需要的服务,按回车确认☆\n");printf("\n\t\ts:数据输入\t\n\t\ta:总工资\t\n\t\tv:平均工资\t\n\t\tg:按工资排序\t\n\t\tx:按姓名排序\t\n\t\tm:工资级别相同职工名单\t\n\t\tr:修改\t\n\t\tf:查询\t\n\t\te:退出\t\n");scanf("%c",&ch);while(ch!='e'){switch(ch){case's':save();break;case'a':all();break;case'v':ave();break;case'g':sort1();break;case'x':sort2();break;case'm':same();break;case'r':reviwe();break;case'f':find();}printf("\n☆请再次选择你所需要的服务,按回车确认☆\n");printf("\n\t\ts:数据输入\t\n\t\ta:总工资\t\n\t\tv:平均工资\t\n\t\tg:按工资排序\t\n\t\tx:按姓名排序\t\n\t\tm:工资级别相同职工名单\t\n\t\tr:修改\t\n\t\tf:查询\t\n\t\te:退出\t\n");getchar();scanf("%c",&ch);}}/*函数功能:输入职工信息*/void save(){FILE * fp;int j=0,i;char ch[2];int n=0;printf("请选择输入方式:\n");printf("1:向管理系统重新输入数据,并删除原有数据\n2:向系统增加数据\n");scanf("%d",&i);/*输入选项*/if(i==1){if((fp=fopen("C:\\file1.dat","wb+"))==NULL)/*判断文件能否打开*/ {printf("can not open this file\n");exit(0);}printf("你是否要输入职工信息?(是:y/否:n)");scanf("%s",ch);while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)/*判断是否要录入新信息*/{printf("\n姓名\t");scanf("%s",teac[j].name);printf("\n性别(男:b/女:g)\t");scanf("%s",teac[j].sex);printf("\n生日:年\t");scanf("%d",&teac[j].year);printf("\n月\t");scanf("%d",&teac[j].mounth);while(teac[j].mounth<1||teac[j].mounth>12){printf("输入月份有误请重输");scanf("%d",&teac[j].mounth);}printf("\n年龄\t");scanf("%d",&teac[j].age);printf("\n婚否(是y/否n)\t");scanf("%s",teac[j].marrige);printf("\n地址\t");scanf("%s",teac[j].addr);printf("\n职称\t");scanf("%s",teac[j].engineer);printf("\n工资\t");scanf("%f",&teac[j].wage);fwrite(&teac[j],sizeof(struct teacher),1,fp);/*信息写入磁盘*/ j++;printf("你是否要输入职工信息?(是:y/否:n)\n"); getchar();scanf("%c",&ch);fclose(fp);/*关闭文件*/}if(i==2){if((fp=fopen("c:\\file1.dat","rb"))==NULL)/*判断文件能否打开*/ {printf("can not open this file\n");exit(0);}for(n=0;(fread(&teac[n],sizeof(structteacher),1,fp)==1);n++)continue;/*将职工信息读入内存*/fclose(fp);printf("你是否要增加职工信息?(是:y/否:n)");scanf("%s",ch);while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)/*判断是否要录入新信{printf("\n姓名\t");scanf("%s",teac[j+n].name);printf("\n性别(男:b/女:g)\t");scanf("%s",teac[j+n].sex);printf("\n生日:年\t");scanf("%d",&teac[j+n].year);printf("\n月\t");scanf("%d",&teac[j+n].mounth);while(teac[j+n].mounth<1||teac[j+n].mounth>12) {printf("输入月份有误请重输");scanf("%d",&teac[j].mounth);}printf("\n年龄\t");scanf("%d",&teac[j+n].age);printf("\n婚否(是y/否n)\t");scanf("%s",teac[j+n].marrige);printf("\n地址\t");scanf("%s",teac[j+n].addr);printf("\n职称\t");scanf("%s",teac[j+n].engineer);printf("\n工资\t");scanf("%f",&teac[j+n].wage);//fwrite(&teac[j+n],sizeof(struct teacher),1,fp);/*信息写入磁盘*/ n++;printf("你是否要输入职工信息?(是:y/否:n)\n");getchar();scanf("%c",&ch);}if((fp=fopen("c:\\file1.dat","wb"))==NULL)/*判断文件能否打开*/ {printf("can not open this file\n");exit(0);}for(j=0;j<n;j++)fwrite(&teac[j],sizeof(struct teacher),1,fp);/*信息写入磁盘*/ fclose(fp);}}/*函数功能:计算总工资*/void all(){FILE*fp;n=0;sum=0;if((fp=fopen("c:\\file1.dat","ab+"))==NULL){printf("can not open this file\n");exit(0);}printf("姓名\t性别\t生日:年月\t年龄\t婚否\t地址\t职称\t工资\n");for(n=0;(fread(&teac[n],sizeof(struct teacher),1,fp)==1);n++)/*将职工信息读入内存*/{printf("%s\t%s\t %d %d\t%d\t%s\t%st\t%s\t%f\n",teac[n].name,teac [n].sex,teac[n].year,teac[n].mounth,teac[n].age,teac[n].marrige,teac[n].ad dr,teac[n].engineer,teac[n].wage);/*将职工信息输出到屏幕上*/sum=sum+teac[n].wage;continue;}printf("总工资为%f\n",sum);fclose(fp);}/*函数功能:计算平均工资*/void ave(){float aver;n=0;all();/*调用计算总工资函数得到总工资*/(float)(aver=sum/n);/*计算平均工资*/printf("平均工资为%f\n",aver);}/*函数功能:按工资由低到高排序*/void sort1(){FILE *fp;int i,j;struct teacher temp;/*定义一个结构体变量一边在交换顺序是暂时存放数据*/if((fp=fopen("c:\\file1.dat","ab+"))==NULL)/*以只读方式打开一个二进制文件判断能否打开*/{printf("can not open this file\n");exit(0);}//while(!feof(fp))/*检查文件是否结束*/for(n=0;(fread(&teac[n],sizeof(struct teacher),1,fp)==1);n++)continue;/*将职工信息读入内存*//*排序*/for(i=0;i<n;i++){for(j=0;j<n-(i+1);j++)if(teac[j].wage>teac[j+1].wage){temp=teac[j];teac[j]=teac[j+1];teac[j+1]=temp;}}print();/*调用数据输出函数,输出结果*/ fclose(fp);}void sort2(){FILE *fp;int i,j;struct teacher temp;/*定义一个结构体变量一边在交换顺序是暂时存放数据*/if((fp=fopen("c:\\file1.dat","ab+"))==NULL)/*以只读方式打开一个二进制文件判断能否打开*/{printf("can not open this file\n");exit(0);}for(n=0;(fread(&teac[n],sizeof(struct teacher),1,fp)==1);n++)continue;/*将职工信息读入内存*//*排序*/for(i=0;i<n;i++){for(j=0;j<n-(i+1);j++)if(strcmp(teac[j].name,teac[j+1].name)>0){temp=teac[j];teac[j]=teac[j+1];teac[j+1]=temp;}}print();/*调用数据输出函数,输出结果*/fclose(fp);}/*函数功能:找工资级别相同的职工名单*/void same(){FILE * fp;static int t=0;/*定义一个静态变量*/int i,j,k,m,a,l;struct teacher temp[N];/*定义一个结构体数组存放工资级别相同的职工名单*/if((fp=fopen("c:\\file1.dat","ab+"))==NULL)/*以读写方式打开一个文本文件并判断能否打开*/{printf("can not open this file\n");exit(0);}printf("姓名\t性别\t生日:年月\t年龄\t婚否\t地址\t职称\t工资\n");for(n=0;(fread(&teac[n],sizeof(struct teacher),1,fp)==1);n++)/*将职工信息读入内存*/{printf("%s\t%s\t %d %d\t%d\t%s\t%s\t%s\t%f\n",teac[n].name,teac[n ].sex,teac[n].year,teac[n].mounth,teac[n].age,teac[n].marrige,teac[n].addr, teac[n].engineer,teac[n].wage);/*将职工信息输出到屏幕上*/continue;}/*找相同*/for(i=0;i<n;i++){m=t;a=0;if(i>0)for(l=0;l<t;l++){if(teac[i].wage==temp[l].wage)a++;}if(a>0)continue;/*说明该数已在上一级比较中存入temp数组中了不需再比结束本次循环*/elsefor(j=i;j<n;j++){if(teac[i].wage==teac[j].wage)temp[t++]=teac[j];}printf("\n工资级别为%f的名单为:\t",temp[t-1].wage);for(k=m;k<t;k++)printf("%s\t",temp[k].name);}fclose(fp);}/*函数功能:删除不需要的职工信息*/void reviwe()/*删除函数*/{FILE*fp;struct teacher temp;int i,j,k=0;char name[20];char ch[2];int a;if((fp=fopen("c:\\file1.dat","rb"))==NULL)/*判断文件能否打开*/ {printf("can not open this file\n");exit(0);}for(n=0;(fread(&teac[n],sizeof(structteacher),1,fp)==1);n++)continue;/*将职工信息读入内存*/fclose(fp);if(n==0)printf("没有记录\n");elseprintf("请输入姓名\n");scanf("%s",name);for(i=0;i<n;i++){if(strcmp(name,teac[i].name)==0)/*找与要修改的信息相同的姓名*/{printf("该职工信息为:\n");printf("%s\t%s\t%d\t %d %d\t%s\t%s\t%s\t%f\n",teac[i].name,teac[i ].sex,teac[i].year,teac[i].mounth,teac[i].age,teac[i].marrige,teac[i].addr,tea c[i].engineer,teac[i].wage);}break;}printf("是否删除?(y/n)");scanf("%s",ch);if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)/*判断是否删除*/{printf("已成功删除信息\n\n");for(j=i;j<n;j++){strcpy(teac[j].addr,teac[j+1].addr);strcpy(teac[j].engineer,teac[j+1].engineer);strcpy(teac[j].marrige,teac[j+1].marrige);strcpy(teac[j].name,teac[j+1].name);strcpy(teac[j].sex,teac[j+1].sex);teac[j].age=teac[j+1].age;teac[j].year=teac[j+1].year;teac[j].mounth=teac[j+1].mounth;break;}if((fp=fopen("c:\\file1.dat","wb"))==NULL)/*判断文件能否打开*/ {printf("can not open this file\n");exit(0);}for(j=0;j<n-1;j++)fwrite(&teac[j],sizeof(struct teacher),1,fp);/*信息写入磁盘*/fclose(fp);}}/*函数功能:查询*/void find(){FILE*fp;int i;char name[20];char ch[2];if((fp=fopen("c:\\file1.dat","ab+"))==NULL)/*判断文件能否打开*/ {printf("can not open this file\n");exit(0);}for(n=0;(fread(&teac[n],sizeof(struct teacher),1,fp)==1);n++)continue;/*将职工信息读入内存*/fclose(fp);if(n==0)printf("没有记录\n");elseprintf("是否查询?(y/n)");while(strcmp(ch,"y")==0||strcmp(ch,"Y")==0){printf("请输入姓名\n");scanf("%s",name);for(i=0;i<n;i++){if(strcmp(name,teac[i].name)==0)/*找与要修改的信息相同的姓名*/{printf("你要查询的职工信息如下:\n");printf("%s\t%s\t%d\t %d %d\t%s\t%s\t%s\t%f\n",teac[i].name,teac[i ].sex,teac[i].year,teac[i].mounth,teac[i].age,teac[i].marrige,teac[i].addr,tea c[i].engineer,teac[i].wage);break;}}if(i==n)printf("没有你需要查询的信息\n");printf("是否继续查询?(y/n)");}}/*函数功能:输出数据*/void print(){int i;printf("\n姓名\t性别\t生日:年月\t年龄\t婚否\t地址\t职称\t工资\n");for(i=0;i<n;i++)printf("%s\t%s\t%d\t %d %d\t%s\t%s\t%s\t%f\n",teac[i].name,teac[i ].sex,teac[i].year,teac[i].mounth,teac[i].age,teac[i].marrige,teac[i].addr,tea c[i].engineer,teac[i].wage);}。