用c语言编写一个简单的员工工资管理系统,定义结构体类型的数组存储员工的基本信息:工号、姓名、基本工资。要求编写自定义函数实现如下功能: (1)输入n名员工的信息:工号、姓名、基本工资; (2) 输出口名员工的信息:工号、姓名、基本工资; (2) 根据工号查找并输出某个员工的信息; (3)查找某两个工资金额范国内的所有员工并输出对 应信息; (4) 计算所有员工的平均工资; (5) 计算并输出工资最高的员工信息及工资最低的员 工信息; (6) 添加员工信息功能:若有新入职的员工,请将他们的信息存入结构体数组中; (7)删除员工信息功能:假如有员工离职,请将其信息删除并保证数组的连续性; (8) 请按照工号或姓名或工资从低到高的顺序输出所有 员工的信息。 (9)编写主函数,要求可通过功能菜单选择执行相应的功能。
时间: 2023-06-16 16:08:27 浏览: 112
以下是用C语言编写的员工工资管理系统,包括要求实现的所有功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EMPLOYEES 100
// 定义员工结构体类型
typedef struct Employee {
char id[10]; // 工号
char name[20]; // 姓名
float salary; // 基本工资
} Employee;
// 全局变量,存储所有员工信息的数组
Employee employees[MAX_EMPLOYEES];
// 全局变量,记录当前数组中已有的员工数量
int employeeCount = 0;
// 自定义函数:输入n名员工的信息
void inputEmployees() {
printf("请输入员工数量:");
scanf("%d", &employeeCount);
for (int i = 0; i < employeeCount; i++) {
printf("请输入第%d个员工的信息:\n", i+1);
printf("工号:");
scanf("%s", employees[i].id);
printf("姓名:");
scanf("%s", employees[i].name);
printf("基本工资:");
scanf("%f", &employees[i].salary);
}
}
// 自定义函数:输出n名员工的信息
void outputEmployees() {
printf("所有员工信息如下:\n");
printf("工号\t姓名\t基本工资\n");
for (int i = 0; i < employeeCount; i++) {
printf("%s\t%s\t%.2f\n", employees[i].id, employees[i].name, employees[i].salary);
}
}
// 自定义函数:根据工号查找并输出某个员工的信息
void outputEmployeeById(char* id) {
for (int i = 0; i < employeeCount; i++) {
if (strcmp(employees[i].id, id) == 0) {
printf("员工信息如下:\n");
printf("工号\t姓名\t基本工资\n");
printf("%s\t%s\t%.2f\n", employees[i].id, employees[i].name, employees[i].salary);
return;
}
}
printf("未找到工号为%s的员工\n", id);
}
// 自定义函数:查找某两个工资金额范围内的所有员工并输出对应信息
void outputEmployeesBySalaryRange(float minSalary, float maxSalary) {
printf("工资在%.2f~%.2f之间的员工信息如下:\n", minSalary, maxSalary);
printf("工号\t姓名\t基本工资\n");
for (int i = 0; i < employeeCount; i++) {
if (employees[i].salary >= minSalary && employees[i].salary <= maxSalary) {
printf("%s\t%s\t%.2f\n", employees[i].id, employees[i].name, employees[i].salary);
}
}
}
// 自定义函数:计算所有员工的平均工资
float getAverageSalary() {
float sum = 0;
for (int i = 0; i < employeeCount; i++) {
sum += employees[i].salary;
}
return sum / employeeCount;
}
// 自定义函数:计算并输出工资最高的员工信息及工资最低的员工信息
void outputEmployeeWithMaxAndMinSalary() {
int maxIndex = 0;
int minIndex = 0;
for (int i = 1; i < employeeCount; i++) {
if (employees[i].salary > employees[maxIndex].salary) {
maxIndex = i;
}
if (employees[i].salary < employees[minIndex].salary) {
minIndex = i;
}
}
printf("工资最高的员工信息如下:\n");
printf("工号\t姓名\t基本工资\n");
printf("%s\t%s\t%.2f\n", employees[maxIndex].id, employees[maxIndex].name, employees[maxIndex].salary);
printf("工资最低的员工信息如下:\n");
printf("工号\t姓名\t基本工资\n");
printf("%s\t%s\t%.2f\n", employees[minIndex].id, employees[minIndex].name, employees[minIndex].salary);
}
// 自定义函数:添加员工信息功能
void addEmployee() {
if (employeeCount >= MAX_EMPLOYEES) {
printf("员工数量已达到上限,无法添加新员工\n");
return;
}
printf("请输入新员工的信息:\n");
printf("工号:");
scanf("%s", employees[employeeCount].id);
printf("姓名:");
scanf("%s", employees[employeeCount].name);
printf("基本工资:");
scanf("%f", &employees[employeeCount].salary);
employeeCount++;
}
// 自定义函数:删除员工信息功能
void deleteEmployee(char* id) {
for (int i = 0; i < employeeCount; i++) {
if (strcmp(employees[i].id, id) == 0) {
for (int j = i; j < employeeCount - 1; j++) {
employees[j] = employees[j+1];
}
employeeCount--;
printf("工号为%s的员工信息已删除\n", id);
return;
}
}
printf("未找到工号为%s的员工,无法删除\n", id);
}
// 自定义函数:按照工号或姓名或工资从低到高的顺序输出所有员工的信息
void outputEmployeesByOrder() {
int order = 0;
printf("请选择排序方式:\n");
printf("1.按照工号排序\n");
printf("2.按照姓名排序\n");
printf("3.按照工资排序\n");
scanf("%d", &order);
printf("所有员工信息如下:\n");
printf("工号\t姓名\t基本工资\n");
if (order == 1) { // 按照工号排序
for (int i = 0; i < employeeCount; i++) {
for (int j = i+1; j < employeeCount; j++) {
if (strcmp(employees[i].id, employees[j].id) > 0) {
Employee temp = employees[i];
employees[i] = employees[j];
employees[j] = temp;
}
}
}
}
else if (order == 2) { // 按照姓名排序
for (int i = 0; i < employeeCount; i++) {
for (int j = i+1; j < employeeCount; j++) {
if (strcmp(employees[i].name, employees[j].name) > 0) {
Employee temp = employees[i];
employees[i] = employees[j];
employees[j] = temp;
}
}
}
}
else if (order == 3) { // 按照工资排序
for (int i = 0; i < employeeCount; i++) {
for (int j = i+1; j < employeeCount; j++) {
if (employees[i].salary > employees[j].salary) {
Employee temp = employees[i];
employees[i] = employees[j];
employees[j] = temp;
}
}
}
}
for (int i = 0; i < employeeCount; i++) {
printf("%s\t%s\t%.2f\n", employees[i].id, employees[i].name, employees[i].salary);
}
}
// 主函数
int main() {
int option = 0;
char id[10];
float minSalary, maxSalary;
while (1) {
printf("请选择功能:\n");
printf("1.输入n名员工的信息\n");
printf("2.输出n名员工的信息\n");
printf("3.根据工号查找并输出某个员工的信息\n");
printf("4.查找某两个工资金额范围内的所有员工并输出对应信息\n");
printf("5.计算所有员工的平均工资\n");
printf("6.计算并输出工资最高的员工信息及工资最低的员工信息\n");
printf("7.添加员工信息\n");
printf("8.删除员工信息\n");
printf("9.按照工号或姓名或工资从低到高的顺序输出所有员工的信息\n");
printf("0.退出程序\n");
scanf("%d", &option);
switch (option) {
case 1:
inputEmployees();
break;
case 2:
outputEmployees();
break;
case 3:
printf("请输入要查找的员工工号:");
scanf("%s", id);
outputEmployeeById(id);
break;
case 4:
printf("请输入要查找的工资范围(最小值 最大值):");
scanf("%f %f", &minSalary, &maxSalary);
outputEmployeesBySalaryRange(minSalary, maxSalary);
break;
case 5:
printf("所有员工的平均工资为%.2f\n", getAverageSalary());
break;
case 6:
outputEmployeeWithMaxAndMinSalary();
break;
case 7:
addEmployee();
break;
case 8:
printf("请输入要删除的员工工号:");
scanf("%s", id);
deleteEmployee(id);
break;
case 9:
outputEmployeesByOrder();
break;
case 0:
printf("程序已退出\n");
return 0;
default:
printf("无效的选项,请重新输入\n");
}
}
return 0;
}
```
使用时可以在主函数中调用不同的功能函数来完成相应的操作。每个自定义函数都实现了一个具体的功能,例如输入员工信息、输出员工信息、查找员工信息等等。主函数通过一个循环不断等待用户输入选项,根据用户的选择调用相应的功能函数。