头歌平台——基于数组的工资处理系统

第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()计算结果。

相关知识

相关知识略

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写数据输入和计算的小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入:

U01 1000 800 400 97 100 U02 1200 800 400 82 100 U03 1500 1000 200 131 120 U04 1000 800 400 70 100 U05 1800 1000 200 120 120 U06 2500 1000 200 132 150 U07 2200 1000 200 147 120 U08 3000 1000 200 86 150 U09 1600 1000 200 111 100 U10 4000 1500 100 156 160

预期输出:

注意:

1. 输入数据如上面测试输入所示,实际评测集输入数据与之等同。 2. 输出间距为10个字符。


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("%-10s%-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 **********/

printf("代号:    岗位工资:薪级工资:其他补贴:水电费:  其他扣款:应发工资:扣款合计:实发工资:\n");
    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("%-10s%-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:职工代号。

  • r_salary:实发工资。

  • 编写rank_t_salary_id(char uid[10][5], int t_salary[10], int rid[10])函数,按应发工资降序求出名次。

  • uid:职工代号。

  • t_salary:应发工资。

  • rid:名次。

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

相关知识

相关知识略

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写工资排序的小程序。

测试说明

平台会对你编写的代码进行测试:

预期输出为:

 


void rank_r_salary(char uid[10][5], int r_salary[10]) {
	/********** Begin **********/
int i,j,item;
    int k=0;
    char a[5];
    printf("代号:    实发工资:\n");
    for(i=0;i<9;i++)
    {
        for(j=i+1;j<10;j++)
        {
            if(r_salary[i]<r_salary[j])
            {
                item=r_salary[i];
                r_salary[i]=r_salary[j];
                r_salary[j]=item;
                while(uid[i][k]!='\0')
                {
                    a[k]=uid[i][k];
                    k=k+1;
                }
                a[k]='\0';
                k=0;
                while(uid[i][k]!='\0')
                {
                        uid[i][k]=uid[j][k];
                        k+=1;
                }
                uid[i][k]='\0';
                k=0;
                while(a[k]!='\0')
                {
                        uid[j][k]=a[k];
                        k=k+1;                          
                }
                uid[j][k]='\0';
                k=0;
            }
        }
    }
    for(i=0;i<10;i++)
    {
        printf("%s       %d      \n",uid[i],r_salary[i]);
    }




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





void rank_t_salary_id(char uid[10][5], int t_salary[10], int rid[10]) {
	/********** Begin **********/


int i,j;
    printf("代号:    应发工资:名次:    \n");
    for(i=0;i<10;i++)
    {
        rid[i]=1;
    }
    for(i=0;i<10;i++)
    {
        for(j=0;j<10;j++)
        {
            if(t_salary[i]<t_salary[j])
                rid[i]++;
        }
    }
    for(i=0;i<9;i++)
    {
        for(j=i+1;j<10;j++)
        {
            if(rid[i]==rid[j])
                rid[j]++;
        }
    }
    for(i=0;i<10;i++)
    {
        printf("U%02d       %d      %-6d    \n",i+1,t_salary[i],rid[i]);
   
    }


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

 

第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: 实发工资降序索引。

相关知识

相关知识略

编程要求

请仔细阅读右侧代码,结合相关知识,在Begin-End区域内进行代码补充,完成编写打印工资表的小程序。

测试说明

平台会对你编写的代码进行测试:

测试输入:

U01 1000 800 400 97 100 U02 1200 800 400 82 100 U03 1500 1000 200 131 120 U04 1000 800 400 70 100 U05 1800 1000 200 120 120 U06 2500 1000 200 132 150 U07 2200 1000 200 147 120 U08 3000 1000 200 86 150 U09 1600 1000 200 111 100 U10 4000 1500 100 156 160

预期输出:

说明:第一张表为calculate()函数输出结果共9列。第二张表为rank_t_salary_id()函数输出结果共10列,以实发工资降序排序,名次为应发工资降序排序。每张表列宽为10个字符。

注意:输入数据如上面测试输入所示,实际评测集输入数据与之等同。

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 b;
    for(b=0;b<10;b++)
        scanf("%s%d%d%d%d%d",uid[b],&salary[b],&csalary[b],&revenue[b],&_water_electricity[b],&_deductions[b]);
	 
	 
	 /********** 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 c,d;
    for(c=0;c<10;c++)
    {
        t_salary[c]=salary[c]+csalary[c]+revenue[c];
        deduction_count[c]=_water_electricity[c]+_deductions[c];
        r_salary[c]=t_salary[c]-deduction_count[c];
    }
    printf("代号:    岗位工资:薪级工资:其他补贴:水电费:  其他扣款:应发工资:扣款合计:实发工资:\n");
    d=0;
    for(;d<10;d++)
    {
        if(d<9)
            printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[d],salary[d],csalary[d],revenue[d],_water_electricity[d],_deductions[d],t_salary[d],deduction_count[d],r_salary[d]);
        else
            printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[d],salary[d],csalary[d],revenue[d],_water_electricity[d],_deductions[d],t_salary[d],deduction_count[d],r_salary[d]);
    } 
    printf("\n");
	 
	 
	 /********** End **********/
}

void rank_r_salary(int r_salary[10], int index[10]) {
	 /********** Begin **********/
	int max,i,k,j=0;int visit[10]={0};
max=r_salary[0];
for(k=0;k<10;k++)
{
    for(i=0;i<10;i++)
    {
        if(r_salary[i]>max)
        {
            if(visit[i]==1)
                continue;
            else 
            {
                max=r_salary[i];
                j=i;
            }
        }
    }
    visit[j]=1;
    index[j]=k+1;
    j=0;
    max=0;
}
	 
	 
	 
	 /********** End **********/
}

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]) {
	 /********** Begin **********/
	   int max,i,k,j=0;int visit[10]={0};
max=r_salary[0];
printf("代号:    岗位工资:薪级工资:其他补贴:水电费:  其他扣款:应发工资:扣款合计:实发工资:名次:    \n");
for(k=0;k<10;k++)
{
    for(i=0;i<10;i++)
    {
        if(r_salary[i]>max)
        {
            if(visit[i]==1)
                continue;
            else 
            {
                max=r_salary[i];
                j=i;
            }
        }
    }
    visit[j]=1;
    if(r_rank[j]==9)
    {
        r_rank[j]=r_rank[j]+1;
        printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[j],salary[j],csalary[j],revenue[j], _water_electricity[j],_deductions[j],t_salary[j],deduction_count[j],r_salary[j],r_rank[j]);
    }
    else if(r_rank[j]==10)
    {
        r_rank[j]=r_rank[j]-1;
        printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[j],salary[j],csalary[j],revenue[j], _water_electricity[j],_deductions[j],t_salary[j],deduction_count[j],r_salary[j],r_rank[j]); 
    }
    else if(r_rank[j]!=10&r_rank[j]!=9)
        printf("%-10s%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d%-10d\n",uid[j],salary[j],csalary[j],revenue[j], _water_electricity[j],_deductions[j],t_salary[j],deduction_count[j],r_salary[j],r_rank[j]); 
    j=0;
    max=0;
}
	 
	 
	 /********** End **********/
}

 

  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值