SOS!!!C语言程序设计!!十万火急!高手进

《工资管理系统》设计任务
(1)输入功能:输入60名职工编号、单位、姓名、工资各项。
(2)计算功能:计算职工实发工资=基本工资+附加工资+补贴-水电费。
(3)查询功能:按职工编号、单位、姓名显示个人或单位工资信息。

#include <stdio.h>
#include <string.h>
typedef struct tagsalary{
int base; //基本工资
int expend; //附加工资
int butie; //补贴
int fee; //水电费
int total;//实发工资
}salary;
typedef struct tagworker
{
int number; //编号
char department[100]; //单位或部门
char name[50]; //姓名
salary salaryInfo; //工资信息
}worker;

void input(worker w[],int n)
{
int i;
for(i=0; i<n; i++)
{
printf("请输入第 %d 个职工的信息:",i+1);
puts("(编号 单位 姓名 基本工资 附加工资 补贴 水电费)");
scanf("%d%s%s%d%d%d%d",&w[i].number,w[i].department,w[i].name,
&w[i].salaryInfo.base,&w[i].salaryInfo.expend,&w[i].salaryInfo.butie,&w[i].salaryInfo.fee);
}
}

void calculateSalary(worker w[],int n)
{
int i;
for(i=0; i<n; i++)
{
w[i].salaryInfo.total = w[i].salaryInfo.base +
w[i].salaryInfo.expend + w[i].salaryInfo.butie - w[i].salaryInfo.fee;
}
}

void queryAccordNumber(worker w[],int n,int num)
{
int i;
for(i=0; i<n; i++)
if(num == w[i].number)
break;
if(i==n)
{
puts("未找到该编号的职工\n");
return;
}

printf("编号为%d的职工信息如下:\n",num);
printf("编号%d,单位%s,姓名%s,实发工资%d(基本工资%d,附加工资%d,补贴%d,水电费%d)\n",
w[i].number,w[i].department,w[i].name,
w[i].salaryInfo.total,w[i].salaryInfo.base,
w[i].salaryInfo.expend,w[i].salaryInfo.butie,w[i].salaryInfo.fee);

}

void queryAccordName(worker w[],int n,char *name)
{
int i;
for(i=0; i<n; i++)
if( !strcmp(name,w[i].name) )
break;
if(i==n)
{
puts("未找到该职工");
return;
}
printf("姓名为%s的职工信息如下:\n",name);
printf("编号%d,单位%s,姓名%s,实发工资%d(基本工资%d,附加工资%d,补贴%d,水电费%d)\n",
w[i].number,w[i].department,w[i].name,
w[i].salaryInfo.total,w[i].salaryInfo.base,
w[i].salaryInfo.expend,w[i].salaryInfo.butie,w[i].salaryInfo.fee);
}

void queryAccordDepartment(worker w[],int n,char *dep)
{
int i;
salary s={0,0,0,0,0};
for(i=0; i<n; i++)
if( !strcmp(dep,w[i].department) )
{
s.base +=w[i].salaryInfo.base;
s.butie +=w[i].salaryInfo.butie;
s.expend +=w[i].salaryInfo.expend;
s.fee +=w[i].salaryInfo.fee;
s.total +=w[i].salaryInfo.total;
}

if(s.base)
{
puts("该单位的工资信息如下:");
printf("实发工资%d(基本工资%d,附加工资%d,补贴%d,水电费%d)\n",s.total,s.base,s.expend,s.butie,s.fee);
}
else
puts("未找到该单位\n");
}

void query(worker w[],int n)
{
int i;
do{
int num;
char dep[100],name[50];
puts("\n按职工编号查询请输入1\n按单位查询请输入2\n按职工姓名请输入3\n结束请输入任意其他值:");
scanf("%d", &i);
switch(i){
case 1:
puts("请输入职工编号");
scanf("%d",&num);
queryAccordNumber(w,n,num);
break;
case 2:
puts("请输入单位");
scanf("%s",dep);
queryAccordDepartment(w,n,dep);
break;
case 3:
puts("请输入姓名");
scanf("%s",name);
queryAccordName(w,n,name);
break;
default:
puts("结束查询");
}
}while(i>0&&i<4);
}
/*测试的时候可把60改小一点,比如2 */
#define N 60
main()
{
worker w[N];
input(w,N);
calculateSalary(w,N);
query(w,N);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-07-13
很简单呀,可惜不愿意写。
用结构数组保存数据。
也可以用链表来保持数据,建议用链表。
相似回答