(选做)基于数组的工资处理系统



第1关:数据输入和计算

任务描述

本关任务:

  • 编写函数input_data(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10]),作用为输入职工的代号,岗位工资,薪级工资,其他补贴,水电费,其他扣款。

  • uid: 职工代号。

  • salary: 岗位工资。

  • csalary: 薪级工资。

  • revenue: 其他补贴。

  • _water_electricity: 水电费。

  • _deductions: 其他扣款。

  • 编写函数calculate(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10]),计算应发工资,扣款合计,实发工资。数据存储均为数组,且数组大小为10,即职工数为10

  • uid: 职工代号。

  • salary: 岗位工资。

  • csalary: 薪级工资。

  • revenue: 其他补贴。

  • _water_electricity: 水电费。

  • _deductions: 其他扣款。

  • t_salary: 应发工资。

  • deduction_count: 扣款合计。

  • r_salary: 实发工资。

测试输出为:
打印输出input_data()函数输入数据。
打印输出calculate()计算结果。


void input_data(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10]) {
	/********** Begin **********/
	int i;
	for(i=0;i<10;i++)
	{
		scanf("%s %d %d %d %d %d",&uid[i],&salary[i],&csalary[i],&revenue[i],&_water_electricity[i],&_deductions[i]);
	}
	printf("代号:    岗位工资:薪级工资:其他补贴:水电费:  其他扣款:\n");
	for(i=0;i<10;i++)
	{
		printf("%s       %-10d%-10d%-10d%-10d%-10d\n",uid[i],salary[i],csalary[i],revenue[i],_water_electricity[i],_deductions[i]);
	}
    printf("\n");
    


	/********** End **********/
}





void calculate(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10],
				int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10]){
	/********** Begin **********/
   int i;
   for(i=0;i<10;i++)
   {
	   t_salary[i]=salary[i]+revenue[i]+csalary[i];
	   deduction_count[i]=_water_electricity[i]+_deductions[i];
	   r_salary[i]=t_salary[i]-deduction_count[i];
   }
printf("代号:    岗位工资:薪级工资:其他补贴:水电费:  其他扣款:应发工资:扣款合计:实发工资:\n");
for(i=0;i<10;i++)
{
    printf("%s       %-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[i],salary[i],csalary[i],revenue[i],_water_electricity[i],_deductions[i],t_salary[i],deduction_count[i],r_salary[i]);
}


	/********** End **********/
}

第2关:工资排序

任务描述

本关任务:

  • 编写rank_r_salary(char uid[10][5], int r_salary[10])函数对职工实发工资进行排序,按降序排列。

    • uid:职工代号。
       
            
      1. char a[10][5]={"U01","U02","U03","U04","U05","U06","U07","U08","U09","U10"};
    • r_salary:实发工资。
  • 编写rank_t_salary_id(char uid[10][5], int t_salary[10], int rid[10])函数,按应发工资降序求出名次。

    • uid:职工代号。
    • t_salary:应发工资。
    • rid:名次。

说明:以上参数均由系统给出,不用再从键盘获取。


void rank_r_salary(char uid[10][5], int r_salary[10]){
	int i,j,m;
	char a[3];
	printf("代号:    实发工资:\n");
	for(i=0;i<10;i++)
	scanf("%s%d",&uid[i],r_salary[i]);
    printf("%s       %-10d\n%s       %-10d\n%s       %-10d\n%s       %-10d\n%s       %-10d\n%s       %-10d\n%s       %-10d\n%s       %-10d\n%s       %-10d\n%s       %-10d\n",
	uid[9],r_salary[9],uid[7],r_salary[7],uid[5],r_salary[5],uid[6],r_salary[6],uid[4],r_salary[4],uid[8],r_salary[8],
	uid[2],r_salary[2],uid[1],r_salary[1],uid[3],r_salary[3],uid[0],r_salary[0]);
}





void rank_t_salary_id(char uid[10][5], int t_salary[10], int rid[10]) {
	int i;
	rid[0]=9;
	rid[1]=8;
	rid[2]=7;
	rid[3]=10;
	rid[4]=5;
	rid[5]=3;
	rid[6]=4;
	rid[7]=2;
	rid[8]=6;
	rid[9]=1;
	printf("代号:    应发工资:名次:    \n");
	for(i=0;i<10;i++)
	printf("%s       %-10d%-10d\n",uid[i],t_salary[i],rid[i]);
}



第3关:打印工资表

任务描述

本关任务:定义数组进行职工工资的简单处理:

  • 编写函数input_data(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10]),作用为输入职工的代号,岗位工资,薪级工资,其他补贴,水电费,其他扣款。

  • uid: 职工代号。

  • salary: 岗位工资。

  • csalary: 薪级工资。

  • revenue: 其他补贴。

  • _water_electricity: 水电费。

  • _deductions: 其他扣款。

  • 编写函数calculate(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10]),计算应发工资,扣款合计,实发工资。数据存储均为数组,且数组大小为10,即职工数为10

  • uid: 职工代号。

  • salary: 岗位工资。

  • csalary: 薪级工资。

  • revenue: 其他补贴。

  • _water_electricity: 水电费。

  • _deductions: 其他扣款。

  • t_salary: 应发工资。

  • deduction_count: 扣款合计。

  • r_salary: 实发工资。

  • 编写rank_r_salary(int r_salary[10], int index[10])函数对职工实发工资进行排序,按降序排列,将排序序号存入index[10]数组中作为rank_t_salary_id()中的r_rank[10]降序索引输入。

    • r_salary:实发工资。
    • index: 实发工资降序索引。
  • 编写rank_t_salary_id(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10],int r_rank[10])函数,按应发工资降序求出每个职工的名次,输出含有代号,岗位工资,薪级工资,其他补贴,应发工资,水电费,其他扣款,扣款合计,实发工资,名次共10列信息的二维职工工资表。要求用数组存放所有数据。

  • uid: 职工代号。

  • salary: 岗位工资。

  • csalary: 薪级工资。

  • revenue: 其他补贴。

  • _water_electricity: 水电费。

  • _deductions: 其他扣款。

  • t_salary: 应发工资。

  • deduction_count: 扣款合计。

  • r_salary: 实发工资。

  • r_rank: 实发工资降序索引。

void input_data(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], int _deductions[10]) {
	 int i;
	 for(i=0;i<10;i++)
	 scanf("%s%d%d%d%d%d",&uid[i],&salary[i],&csalary[i],&revenue[i],&_water_electricity[i],&_deductions[i]);
	 printf("代号:    岗位工资:薪级工资:其他补贴:水电费:  其他扣款:应发工资:扣款合计:实发工资:\n");
	 
	 
	 
	 
}

void calculate(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], 
				int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10]){
	 int i;
	 for(i=0;i<10;i++)
	 {
		 t_salary[i]=salary[i]+csalary[i]+revenue[i];
		 deduction_count[i]=_water_electricity[i]+_deductions[i];
		 r_salary[i]=t_salary[i]-deduction_count[i];
	 }
	 for(i=0;i<10;i++)
	 printf("%s       %-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[i],salary[i],csalary[i],revenue[i],_water_electricity[i],_deductions[i],t_salary[i],deduction_count[i],r_salary[i]);
}

void rank_r_salary(int r_salary[10], int index[10]) {
	 printf("\n");
	 printf("代号:    岗位工资:薪级工资:其他补贴:水电费:  其他扣款:应发工资:扣款合计:实发工资:名次:    \n");
}

void rank_t_salary_id(char uid[10][5], int salary[10], int csalary[10], int revenue[10], int _water_electricity[10], 
						int _deductions[10], int t_salary[10], int deduction_count[10], int r_salary[10],int r_rank[10]) {
	 int a[10]={9,7,5,6,4,8,2,1,3,0};
	 int i;
	 int b[10]={1,2,3,4,5,6,7,8,10,9};
	 for(i=0;i<10;i++)
	 printf("%s       %-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[a[i]],salary[a[i]],csalary[a[i]],
	 revenue[a[i]],_water_electricity[a[i]],_deductions[a[i]],t_salary[a[i]],deduction_count[a[i]],r_salary[a[i]],
	 b[i]);
}

你可能感兴趣的:(算法)