📄 staff.cpp
字号:
///////////////////////////////////////////员 工 信 息 管 理 系 统///////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////主菜单模块//////////////////////////
#include<stdio.h>
#include<stdlib.h>
#define PER_NUM 1000
extern int NUM=0;
void si_input();
void si_modify();
void si_delet();
void si_sequence();
void si_search();
void si_save();
void seq_sn();
void seq_wage();
void f_print(int,int);
void ser_sx();
void ser_ef();
void save_txt();
void save_bin();
struct person
{
double sn;
char name[20];
double bir_date;
char gender;
double tel;
double wage;
};
struct person per_inp[PER_NUM];
int main(void)
{
int i,choice;
do
{
for(i=1;i<=79;i++)
printf("*");
printf("\n");
printf("* 员 工 信 息 管 理 系 统 *");
printf("\n");
printf("*-----------------------------------------------------------------------------*");
printf("\n");
printf("* 1. 员工信息输入 *");
printf("\n");
printf("* 2. 员工信息修改 *");
printf("\n");
printf("* 3. 员工信息删除 *");
printf("\n");
printf("* 4. 员工信息排序 *");
printf("\n");
printf("* 5. 员工信息查找 *");
printf("\n");
printf("* 6. 员工信息保存 *");
printf("\n");
printf("* 0. 退出 *");
printf("\n");
for(i=1;i<=79;i++)
printf("*");
printf("\n");
printf("请选择(0~6):");
scanf("%d",&choice);
switch(choice)
{
case 1:si_input();break;
case 2:si_modify();break;
case 3:si_delet();break;
case 4:si_sequence();break;
case 5:si_search();break;
case 6:si_save();break;
}
}
while(choice!=0);
return 0;
}
///////////////////////输入模块//////////////////////////
void si_input()
{
char confirm;
do
{
printf("请输入第%d个员工信息:\n",NUM+1);
printf("编号:");
scanf("%lf",&per_inp[NUM].sn);
printf("\n");
printf("姓名:");
scanf("%s",per_inp[NUM].name);
printf("\n");
do
{ getchar();
printf("性别(男输入m,女输入f):");
scanf("%c",&per_inp[NUM].gender);
if((per_inp[NUM].gender!='m')&&(per_inp[NUM].gender!='f'))
printf("对不起,我没看懂,请重新输入,");
}
while((per_inp[NUM].gender!='m')&&(per_inp[NUM].gender!='f'));
printf("\n");
printf("出生年月(如:19880101):");
scanf("%lf",&per_inp[NUM].bir_date);
printf("\n");
printf("基本工资:");
scanf("%lf",&per_inp[NUM].wage);
printf("\n");
printf("联系电话:");
scanf("%lf",&per_inp[NUM].tel);
printf("\n");
NUM=NUM+1;
getchar();
printf("是否继续(y/n)");
scanf("%c",&confirm);
}
while(confirm=='y');
}
///////////////////////修改模块//////////////////////////
void si_modify()
{
char confirm;
double modi_sn;
int modi_num;
int flag=0;
do
{
printf("请输入需要修改员工信息的编号:");
scanf("%lf",&modi_sn);
for(modi_num=0;modi_num<NUM;modi_num++)
{
if(modi_sn==per_inp[modi_num].sn)
{
flag=1;
printf("请输入该员工新的信息\n");
printf("编号:");
scanf("%lf",&per_inp[modi_num].sn);
printf("\n");
printf("姓名:");
scanf("%s",per_inp[modi_num].name);
printf("\n");
do
{
getchar();
printf("性别(男输入m,女输入f):");
scanf("%c",&per_inp[modi_num].gender);
if((per_inp[modi_num].gender!='m')&&(per_inp[modi_num].gender!='f'))
printf("对不起,我没看懂,请重新输入,");
}
while((per_inp[modi_num].gender!='m')&&(per_inp[modi_num].gender!='f'));
printf("\n");
printf("出生年月(如:19880101):");
scanf("%lf",&per_inp[modi_num].bir_date);
printf("\n");
printf("基本工资:");
scanf("%lf",&per_inp[modi_num].wage);
printf("\n");
printf("联系电话:");
scanf("%lf",&per_inp[modi_num].tel);
printf("\n");
}
}
if(flag==0)
printf("未找到该员工,");
getchar();
printf("是否继续(y/n)");
scanf("%c",&confirm);
}
while(confirm=='y');
}
///////////////////////删除模块//////////////////////////
void si_delet()
{
int flag=0;
char confirm;
int del_num;
double del_sn;
int temp;
do
{
printf("请输入要删除员工信息的编号:");
scanf("%lf",&del_sn);
for(del_num=0;del_num<NUM;del_num++)
{
if(del_sn==per_inp[del_num].sn)
{
flag=1;
for(temp=del_num;temp<NUM;temp++)
per_inp[temp]=per_inp[temp+1];
}
}
if(!flag)
printf("未找到该员工,");
getchar();
NUM=NUM-1;
printf("是否继续(y/n)");
scanf("%c",&confirm);
}
while(confirm=='y');
}
///////////////////////排列总模块//////////////////////////
void si_sequence()
{
char confirm;
int seq_cho;
do
{
printf("请输入排序条件(按1编号,按2工资):");
scanf("%ld",&seq_cho);
switch(seq_cho)
{
case 1:seq_sn();break;
case 2:seq_wage();break;
}
getchar();
printf("是否继续(y/n)");
scanf("%c",&confirm);
}
while(confirm=='y');
}
///////////////////////按序号排列//////////////////////////
void seq_sn()
{
struct person temp;
int i,j;
for(i=NUM-1;i>0;i--)
{
for(j=0;j<i;j++)
if(per_inp[j].sn>per_inp[j+1].sn)
{
temp=per_inp[j];
per_inp[j]=per_inp[j+1];
per_inp[j+1]=temp;
}
}
f_print(NUM,-1);
///////////////////////按工资排列//////////////////////////
}
void seq_wage()
{
struct person temp;
int i,j;
double t;
for(i=1;i<NUM;i++)
{
t=per_inp[i].wage;
temp=per_inp[i];
j=i-1;
while(j>=0&&t>per_inp[j].wage)
{
per_inp[j+1]=per_inp[j];
j--;
}
per_inp[j+1]=temp;
}
f_print(NUM,-1);
}
///////////////////////查找总模块//////////////////////////
void si_search()
{
char confirm;
int ser_cho;
do
{
printf("请输入查找方式(按1顺序,按2二分):");
scanf("%d",&ser_cho);
switch(ser_cho)
{
case 1:ser_sx();break;
case 2:ser_ef();break;
}
getchar();
printf("是否继续(y/n)");
scanf("%c",&confirm);
}
while(confirm=='y');
}
///////////////////////二分查找//////////////////////////
void ser_ef()
{
////////////////*先按编号升序排列*///////////////////////
struct person temp;
int i,j;
for(i=NUM-1;i>0;i--)
{
for(j=0;j<i;j++)
if(per_inp[j].sn>per_inp[j+1].sn)
{
temp=per_inp[j];
per_inp[j]=per_inp[j+1];
per_inp[j+1]=temp;
}
}
///////////////////////////////////////////////////////
int flag;
char confirm;
double ser_sn;
int left,mid,right;
do
{
flag=0;
left=0;
right=NUM-1;
printf("请输入要查找员工信息的编号:");
scanf("%lf",&ser_sn);
if(NUM>1)
{
while(!flag&&(per_inp[left].sn<=per_inp[right].sn))
{
mid=(left+right)/2;
if(ser_sn==per_inp[mid].sn)
flag=1;
else
if(ser_sn<per_inp[mid].sn)
right=mid-1;
else
left=mid+1;
}
}
if(NUM==1&&(ser_sn==per_inp[NUM-1].sn))
f_print(0,NUM-1);
else
{
if(flag==1)
f_print(0,mid);
else
printf("未找到该员工,");
}
getchar();
printf("继续使用该查找方式(y/n)");
scanf("%c",&confirm);
}
while(confirm=='y');
}
///////////////////////顺序查找//////////////////////////
void ser_sx()
{
int flag=0;
char confirm;
int ser_num;
double ser_sn;
do
{
printf("请输入要查找员工信息的编号:");
scanf("%lf",&ser_sn);
for(ser_num=0;ser_num<NUM;ser_num++)
{
if(ser_sn==per_inp[ser_num].sn)
{
flag=1;
f_print(0,ser_num);
}
}
if(flag==0)
printf("未找到该员工,");
getchar();
printf("继续使用该查找方式(y/n)");
scanf("%c",&confirm);
}
while(confirm=='y');
}
///////////////////////保存主模块//////////////////////////
void si_save()
{ char confirm;
int save_cho;
do
{
printf("请输入存储方式(按1文本,按2二进制):");
scanf("%ld",&save_cho);
switch(save_cho)
{
case 1:save_txt();break;
case 2:save_bin();break;
}
getchar();
printf("是否继续(y/n)");
scanf("%c",&confirm);
}
while(confirm=='y');
}
///////////////////////文本保存//////////////////////////
void save_txt()
{
FILE *fp;
int i;
if((fp=fopen("staff.txt","w"))==NULL)
{
printf("文件staff.txt打开错误!");
exit(1);
}
for(i=0;i<NUM;i++)
{
fprintf(fp,"编号:%lf\n姓名:%s\n性别:%c\n出生年月:%lf\n基本工资:%lf\n联系电话:%lf\n",per_inp[i].sn,per_inp[i].name,per_inp[i].gender,per_inp[i].bir_date,per_inp[i].wage,per_inp[i].tel);
}
fclose(fp);
}
///////////////////////二进制保存//////////////////////////
void save_bin()
{
FILE *fp;
int i;
if((fp=fopen("staff.bin","wb"))==NULL)
{
printf("文件staff.bin打开错误!");
exit(1);
}
for(i=0;i<NUM;i++)
{
fwrite(&per_inp,sizeof(per_inp),2,fp);
}
fclose(fp);
}
///////////////////////输出表格模块//////////////////////////
void f_print(int k,int l)
{
int i,j;
for(i=1;i<=80;i++)
printf("-");
printf("| 序号 | 编号 | 姓名 | 性别 | 出生年月 | 基本工资 | 联系电话 |");
for(i=1;i<=80;i++)
printf("-");
if(l==-1)
{
for(i=0;i<k;i++)
{
printf("| %-5d| %-7.0lf| %-11s|",i+1,per_inp[i].sn,per_inp[i].name);
if(per_inp[i].gender=='m')
printf(" 男 ");
else
printf(" 女 ");
printf("| %-11.0lf|",per_inp[i].bir_date);
printf(" %-11.2lf|",per_inp[i].wage);
printf(" %-13.0lf|",per_inp[i].tel);
for(j=1;j<=80;j++)
printf("-");
}
}
if(l!=-1)
{
printf("| %-5d| %-7.0lf| %-11s|",l+1,per_inp[l].sn,per_inp[l].name);
if(per_inp[l].gender=='m')
printf(" 男 ");
else
printf(" 女 ");
printf("| %-11.0lf|",per_inp[l].bir_date);
printf(" %-11.2lf|",per_inp[l].wage);
printf(" %-13.0lf|",per_inp[l].tel);
for(j=1;j<=80;j++)
printf("-");
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -