使用c语言编写一个企业员工信息管理系统并满足以下要求1. 录入员工信息:从键盘录入表示员工信息的结构体数组各项数据,并将结构 体数组的内容写入表示员工信息的文件中。 2. 更新员工信息:可以实现多次向数据文件追加员工记录的功能,添加完毕后 返回主菜单;能够实现根据员工工号删除文件中员工信息的操作,且可多次删除 记录;可以实现根据员工工号修改员工信息的功能,其中员工信息包括:工号、 姓名、年龄、工作、性别、地址、电话、入职时间,并将最终数据存储到文件中。 3. 查询员工信息:可分别根据姓名、年龄、工作对员工信息进行查询。 4. 排列员工信息:可根据年龄从小到大的顺序对员工信息进行排序。 5. 统计员工信息:能够根据员工的年龄、工作和性别统计显示满足要求的所有 员工信息。 6. 输出员工信息:将员工信息文件中的数据输出到显示器上。 7. 实现输入数字 0 则退出管理系统。
时间: 2023-12-10 07:37:55 浏览: 150
c语言编写的员工信息管理系统
5星 · 资源好评率100%
以下是一个简单的企业员工信息管理系统的 C 语言实现,具体实现细节可以根据需求进行修改和完善:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_EMPLOYEES 100 // 最大员工数量
#define MAX_NAME_LEN 20 // 姓名最大长度
#define MAX_WORK_LEN 30 // 工作最大长度
#define MAX_ADDR_LEN 50 // 地址最大长度
#define MAX_PHONE_LEN 15 // 电话最大长度
#define FILE_NAME "employees.dat" // 员工信息文件名
// 定义员工信息结构体
typedef struct {
int id; // 工号
char name[MAX_NAME_LEN]; // 姓名
int age; // 年龄
char work[MAX_WORK_LEN]; // 工作
char sex[5]; // 性别
char addr[MAX_ADDR_LEN]; // 地址
char phone[MAX_PHONE_LEN]; // 电话
char start_date[20]; // 入职时间
} employee;
// 函数声明
void print_menu();
void add_employee(employee *employees, int *count);
void update_employee(employee *employees, int *count);
void delete_employee(employee *employees, int *count);
void query_employee(employee *employees, int count);
void sort_employee(employee *employees, int count);
void stats_employee(employee *employees, int count);
void print_employee(employee emp);
void print_all_employee(employee *employees, int count);
void save_employees_to_file(employee *employees, int count);
void load_employees_from_file(employee *employees, int *count);
// 主函数
int main() {
employee employees[MAX_EMPLOYEES]; // 员工数组
int count = 0; // 员工数量
load_employees_from_file(employees, &count); // 从文件中读取员工信息
int choice = -1; // 用户选择菜单项
while (choice != 0) {
print_menu(); // 打印菜单项
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_employee(employees, &count);
break;
case 2:
update_employee(employees, &count);
break;
case 3:
delete_employee(employees, &count);
break;
case 4:
query_employee(employees, count);
break;
case 5:
sort_employee(employees, count);
break;
case 6:
stats_employee(employees, count);
break;
case 7:
print_all_employee(employees, count);
break;
case 0:
save_employees_to_file(employees, count); // 将员工信息写入文件
printf("谢谢使用,再见!\n");
break;
default:
printf("无效选项,请重新输入!\n");
break;
}
}
return 0;
}
// 打印菜单项
void print_menu() {
printf("员工信息管理系统\n");
printf("1. 录入员工信息\n");
printf("2. 更新员工信息\n");
printf("3. 删除员工信息\n");
printf("4. 查询员工信息\n");
printf("5. 排列员工信息\n");
printf("6. 统计员工信息\n");
printf("7. 输出员工信息\n");
printf("0. 退出\n");
}
// 录入员工信息
void add_employee(employee *employees, int *count) {
if (*count >= MAX_EMPLOYEES) {
printf("员工数量已达到上限,无法继续添加!\n");
return;
}
employee emp;
printf("请输入员工信息:\n");
printf("工号:");
scanf("%d", &(emp.id));
printf("姓名:");
scanf("%s", emp.name);
printf("年龄:");
scanf("%d", &(emp.age));
printf("工作:");
scanf("%s", emp.work);
printf("性别:");
scanf("%s", emp.sex);
printf("地址:");
scanf("%s", emp.addr);
printf("电话:");
scanf("%s", emp.phone);
printf("入职时间:");
scanf("%s", emp.start_date);
employees[*count] = emp;
(*count)++;
printf("员工信息已添加!\n");
}
// 更新员工信息
void update_employee(employee *employees, int *count) {
int id;
printf("请输入要修改的员工工号:");
scanf("%d", &id);
for (int i = 0; i < *count; i++) {
if (employees[i].id == id) {
employee emp;
printf("请输入新的员工信息:\n");
printf("姓名:");
scanf("%s", emp.name);
printf("年龄:");
scanf("%d", &(emp.age));
printf("工作:");
scanf("%s", emp.work);
printf("性别:");
scanf("%s", emp.sex);
printf("地址:");
scanf("%s", emp.addr);
printf("电话:");
scanf("%s", emp.phone);
printf("入职时间:");
scanf("%s", emp.start_date);
employees[i] = emp;
printf("员工信息已修改!\n");
return;
}
}
printf("未找到工号为 %d 的员工信息!\n", id);
}
// 删除员工信息
void delete_employee(employee *employees, int *count) {
int id;
printf("请输入要删除的员工工号:");
scanf("%d", &id);
for (int i = 0; i < *count; i++) {
if (employees[i].id == id) {
for (int j = i; j < *count - 1; j++) {
employees[j] = employees[j + 1];
}
(*count)--;
printf("员工信息已删除!\n");
return;
}
}
printf("未找到工号为 %d 的员工信息!\n", id);
}
// 查询员工信息
void query_employee(employee *employees, int count) {
int choice;
printf("请选择查询方式:\n");
printf("1. 按姓名查询\n");
printf("2. 按年龄查询\n");
printf("3. 按工作查询\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
char name[MAX_NAME_LEN];
printf("请输入员工姓名:");
scanf("%s", name);
for (int i = 0; i < count; i++) {
if (strcmp(employees[i].name, name) == 0) {
print_employee(employees[i]);
}
}
break;
case 2:
int min_age, max_age;
printf("请输入员工年龄范围(最小年龄 最大年龄):");
scanf("%d %d", &min_age, &max_age);
for (int i = 0; i < count; i++) {
if (employees[i].age >= min_age && employees[i].age <= max_age) {
print_employee(employees[i]);
}
}
break;
case 3:
char work[MAX_WORK_LEN];
printf("请输入员工工作:");
scanf("%s", work);
for (int i = 0; i < count; i++) {
if (strcmp(employees[i].work, work) == 0) {
print_employee(employees[i]);
}
}
break;
default:
printf("无效选项,请重新输入!\n");
break;
}
}
// 排列员工信息
void sort_employee(employee *employees, int count) {
for (int i = 0; i < count - 1; i++) {
for (int j = 0; j < count - i - 1; j++) {
if (employees[j].age > employees[j + 1].age) {
employee temp = employees[j];
employees[j] = employees[j + 1];
employees[j + 1] = temp;
}
}
}
printf("员工信息已排列!\n");
}
// 统计员工信息
void stats_employee(employee *employees, int count) {
int age, sex;
char work[MAX_WORK_LEN];
printf("请输入员工信息统计条件:\n");
printf("年龄(-1 表示不限):");
scanf("%d", &age);
printf("性别(0 表示女,1 表示男,-1 表示不限):");
scanf("%d", &sex);
printf("工作(空格表示不限):");
scanf("%s", work);
int total = 0;
for (int i = 0; i < count; i++) {
if ((age == -1 || employees[i].age == age) &&
(sex == -1 || strcmp(employees[i].sex, sex == 0 ? "女" : "男") == 0) &&
(strcmp(work, "") == 0 || strcmp(employees[i].work, work) == 0)) {
total++;
}
}
printf("符合条件的员工数量为:%d\n", total);
}
// 输出单个员工信息
void print_employee(employee emp) {
printf("工号:%d,姓名:%s,年龄:%d,工作:%s,性别:%s,地址:%s,电话:%s,入职时间:%s\n",
emp.id, emp.name, emp.age, emp.work, emp.sex, emp.addr, emp.phone, emp.start_date);
}
// 输出所有员工信息
void print_all_employee(employee *employees, int count) {
for (int i = 0; i < count; i++) {
print_employee(employees[i]);
}
}
// 将员工信息写入文件
void save_employees_to_file(employee *employees, int count) {
FILE *fp = fopen(FILE_NAME, "wb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fwrite(&count, sizeof(int), 1, fp);
fwrite(employees, sizeof(employee), count, fp);
fclose(fp);
printf("员工信息已保存到文件!\n");
}
// 从文件中读取员工信息
void load_employees_from_file(employee *employees, int *count) {
FILE *fp = fopen(FILE_NAME, "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
fread(count, sizeof(int), 1, fp);
fread(employees, sizeof(employee), *count, fp);
fclose(fp);
printf("已加载员工信息文件!\n");
}
```
注意事项:
- 为了方便管理,我们将员工信息保存在一个文件(`employees.dat`)中,程序启动时会从文件中读取员工信息,程序退出时会将员工信息写入文件。
- 由于使用了结构体数组来保存员工信息,因此需要传递指向员工数组的指针和当前员工数量的指针。
- 在查询员工信息时,我们提供了三种查询方式:按姓名查询、按年龄查询、按工作查询。其中,按年龄查询时用户需要输入年龄范围,按性别查询时用户需要输入 0 表示女、1 表示男、-1 表示不限。
- 在统计员工信息时,用户需要输入统计条件,包括年龄、性别、工作,其中年龄和性别可以输入 -1 表示不限,工作可以输入空格表示不限。
- 在保存员工信息到文件时,我们先将员工数量写入文件,然后再将员工数组写入文件。在读取员工信息时,我们先读取员工数量,然后再读取员工数组。
阅读全文