菜鸟修炼C语言小设计之——工资统计

本设计完成一个工资统计的小设计,涉及的C语言重点知识有:

1,结构体

2,结构体指针数组

3,枚举类型

1.1 设计题目

本课程设计要求设计一个公司职员的数据结构,并使用结构指针数组存储职员信息,统计公司员工工资总额和平均工资。

1.2 设计要求

设计要求实现如下功能:

(1)使用结构指针数组设计一个公司职员的数据结构,使用下述的结构定义:

typedef structemployee{

int age;

char *name;

doublesalary;

}*PEMP;

(2)在主函数里构造一个指针数组company,用来存放职工信息。

(3)设计一个update函数,用来给company赋值。

函数update(company,id, age, name, salary)的四个参数为:

company: 结构指针数组

id: company的下标

age: 年龄,整数类型

salary: 薪水,实数

(4)设计一个readin函数,直接采用调用update函数的方式进行赋值。例如:update(company, 2, 30, “LI MING”, 3000.0);

(5)编写total函数对工资求和。

这个函数应该能对全体职工和某一年龄段的职工的工资求和。

(6)编写mean函数求平均工资。

这个函数应该能对全体职工和大于某一年龄段的职工的工资求和并计算相应的平均值。


2.设计代码

  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3.  
  4. #define EMP_NUM 10 
  5.  
  6. typedef struct employee { 
  7.     int age; 
  8.     char name[20]; 
  9.     unsigned salary; 
  10. }*PEMP;  
  11.  
  12. typedef enum sel_analy{ 
  13.     TOTAL, 
  14.     AVERAGE 
  15. }sel_c; 
  16.   
  17. void update_msg(PEMP company[]); 
  18. void display_msg(PEMP company[]); 
  19. void salary_analysis(PEMP company[], sel_c which); 
  20.  
  21.  
  22. int main(int argc, char *argv[]) 
  23.     int i = 0; 
  24.     PEMP company[EMP_NUM]; 
  25.     char select; 
  26.     sel_c which; 
  27.     memset(company, NULL, sizeof(company)); 
  28.       
  29.  
  30.     do 
  31.     { 
  32.         printf("    <-----工资统计系统------->\n"); 
  33.         printf("1:更新职工信息        2:工资求和\n"); 
  34.         printf("3:工资求平均值        4:显示职工信息\n"); 
  35.         printf("0:退出\n"); 
  36.          
  37.         select = getch(); 
  38.         switch(select){ 
  39.             case '1'
  40.                 update_msg(company); 
  41.                 break
  42.             case '2'
  43.                 salary_analysis(company, TOTAL); 
  44.                 break
  45.             case '3'
  46.                 salary_analysis(company, AVERAGE); 
  47.                 break
  48.             case '4'
  49.                 display_msg(company);  
  50.                 break
  51.             default
  52.                 break
  53.         }; 
  54.          
  55.     }while(select != '0');   
  56.      
  57.     return 0; 
  58.  
  59. void update_msg(PEMP company[]) 
  60.     int sel = 0; 
  61.     int id; 
  62.      
  63.     while(1){ 
  64.          
  65.         PEMP new_emp = (PEMP)malloc(sizeof(*new_emp)); 
  66.          
  67.         printf("请输入员工信息,当需要退出输入时设ID为-1:\n"); 
  68.         printf("ID:"); 
  69.         scanf("%d", &id); 
  70.              
  71.         while((id<-1) || (id>EMP_NUM-1)){ 
  72.             printf("输入信息错误,输入的ID范围应为0到%d之间的数:\n", EMP_NUM-1); 
  73.             printf("ID:"); 
  74.             scanf("%d", &id); 
  75.         } 
  76.          
  77.         if(id == -1){ 
  78.             free(new_emp); 
  79.             return;  
  80.         } 
  81.              
  82.              
  83.         printf("姓名:"); 
  84.         scanf("%s", new_emp->name); 
  85.          
  86.         printf("年龄:"); 
  87.         scanf("%d", &new_emp->age); 
  88.          
  89.         while((new_emp->age<0) || (new_emp->age>60)){ 
  90.             printf("输入信息错误,输入的年龄范围应为0到60之间的数:\n"); 
  91.             printf("年龄:"); 
  92.             scanf("%d", &new_emp->age); 
  93.         } 
  94.          
  95.         printf("薪水:"); 
  96.         scanf("%d", &new_emp->salary); 
  97.          
  98.         while((new_emp->age<0) || (new_emp->age>20000)){ 
  99.             printf("输入信息错误,输入的薪水范围应为0到20000之间的数:\n"); 
  100.             printf("薪水:"); 
  101.             scanf("%d", &new_emp->salary); 
  102.         } 
  103.          
  104.         company[id] = new_emp; 
  105.     } 
  106.  
  107. void salary_analysis(PEMP company[], sel_c which) 
  108.     char sel=0; 
  109.     int age1, age2; 
  110.     int low_age, high_age, i, j=0; 
  111.      
  112.     unsigned long sum = 0; 
  113.      
  114.     while(1){ 
  115.         if(which == TOTAL) 
  116.             printf("1:计算某一年龄段员工的薪水总和    2:计算全部员工薪水总和\n"); 
  117.         else 
  118.             printf("1:计算某一年龄段员工的薪水平均值   2:计算全部员工薪水平均值\n"); 
  119.              
  120.         printf("0:返回上一层\n"); 
  121.         sel = getch(); 
  122.         if((sel != '0') && (sel != '1') && (sel != '2')){ 
  123.             printf("输入错误,请重新输入:\n"); 
  124.             continue
  125.         } 
  126.          
  127.         if(sel == '0'
  128.             return
  129.              
  130.         if(sel == '1'){ 
  131.             printf("开始年龄:"); 
  132.             scanf("%d", &age1); 
  133.             while(age1<0 || age1>60){ 
  134.                 printf("输入错误,请重新输入\n"); 
  135.                 printf("开始年龄:"); 
  136.                 scanf("%d", &age1); 
  137.             } 
  138.              
  139.             printf("结束年龄:"); 
  140.             scanf("%d", &age2);  
  141.             while(age2<0 || age2>60){ 
  142.             printf("输入错误,请重新输入\n"); 
  143.             printf("结束年龄:"); 
  144.                 scanf("%d", &age2); 
  145.             } 
  146.              
  147.             if(age1>age2){ 
  148.                 low_age = age2; 
  149.                 high_age = age1; 
  150.             } 
  151.             else
  152.                 low_age = age1; 
  153.                 high_age = age2; 
  154.             } 
  155.              
  156.             for(i=0; i<EMP_NUM; i++){ 
  157.                 if(company[i]) 
  158.                     if((company[i]->age>=low_age) && (high_age>=company[i]->age)){ 
  159.                         sum += company[i]->salary; 
  160.                         j++; 
  161.                     } 
  162.             } 
  163.             if(sum != 0) 
  164.                 if(which == TOTAL) 
  165.                     printf("从%d到%d年龄段的员工薪水总和为%ld\n", low_age, high_age, sum); 
  166.                 else 
  167.                     printf("从%d到%d年龄段的员工薪水平均值为%ld\n", low_age, high_age, (sum/j)); 
  168.             else 
  169.                 printf("没有该年龄段的员工!\n");  
  170.             return
  171.              
  172.         } 
  173.          
  174.         if(sel == '2'){ 
  175.             for(i=0; i<EMP_NUM; i++){ 
  176.                 if(company[i]){ 
  177.                     sum += company[i]->salary; 
  178.                     j++; 
  179.                 } 
  180.                  
  181.             } 
  182.             if(sum != 0) 
  183.                 if(which == TOTAL) 
  184.                     printf("所有员工薪水总和为%ld\n", sum); 
  185.                 else 
  186.                     printf("所有员工薪水平均值为%ld\n", sum/j); 
  187.             else 
  188.                 printf("没有员工信息!\n"); 
  189.                 return
  190.         } 
  191.     } 
  192.  
  193.  
  194. void display_msg(PEMP company[]) 
  195.     int i; 
  196.      
  197.     for(i=0; i<EMP_NUM; i++) 
  198.     { 
  199.         if(company[i]) 
  200.         printf("ID:%d       姓名:%s       年龄:%d   薪水:%d\n", i, company[i]->name,\ 
  201.                 company[i]->age, company[i]->salary ); 
  202.     } 
  203.      

转载自http://blog.csdn.net/ayangke/article/details/6927000

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值