员工信息管理系统
要求:
输入5个员工的信息(输入),每个员工含有成员名为“工号、姓名、基本工资、补贴、奖金、水电费、房租、实发工资、工资排名”,编写函数完成下列要求:
(1)输入一个员工的工号,查询该员工的信息并输出,若不存在显示没找到;(查询)
(2)输入一个新员工的信息,按工号顺序将该员工的信息插入后输出;(显示)
(3)输入一个已存在员工的姓名信息,删除该员工的信息后输出;(删除)
(4)修改某员工的信息;(修改)
(5)求每个员工的实发工资(实发工资=基本工资+补贴+奖金-水电费-房租);
(6)求所有员工的基本工资、补贴、奖金、水电费、房租和实发工资的总和并输出;
(7)对所有员工的信息按实发工资升序排序,并填写工资排名后输出。
(由四个人分别完成各种函数,然后进行函数的调用,汇总,完成主程序。)
环境:
语言:C
编译工具:Dev C++
主页面:
代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STAFF 100 // 最大员工数量
typedef struct {
int number; // 工号
char name[20]; // 姓名
int basePay; // 基本工资
int allowance; // 补贴
int bonus; // 奖金
int wePay; // 水电费
int houseRent; // 房租
int netPayRoll; // 实际工资
} Staff;
Staff a[MAX_STAFF];
int M = 0; // 当前员工数量
void netPayRoll() { // 计算每个员工的实际工资
for (int i = 0; i < M; i++) {
a[i].netPayRoll = a[i].basePay + a[i].allowance + a[i].bonus - a[i].wePay - a[i].houseRent;
}
}
void refer() { // 查询员工信息
int x, t, found = 0;
if (M == 0) {
printf("无数据\n");
return;
}
printf("输入要查询员工的工号: ");
scanf("%d", &x);
for (int i = 0; i < M; i++) {
if (x == a[i].number) { // 按工号查找员工
netPayRoll();
printf("工号\t姓名\t基本工资\t补贴\t奖金\t水电费\t房租\t实发工资\t工资排名\n");
printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\n",
a[i].number, a[i].name, a[i].basePay, a[i].allowance,
a[i].bonus, a[i].wePay, a[i].houseRent, a[i].netPayRoll, i + 1);
found = 1;
break;
}
}
if (!found) {
printf("员工未找到。\n");
}
printf("\n继续查询请按1,返回主菜单请按0: ");
scanf("%d", &t);
if (t == 1) {
refer();
}
}
void add() { // 添加员工信息
int b = 1, c;
while (b) {
if (M >= MAX_STAFF) {
printf("员工信息已满,无法添加更多员工。\n");
break;
}
printf("工号 姓名 基本工资 补贴 奖金 水电费 房租 \n");
scanf("%d %s %d %d %d %d %d", &a[M].number, a[M].name, &a[M].basePay,
&a[M].allowance, &a[M].bonus, &a[M].wePay, &a[M].houseRent);
M++;
printf("是否继续录入?请输入1(继续输入) OR 0(结束输入)\n");
scanf("%d", &c);
if (c == 0) {
b = 0;
printf("输入完成\n");
}
}
}
void change() { // 修改员工信息
int z, found = 0;
char x[20];
if (M == 0) {
printf("无数据\n");
return;
}
printf("请输入要修改的员工号:");
scanf("%d", &z);
for (int i = 0; i < M; i++) {
if (z == a[i].number) {
printf("请输入新的工号:");
scanf("%d", &a[i].number);
printf("请输入新的姓名:");
scanf("%s", x);
strcpy(a[i].name, x);
printf("请输入新的基本工资:");
scanf("%d", &a[i].basePay);
printf("请输入新的补贴:");
scanf("%d", &a[i].allowance);
printf("请输入新的奖金:");
scanf("%d", &a[i].bonus);
printf("请输入新的水电费:");
scanf("%d", &a[i].wePay);
printf("请输入新的房租:");
scanf("%d", &a[i].houseRent);
found = 1;
break;
}
}
if (!found) {
printf("没有找到你要修改的信息。\n");
} else {
display();
}
}
void Delete() { // 删除员工信息
int n, found = 0;
char Name[20];
if (M == 0) {
printf("无数据\n");
return;
}
printf("请输入要删除的职工的姓名: ");
scanf("%s", Name);
for (int i = 0; i < M; i++) {
if (strcmp(a[i].name, Name) == 0) {
printf("已找到此人\n");
printf("确认删除请按 1,取消删除请按 0: ");
scanf("%d", &n);
if (n == 1) {
for (int j = i; j < M - 1; j++) {
a[j] = a[j + 1];
}
M--;
found = 1;
}
break;
}
}
if (found) {
printf("删除成功!\n");
} else {
printf("对不起,贵公司没有该员工!\n");
}
printf("继续删除请按1,返回主菜单请按0: ");
scanf("%d", &n);
if (n == 1) {
Delete();
}
}
void synthesis() { // 各项数据之和
int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0, sum5 = 0, sum6 = 0;
if (M == 0) {
printf("无数据\n");
return;
}
for (int i = 0; i < M; i++) {
sum1 += a[i].basePay;
sum2 += a[i].allowance;
sum3 += a[i].bonus;
sum4 += a[i].wePay;
sum5 += a[i].houseRent;
sum6 += a[i].netPayRoll;
}
printf("员工基本工资的总和为:%d\n", sum1);
printf("员工的补贴总和为:%d\n", sum2);
printf("员工的奖金总和为:%d\n", sum3);
printf("员工的水电费总和为:%d\n", sum4);
printf("员工的房租总和为:%d\n", sum5);
printf("员工的实发工资总和为:%d\n", sum6);
}
void rank() { // 按实发工资排序
Staff temp;
for (int j = 0; j < M - 1; j++) {
for (int i = 0; i < M - 1 - j; i++) {
if (a[i].netPayRoll < a[i + 1].netPayRoll) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
}
}
}
}
void display() { // 显示所有员工信息
if (M == 0) {
printf("数据空\n");
return;
}
netPayRoll();
rank();
printf("工号\t姓名\t基本工资\t补贴\t奖金\t水电费\t房租\t实发工资\t工资排名\n");
for (int i = 0; i < M; i++) {
printf("%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t\t%d\n",
a[i].number, a[i].name, a[i].basePay, a[i].allowance,
a[i].bonus, a[i].wePay, a[i].houseRent, a[i].netPayRoll, i + 1);
}
}
int main() {
int n;
while (1) {
printf("\n");
printf("\t*****职 工 信 息 管 理 系 统*****\n");
printf("\t* 1. 输 入 职 工 信 息 *\n");
printf("\t* 2. 查 询 职 工 信 息 *\n");
printf("\t* 3. 添 加 职 工 信 息 *\n");
printf("\t* 4. 修 改 职 工 信 息 *\n");
printf("\t* 5. 浏 览 职 工 信 息 *\n");
printf("\t* 6. 删 除 职 工 信 息 *\n");
printf("\t* 7. 职 工 信 息 总 和 *\n");
printf("\t* 0. 退 出 系 统 *\n");
printf("\t*********************************\n");
printf("\n");
printf("输入你选择的序号:");
scanf("%d", &n);
switch (n) {
case 1: input(); break;
case 2: refer(); break;
case 3: add(); break;
case 4: change(); break;
case 5: display(); break;
case 6: Delete(); break;
case 7: synthesis(); break;
case 0: return 0;
default: printf("无该选项,请重新输入!\n"); break;
}
}
return 0;
}