菜鸟修炼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.设计代码

#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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/303170.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AgileConfig - 轻量级配置中心1.2.0发布,全新的UI

AgileConfig自发布以来有个“大问题”-UI太丑。因为当初这个项目是给自己用的&#xff0c;连UI界面都没有&#xff0c;全靠手动在数据库里改配置。后来匆匆忙忙使用bootstrap3简单的码了一些界面就发布出来了&#xff0c;易用性上也做的不够好。对此我一直耿耿于怀。终于在过年…

android 无法安装测试版本,在测试应用更新时,安装无提示阻止Android版本构建签名APK...

当我尝试更新我的应用程序(在已经从playstore安装的应用程序上手动安装带有更高版本的已签名APK)时,它未被安装(“应用程序未安装“)并在Studio中显示以下错误&#xff1a;I/Finsky: [1144] com.google.android.finsky.verifier.impl.en.c(263): Verifying id8,result-1I/Finsk…

如何解开机器学习的面纱?

目前&#xff0c;人工智能的应用日渐广泛。而作为人工智能核心的机器学习&#xff0c;是一门多领域的交叉学科&#xff0c;专门研究计算机模拟或实现人类学习行为的方法&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改善自身的性能。简单来说&a…

Net与Flex入门

开源项目FluorineFx就是专门针对.NET平台与Flex通信提供的AMF&#xff08;ActionScript Message Format&#xff09;协议通信网关&#xff0c;我们可以通过FluorineFx很方便的完成与.NET的通信。 另外还可以轻松的实现及时文字沟通、视频语音通信等及时交互系统的开发。 Fluori…

MAUI来了

各位很久没有和大家说端的开发了&#xff0c;技术发展特别快&#xff0c;我不知道还有多少国内的开发人员还坚守用Xamarin&#xff0c;但是.NET的迭代变化还是让国内.NET社区热闹起来了。去年虽然疫情&#xff0c;但微软还是在Build上发布了MAUI。微软这次把MAUI完全整合到了.N…

编程到底难在哪里? 从一个美国实习生的故事说起

记得之前组里来了一个美国实习生小伙子&#xff0c;很极客的那种&#xff0c;干活快&#xff0c;一天能给你写2000行代码(我复查的速度跟不上他写的速度)&#xff0c;让做什么东西&#xff0c;上午告诉做个这个功能&#xff0c;下午就能在测试环境跑起来演示了。跟他单独开会的…

华为平板搭鸿蒙,首款麒麟9000平板入网,全系搭载鸿蒙OS,华为反击了!

虽然华为麒麟芯片存货越来越少了&#xff0c;但是关于华为手机和华为平板的消息还是很多的&#xff0c;这证明华为的大招估计还没有放完。最近一款新的华为平板入网&#xff0c;比较让人惊讶的是&#xff0c;这款平板竟然依旧搭载了麒麟9000处理器&#xff0c;并且在其它配置上…

oop1

1、面向过程编程方法&#xff0c;是将程序看成一个个步骤&#xff1b;而面向对象编程(OOP)方法是将程序看成一个个具有不同功能的部件在协同工作&#xff0c;类就是描述这些部件的数据结构和行为方式&#xff0c;而对象就是这些具体的部件。 2、对象的定义&#xff1a;一个对象…

温故知新,DotNet Core SDK和.Net CLI十八般武艺

简介.NET命令行接口 (CLI) 工具是用于开发、生成、运行和发布.NET应用程序的跨平台工具链。https://docs.microsoft.com/zh-cn/dotnet/core/tools/SDK.NET SDK (Software Development Kit) v5.0.201.exe里程碑发布日期.NET Core 2.1.x (servicing)LTS (Long Term Support) rele…

android bitmap string,Android Bitmap到Base64字符串(Android Bitmap to Base64 String)

Android Bitmap到Base64字符串(Android Bitmap to Base64 String)如何将一个大的Bitmap(用手机相机拍摄的照片)转换为Base64 String&#xff1f;How do I convert a large Bitmap (photo taken with the phones camera) to a Base64 String?原文&#xff1a;https://stackover…

谁说数学没用,一旦我们用在赚钱上,全世界都害怕

今天来说说“量化”投资这个门派的开山祖师、美国“赌神”——爱德华 索普。爱德华 索普是一位大教授&#xff0c;天才数学家&#xff0c;非常喜欢扑克牌博弈游戏。一般人玩扑克也就只盯着眼前输赢&#xff0c;爱德华 索普却花了两年时间利用早期的IBM计算机和概率论中的凯利…

网络工程师要如何选择?

09年,迷茫的我走上了IT这条路子. 一年的时间,自己边学习边工作,在学习的同时实践那些技术. 不停的学习,脚步一直都都没停止的向前走. 学习着各种各样的技术,LINUX\CISCO\SQL\等等等等...... 一开始因为不懂,本身想学习的是JAVA\C\C#\等关于编程的技术...可是莫名的就走到的服务…

2021年春招Elasticsearch面试题

1、Elasticsearch是如何实现master选举的&#xff1f;1、对所有可以成为master的节点根据nodeId排序&#xff0c;每次选举每个节点都把自己所知道节点排一次序&#xff0c;然后选出第一个&#xff08;第0位&#xff09;节点&#xff0c;暂且认为它是master节点。 2、如果对某个…

android qq红包,Android实现QQ抢红包插件

又想到快要过年了&#xff0c;到时候还不知道群里要发好多红包&#xff0c;所以我将之前在网上宕的一份微信抢红包的代码修改了一下&#xff0c;实现了QQ抢红包&#xff01;可以支持抢QQ拼手气红包&#xff0c;普通红包&#xff0c;口令红包&#xff0c;现在再也不怕20年单身手…

8个Python高效数据分析的技巧

不管是参加Kaggle比赛&#xff0c;还是开发一个深度学习应用&#xff0c;第一步总是数据分析。这篇文章介绍了8个使用Python进行数据分析的方法&#xff0c;不仅能够提升运行效率&#xff0c;还能够使代码更加“优美”。一行代码定义List定义某种列表时&#xff0c;写For 循环过…

NET问答: 如何在 ASP.NET Core Web API 的 Response 中添加自定义的 Header ?

咨询区 JDawg&#xff1a;我正在将 Web API 2 移植到 ASP.NET Core Web API 上&#xff0c;以前我都直接在 Response 属性上添加自定义的 Header&#xff0c;如下代码所示&#xff1a;HttpResponseMessage response new HttpResponseMessage(HttpStatusCode.OK); response.Hea…

一个免费兑换iPhone X的机会,就这样被你错过了

嗨~我是大家最爱的小树&#xff0c;第一次写文&#xff0c;有点小鸡冻&#xff01;&#xff01;&#xff01;小树此行是带着超模君的礼物来的哦&#xff01;上周准备会员周回馈粉丝的时候&#xff0c;超模君突然决定要送模友们&#xff1a;iPhone X &#xff01;&#xff01;&a…

android photopicker怎么修改状态栏,有没有办法阻止UIImagePickerController更改状态栏样式?...

Matej Bukovi..39我希望状态栏保持黑色不透明,同时显示照片库选择器(照片选择器将其更改为黑色半透明),这解决了我的问题.设置UIImagePickerDelegate:libraryUI.delegate self;实现以下回调:- (void)navigationController:(UINavigationController *)navigationControllerwill…

网规:第4章 网络安全-4.5IDS和IPS

4.5 IDS和IPS&#xff08;P643-658&#xff09;1、***检测系统概述&#xff08;1&#xff09;IDS的定义是一种主动保护自己&#xff0c;使网络和系统免遭非法***的网络安全技术&#xff0c;它依照一定的安全策略&#xff0c;对网络、系统的运行状况进行监视&#xff0c;尽可能发…

正则表达式学习神器!

推荐一款优秀的正则表达式在线可视化工具我相信很多朋友第一次听到正则表达式时&#xff0c;都感觉这是一个高大上的名词。其实&#xff0c;简单来说&#xff0c;正则表达式就是用来匹配文本的。正则表达式里的 “正” 是指常客&#xff0c;即经常出现、通用的意思&#xff1b;…