You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

170 lines
4.3 KiB

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define max 30 //定义
void menu();//菜单
void import();
void browse();//显示所有
void search_num();//查询信息
void revise();//修改信息
struct people { //定义个人信息结构体
char no[5]; //编号
char name[max]; //名字
int basepay;//基本工资
int wage; //职务工资
int subsidy;//津贴
int surance;//医疗保险
int fund; //公积金
int total; //z总和
};
struct people num[max]; //定义人员信息数组
void main(){//主函数
menu();
}
void menu() //菜单
{
int a;
int i=0;
while(1) {
printf(" 职工工资管理系统 ");
printf("\n**********************\n") ;
printf("1.录入信息\n") ;
printf("2.修改信息\n") ;
printf("3.显示所有\n") ;
printf("4.查询信息\n") ;
printf("5.退出\n") ;
printf("\n**********************\n") ;
printf ("请输入数字编码");
scanf("%d",&a);
switch (a) {
case 1:{ //录入数据
import();
break;
}
case 2:{ //修改信息
revise();
break;
}
case 3:{ //显示信息
browse();
break;
}
case 4:{ //查询信息
search_num();
break;
}
case 5:{ //退出
printf("退出成功 请关闭") ;
exit(0); }
defaul:{ //输入错误
printf("请重新输入");
break;
}
}
} }
void import(){ //录入信息
FILE *fp;
int n,i; //n用来存储职工数 i用来存储第几个员工
if ((fp=fopen("word","wb"))==NULL) //
{ //
printf("不能建立word文件\n"); // 这四行用来判断是否可以正确打开
exit(1); //
}
printf("输入职工人数:");
scanf ("%d",&n);
for(i=0;i<n;i++){
printf("请输入第%d个职工的编号",i+1);
scanf("%s",&num[i].no); //职工号
printf("请输入第%d姓名信息",i+1);
scanf("%s",&num[i].name); //姓名
printf("请输入第%d基本工资",i+1) ;
scanf("%d",&num[i].basepay) ; //基本工资
printf("请输入职务工资") ;
scanf("%d",&num[i].wage) ; //职务工资
printf("请输入津贴") ;
scanf("%d",&num[i].subsidy) ; //津贴
printf("请输入医疗保险") ;
scanf("%d",&num[i].surance) ; //保险
printf("请输入公积金") ;
scanf("%d",&num[i].fund) ; //公积金
num[i].total= num[i].basepay+num[i].wage+num[i].subsidy+num[i].surance+num[i].fund; //计算总和
fwrite(&num[i],sizeof(struct people),1,fp); //写入到文件中
}
fclose(fp); //关闭文件
}
void revise(){ //修改信息
FILE *fp;
int i;
char number[5];
if((fp=fopen("word","rb+"))==NULL) //二进制读的方式打开
{
printf("不能打开word文件\n");
exit(1);
}
printf("输入要修改的的职工号:");
scanf("%s",number);
for(i=0;fread(&num[i],sizeof(struct people),1,fp);i++)
if(!strcmp(num[i].no,number)) break; //对比职工号 如果没有这个职工号 就退出
if(feof(fp)) //如果fp文件指针到达文件尾
{
printf("\t查无此人\n");
exit(2);
}
//fseek(fp,i*sizeof(struct people),SEEK_SET);
printf("请输入职工新的编号");
scanf("%s",&num[i].no);
printf("请输入姓名信息");
scanf("%s",&num[i].name);
printf("请输入基本工资") ;
scanf("%d",&num[i].basepay) ;
printf("请输入职务工资") ;
scanf("%d",&num[i].wage) ;
printf("请输入津贴") ;
scanf("%d",&num[i].subsidy) ;
printf("请输入医疗保险") ;
scanf("%d",&num[i].surance) ;
printf("请输入公积金") ;
scanf("%d",&num[i].fund) ;
num[i].total= num[i].basepay+num[i].wage+num[i].subsidy+num[i].surance+num[i].fund;
fseek(fp,-(long)sizeof(struct people),SEEK_CUR); //移动指针到所在数组的第一个地址上
fwrite(&num[i],sizeof(struct people),1,fp); //写入数据
fclose(fp);
}
void browse(){ //显示信息
int i;
FILE *fp;
if((fp=fopen("word","r"))==NULL)
{
printf("不能打开word文件\n");
exit(0);
}
printf("职工号\t 姓名\t 基本工资\t 职务工资\t 津贴\t 医疗保险\t 公积金\t \t总工资 \n");
for(i=0;fread(&num[i],sizeof(struct people),1,fp)!=0;i++)
{
printf("%s\t %s\t %d\t\t %d\t\t %d\t %d\t\t %d\t\t %d\t\n",num[i].no,num[i].name,num[i].basepay,num[i].wage,num[i].subsidy,num[i].surance,num[i].fund,num[i].total);
}
fclose(fp);
}
void search_num(){//查询信息
FILE *fp;
int i;
char number[5];
if((fp=fopen("word","rb"))==NULL)
{
printf("不能打开word文件\n");
exit(1);
}
printf("要查询的职工号:");
scanf("%s",number);
for(i=0;fread(&num[i],sizeof(struct people),1,fp);i++)
if(!strcmp(num[i].no,number)) break;
if(feof(fp))
{
printf("\t查无此人\n");
}
printf("职工号\t 姓名\t 基本工资\t 职务工资\t 津贴\t 医疗保险\t 公积金\t 总工资 \n");
printf("%s\t %s\t %d\t %d\t %d\t %d\t %d\t %d\t\n",num[i].no,num[i].name,num[i].basepay,num[i].wage,num[i].subsidy,num[i].surance,num[i].fund,num[i].total);
fclose(fp);
}