员工信息管理系统
要求:
输入5个员工的信息(输入),每个员工含有成员名为“工号、姓名、基本工资、补贴、奖金、水电费、房租、实发工资、工资排名”,编写函数完成下列要求:
(1)输入一个员工的工号,查询该员工的信息并输出,若不存在显示没找到;(查询)
(2)输入一个新员工的信息,按工号顺序将该员工的信息插入后输出;(显示)
(3)输入一个已存在员工的姓名信息,删除该员工的信息后输出;(删除)
(4)修改某员工的信息;(修改)
(5)求每个员工的实发工资(实发工资=基本工资+补贴+奖金-水电费-房租);
(6)求所有员工的基本工资、补贴、奖金、水电费、房租和实发工资的总和并输出;
(7)对所有员工的信息按实发工资升序排序,并填写工资排名后输出。
(由四个人分别完成各种函数,然后进行函数的调用,汇总,完成主程序。)
主页面:
代码
char name[20]; //姓名
int basePay; //基本工资
int allowance; //补贴
int bonus; //奖金
int wePay; //水电费
int houseRent; //房租
int netPayRoll; //实际工资
};
staff a[100];
void refer() //查询员工信息
{ int x,t;int c=0;
if(a[0].basePay==0){ //基本工资进行判断是否有数据
printf("无数据\n");
return;
}else{
void netPayRoll();
netPayRoll();
printf("输入要查询员工的工号:");
scanf("%d",&x);
for(int i=0;i<M;i++)
{ if(x==a[i].number){ //按照员工序号进行查找
printf("工号\t姓名\t基本工资\t补贴\t奖金\t水电费\t房租\t实发工资\t工资排名\n");
printf("%d\t%s\t%d\t\t%d\t%d\t%d\t%d\t%d\t\t%d\n",a[i].number,a[i].name,a[i].basePay,
a[i].allowance,a[i].bonus,a[i].wePay,a[i].houseRent,a[i].netPayRoll,
i+1);
c=1;
}
}
if(c==0) {
printf("\n继续查询请按1,返回主菜单请按0: ");
scanf("%d",&t);
switch(t) {
case 1: refer();
break;
case 0: system("cls"); //清空显示屏
break;
default: break;
}
}
}
}
void add() //添加员工信息
{
int b=1,i;
int c=0;
printf("现在添加信息。\n");
while(b)
{
for(i=M;;i++)
{
printf("工号 姓名 基本工资 补贴 奖金 水电费 房租 \n ");
scanf("%d %s %d %d %d %d %d",&a[i].number,a[i].name,&a[i].basePay,&a[i].allowance,
&a[i].bonus,&a[i].wePay,&a[i].houseRent);
M++;
printf("是否继录入? 请输入1(继续输入) OR 0(结束输入)\n");
scanf("%d",&c);
if(c==1) //判断之后是否继续添加员工信息
{
b=1;
break;
}else if(c==0)
{
b=0;
printf("输入完成");
break;
}
}
}
}
void input() //输入员工信息
{
int i;
printf("请输入员工数据:\n");
printf("工号\t姓名\t基本工资\t 补贴\t 奖金\t 水电费\t 房租 \n ");
for(i=0;i<M;i++)
{
scanf("%d %s %d %d %d %d %d",&a[i].number,a[i].name,&a[i].basePay,
& a[i].allowance,&a[i].bonus,&a[i].wePay,&a[i].houseRent);
}
}
void change() //修改
{
void display();
int i,z,k=0;
char x[5];
if(a[0].basePay==0){ //基本工资进行判断是否有数据
printf("无数据\n");
return;}
else{
printf("请输入要修改的员工号:");
scanf("%d",&z);
for(i=0;i<M;i++)
{
if(z==a[i].number)
{
printf("请输入新的工号:");
scanf("%d",&a[i].number);
printf("请输入新的姓名:");
scanf("%s",x);
strcpy(a[i].name,x);
printf("请输入新的基本工资:");
scanf("%d",&a[i].basePay);
printf("请输入新的补贴:");
scanf("%d",&a[i].allowance);
printf("请输入新的奖金:");
scanf("%d",&a[i].bonus);
printf("请输入新的水电费:");
scanf("%d",&a[i].wePay);
printf("请输入新的房租:");
scanf("%d",&a[i].houseRent);
k=1;
}
}}
if(k==0)
printf("没有找到你要修改的信息。\n");
printf("\n");
display();
}
void Delete() /*删除函数*/
{
int i,j,t,n,f;
char Name[20];
if(a[0].basePay==0)
{
printf("无数据");
return;
}
else{
printf("请输入要删除的职工的姓名: ");
scanf("%s",Name);
for(f=1,i=0;f&&i<M;i++)
{ if(strcmp(a[i].name,Name)==0)
{
printf("\n已找到此人\n");
printf("\n确认删除请按 1,取消删除请按 0: ");
scanf("%d",&n);
if(n==1) /*如果删除,则其他的信息都向前移一行*/
{ for(j=i;j<M-1;j++)
a[j]=a[j+1]; /*当找到第j个职工时,for语句后j自加了1,所以下面的应该把改后的信息赋值给第j-1个人*/
f=0;
M--;
}
else f=2;
}
}
}
switch(f){
case 0: printf("\n删除成功!\n");
break;
case 1: printf("\n对不起,贵公司没有该员工!\n");
break;
case 2: printf("\n取消删除!\n");
break;
}
printf("\n继续删除请按1,返回主菜单请按0: ");
scanf("%d",&t);
switch(t)
{ case 1: Delete();
break;
case 0: system("cls"); //清空显示屏
break;
default: break;
}
}
void netPayRoll() //求实发工资
{
int i,j;
for(i=0;i<M;i++)
{
a[i].netPayRoll=a[i].basePay+a[i].allowance+a[i].bonus-a[i].wePay-a[i].houseRent;
}
}
void synthesis()//各项数据之和
{
int sum1=0,sum2=0,sum3=0,sum4=0,sum5=0,sum6=0;
int i;
void netPayRoll();
if(a[0].basePay==0){
printf("无数据");
return;}
else {
for(i=0;i<M;i++)
{
sum1=sum1+a[i].basePay;
}
for(i=0;i<M;i++)
{
sum2=sum2+a[i].allowance;
}
for(i=0;i<M;i++)
{
sum3=sum3+a[i].bonus;
}
for(i=0;i<M;i++)
{
sum4=sum4+a[i].wePay;
}
for(i=0;i<M;i++)
{
sum5=sum5+a[i].houseRent;
}
netPayRoll();
for(i=0;i<M;i++)
{
sum6=sum6+a[i].netPayRoll;
}
printf("员工基本工资的总和为:%d\n",sum1);
printf("员工的补贴总和为:%d\n",sum2);
printf("员工的奖金综合为:%d\n",sum3);
printf("员工的水电费总和为:%d\n",sum4);
printf("员工的房租总和为:%d\n",sum5);
printf("员工的实发工资总和为:%d\n",sum6);
}}
void rank() //按实发工资排序
{
int i,j;
staff t;
for(j=0;j<M-1;j++){ //冒泡法排序
for(i=0;i<M-1-j;i++){
if(a[i].netPayRoll<a[i+1].netPayRoll){
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
}
void display() //显示
{
void netPayRoll();
void rank();
int i;
if(a[0].basePay==0){
printf("数据空");
return;}
else{
netPayRoll();
rank();
printf("工号\t姓名\t基本工资\t补贴\t奖金\t水电费\t房租\t实发工资\t工资排名\n");
for(i=0;i<M;i++){
printf("%d\t%s\t%d\t\t%d\t%d\t%d\t%d\t%d\t\t%d\n",a[i].number,a[i].name,a[i].basePay,
a[i].allowance,a[i].bonus,a[i].wePay,a[i].houseRent,a[i].netPayRoll,
i+1);
}
}
}
int main()
{
//声明函数
void input();
void display();
void change();
void synthesis();
void Delete();
void refer();
void add();
int n;
while(1)
{
printf("\n");
printf("\t*****职 工 信 息 管 理 系 统*****\n");
printf("\t* 1. 输 入 职 工 信 息 *\n");
printf("\t* 2. 查 询 职 工 信 息 *\n");
printf("\t* 3. 添 加 职 工 信 息 *\n");
printf("\t* 4. 修 改 职 工 信 息 *\n");
printf("\t* 5. 浏 览 职 工 信 息 *\n");
printf("\t* 6. 删 除 职 工 信 息 *\n");
printf("\t* 7. 职 工 信 息 总 和 *\n");
printf("\t* 0. 退 出 系 统 *\n");
printf("\t*********************************\n");
printf("\n");
printf("输入你选择的序号:");
scanf("%d",&n);
switch(n)
{
case 1:input();break;
case 2:refer();break;
case 3:add();break;
case 4:change();break;
case 5:display();break;
case 6:Delete();break;
case 7:synthesis();break;
case 0:return 0;
default :printf("无该选项,请重新输入!\n"); break;
}
}
return 0;
}