编写出能在Dev-C++能用c运行的项目 员工绩效有编号(int)、姓名(字符数组)、部门(字符数组)、绩效分数(float)等属性 使用结构体表示员工绩效 使用全局结构体数组存放绩效数据(最多1000个员工) 再定义一个全局结构体数组用来排序; 定义一个表示实际记录数量的全局变量(初值为0) 功能要求: 创建员工绩效记录 显示所有员工绩效记录 清空所有记录 创建员工绩效记录 显示所有员工绩效记录 清空所有记录 保存记录到文件 从文件读取员工绩效记录 查询员工绩效记录 删除员工绩效记录 添加一个员工绩效记录 修改员工绩效记录 绩效排名
时间: 2023-12-29 20:05:50 浏览: 26
以下是一个基本的员工绩效管理系统的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EMPLOYEES 1000
// 员工绩效结构体
struct EmployeePerformance {
int id;
char name[50];
char department[50];
float score;
};
// 全局变量
struct EmployeePerformance employees[MAX_EMPLOYEES];
int numEmployees = 0;
// 添加员工绩效记录
void addEmployee() {
if (numEmployees >= MAX_EMPLOYEES) {
printf("无法添加更多员工绩效记录!\n");
return;
}
struct EmployeePerformance emp;
printf("请输入员工编号:");
scanf("%d", &emp.id);
printf("请输入员工姓名:");
scanf("%s", emp.name);
printf("请输入员工部门:");
scanf("%s", emp.department);
printf("请输入员工绩效分数:");
scanf("%f", &emp.score);
employees[numEmployees++] = emp;
printf("成功添加员工绩效记录!\n");
}
// 显示所有员工绩效记录
void displayEmployees() {
printf("编号\t姓名\t部门\t绩效分数\n");
for (int i = 0; i < numEmployees; i++) {
struct EmployeePerformance emp = employees[i];
printf("%d\t%s\t%s\t%.2f\n", emp.id, emp.name, emp.department, emp.score);
}
}
// 保存记录到文件
void saveToFile() {
FILE *fp = fopen("employees.txt", "w");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
for (int i = 0; i < numEmployees; i++) {
struct EmployeePerformance emp = employees[i];
fprintf(fp, "%d,%s,%s,%.2f\n", emp.id, emp.name, emp.department, emp.score);
}
fclose(fp);
printf("员工绩效记录已保存到文件!\n");
}
// 从文件读取员工绩效记录
void loadFromFile() {
FILE *fp = fopen("employees.txt", "r");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
numEmployees = 0;
struct EmployeePerformance emp;
while (fscanf(fp, "%d,%[^,],%[^,],%f\n", &emp.id, emp.name, emp.department, &emp.score) != EOF) {
employees[numEmployees++] = emp;
}
fclose(fp);
printf("成功从文件中读取员工绩效记录!\n");
}
// 查询员工绩效记录
void searchEmployee() {
int id;
printf("请输入要查询的员工编号:");
scanf("%d", &id);
for (int i = 0; i < numEmployees; i++) {
struct EmployeePerformance emp = employees[i];
if (emp.id == id) {
printf("编号\t姓名\t部门\t绩效分数\n");
printf("%d\t%s\t%s\t%.2f\n", emp.id, emp.name, emp.department, emp.score);
return;
}
}
printf("未找到该员工的绩效记录!\n");
}
// 删除员工绩效记录
void deleteEmployee() {
int id;
printf("请输入要删除的员工编号:");
scanf("%d", &id);
for (int i = 0; i < numEmployees; i++) {
struct EmployeePerformance emp = employees[i];
if (emp.id == id) {
for (int j = i; j < numEmployees - 1; j++) {
employees[j] = employees[j + 1];
}
numEmployees--;
printf("成功删除员工绩效记录!\n");
return;
}
}
printf("未找到该员工的绩效记录!\n");
}
// 修改员工绩效记录
void modifyEmployee() {
int id;
printf("请输入要修改的员工编号:");
scanf("%d", &id);
for (int i = 0; i < numEmployees; i++) {
struct EmployeePerformance emp = employees[i];
if (emp.id == id) {
printf("请输入修改后的员工姓名(按回车键保持不变):");
char name[50];
getchar();
fgets(name, 50, stdin);
if (name[0] != '\n') {
strcpy(emp.name, name);
}
printf("请输入修改后的员工部门(按回车键保持不变):");
char department[50];
fgets(department, 50, stdin);
if (department[0] != '\n') {
strcpy(emp.department, department);
}
printf("请输入修改后的员工绩效分数(按回车键保持不变):");
char scoreStr[10];
fgets(scoreStr, 10, stdin);
if (scoreStr[0] != '\n') {
emp.score = atof(scoreStr);
}
employees[i] = emp;
printf("成功修改员工绩效记录!\n");
return;
}
}
printf("未找到该员工的绩效记录!\n");
}
// 绩效排名
void sortEmployees() {
struct EmployeePerformance sortedEmployees[MAX_EMPLOYEES];
memcpy(sortedEmployees, employees, sizeof(struct EmployeePerformance) * numEmployees);
for (int i = 0; i < numEmployees; i++) {
for (int j = i + 1; j < numEmployees; j++) {
if (sortedEmployees[i].score < sortedEmployees[j].score) {
struct EmployeePerformance temp = sortedEmployees[i];
sortedEmployees[i] = sortedEmployees[j];
sortedEmployees[j] = temp;
}
}
}
printf("绩效排名\t编号\t姓名\t部门\t绩效分数\n");
for (int i = 0; i < numEmployees; i++) {
struct EmployeePerformance emp = sortedEmployees[i];
printf("%d\t\t%d\t%s\t%s\t%.2f\n", i + 1, emp.id, emp.name, emp.department, emp.score);
}
}
// 清空所有记录
void clearEmployees() {
numEmployees = 0;
printf("成功清空所有员工绩效记录!\n");
}
int main() {
while (1) {
printf("请选择功能:\n");
printf("1. 创建员工绩效记录\n");
printf("2. 显示所有员工绩效记录\n");
printf("3. 清空所有记录\n");
printf("4. 保存记录到文件\n");
printf("5. 从文件读取员工绩效记录\n");
printf("6. 查询员工绩效记录\n");
printf("7. 删除员工绩效记录\n");
printf("8. 添加一个员工绩效记录\n");
printf("9. 修改员工绩效记录\n");
printf("10. 绩效排名\n");
printf("0. 退出程序\n");
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
addEmployee();
break;
case 2:
displayEmployees();
break;
case 3:
clearEmployees();
break;
case 4:
saveToFile();
break;
case 5:
loadFromFile();
break;
case 6:
searchEmployee();
break;
case 7:
deleteEmployee();
break;
case 8:
addEmployee();
break;
case 9:
modifyEmployee();
break;
case 10:
sortEmployees();
break;
case 0:
return 0;
default:
printf("无效的选择!\n");
break;
}
}
}
```
注意事项:
- 本代码示例是使用 Dev-C++ 编写的,可以直接在 Dev-C++ 中运行。
- 本代码示例使用了文件操作,需要在程序所在目录下创建一个名为 `employees.txt` 的文本文件,用于存储员工绩效记录。如果该文件不存在,程序会自动创建该文件。
- 本代码示例中,查询、删除、修改员工绩效记录均需要输入员工编号。如果输入的编号不存在,则会提示未找到该员工的绩效记录。
- 本代码示例中,修改员工绩效记录可以只修改其中的某些属性,不需要全部重新输入。
- 本代码示例中,绩效排名是按照绩效分数从高到低排序的。如需按照其他属性排序,则需要在排序算法中进行修改。