【C语言课程设计】员工信息管理系统
员工信息管理系统
在日常的企业管理中,员工信息的管理显得尤为重要。为了提高员工信息管理的效率,我们设计并实现了一个简单的员工信息管理系统。该系统主要使用C语言编写,具备输入、显示、查询、更新(增加、删除、修改)、读取文件和保存文件等功能。
系统功能
1. 输入员工信息
该功能允许用户输入多名员工的信息,包括姓名、工号、性别、联系电话、学历、职位和薪资。输入信息时需按特定格式一次性输入多项内容,并用空格分隔。输入的信息会被存储在一个全局的员工数组中。
void input_info() {int numToAdd;printf("请输入要添加的员工数量:");scanf("%d", &numToAdd);clearBuffer();if (numToAdd <= 0 || numToAdd > 100 - numEmployees) {printf("输入数量无效或超出可添加的最大数量。\n");return;}printf("请依次输入每位员工的姓名 工号 性别 联系电话 学历 职位 薪资,用空格分隔:\n");for (int i = 0; i < numToAdd; ++i) {struct Employee newEmployee;if (scanf("%s %d %s %s %s %s %f",newEmployee.name, &newEmployee.emp_id, newEmployee.gender,newEmployee.phone, newEmployee.education, newEmployee.position,&newEmployee.salary) != 7) {printf("输入格式错误,请重新输入。\n");clearBuffer();return;}clearBuffer();employees[numEmployees++] = newEmployee;}printf("员工信息输入成功!\n");
}
2. 显示员工信息
该功能按照分页的形式显示所有员工的信息,每页显示5名员工。如果员工数量较多,可以通过按Enter键翻页查看下一页的员工信息。
void display_info() {if (numEmployees == 0) {printf("没有员工信息可以显示。\n");return;}int page = 1;int itemsPerPage = 5;int totalPages = (numEmployees + itemsPerPage - 1) / itemsPerPage;while (page <= totalPages) {printf("第%d页,共%d页\n", page, totalPages);int start = (page - 1) * itemsPerPage;int end = start + itemsPerPage;if (end > numEmployees) {end = numEmployees;}for (int i = start; i < end; ++i) {printf("姓名: %s, 工号: %d, 性别: %s, 联系电话: %s, 学历: %s, 职位: %s, 薪资: %.2f\n",employees[i].name, employees[i].emp_id, employees[i].gender,employees[i].phone, employees[i].education, employees[i].position,employees[i].salary);}if (page < totalPages) {printf("按 Enter 键查看下一页...\n");getchar();}++page;}
}
3. 查询员工信息
该功能支持按工号、姓名和薪资三种方式查询员工信息。用户可以根据自己的需求选择相应的查询方式,并输入对应的查询条件。系统会显示符合条件的员工信息。
void search_info() {if (numEmployees == 0) {printf("没有员工信息可以查询。\n");return;}int searchOption;printf("请选择查询方式:1.按工号 2.按姓名 3.按薪资\n");scanf("%d", &searchOption);clearBuffer();if (searchOption == 1) {int empId;printf("请输入要查询的员工工号: ");scanf("%d", &empId);clearBuffer();int found = 0;for (int i = 0; i < numEmployees; ++i) {if (employees[i].emp_id == empId) {found = 1;printf("员工信息如下:\n");printf("姓名: %s, 工号: %d, 性别: %s, 联系电话: %s, 学历: %s, 职位: %s, 薪资: %.2f\n",employees[i].name, employees[i].emp_id, employees[i].gender,employees[i].phone, employees[i].education, employees[i].position,employees[i].salary);break;}}if (!found) {printf("未找到工号为%d的员工。\n", empId);}} else if (searchOption == 2) {char name[50];printf("请输入要查询的员工姓名: ");scanf("%s", name);clearBuffer();int found = 0;for (int i = 0; i < numEmployees; ++i) {if (strcmp(employees[i].name, name) == 0) {found = 1;printf("员工信息如下:\n");printf("姓名: %s, 工号: %d, 性别: %s, 联系电话: %s, 学历: %s, 职位: %s, 薪资: %.2f\n",employees[i].name, employees[i].emp_id, employees[i].gender,employees[i].phone, employees[i].education, employees[i].position,employees[i].salary);}}if (!found) {printf("未找到姓名为%s的员工。\n", name);}} else if (searchOption == 3) {float salary;printf("请输入要查询的员工薪资: ");scanf("%f", &salary);clearBuffer();int found = 0;for (int i = 0; i < numEmployees; ++i) {if (employees[i].salary == salary) {found = 1;printf("员工信息如下:\n");printf("姓名: %s, 工号: %d, 性别: %s, 联系电话: %s, 学历: %s, 职位: %s, 薪资: %.2f\n",employees[i].name, employees[i].emp_id, employees[i].gender,employees[i].phone, employees[i].education, employees[i].position,employees[i].salary);}}if (!found) {printf("未找到薪资为%.2f的员工。\n", salary);}} else {printf("无效的查询选项。\n");}
}
4. 更新员工信息
更新员工信息功能包括增加、删除和修改三种操作。用户可以根据提示选择对应的操作,并输入相应的信息进行更新。
void update_info() {int updateOption;printf("请选择更新方式:1.增加 2.删除 3.修改\n");scanf("%d", &updateOption);clearBuffer();switch (updateOption) {case 1:add_info();break;case 2:delete_info();break;case 3:modify_info();break;default:printf("无效的更新选项。\n");break;}
}
5. 读取文件信息
该功能用于从文件中读取员工信息,并将读取到的信息存储到全局员工数组中。读取成功后,会显示相应提示信息。
void read_info() {FILE* file = fopen("employee_data.txt", "r");if (file == NULL) {printf("无法打开文件或文件不存在。\n");return;}numEmployees = 0;while (fscanf(file, "%s %d %s %s %s %s %f",employees[numEmployees].name, &employees[numEmployees].emp_id,employees[numEmployees].gender, employees[numEmployees].phone,employees[numEmployees].education, employees[numEmployees].position,&employees[numEmployees].salary) == 7) {numEmployees++;if (numEmployees >= 100) {printf("警告:员工信息数量超过程序允许的最大值。\n");break;}}fclose(file);printf("员工信息从文件中读取成功!\n");
}
6. 保存文件信息
该功能用于将当前存储的员工信息保存到文件中。保存成功后,会显示相应提示信息。
void save_info() {FILE* file = fopen("employee_data.txt", "w");if (file == NULL) {printf("无法打开文件来保存员工信息。\n");return;}for (int i = 0; i < numEmployees; ++i) {fprintf(file, "%s %d %s %s %s %s %.2f\n",employees[i].name, employees[i].emp_id, employees[i].gender,employees[i].phone, employees[i].education, employees[i].position,employees[i].salary);}fclose(file);printf("员工信息成功保存到文件中!\n");
}
7. 清空缓冲区
该功能用于清空输入缓冲区,避免因缓冲区中的多余字符影响后续的输入操作。
void clearBuffer() {int c;while ((c = getchar()) != '\n' && c != EOF);
}
系统主界面
系统通过一个主菜单界面来引导用户进行操作。用户可以根据提示输入相应的操作序号来执行对应的功能。主菜单界面如下所示:
int main() {int a = 0;printf("\n\n*********************【员工信息管理系统】***************\n");do {printf("********** 1:员工信息输入 **********\n");printf("********** 2:员工信息显示 **********\n");printf("********** 3:员工信息查询 **********\n");printf("********** 4:员工信息更新-增/改/删 **********\n");printf("********** 5:读取文件信息 **********\n");printf("********** 0:保存并退出系统 **********\n");printf("请输入需要进行的操作序号:");scanf("%d", &a);clearBuffer();switch (a) {case 1:input_info();break;case 2:display_info();break;case 3:search_info();break;case 4:update_info();break;case 5:read_info();break;case 0:save_info();printf("保存并退出系统。\n");break;default:printf("无效的操作序号,请重新输入。\n");break;}} while (a != 0);return 0;
}
通过上述功能和代码,我们实现了一个简单而实用的员工信息管理系统。该系统不仅可以有效地管理员工信息,还具备良好的用户交互体验。未来可以根据实际需求进行功能扩展和优化。
如有课程设计需求 请私聊作者
相关文章:

【C语言课程设计】员工信息管理系统
员工信息管理系统 在日常的企业管理中,员工信息的管理显得尤为重要。为了提高员工信息管理的效率,我们设计并实现了一个简单的员工信息管理系统。该系统主要使用C语言编写,具备输入、显示、查询、更新(增加、删除、修改ÿ…...

「动态规划」如何求最长递增子序列的长度?
300. 最长递增子序列https://leetcode.cn/problems/longest-increasing-subsequence/description/ 给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其…...

深度神经网络DNN概念科普
深度神经网络DNN概念科普 深度神经网络(Deep Neural Network, DNN)是机器学习领域中一类具有多层结构的神经网络模型,它能够通过学习数据中的复杂模式来解决非线性问题。下面是对深度神经网络的详细解析: 基本组成部分 输入层&…...

Tomcat WEB站点部署
目录 1、使用war包部署web站点 2、自定义默认网站目录 3、部署开源站点(jspgou商城) 对主机192.168.226.22操作 对主机192.168.226.20操作 上线的代码有两种方式: 第一种方式是直接将程序目录放在webapps目录下面,这种方式…...

IPv6 中 MAC 33:33 的由来
一、33:33 由来 1. RFC9542 - 2024-05-02 Note IANA allocates addresses under the IANA OUI (00-00-5E) as explained in [RFC9542]. Unicast addresses under the IANA OUI start with 00-00-5E, while multicast addresses under the IANA OUI start with 01-00-5E. In t…...

告别手动邮件处理:使用imbox库轻松管理你的收件箱
imbox库简介: imbox是一个强大的Python库,专为与IMAP服务器交互而设计.IMAP(Internet Message Access Protocol)是一种用于电子邮件的标准协议,允许用户在远程服务器上管理邮件.imbox库通过IMAP协议与邮件服务器通信,帮助用户轻松地读取、搜索…...

Ubuntu 18.04 安装 PCL 1.14.1
在进行科研项目时,我们常常需要将 C 和 Python 结合起来编程。然而,每次将 PCL(Point Cloud Library)的内容添加到 CMakeLists.txt 文件中时都会报错。在深入分析后,我们推测可能是当前使用的 PCL 1.8 版本与现有程序不…...

公司logo设计大全怎么找?直接帮你设计logo
公司logo设计大全怎么找?在品牌塑造的过程中,Logo无疑是至关重要的一环。一个优秀的Logo不仅能够有效传达公司的核心理念和品牌形象,还能在消费者心中留下深刻的印象。然而,对于许多初创公司或小型企业来说,制作出适合…...

如何调整C#中数组的大小
前言 数组存储多个相同类型的一种非常常用的数据结构。它长度是固定,也就是数组一旦创建大小就固定了。C# 数组不支持动态长度。那在C#中是否有方法可以调整数组大小呢?本文将通过示例介绍一种调整一维数组大小的方法。 方法 数组实例是从 System.Arr…...

通过言语和非言语检索线索描绘睡眠中的记忆再激活茗创科技茗创科技
摘要 睡眠通过重新激活新形成的记忆痕迹来巩固记忆。研究睡眠中记忆再激活的一种方法是让睡眠中的大脑再次暴露于听觉检索线索(定向记忆再激活范式)。然而,记忆线索的声学特性在多大程度上影响定向记忆再激活的有效性,目前还没有得到充分探索。本研究通…...

MDPI旗下SSCI最新影响因子目录出炉!“水刊“Sustainability表现如何?
本周投稿推荐 SSCI • 1区,4.0-5.0(无需返修,提交可录) EI • 各领域沾边均可(2天录用) CNKI • 7天录用-检索(急录友好) SCI&EI • 4区生物医学类,0.1-0.5&…...

Matlab基础篇:数据输入输出
前言 数据输入和输出是 Matlab 数据分析和处理的核心部分。良好的数据输入输出能够提高工作效率,并确保数据处理的准确性。本文将详细介绍 Matlab 数据输入输出的各种方法,包括导入和导出数据、数据处理和数据可视化。 一、导入数据 Matlab 提供了多种方…...

MySQL字典数据库设计与实现 ---项目实战
软件准备✍:Mysql与Navicat可视化命令大全 ----项目实战 文章前言部分 目录 一.摘要 二.设计内容 三.项目实现 一.摘要 本项目关注于字典数据库表结构的设计和数据管理。通过现有的sql文件,实现system_dict_type和system_dict_data两个数据表。随后…...

python数据分析——数据预处理
数据预处理 前言一、查看数据数据表的基本信息查看info()示例 查看数据表的大小shape()示例 数据格式的查看type()dtype()dtypes()示例一示例二 查看具体的数据分布describe()示例 二…...

【Python】使用matplotlib绘制图形(曲线图、条形图、饼图等)
文章目录 一、什么是matplotlib二、matplotlib 支持的图形三、如何使用matplotlib1. 安装matplotlib2. 导入matplotlib.pyplot3. 准备数据4. 绘制图形5. 定制图形6. 显示或保存图形7. (可选)使用subplots创建多个子图注意事项: 四、常见图形使…...

vue下载本地xls模版静态文件
需求导入的下载模版不想放在服务器放在前端本地下载静态资源最简单的方式直接访问 public 文件夹下的文件 方法一:使用静态文件路径 将文件放在 public 文件夹中: 把你的文件从 src/assets 移动到 public 文件夹。例如:public/template.xls。…...

手机开热点,里面的WPA2-Personal和WPA3-Personal的区别
WPA2-Personal和WPA3-Personal这两种协议都是用来保护无线网络安全的,但它们在加密强度和安全性方面有所不同。 WPA2-Personal (Wi-Fi Protected Access 2) WPA2是目前最广泛使用的Wi-Fi安全标准之一。它使用AES(Advanced Encryption Standard…...

算法课程笔记——点积叉积
算法课程笔记——点积叉积...

详解 | DigiCert EV代码签名证书
简介 DigiCert EV 代码签名证书是一种高级别的代码签名证书,它不仅提供了标准代码签名证书的所有安全特性,还增加了额外的身份验证流程,以确保软件开发者或发布者的身份得到最严格验证。这对于提升软件的信任度、防止恶意篡改和确保下载安全…...

pdf压缩大小,PDF压缩大小不影响清晰度
你是否曾为PDF文件过大而烦恼?想要分享或上传文件时,却因为它的体积而束手无策?别担心,今天我将为大家分享一些简单实用的 PDF 压缩技巧,让你的文件轻松压缩pdf。 打开“轻云处理pdf官网”, 的网站。然后上…...

项目管理必备工具:2024年十大软件排行榜
有效的工具不仅可以帮助团队保持组织性,还能显著提高项目完成率。选择合适的项目管理软件,对于实现这些目标至关重要。 在2024年的各大权威榜单中,排名前十的项目管理软件包括:PingCode、Worktile(国内)&am…...

SOLIDWORKS专业版2024价格
SOLIDWORKS Professional 专业版,带有 ECAD/MCAD 协作、自动成本估算、协作功能、设计和工程图检查、复杂的零部件库以及高级真实感渲染。 1. ECAD/MCAD协作:SOLIDWORKS专业版提供了强大的ECAD/MCAD协作功能,使得设计团队可以更高效地进行跨…...

【外快业务】百度网盘扫码源码系统部署过程记录。
视频地址:【【自动发货项目】电脑PC/移动端扫码登录百度网盘项目源码,支持多人组团购买源码】 https://www.bilibili.com/video/BV1oD421W7oj/?share_sourcecopy_web&vd_source74cf265c4965f8c17f8e89bd8c29408d 1.远程连接服务器执行,…...

lucene原理
一、正排索引 Lucene的基础层次结构由索引、段、文档、域、词五个部分组成。正向索引的生成即为基于Lucene的基础层次结构一级一级处理文档并分解域存储词的过程。 索引文件层级关系如图1所示: 索引:Lucene索引库包含了搜索文本的所有内容࿰…...

华为、H3C交换机常用巡检命令
一、硬件状态、IOS版本信息检查 • display clock:显示系统时间。 • display version:查看交换机的版本信息和最近一次重新启动的时间。 • display enviroment:显示设备温度。 • display device:显示单板运行状态。 • di…...

网络安全 DVWA通关指南 SQL Injection(SQL注入)
DVWA SQL Injection 文章目录 DVWA SQL InjectionLowMediumHighImpossible SQL注入漏洞基本原理 Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令。 可能导致数据泄露或数据破坏,缺乏可审计性,甚至导致…...

【Linux】版本
文章目录 linux版本1、linxu技术版本(内核版本)2、linux商业化版本(发行版本) 区别 linux版本 1、linxu技术版本(内核版本) 内核:提供硬件抽象层、硬盘及文件系统控制及多任务功能的系统核心程…...

代码随想录算法训练营day47
题目:188.买卖股票的最佳时机IV、309.最佳买卖股票时机含冷冻期、714.买卖股票的最佳时机含手续费 参考链接:代码随想录 188.买卖股票的最佳时机IV 思路:本题和上题的最多两次买卖相比,改成了最多k次,使用类似思路&…...

【Android面试八股文】Kotlin内置标准函数apply的原理是什么?
文章目录 一、原理解析二、 示例代码2.1 具体示例应用场景2.2 为什么使用 `apply`?apply 是 Kotlin 标准库中的一个高阶函数,它的作用是在对象上执行一个代码块,并返回这个对象本身。其原理涉及到函数类型和接收者对象的结合使用。 一、原理解析 函数类型与接收者对象的结合…...

RegionClip环境安装踩坑指南
RegionClip环境安装 RegionClip环境安装)问题1问题2问题3问题4问题5 RegionClip环境安装) 特别强调,不要单独去安装detectron2,会出现model.clip不存在的错误,通过python -m pip install -e RegionCLIP就可以问题1 问题:torch-c…...