用c语言编写 职工工资管理系统的设计与实现(顺序表实现) (1)职工信息包括:职工号(char num[10])、职工名(char name[10])、职工级别(char type[10])、工资(float money) (2)除了总的模块要求外,还需计算①职工的平均工资; ②按工资由低到高排序
时间: 2024-03-20 15:38:59 浏览: 39
好的,这是一个比较复杂的问题,需要一步一步地来实现。我们可以先定义结构体来存储职工信息,再使用顺序表来存储多个职工的信息,并实现对职工信息的添加、删除、修改、查询、排序等操作。具体的代码实现如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100 // 最大职工数
// 职工信息结构体
typedef struct {
char num[10]; // 职工号
char name[10]; // 职工名
char type[10]; // 职工级别
float money; // 工资
} Employee;
// 顺序表结构体
typedef struct {
Employee data[MAXSIZE]; // 存储职工信息的数组
int length; // 当前职工数
} SeqList;
// 初始化顺序表
void InitList(SeqList *L) {
L->length = 0;
}
// 添加职工信息
void AddEmployee(SeqList *L, Employee e) {
if (L->length == MAXSIZE) {
printf("职工数已达到最大值,添加失败!\n");
return;
}
L->data[L->length] = e;
L->length++;
}
// 删除职工信息
void DeleteEmployee(SeqList *L, char num[]) {
int i, j;
for (i = 0; i < L->length; i++) {
if (strcmp(L->data[i].num, num) == 0) {
for (j = i; j < L->length - 1; j++) {
L->data[j] = L->data[j + 1];
}
L->length--;
printf("删除成功!\n");
return;
}
}
printf("职工号为%s的职工不存在,删除失败!\n", num);
}
// 修改职工信息
void ModifyEmployee(SeqList *L, char num[]) {
int i;
for (i = 0; i < L->length; i++) {
if (strcmp(L->data[i].num, num) == 0) {
printf("请输入修改后的职工信息:\n");
printf("职工号:");
scanf("%s", L->data[i].num);
printf("职工名:");
scanf("%s", L->data[i].name);
printf("职工级别:");
scanf("%s", L->data[i].type);
printf("工资:");
scanf("%f", &L->data[i].money);
printf("修改成功!\n");
return;
}
}
printf("职工号为%s的职工不存在,修改失败!\n", num);
}
// 查询职工信息
void QueryEmployee(SeqList *L, char num[]) {
int i;
for (i = 0; i < L->length; i++) {
if (strcmp(L->data[i].num, num) == 0) {
printf("职工信息如下:\n");
printf("职工号:%s\n", L->data[i].num);
printf("职工名:%s\n", L->data[i].name);
printf("职工级别:%s\n", L->data[i].type);
printf("工资:%.2f\n", L->data[i].money);
return;
}
}
printf("职工号为%s的职工不存在,查询失败!\n", num);
}
// 按工资排序
void SortByMoney(SeqList *L) {
int i, j, min;
Employee temp;
for (i = 0; i < L->length - 1; i++) {
min = i;
for (j = i + 1; j < L->length; j++) {
if (L->data[j].money < L->data[min].money) {
min = j;
}
}
if (min != i) {
temp = L->data[i];
L->data[i] = L->data[min];
L->data[min] = temp;
}
}
}
// 计算平均工资
float AverageMoney(SeqList *L) {
int i;
float sum = 0;
for (i = 0; i < L->length; i++) {
sum += L->data[i].money;
}
return sum / L->length;
}
int main() {
SeqList L;
InitList(&L);
int choice;
char num[10];
while (1) {
printf("职工工资管理系统\n");
printf("1. 添加职工信息\n");
printf("2. 删除职工信息\n");
printf("3. 修改职工信息\n");
printf("4. 查询职工信息\n");
printf("5. 按工资排序\n");
printf("6. 计算平均工资\n");
printf("0. 退出系统\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1:
printf("请输入职工信息:\n");
Employee e;
printf("职工号:");
scanf("%s", e.num);
printf("职工名:");
scanf("%s", e.name);
printf("职工级别:");
scanf("%s", e.type);
printf("工资:");
scanf("%f", &e.money);
AddEmployee(&L, e);
break;
case 2:
printf("请输入要删除的职工号:");
scanf("%s", num);
DeleteEmployee(&L, num);
break;
case 3:
printf("请输入要修改的职工号:");
scanf("%s", num);
ModifyEmployee(&L, num);
break;
case 4:
printf("请输入要查询的职工号:");
scanf("%s", num);
QueryEmployee(&L, num);
break;
case 5:
SortByMoney(&L);
printf("排序成功!\n");
break;
case 6:
printf("平均工资为%.2f元\n", AverageMoney(&L));
break;
case 0:
printf("谢谢使用!\n");
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
以上是一个简单的职工工资管理系统的设计与实现,可以满足基本的需求。