【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官网”, 的网站。然后上…...
基于LLM与LangChain的智能项目管理Agent:架构设计与工程实践
1. 项目概述:一个面向项目管理的智能体框架 最近在开源社区里,我注意到一个名为 gannonh/agent-pm 的项目开始受到一些关注。乍一看这个名字,你可能会联想到“项目经理”或者“项目管理”,没错,这个项目的核心定位&…...
基于LLM的AI新闻智能体:自动化信息采集与周报生成实战
1. 项目概述:一个能自动追踪AI新闻的智能体 最近在GitHub上看到一个挺有意思的项目,叫 ai-news-weekly-agent 。光看名字,你大概能猜到它是个和AI新闻相关的自动化工具。没错,它的核心目标就是扮演一个“AI新闻周刊编辑”的角色…...
JSON Schema驱动智能体交互:构建结构化协作的接口契约
1. 项目概述:一个为智能体交互而生的“接口契约” 在构建基于大型语言模型的智能体(Agent)系统时,我们常常会遇到一个核心痛点:如何让智能体之间、智能体与工具之间、甚至是智能体与外部系统之间,进行结构…...
技术干货!!DeepSeek API 实战:从零到生产级的 Python 调用指南 — 流式、Function Calling、多轮对话、成本优化全覆盖
DeepSeek V3 的 API 性价比在 2026 年依然没有对手——同等能力价格只有 GPT-5.5 的 1/5。但翻了一圈中文技术社区,发现大多数「教程」只讲到第一段 chat.completions.create 就停了。生产环境真正需要的东西——流式输出怎么接、Function Calling 踩了什么坑、高并…...
JetBrains IDE试用重置终极指南:高效管理30天评估期
JetBrains IDE试用重置终极指南:高效管理30天评估期 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter JetBrains IDE试用重置工具(ide-eval-resetter)是一款专为IntelliJ IDEA、P…...
AI Agent交互设计新范式:基于Leader Key的可编程对话流实践
1. 项目概述与核心价值最近在折腾AI智能体(AI Agent)的开发,发现一个挺有意思的现象:很多开发者,包括我自己在内,在初期都会把大量精力花在模型调用、工具链集成这些“硬核”功能上,却常常忽略了…...
树莓派Pico W到手后,除了Wi-Fi,这几点硬件细节和Pico真不一样
树莓派Pico W硬件深度解析:超越Wi-Fi的工程细节 当我第一次拿到树莓派Pico W时,表面看起来它只是Pico的无线版本——同样的RP2040芯片、相似的引脚布局和几乎一致的尺寸。但当我开始实际项目开发时,才发现这些"看似相同"背后隐藏着…...
可视化调试工具 gdb-dashboard
1. 安装 gdb-dashboard gdb-dashboard 开源项目地址:https://github.com/cyrus-and/gdb-dashboard 项目完全是使用Python脚本编写,可以直接下载脚本到工程目录 wget -P ~ https://git.io/.gdbinit .gdbinit 文件在Linux系统下是隐藏文件,…...
Mali GPU着色器优化与性能分析实战
1. Mali离线着色编译器深度解析Mali离线着色编译器是Arm为开发者提供的专业工具链组件,专门用于分析和优化面向Mali GPU架构的着色器代码。与运行时编译不同,它允许开发者在构建阶段就对着色器性能进行静态分析和调优。1.1 核心工作原理该工具通过模拟Ma…...
华硕游侠2-RX键盘多功能滚轮自定义M失效的解决方案
新买了一块游侠2 rx键盘,想着用自定义滚轮方便打开常用程序,但是发现在Armoury Crate中设置后不起作用,网上解决方案伤筋动骨,得不偿失,有一定风险。 经测试,自定义滚轮能正常执行宏定义,只是对…...
