资源描述
学院教职工工资管理系统C语言程序设计
#include〈stdio。h〉
#include<stdlib.h>
#include<string。h〉
#define N 100
int 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(struct teacher),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]。addr,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数组中了不需再比结束本次循环*/
else
for(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(struct teacher),1,fp)==1);n++)continue;/*将职工信息读入内存*/
fclose(fp);
if(n==0)
printf(”没有记录\n”);
else
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,teac[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”);
else
printf("是否查询?(y/n)”);
scanf(”%s",ch);
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,teac[i]。engineer,teac[i]。wage);
break;
}
}
if(i==n)
printf(”没有你需要查询的信息\n”);
printf("是否继续查询?(y/n)”);
scanf("%s”,ch);
}
}
/*函数功能:输出数据*/
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,teac[i].engineer,teac[i].wage);
}
展开阅读全文