本设计完成一个工资统计的小设计,涉及的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.设计代码

#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("   <-----工资统计系统------->\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("请输入员工信息,当需要退出输入时设ID为-1:\n");printf("ID:");scanf("%d", &id);while((id<-1) || (id>EMP_NUM-1)){printf("输入信息错误,输入的ID范围应为0到%d之间的数:\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("输入信息错误,输入的年龄范围应为0到60之间的数:\n");printf("年龄:");scanf("%d", &new_emp->age);}printf("薪水:");scanf("%d", &new_emp->salary);while((new_emp->age<0) || (new_emp->age>20000)){printf("输入信息错误,输入的薪水范围应为0到20000之间的数:\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:计算某一年龄段员工的薪水总和    2:计算全部员工薪水总和\n");elseprintf("1:计算某一年龄段员工的薪水平均值    2:计算全部员工薪水平均值\n");printf("0:返回上一层\n");sel = getch();if((sel != '0') && (sel != '1') && (sel != '2')){printf("输入错误,请重新输入:\n");continue;}if(sel == '0')return;if(sel == '1'){printf("开始年龄:");scanf("%d", &age1);while(age1<0 || age1>60){printf("输入错误,请重新输入\n");printf("开始年龄:");scanf("%d", &age1);}printf("结束年龄:");scanf("%d", &age2); while(age2<0 || age2>60){printf("输入错误,请重新输入\n");printf("结束年龄:");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 );}}

转载于:https://www.cnblogs.com/key000/archive/2011/11/02/4084763.html

菜鸟修炼C语言小设计之——工资统计相关推荐

  1. c语言课程设计 职工工资处理系统,院职工工资管理系统_C语言课程设计-2017年10月.doc...

    信息科学与技术学院 课程设计报告 2012-2013学年第一学期 课程名称:C语言课程设计上机 设计题目:院职工工资管理系统 学 号:__________________ 姓 名:__________ ...

  2. c语言小数加分,求救:c语言课程设计 员工工资管理程序 有加分的。谢谢

    #define SIZE 50 /* 定义结构体 */ struct date {int month; int day; int year; }; typedef struct employee {c ...

  3. C++语言课程设计——职工工资表

    一.设计题目 职工工资表 二.设计目的 设计一个职工工资表,能够通过菜单实现简单的信息录入与显示操作.注意对象数组的使用,利用赋值兼容规则实现不同类型的员工的信息存储,并使用虚函数完成对于不同类型员工 ...

  4. 教室工资管理系统c语言课程设计csdn,工资管理系统(C编写)

    #include#include#include//包含清屏.退出程序函数. #include//备份数据 #include class Employee { public: friend class ...

  5. C语言课程设计_职工工资管理系统

    要求 设计一个职工工资管理系统: (1)输入记录:将每一个职工的姓名.ID号以及基本工资.职务工资.岗位津贴.医疗保险.公积金的数据作为一个记录.该软件能建立一个新的数据文件或给已建立好的数据文件增加 ...

  6. c语言射击类小游戏任务书,(c语言课程设计报告小游戏“石头剪子布”.doc

    (c语言课程设计报告小游戏"石头剪子布" <C语言课程设计>报告 题目:石头剪子布 班级: 学号: 姓名: 指导教师: 成绩: 目 录: 一.选题背景- 3 - 二.设 ...

  7. 麻雀虽小,五脏俱全——由C语言小程序深入学习软件工程和设计开发规范

    苏思畅 - 原创作品转载请注明出处 - <软件工程(C编码实践篇)>MOOC课程 http://mooc.study.163.com/course/USTC-1000002006 一.课程 ...

  8. C语言小游戏设计报告

    C语言小游戏设计报告 课程设计名称:贪吃蛇小游戏 专业班级:计科15-2 学号:150809229 姓名:XXX 一.设计目标 通过设计,培养学生对电脑的动手能力,使学生巩固<C语言程序设计&g ...

  9. c语言 输入职工工资资料,通过结构体的数组来进行操作 报告,c语言课程设计报告-职工工资管理系统...

    <c语言课程设计报告-职工工资管理系统>由会员分享,可在线阅读,更多相关<c语言课程设计报告-职工工资管理系统(33页珍藏版)>请在人人文库网上搜索. 1.c 语言课程设计报告 ...

最新文章

  1. 用SVC模型完成对手写数字的分类
  2. reflective dll injection 反射注入
  3. MySQL读写分离中间件解决
  4. nodejs+webpack+vue以及npm安装对应的库
  5. java单例模式的实现方法_JAVA单例模式的几种实现方法
  6. postgresql,pgadmin4安装后出错,界面只有文字
  7. GitLab轻松创建一个Merge Request
  8. 为制造业构建Teams Power App 2:创建客户UI
  9. ADFS3.0 Customizing the AD FS Sign-in Pages
  10. 使用ssh公钥密钥自动登陆linux服务器
  11. 大数据分析师高级证书_有大数据分析师资格证书吗?
  12. 【好东西】ACM在线模版-f-zyj
  13. Cesium geojson 区域拉伸高度
  14. Threadlocal学习及内存泄漏原因和解决方案
  15. virtualbox 虚拟机 win7 激活后开机黑屏,只有横杠
  16. 圣思园——Java SE Lesson 5
  17. 前端系列——vue2+高德地图web端开发(poi搜索两种方式)
  18. 配置Exchange 2010 服务器(一) 配置产品密钥及登录OWA时用户不需要输入域名称
  19. vue系统权限(动态加载路由方式)
  20. 《深入浅出Docker》学习笔记

热门文章

  1. KDD走进阿里 数百专家聚集探讨产学研一体化
  2. js 错误/异常处理
  3. Windows7下注册OCX的注意事项
  4. html select选择事件_一道搜狗面试题:IO多路复用中select、poll、epoll之间的区别...
  5. MessagePack Java 0.6.X List, Map 对象的序列化和反序列化
  6. urllib2.urlopen超时问题
  7. Oracle建立全文索引详解
  8. Codeforces 1066 C(思维)
  9. 基于netty的微服务架构
  10. 原百万访问量博客http://blog.chinaunix.net/uid/20656672.html不再维护(10年前数百篇oracle/teradata性能优化、故障处理案例)...