【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官网”, 的网站。然后上…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
