C语言实验-员工工资管理系统
本文最后更新于 541 天前,其中的信息可能已经有所发展或是发生改变。

实验要求

编写一个简单的员工工资管理系统,用两个一维数组分别存放员工工号和工资。要求实现如下功能:

(1)输入并输出员工的工号和基本工资;

(2)查找某个员工的工资并输出;

(3)查找某两个工资金额范围内的所有员工并输出对应信息;

(4)求所有员工平均工资;

(5)求员工中的最高工资及最低工资;

(6)假如新入职两名员工,请将他们的工号和工资插入已有数组中;

(7)假如有一名员工离职,请将其信息删除并保证数组的连续性; 

(8)请按照工资从低到高排序输出对应员工工号及工资信息。

环境

我自己比较喜欢用的编译器是国产的一个叫做lightly的IDE,由于他集成了很多主流语言,而且是部署在云端,不需要编译环境,对于学习来说极致的简单易上手,这里附上官网链接

Lightly:轻量且功能强大的集成开发工具(IDE)

设计思路

如题需要两个数组,分别存放工号和工资,为了节省时间我选择创建两个静态数组用于全局,之后所有的函数都可以直接操作这些数组,如果你想在main函数中创建数组在传递到方法里也可以。(本来还创建了employee构造体结果没用上)

static int IDarr[100];
static double salary_arr[100];

第一题 输入并输出员工的工号和基本工资

简单来说就是插入操作,把元素插入到数组末尾并输出,用if判断是否到位置

void insert(){
	printf("请输入需要添加的员工号和工资:");
	int id;
	double salary;
	scanf("%d%lf",&id,&salary);
	for (int i=0; i<100;i++) {
		if(IDarr[i]==0){//判断元素是否为空
			IDarr[i]=id;//插入元素
			salary_arr[i]=salary;//插入元素
			printf("已插入员工:%d 工资: %.2lf\n",IDarr[i],salary_arr[i]);//输出插入的两个元素
			break;
		}
	}
}

第二题 查找某个员工的工资并输出

查找操作,没啥好说的

void search(){
	printf("请输入需要查找的员工号:\n");
	int id;
	scanf("%d",&id);
	for (int i=0; i<100;i++) {
		if(IDarr[i]==id){//判断员工号是否相等
			printf("员工%d 的工资为 %.2lf元\n",IDarr[i],salary_arr[i]);	//输出对应工资
			break;
		}
	}
}

第三题 查找某两个工资金额范围内的所有员工并输出对应信息

也可以新建数组保存查找到的元素,之后再输出,我这里为了节省时间就直接输出了

void search_scope(){
	printf("请输入需要查找的范围\n");
	double a,b;
	scanf("%lf%lf",&a,&b);//获取范围
	for (int i=0; i<100; i++) {//循环查找
		if (salary_arr[i]>=a&&salary_arr[i]<=b) {
		printf("员工%d 的工资为 %.2lf元\n",IDarr[i],salary_arr[i]);
		}
	}
}

第四题 求所有员工平均工资

同样的,循环查找元素,累加,判断是否到尾

void average(){
	double sum=0,average,count;
	for (int i=0; i<100; i++) {
		if (IDarr[i]==0) {//判断是否为空,为空跳出循环
		break;
		}
	sum+=salary_arr[i];//累加
	count++;//计数+1
	}
	average=sum/count;
	printf("平均工资为%.2lf元\n",average);
}

第五题 求员工中的最高工资及最低工资

创建两个变量保存临时数,一一对比,注意最小值对比时要把空的元素跳过

void max_min(){
	double max=salary_arr[0];
	double min=salary_arr[0];
	for (int i=0; i<100; i++) {
		if (salary_arr[i]>=max) {//判断是否大于最大值
		max = salary_arr[i];//更换最大值
		}
		if (salary_arr[i]<=min) {//判断是否小于最小值
			if (IDarr[i]==0) {//判断是否为空,为了不影响其他函数,为空跳出本次循环
			continue;
			}
		min = salary_arr[i];//更换最小值
		}
	}
	printf("最高工资:%.2lf  最低工资%.2lf\n",max,min);
}

第六题 假如新入职两名员工,请将他们的工号和工资插入已有数组中

没太明白要干啥,跟第一题一种方法

第七题 假如有一名员工离职,请将其信息删除并保证数组的连续性

说是删除,其实时把后面的元素全部往前覆盖,这样就达到了删除且保留连续性的效果

void del(){
	int delect=0;
	int n=100;
    printf("请输入你要删除的工号:");
    scanf("%d",&delect);
    for(int i=0;i<100;i++)//循环查找
    {
        if(delect==IDarr[i])//查找
        {
            for(int j=i;j<99;j++)//循环覆盖
            {
                IDarr[j]=IDarr[j+1];//覆盖
				salary_arr[j]=salary_arr[j+1];//同步覆盖
            }
        }
    }
}

第八题 请按照工资从低到高排序输出对应员工工号及工资信息

冒泡排序,懂的都懂,不懂的可以去b站搜教,理论还是非常简单的,用工资数组比较,同时更换工号和工资顺序

void paixu(){
	int i,temp_id;
	double temp;
	for(i = 0; i < 100; i++)//循环轮次
	{
		for(int j = 0; j < i; j++)//每次循环
		{
			if(salary_arr[j] > salary_arr[j + 1])//判断前后大小
			{
				if (salary_arr[j+1]==0) {//判断后续是否为空,为空跳出循环
				break;
				}
				temp = salary_arr[j];//交换工资数组
				salary_arr[j] = salary_arr[j + 1];
				salary_arr[j + 1] = temp; 
				temp_id = IDarr[j];//交换工号数组
				IDarr[j] = IDarr[j + 1];
				IDarr[j + 1] = temp_id; 
			} 
		} 
	} 
}

额外函数 输出数组 菜单

用来测程序,看看当前数组的情况

void print_ar(){
	for (int i=0; i<100; i++) {
		if (IDarr[i]==0) {//判断是否为空,为空跳出循环
		break;
		}
	printf("员工%d 的工资为 %.2lf元\n",IDarr[i],salary_arr[i]);
	}
}

菜单,用while函数重复循环

void list(){
	while(1){
		printf("1.插入员工工资\n");
		printf("2.查找员工工资\n");
		printf("3.范围查找员工工资\n");
		printf("4.求平均工资\n");
		printf("5.求最高工资与最低工资\n");
		printf("6.退出程序(题目6同功能1)\n");
		printf("7.删除员工工资\n");
		printf("8.员工工资排序\n");
		printf("9.输出全部数组\n");
		printf("请输入需要的功能:");
		int i;
		scanf("%d",&i);
		switch (i) {
		case 1:
			insert();break;//插入
		case 2:
			search();break;//搜索
		case 3:
			search_scope();break;//范围查找
		case 4:
			average();break;//求平均工资
		case 5:
			max_min();break;//求最大最小工资
		case 6:
			exit(0);//退出
		case 7:
			del();break;//删除
		case 8:
			paixu();break;//冒泡排序
		case 9:
			print_ar();break;//输出数组
		}
	}
}

总代码集合

#include <cstddef>
#include <ctime>
#include <functional>
#include <iostream>
#include <iterator>
#include <stdio.h>
#include <cstdlib>
static int IDarr[100];
static double salary_arr[100];

void insert(){
	printf("请输入需要添加的员工号和工资:");
	int id;
	double salary;
	scanf("%d%lf",&id,&salary);
	for (int i=0; i<100;i++) {
		if(IDarr[i]==0){//判断元素是否为空
			IDarr[i]=id;//插入元素
			salary_arr[i]=salary;//插入元素
			printf("已插入员工:%d 工资: %.2lf\n",IDarr[i],salary_arr[i]);//输出插入的两个元素
			break;
		}
	}
}

void search(){
	printf("请输入需要查找的员工号:\n");
	int id;
	scanf("%d",&id);
	for (int i=0; i<100;i++) {
		if(IDarr[i]==id){//判断员工号是否相等
			printf("员工%d 的工资为 %.2lf元\n",IDarr[i],salary_arr[i]);	//输出对应工资
			break;
		}
	}
}

void search_scope(){
	printf("请输入需要查找的范围\n");
	double a,b;
	scanf("%lf%lf",&a,&b);//获取范围
	for (int i=0; i<100; i++) {//循环查找
		if (salary_arr[i]>=a&&salary_arr[i]<=b) {
		printf("员工%d 的工资为 %.2lf元\n",IDarr[i],salary_arr[i]);
		}
	}
}

void average(){
	double sum=0,average,count;
	for (int i=0; i<100; i++) {
		if (IDarr[i]==0) {//判断是否为空,为空跳出循环
		break;
		}
	sum+=salary_arr[i];//累加
	count++;//计数+1
	}
	average=sum/count;
	printf("平均工资为%.2lf元\n",average);
}

void max_min(){
	double max=salary_arr[0];
	double min=salary_arr[0];
	for (int i=0; i<100; i++) {
		if (salary_arr[i]>=max) {//判断是否大于最大值
		max = salary_arr[i];//更换最大值
		}
		if (salary_arr[i]<=min) {//判断是否小于最小值
			if (IDarr[i]==0) {//判断是否为空,为了不影响其他函数,为空跳出本次循环
			continue;
			}
		min = salary_arr[i];//更换最小值
		}
	}
	printf("最高工资:%.2lf  最低工资%.2lf\n",max,min);
}

void del(){
	int delect=0;
	int n=100;
    printf("请输入你要删除的工号:");
    scanf("%d",&delect);
    for(int i=0;i<100;i++)//循环查找
    {
        if(delect==IDarr[i])//查找
        {
            for(int j=i;j<99;j++)//循环覆盖
            {
                IDarr[j]=IDarr[j+1];//覆盖
				salary_arr[j]=salary_arr[j+1];//同步覆盖
            }
        }
    }
}

void print_ar(){
	for (int i=0; i<100; i++) {
		if (IDarr[i]==0) {//判断是否为空,为空跳出循环
		break;
		}
	printf("员工%d 的工资为 %.2lf元\n",IDarr[i],salary_arr[i]);
	}
}

void paixu(){
	int i,temp_id;
	double temp;
	for(i = 0; i < 100; i++)//循环轮次
	{
		for(int j = 0; j < i; j++)//每次循环
		{
			if(salary_arr[j] > salary_arr[j + 1])//判断前后大小
			{
				if (salary_arr[j+1]==0) {//判断后续是否为空,为空跳出循环
				break;
				}
				temp = salary_arr[j];//交换工资数组
				salary_arr[j] = salary_arr[j + 1];
				salary_arr[j + 1] = temp; 
				temp_id = IDarr[j];//交换工号数组
				IDarr[j] = IDarr[j + 1];
				IDarr[j + 1] = temp_id; 
			} 
		} 
	} 
}

void list(){
	while(1){
		printf("1.插入员工工资\n");
		printf("2.查找员工工资\n");
		printf("3.范围查找员工工资\n");
		printf("4.求平均工资\n");
		printf("5.求最高工资与最低工资\n");
		printf("6.退出程序(题目6同功能1)\n");
		printf("7.删除员工工资\n");
		printf("8.员工工资排序\n");
		printf("9.输出全部数组\n");
		printf("请输入需要的功能:");
		int i;
		scanf("%d",&i);
		switch (i) {
		case 1:
			insert();break;//插入
		case 2:
			search();break;//搜索
		case 3:
			search_scope();break;//范围查找
		case 4:
			average();break;//求平均工资
		case 5:
			max_min();break;//求最大最小工资
		case 6:
			exit(0);//退出
		case 7:
			del();break;//删除
		case 8:
			paixu();break;//冒泡排序
		case 9:
			print_ar();break;//输出数组
		}
	}
}

int main(){
	list();//执行菜单
	return 0;
}

大部分头文件没啥用,我这里也懒得删了,你可以自己对比看看删除一些

感觉不如二维数组(狗头)

当前文章: 《C语言实验-员工工资管理系统》
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇