【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;
}

通过上述功能和代码,我们实现了一个简单而实用的员工信息管理系统。该系统不仅可以有效地管理员工信息,还具备良好的用户交互体验。未来可以根据实际需求进行功能扩展和优化。
如有课程设计需求 请私聊作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/859722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字排列问题

题目&#xff1a;有1、2、3、4个数字&#xff0c;能组成多少个互不相同且无重复数字的三位数&#xff1f;都是多少&#xff1f; 代码&#xff1a; #include <stdio.h> int main() { int count 0; // 计数器&#xff0c;记录生成的三位数的数量 // 使用三个嵌套的fo…

代数扩张次数关系定理

【单扩域同构引理】 对于单扩张 K / F \mathbb{K/F} K/F有同构 F [ a ] ≅ F [ x ] / ⟨ f ( x ) ⟩ \mathbb{F}\lbrack a\rbrack\mathbb{\cong F}\lbrack x\rbrack/\left\langle f(x) \right\rangle F[a]≅F[x]/⟨f(x)⟩&#xff0c;其中 a ∈ K a \in \mathbb{K} a∈K为本原元…

Java-LinkedList和ArrayList的区别、Get/Add操作性能分析以及常见的遍历方式

LinkedList和ArrayList的区别、Get/Add操作性能分析以及常见的遍历方式 一、LinkedList基本特性主要方法 二、ArrayList初始化及基本操作ArrayList注意点&#xff08;待完善&#xff09;代码示例 三、ArrayList与LinkedList的区别四、Get/Add操作性能分析五、LinkedList遍历方式…

中霖教育:二级建造师报名后缺考有影响吗?

在完成二级建造师的报名程序后&#xff0c;考生无法进行退考。如果是不参加考试&#xff0c;可以选择弃考。弃考对个人并没有负面影响&#xff0c;缺席考试的话也不会被记录在个人诚信档案中。当然&#xff0c;如果弃考的话此次考试的成绩将被记为0&#xff0c;下一年参加考试按…

机器学习项目实战 项目详解 + 数据集 + 完整源码+ 项目报告

前言 本专栏为大家整理了一些机器学习项目&#xff0c;内包含了各种不同的入门级机器学习项目&#xff0c;包含项目的源代码、数据集、以及详细的讲解&#xff0c;每个项目都带有完整的代码数据集报告 项目链接 【机器学习项目实战&#xff08;一&#xff09;】基于随机森林…

关于电机的线性思考

当大多数工程师听到电机这个词时&#xff0c;他们自然地想到旋转装置&#xff0c;例如有刷直流、无刷直流、步进电机或变频原动机。但是电机不一定是旋转的&#xff0c;很多时候设计需要直线运动。一种解决方案是添加某种齿轮或皮带装置来转换旋转运动&#xff0c;这种解决方案…

基于SpringBoot的实习管理系统设计与实现

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; SpringBoot框架&#xff0c;B/S模式 工具&#xff1a; MyEclipse&#xff0c;Tomcat 系统展示 …

预备役二招算法测试题解

这次题目出的都是一些偏向于基础的题目&#xff0c;就是一些简单的模拟&#xff0c;思维&#xff0c;以及基础算法&#xff08;二分&#xff0c;前缀和&#xff09; &#xff08;点击题目标题&#xff0c;进入原题&#xff09; 我是签到题 题解&#xff1a;就是说给你 t 组数据…

每日鲜语携手中国国家高尔夫球队队员殷若宁征战巴黎,打响中国高端鲜奶品牌“鲜”声量

近日&#xff0c;高端鲜奶品牌每日鲜语宣布携手蒙牛品牌代言人、中国国家高尔夫球队队员殷若宁&#xff0c;共赴巴黎奥运赛场&#xff0c;为梦想挥杆而上。邀请众多消费者开启高品质、健康的生活方式。此举不仅彰显了每日鲜语作为高端鲜奶新标杆的品牌定位&#xff0c;也同时延…

vue2.0项目安装依赖 sass 报错

1、报错代码&#xff1a; 2、原因&#xff1a;项目有点老&#xff0c;vue2的版本&#xff0c;所以node-sass在npm安装的时候大概率的会安装出错&#xff0c;或下载时间过长&#xff0c;因此考虑用dart-sass来替换。 npm install node-sassnpm:dart-sass3、然后就可以成功运行了…

leetcode144、145、94二叉树的前、中、后序遍历

本文主要讲解二叉树的前、中、后序遍历的要点与细节&#xff0c;按照步骤思考更方便理解 c代码如下&#xff0c;末尾 具体要点&#xff1a; 1. 首先我们要了解二叉树的前序&#xff0c;中序&#xff0c;后序的遍历顺序&#xff1a; 前序&#xff1a;中 左 右 中序&a…

8.项目结构——黑马程序员Java最新AI+若依框架项目

目录 前言一、后端1.ruoyi-admin2.ruoyi-common3.ruoyi-framework4. ruoyi-generator(可删除)5.ruoyi-quartz&#xff08;可删除&#xff09;5.ruoyi-system6. ruoyi-ui7.sql8.依赖关系9. 总结 二、前端三、SQL 前言 提示&#xff1a;本篇叙述若依前后端项目结构 一、后端 1…

无线领夹麦克风哪个品牌音质最好,揭秘无线麦克风哪个牌子最好!

​在这个数字化、信息化的时代&#xff0c;短视频和直播已经成为了人们生活中不可或缺的一部分。而无线麦克风&#xff0c;则是这些活动中不可或缺的重要工具。它们能够轻松捕捉声音&#xff0c;让内容更加生动、真实。然而&#xff0c;市场上的无线麦克风种类繁多&#xff0c;…

缓存策略概述

缓存策略 缓存策略是指在计算机系统中&#xff0c;为了提高数据访问效率而临时存储常用或频繁访问的数据的技术。这种技术通常在数据的读取过程中发挥作用&#xff0c;减少对原始数据源的请求次数&#xff0c;从而提升性能和响应速度。 在后端系统中&#xff0c;常见的缓存策…

Kubernetes面试整理-Kubelet, Kube-proxy和Kubernetes API 的功能和它们在集群中的作用

在 Kubernetes 集群中,kubelet、kube-proxy 和 Kubernetes API 是三个关键组件,它们在不同层面上支持集群的正常运行。以下是它们的功能及其在集群中的作用: Kubelet 功能 ● 节点管理:kubelet 运行在每个 Worker 节点上,负责节点上的所有 Pod 和容器的管理。 ● Pod 生命…

51-60 CVPR 2024 最佳论文 | Generative Image Dynamics

在2023年11月&#xff0c;谷歌研究院发布了一项令人瞩目的研究成果——Generative Image Dynamics&#xff08;生成图像动力学&#xff09;。这项技术的核心是将静态的图片转化为动态的、无缝循环的视频&#xff0c;而且更令人兴奋的是&#xff0c;这些生成的视频还具有交互性。…

大模型日报2024-06-24

大模型日报 2024-06-24 大模型资讯 大模型产品 AI快速生成专业播客 摘要: MakePodcast.io使用AI语音&#xff0c;只需提供脚本并选择声音&#xff0c;即可在几分钟内生成专业质量的播客。 Sherloq&#xff1a;SQL用户的AI协作仓库 摘要: Sherloq为SQL查询提供一站式管理&#x…

AI赋能天气:微软研究院发布首个大规模大气基础模型Aurora

编者按&#xff1a;气候变化日益加剧&#xff0c;高温、洪水、干旱&#xff0c;频率和强度不断增加的全球极端天气给整个人类社会都带来了难以估计的影响。这给现有的天气预测模型提出了更高的要求——这些模型要更准确地预测极端天气变化&#xff0c;为政府、企业和公众提供更…

高考后的新起点:学校与专业的选择之困

十年前&#xff0c;我踏入了高考的考场。那是一场人生的大考&#xff0c;不仅仅是对知识的检验&#xff0c;更是对未来方向的一次摸索。当最后一门科目的考试铃声响起&#xff0c;我知道&#xff0c;自己即将面临一个新的选择——专业与学校&#xff0c;究竟该如何取舍&#xf…

【转】5种常见的网络钓鱼攻击以及防护手段

2022 年 Verizon 数据泄露调查报告指出&#xff0c;去年 75% 的社会工程攻击涉及网络钓鱼&#xff0c;仅去年一年就有超过 33 万个账户被网络钓鱼&#xff0c;网络钓鱼占整体社会工程攻击的 41%。 不能将所有责任归咎于员工&#xff0c;因为薄弱的安全意识建设及宣教是大部分漏…