员工绩效有编号(int)、姓名(字符数组)、部门(字符数组)、绩效分数(float)等属性 使用结构体表示员工绩效 使用全局结构体数组存放绩效数据(最多1000个员工) 再定义一个全局结构体数组用来排序; 定义一个表示实际记录数量的全局变量(初值为0) 功能要求: 创建员工绩效记录 显示所有员工绩效记录 清空所有记录 创建员工绩效记录 显示所有员工绩效记录
时间: 2023-12-26 08:05:26 浏览: 91
以下为一个简单的实现,你可以参考:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EMPLOYEES 1000
struct Employee {
int id;
char name[50];
char department[50];
float score;
};
struct Employee employees[MAX_EMPLOYEES];
struct Employee sorted_employees[MAX_EMPLOYEES];
int num_employees = 0;
void add_employee() {
if (num_employees >= MAX_EMPLOYEES) {
printf("Maximum number of employees reached.\n");
return;
}
struct Employee e;
printf("Enter employee ID: ");
scanf("%d", &e.id);
printf("Enter employee name: ");
scanf("%s", e.name);
printf("Enter employee department: ");
scanf("%s", e.department);
printf("Enter employee score: ");
scanf("%f", &e.score);
employees[num_employees] = e;
num_employees++;
printf("Employee record added.\n");
}
void display_employees(struct Employee* arr, int num) {
printf("ID\tName\tDepartment\tScore\n");
for (int i = 0; i < num; i++) {
printf("%d\t%s\t%s\t\t%.2f\n", arr[i].id, arr[i].name, arr[i].department, arr[i].score);
}
}
void display_all_employees() {
display_employees(employees, num_employees);
}
void clear_employees() {
num_employees = 0;
printf("All employee records cleared.\n");
}
int compare_scores(const void* a, const void* b) {
struct Employee* pa = (struct Employee*)a;
struct Employee* pb = (struct Employee*)b;
if (pa->score < pb->score) {
return 1;
} else if (pa->score > pb->score) {
return -1;
} else {
return 0;
}
}
void sort_employees() {
memcpy(sorted_employees, employees, sizeof(struct Employee) * num_employees);
qsort(sorted_employees, num_employees, sizeof(struct Employee), compare_scores);
printf("Employee records sorted by score.\n");
}
int main() {
int choice;
while (1) {
printf("\nEmployee record management system\n");
printf("1. Add employee record\n");
printf("2. Display all employee records\n");
printf("3. Clear all employee records\n");
printf("4. Sort employee records by score\n");
printf("5. Exit\n");
printf("Enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_employee();
break;
case 2:
display_all_employees();
break;
case 3:
clear_employees();
break;
case 4:
sort_employees();
break;
case 5:
printf("Exiting...\n");
exit(0);
default:
printf("Invalid choice.\n");
}
}
return 0;
}
```
这个实现中,我们使用了一个全局的 `employees` 数组存放所有员工的绩效记录,以及一个全局的 `num_employees` 变量记录实际记录数量。我们还定义了一个 `struct Employee` 结构体来表示单个员工的绩效记录。
在 `add_employee()` 函数中,我们首先判断当前记录数量是否已经达到最大值,如果是则提示用户不能再添加记录。然后通过 `scanf()` 函数获取用户输入的员工信息,构造一个 `struct Employee` 对象,并将其添加到 `employees` 数组中。
在 `display_employees()` 函数中,我们使用了一个 `for` 循环遍历 `employees` 数组,并依次打印每个员工的信息。
在 `display_all_employees()` 函数中,我们直接调用了 `display_employees()` 函数,将所有员工的信息打印出来。
在 `clear_employees()` 函数中,我们只需要将 `num_employees` 变量重置为0即可。
在 `compare_scores()` 函数中,我们实现了一个比较函数,用于在 `qsort()` 函数中排序。这个函数比较两个 `struct Employee` 对象的 `score` 属性,如果前者小于后者,则返回1,说明需要交换两个对象的位置;如果前者大于后者,则返回-1,说明不需要交换两个对象的位置;如果两者相等,则返回0。
在 `sort_employees()` 函数中,我们首先使用 `memcpy()` 函数将 `employees` 数组复制到 `sorted_employees` 数组中,然后调用 `qsort()` 函数对 `sorted_employees` 数组进行排序。排序过程中,会依次调用 `compare_scores()` 函数比较两个元素,并根据返回值决定是否交换两个元素的位置。最后,我们打印一条提示消息,说明排序完成。
在 `main()` 函数中,我们用一个无限循环来不断接收用户的输入,并根据用户的选择调用相应的函数。当用户选择退出时,我们调用 `exit()` 函数结束程序。
阅读全文