员工工资管理系统代码

#include
#include
#include
#include

#ifndef __EMPLOYEE_MANAGE_SYSTEM_H__
#define __EMPLOYEE_MANAGE_SYSTEM_H__

typedef struct
{ /*员工工资结构*/
short status; /*数据状态,0:正常 1:删除*/
char num[10]; /*员工编号*/
char name[20]; /*员工姓名*/
char ying[10]; /*应发*/
char kou[10]; /*扣款*/
char shi[10]; /*实发*/
}EmployeeType;

void AddData(void); /*增加数据*/
void UpdateData(void); /*更新数据*/
void SearchDate(void); /*查询数据*/
void DeleteData(void); /*删除数据,只作删除标志*/
void ListDate(void); /*显示数据*/
void Pack(void); /*在物理上删除作有标记的记录*/
#endif

FILE *fp;
void AddData(void) /*增添数据*/
{
EmployeeType employee;
char tag; /*设置标志是否继续添加数据*/
employee.status=0; /*数据状态,0:正常 1:删除*/
do
{
printf("员工编号:");
scanf("%s", employee.num);
printf("员工姓名:");
scanf("%s",https://www.360docs.net/doc/453518928.html,);
printf("应发工资:");
scanf("%s",employee.ying);
printf("扣款:");
scanf("%s",employee.kou);
printf("实发工资:");
scanf("%s",employee.shi);

fseek (fp,0,SEEK_END); /*移动文件内部位置指针*/
fwrite(&employee,sizeof(EmployeeType),1,fp); /*将员工信息存入文件中*/
printf("继续添加吗(y/n):");
while(getchar() !='\n'); /*跳过当前行*/
tag=getchar(); /*Y,y表示继续,N,n表示结束*/
tag=tolower(tag); /*大写字母转化为小写字母*/
while(tag !='y' && tag!='n')
{ /*非法输入时重新输入*/
printf("非法输入,重新输入(y/n):");
while(getchar() !='\n'); /*跳过当前行*/
tag=getchar(); /*Y,y表示继续,N,n表示结束*/
tag=tolower(tag); /*大写字母转化为小写字母*/
}
} while(tag=='y'); /*肯定回答时循环*/
}

void UpdateData(void) /*更新数据*/
{
EmployeeType employee; /*员工*/
char num[10];
printf("输入要更新的员工的编号:");
scanf("%s",num);
rewind (fp); /*使位置指针返回到文件的开头*/
fread(&employee,sizeof(EmployeeType),1,fp); /*读入员工信息*/
while (!feof(fp))
{ /*文件未

结束*/
if(strcmp(employee.num,num)==0 /*员工编号相同*/
&& employee.status==0 /*数据状态正常,未作删除*/
)break; /*查询成功*/
fread (&employee,sizeof(EmployeeType),1,fp); /*读入员工信息*/
}
if(!feof(fp))
{ /*查询成功*/
printf("%-15s%-15s%-15s%-15s%-15s\n","员工编号","员工姓名","应发工资","扣款","实发工资");
printf("%-15s%-15s%-15s%-15s%-15s",employee.num,https://www.360docs.net/doc/453518928.html,,employee.ying,employee.kou,employee.shi);
/*输出信息*/
printf("\n输入更新后的数据:\n");
printf("员工编号:");
scanf("%s",employee.num);
printf("员工姓名:");
scanf("%s",https://www.360docs.net/doc/453518928.html,);
printf("应发工资:");
scanf("%s",employee.ying);
printf("扣款:");
scanf("%s",employee.kou);
printf("实发工资:");
scanf("%s",employee.shi);

fseek(fp,-sizeof(EmployeeType),SEEK_CUR); /*移动文件内部位置指针*/
fwrite(&employee,sizeof(EmployeeType),1,fp); /*输入数据*/
}
else
{ /*查询失败*/
printf("无此编号的员工!\n"); /*清除文件结束标志*/
clearerr(fp);
}
}

void SearchDate(void) /*查询数据*/
{
EmployeeType employee; /*员工*/
int select; /*工作变量*/
char num[10];
char name[20];

printf("选择查询方式:\n");
printf("1.按员工编号查询 2.按员工姓名查询\n");
scanf("%d",&select);
while(select>2||select<1)
{
printf("请输入1~2的数");
scanf("%d",&select);
}
switch(select)
{
case 1: /*按员工编号查询*/
printf("输入员工的编号:\n");
scanf("%s",num);
rewind (fp); /*使指针位置返回到文件的开头*/
fread(&employee,sizeof(EmployeeType),1,fp); /*读入员工信息*/
while (!feof(fp))
{ /*文件未结束*/
if(
strcmp(employee.num,num)==0
&& employee.status==0
)break;
fread (&employee,sizeof(EmployeeType),1,fp);
}break;

case 2: /*按员工姓名查询*/
printf("输入员工的姓名:\n");
scanf("%s",name);
rewind (fp); /*使指针位置返回到文件的开头*/
fread(&employee,sizeof(EmployeeType),1,fp); /*读入员工

信息*/
while (!feof(fp))
{ /*文件未结束*/
if(
strcmp(https://www.360docs.net/doc/453518928.html,,name)==0
&& employee.status==0
)break;
fread (&employee,sizeof(EmployeeType),1,fp);
}break;
}
if(!feof(fp))
{ /*查询成功*/
printf("%-15s%-15s%-15s%-15s%-15s\n","员工编号","员工姓名","应发工资","扣款","实发工资");
printf("%-15s%-15s%-15s%-15s%-15s\n",employee.num,https://www.360docs.net/doc/453518928.html,,employee.ying,employee.kou,employee.shi);
}
else
{ /*查询失败*/
printf("无此编号的员工!\n");
clearerr(fp); /*清除文件结束标志*/
}
}

void DeleteData(void) /*删除数据,只作删除标志*/
{
EmployeeType employee;
char num[10];
printf("输入要更新员工的编号是:\n");
scanf("%s",num);
rewind (fp); /*使指针位置返回到文件的开头*/
fread(&employee,sizeof(EmployeeType),1,fp); /*读入员工信息*/
while (!feof(fp))
{
if(
strcmp(employee.num,num)==0 /*员工编号相同*/
&& employee.status==0 /*数据状态正常,未作删除*/
)break;
fread (&employee,sizeof(EmployeeType),1,fp); /*读入员工信息*/
}
if(!feof(fp))
{
printf("被删除记录为:\n");
printf("%-15s%-15s%-15s%-15s%-15s\n","员工编号","员工姓名","应发工资","扣款","实发工资");
printf("%-15s%-15s%-15s%-15s%-15s",employee.num,https://www.360docs.net/doc/453518928.html,,employee.ying,employee.kou,employee.shi);
employee.status=1;
fseek(fp,-sizeof(EmployeeType),SEEK_CUR);
fwrite(&employee,sizeof(EmployeeType),1,fp);
}
else
{
printf("无此编号的员工!\n");
clearerr(fp);
}
}

void ListDate(void) /*显示数据*/
{
EmployeeType employee;
printf("%-15s%-15s%-15s%-15s%-15s\n","员工编号","员工姓名","应发工资","扣款","实发工资");
rewind (fp);
fread(&employee,sizeof(EmployeeType),1,fp);
while(!feof(fp))
{
if(employee.status==0)
{ /*数据状态正常,未作删除*/
printf("%-15s%-15s%-15s%-15s%-15s\n",employee.num,https://www.360docs.net/doc/453518928.html,,employee.ying,employee.kou,employee.shi);
}
fread (&employee,

sizeof(EmployeeType),1,fp);
}
clearerr(fp);
}

void Pack (void) /*在物理上删除作有删除标记*/
{
EmployeeType employee; /*员工*/
FILE *fpTmp; /*临时文件指针*/
if((fpTmp=fopen("employee_tem.dat","wb"))==NULL)
{
printf("打开文件employee_tem.dat 失败!\n");
system("PAUSE"); /*调用库函数system(),输出系统提示信息*/
exit(2); /*退出程序*/
}

rewind (fp);
fread(&employee,sizeof(EmployeeType),1,fp); /*读入员工信息*/
while(!feof(fp))
{
if(employee.status==0) /*员工编号相同*/
fwrite(&employee,sizeof(EmployeeType),1,fpTmp); /*数据状态正常,未作删除*/
fread(&employee,sizeof(EmployeeType),1,fp); /*读入员工信息*/
}
fclose(fp); fclose(fpTmp); /*关闭文件*/
remove("employee.dat"); /*删除文件*/
rename("employee_tem.dat","employee.dat"); /*更改文件名*/

if((fp=fopen("employee.dat","rb+"))==NULL)
{ /*打开文件employee_tem.dat失败*/
printf("打开文件employee_tem.dat失败!\n");
system("PAUSE"); /*调用库函数system(),输出系统提示信息*/
exit(3);
}
printf("重组完成!");
}

int main(void) /*主函数*/
{
int select; /*工作变量*/
if((fp=fopen("employee.dat","rb+"))==NULL)
{ /*employee.dat文件不存在*/
if((fp=fopen("employee.dat","wb+"))==NULL)
{ /*打开文件失败*/
printf("打开文件employee_dat失败!\n");
system("PAUSE");
exit(1);
}
}
do
{
printf("\n请选择:\n");
printf("1.增添数据 2.更新数据 3.查询数据 4.删除数据 5.显示数据 6.重组数据 7.退出\n");
scanf("%d",&select);
while(select<1 ||select>7)
{
printf("请输入 1~7的数:"); /*输入提示*/
scanf("%d",&select); /*输入选择*/
}
switch(select)
{
case 1:
AddData(); /*增加数据*/
break;
case 2:
UpdateData(); /*更新数据*/
break;
case 3:
SearchDate(); /*查询数据*/
break;
case 4:
DeleteData(); /*删除数据,只作删除标志*/
break;
case 5:
ListDate();

/*显示数据*/
break;
case 6:
Pack(); /*在物理上删除作有标记的记录*/
break;
}
}while(select!=7); /*选择7退出循环*/
fclose(fp); /*关闭文件*/
system("PAUSE"); /*调用库函数system(),输出系统提示信息*/
return 0; /*返回值0,返回操作系统*/
}

相关文档
最新文档