使用c语言编写一个企业员工信息管理系统并满足以下要求1. 录入员工信息:从键盘录入表示员工信息的结构体数组各项数据,并将结构 体数组的内容写入表示员工信息的文件中。 2. 更新员工信息:可以实现多次向数据文件追加员工记录的功能,添加完毕后 返回主菜单;能够实现根据员工工号删除文件中员工信息的操作,且可多次删除 记录;可以实现根据员工工号修改员工信息的功能,其中员工信息包括:工号、 姓名、年龄、工作、性别、地址、电话、入职时间,并将最终数据存储到文件中。 3. 查询员工信息:可分别根据姓名、年龄、工作对员工信息进行查询。 4. 排列员工信息:可根据年龄从小到大的顺序对员工信息进行排序。 5. 统计员工信息:能够根据员工的年龄、工作和性别统计显示满足要求的所有 员工信息。 6. 输出员工信息:将员工信息文件中的数据输出到显示器上。 7. 实现输入数字 0 则退出管理系统。

时间: 2023-12-10 07:37:55 浏览: 56
以下是一个简单的企业员工信息管理系统的 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 表示不限,工作可以输入空格表示不限。 - 在保存员工信息到文件时,我们先将员工数量写入文件,然后再将员工数组写入文件。在读取员工信息时,我们先读取员工数量,然后再读取员工数组。

相关推荐

最新推荐

recommend-type

基于Android 7.0与Android Studio的安卓学习.zip

Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。
recommend-type

node-v4.6.1-sunos-x86.tar.xz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

node-v6.3.0-linux-armv7l.tar.xz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

node-v6.9.2-darwin-x64.tar.xz

Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。
recommend-type

甲壳虫ADB助手v1.3.0@高级版.apk

甲壳虫ADB助手v1.3.0@高级版.apk
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

spring添加xml配置文件

1. 创建一个新的Spring配置文件,例如"applicationContext.xml"。 2. 在文件头部添加XML命名空间和schema定义,如下所示: ``` <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。