菜鸟修炼C语言小设计之——工资统计
本設(shè)計(jì)完成一個(gè)工資統(tǒng)計(jì)的小設(shè)計(jì),涉及的C語言重點(diǎn)知識(shí)有:
1,結(jié)構(gòu)體
2,結(jié)構(gòu)體指針數(shù)組
3,枚舉類型
1.1 設(shè)計(jì)題目
本課程設(shè)計(jì)要求設(shè)計(jì)一個(gè)公司職員的數(shù)據(jù)結(jié)構(gòu),并使用結(jié)構(gòu)指針數(shù)組存儲(chǔ)職員信息,統(tǒng)計(jì)公司員工工資總額和平均工資。
1.2 設(shè)計(jì)要求
設(shè)計(jì)要求實(shí)現(xiàn)如下功能:
(1)使用結(jié)構(gòu)指針數(shù)組設(shè)計(jì)一個(gè)公司職員的數(shù)據(jù)結(jié)構(gòu),使用下述的結(jié)構(gòu)定義:
typedef structemployee{
int age;
char *name;
doublesalary;
}*PEMP;
(2)在主函數(shù)里構(gòu)造一個(gè)指針數(shù)組company,用來存放職工信息。
(3)設(shè)計(jì)一個(gè)update函數(shù),用來給company賦值。
函數(shù)update(company,id, age, name, salary)的四個(gè)參數(shù)為:
company: 結(jié)構(gòu)指針數(shù)組
id: company的下標(biāo)
age: 年齡,整數(shù)類型
salary: 薪水,實(shí)數(shù)
(4)設(shè)計(jì)一個(gè)readin函數(shù),直接采用調(diào)用update函數(shù)的方式進(jìn)行賦值。例如:update(company, 2, 30, “LI MING”, 3000.0);
(5)編寫total函數(shù)對(duì)工資求和。
這個(gè)函數(shù)應(yīng)該能對(duì)全體職工和某一年齡段的職工的工資求和。
(6)編寫mean函數(shù)求平均工資。
這個(gè)函數(shù)應(yīng)該能對(duì)全體職工和大于某一年齡段的職工的工資求和并計(jì)算相應(yīng)的平均值。
2.設(shè)計(jì)代碼
#include <stdio.h> #include <stdlib.h>#define EMP_NUM 10typedef struct employee {int age;char name[20];unsigned salary; }*PEMP; typedef enum sel_analy{TOTAL,AVERAGE }sel_c;void update_msg(PEMP company[]); void display_msg(PEMP company[]); void salary_analysis(PEMP company[], sel_c which);int main(int argc, char *argv[]) {int i = 0;PEMP company[EMP_NUM];char select;sel_c which;memset(company, NULL, sizeof(company));do{printf(" <-----工資統(tǒng)計(jì)系統(tǒng)------->\n");printf("1:更新職工信息 2:工資求和\n");printf("3:工資求平均值 4:顯示職工信息\n");printf("0:退出\n");select = getch();switch(select){case '1':update_msg(company);break;case '2':salary_analysis(company, TOTAL);break;case '3':salary_analysis(company, AVERAGE);break;case '4':display_msg(company); break;default:break;};}while(select != '0'); return 0; }void update_msg(PEMP company[]) {int sel = 0;int id;while(1){PEMP new_emp = (PEMP)malloc(sizeof(*new_emp));printf("請(qǐng)輸入員工信息,當(dāng)需要退出輸入時(shí)設(shè)ID為-1:\n");printf("ID:");scanf("%d", &id);while((id<-1) || (id>EMP_NUM-1)){printf("輸入信息錯(cuò)誤,輸入的ID范圍應(yīng)為0到%d之間的數(shù):\n", EMP_NUM-1);printf("ID:");scanf("%d", &id);}if(id == -1){free(new_emp);return; }printf("姓名:");scanf("%s", new_emp->name);printf("年齡:");scanf("%d", &new_emp->age);while((new_emp->age<0) || (new_emp->age>60)){printf("輸入信息錯(cuò)誤,輸入的年齡范圍應(yīng)為0到60之間的數(shù):\n");printf("年齡:");scanf("%d", &new_emp->age);}printf("薪水:");scanf("%d", &new_emp->salary);while((new_emp->age<0) || (new_emp->age>20000)){printf("輸入信息錯(cuò)誤,輸入的薪水范圍應(yīng)為0到20000之間的數(shù):\n");printf("薪水:");scanf("%d", &new_emp->salary);}company[id] = new_emp;}} void salary_analysis(PEMP company[], sel_c which) {char sel=0;int age1, age2;int low_age, high_age, i, j=0;unsigned long sum = 0;while(1){if(which == TOTAL)printf("1:計(jì)算某一年齡段員工的薪水總和 2:計(jì)算全部員工薪水總和\n");elseprintf("1:計(jì)算某一年齡段員工的薪水平均值 2:計(jì)算全部員工薪水平均值\n");printf("0:返回上一層\n");sel = getch();if((sel != '0') && (sel != '1') && (sel != '2')){printf("輸入錯(cuò)誤,請(qǐng)重新輸入:\n");continue;}if(sel == '0')return;if(sel == '1'){printf("開始年齡:");scanf("%d", &age1);while(age1<0 || age1>60){printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");printf("開始年齡:");scanf("%d", &age1);}printf("結(jié)束年齡:");scanf("%d", &age2); while(age2<0 || age2>60){printf("輸入錯(cuò)誤,請(qǐng)重新輸入\n");printf("結(jié)束年齡:");scanf("%d", &age2);}if(age1>age2){low_age = age2;high_age = age1;}else{low_age = age1;high_age = age2;}for(i=0; i<EMP_NUM; i++){if(company[i])if((company[i]->age>=low_age) && (high_age>=company[i]->age)){sum += company[i]->salary;j++;}}if(sum != 0)if(which == TOTAL)printf("從%d到%d年齡段的員工薪水總和為%ld\n", low_age, high_age, sum);elseprintf("從%d到%d年齡段的員工薪水平均值為%ld\n", low_age, high_age, (sum/j));elseprintf("沒有該年齡段的員工!\n"); return ;}if(sel == '2'){for(i=0; i<EMP_NUM; i++){if(company[i]){sum += company[i]->salary;j++;}}if(sum != 0)if(which == TOTAL)printf("所有員工薪水總和為%ld\n", sum);elseprintf("所有員工薪水平均值為%ld\n", sum/j);elseprintf("沒有員工信息!\n");return;}} }void display_msg(PEMP company[]) {int i;for(i=0; i<EMP_NUM; i++){if(company[i])printf("ID:%d 姓名:%s 年齡:%d 薪水:%d\n", i, company[i]->name,\company[i]->age, company[i]->salary );}}轉(zhuǎn)載于:https://www.cnblogs.com/key000/archive/2011/11/02/4084763.html
總結(jié)
以上是生活随笔為你收集整理的菜鸟修炼C语言小设计之——工资统计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 仿豆丁百度文库网页版阅读器完整解决方案
 - 下一篇: Net与Flex入门