职工管理系统

需求分析

  1. 系统需要能够实现对职工信息的插入、删除、查找、修改和排序功能。
  2. 职工信息包括职工编号、姓名、性别、出生年月、参加工作年月、学历、职务、住址、电话等信息。
  3. 界面友好,通过菜单实现以上功能,操作简单,能够方便快捷地进行信息管理。
  4. 由键盘输入职工信息,以文件方式保存。程序执行时先将文件读入内存

设计分析

1.结构体的设计:创建一个名为“employee”的结构体,结构体成员变量包括职工编号、姓名、性别、出生年月、参加工作年月、学历、职务、住址、电话等信息。
2.数据结构选择:使用线性表来存储数据
3. 插入设计:用户可以输入职工的各项信息,将新增职工按姓名以字典顺序插入职工管理文件中,保存起来。
4. 删除设计:用户可以根据职工编号或姓名删除指定的职工信息。
5. 查找设计:用户可以根据某个限定条件(年龄,学历,职务等)查找符合条件的职工信息,并显示在界面上。
6. 修改设计,查找到某个职工,选择职工的职务住址或者电话进行修改。
7. 排序设计:用户可以按照职工编号进行排序,重新输入文件。

分模块编写,创建三个文件
在这里插入图片描述

test.cpp

#include "Employee_management.h"//int main()
//{
//	PLinear_List l;
//	
//	//插入测试
//	Push_Back(l);
//	Push_Back(l);
//	return 0;
//}//主函数int main()
{PLinear_List l;Init_List(l);while (1){menu();int input;cin >> input;if (input == 8) {cout << "退出成功" << endl;break;}switch (input){case 1:Push_Back(l);break;case 2:Delete(l);break;case 3:Modfif(l);break;case 4:Find(l);break;case 5:Print(l);break;case 6:Sort(l);break;case 7:Save(l);}}Destroy(l);return 0;
}

Employee_management.h

#include <iostream>
#include <assert.h>
using namespace std;//定义职工结构体typedef struct Employee {//编号char number[20];char name[20];char sex[20];int age;//出生年月char date_of_birth[20];//参加工作年月char date_work[20];//学历char educational_backgrounf[20];char job[20];//住址char address[20];//电话char tele_num[20];}Employee, *PEmployee;//存储职工信息的线性表typedef struct Linear_List {//容量int capacity;//职工个数int size;//动态数组PEmployee data;
}Linear_List, *PLinear_List;//菜单(插入,删除,查找,修改,排序)
void men0u();//初始化线性表
void Init_List(PLinear_List& PL);//职工信息的输入
void Input(PEmployee& PE);//扩容
void Increase_capacity(PLinear_List& PL);//删除
void Delete(PLinear_List& PL);//按照姓名字典序,插入新职工void Push_Back(PLinear_List& PL);//根据某个信息查找个别职工信息, 并且显示到标准输出void Find(PLinear_List& PL);//分信息查找
PEmployee Findname(PLinear_List& PL);
PEmployee Findnumber(PLinear_List& PL);//查找可能为多个,不设置返回值,直接在函数内部打印信息
void Findjob(PLinear_List& PL);
void Finded_b(PLinear_List& PL);
void Findage(PLinear_List& PL);//打印全体职工信息-->指定文件中
void Print(PLinear_List& PL);//打印出职工的信息
void PrintOne(PEmployee& PE);//按工号进行排序,并且重新输入到文件
void Sort(PLinear_List& PL);//保存到文件
void Save(PLinear_List& PL);//修改职工信息void Modfif(PLinear_List& PL);//销毁,释放内存
void Destroy(PLinear_List& PL);

Employee_management.cpp

#define _CRT_SECURE_NO_WARNINGS #include "Employee_management.h"void menu()
{printf("\n\n\n");printf("\t\t-------------------------------------------------\n");printf("\t\t||              ----------------               ||\n");printf("\t\t||**************职工信息管理系统***************||\n");printf("\t\t||              ----------------               ||\n");printf("\t\t||                                             ||\n");printf("\t\t||~~~~~~~~~~~~~~~1.录入职工信息~~~~~~~~~~~~~~~~||\n");printf("\t\t||~~~~~~~~~~~~~~~2.删除职工信息~~~~~~~~~~~~~~~~||\n");printf("\t\t||~~~~~~~~~~~~~~~3.修改职工信息~~~~~~~~~~~~~~~~||\n");printf("\t\t||~~~~~~~~~~~~~~~4.查询职工信息~~~~~~~~~~~~~~~~||\n");printf("\t\t||~~~~~~~~~~~~~~~5.显示职工信息~~~~~~~~~~~~~~~~||\n");printf("\t\t||~~~~~~~~~~~~~~~6.排序职工信息~~~~~~~~~~~~~~~~||\n");printf("\t\t||~~~~~~~~~~~~~~~7.输入到文件~~~~~~~~~~~~~~~~~~||\n");printf("\t\t||~~~~~~~~~~~~~~~8.退出系统~~~~~~~~~~~~~~~~~~~~||\n");printf("\t\t||                                             ||\n");printf("\t\t||*********************************************||\n");
}void Init_List(PLinear_List& PL)
{PL = new Linear_List;PL->capacity = 4;PL->size = 0;PL->data = new Employee[4];//(PEmployee)malloc(sizeof(Employee) * PL->capacity);
}void Destroy(PLinear_List& PL)
{PL->size = 0;PL->capacity = 0;delete PL->data;delete PL;
}void Increase_capacity(PLinear_List& PL)
{PL->capacity *= 2;PEmployee newdata = (PEmployee)realloc(PL->data, PL->capacity * sizeof(Employee));assert(newdata);PL->data = newdata;
}void Push_Back(PLinear_List& PL)
{if (PL->size == PL->capacity){//扩容Increase_capacity(PL);}PEmployee PE = new Employee;//输入数据Input(PE);//按照姓名字典序插入//计算插入的位置int pos = 0;for (pos = 0; pos < PL->size; pos++){if (strcmp(PE->name, PL->data[pos].name) < 0)break;}//将pos位置后面的数据右移int i = PL->size - 1;while (i >= pos){PL->data[i + 1] = PL->data[i];i--;}PrintOne(PE);PL->data[pos] = *PE;PL->size++;delete PE;cout << "录入成功" << endl;
}void Delete(PLinear_List& PL)
{//根据职工编号或者姓名删除职工信息cout << "1.根据姓名查找该员工" << endl;cout << "2.根据工号查找该员工" << endl;int x;cin >> x;int pos = 0;//找到要删除职工的下标if (x == 1){cout << "请输入姓名" << endl;char fname[20];cin >> fname;for (pos = 0; pos < PL->size; pos++){if (strcmp(fname, PL->data[pos].name) == 0)break;}}else{cout << "请输入工号" << endl;char fnumber[20];cin >> fnumber;for (pos = 0; pos < PL->size; pos++){if (strcmp(fnumber, PL->data[pos].number) == 0)break;}}//向前覆盖,size--PL->size--;for (int i = pos; pos < PL->size; pos++){PL->data[i] = PL->data[i + 1];}cout << "删除成功" << endl;
}void Input(PEmployee& PE)
{cout << "请输入要插入的职工的信息" << endl;cout << "职工编号: ";cin >> PE->number;cout << "姓名: ";cin >> PE->name;cout << "性别: ";cin >> PE->sex;cout << "年龄: ";cin >> PE->age;cout << "出生年月: ";cin >> PE->date_of_birth;cout << "参与工作年月: ";cin >> PE->date_work;cout << "学历: ";cin >> PE->educational_backgrounf;;cout << "职务: ";cin >> PE->job;cout << "住址: ";cin >> PE->address;cout << "电话: ";cin >> PE->tele_num;
}PEmployee Findname(PLinear_List& PL)
{cout << "请输入要查找的职工的姓名:";char fname[20];cin >> fname;for (int i = 0; i < PL->size; i++){if (strcmp(PL->data[i].name, fname) == 0){return &(PL->data[i]);}}cout << "输入错误,没有该员工" << endl;return nullptr;
}PEmployee Findnumber(PLinear_List& PL)
{cout << "请输入要查找的职工的工号:";char fnumber[20];cin >> fnumber;for (int i = 0; i < PL->size; i++){if (strcmp(PL->data[i].number, fnumber) == 0){return &(PL->data[i]);}}cout << "输入错误,没有该员工" << endl;return nullptr;
}void Findjob(PLinear_List& PL)
{cout << "请输入要查找的职工的工作:";char fjob[20];cin >> fjob;printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\t\t\t出生日期\t\t\t工作日期\t\t\t学历\t\t\t职务\t\t\t住址\t\t\t电话\n");for (int i = 0; i < PL->size; i++){if (strcmp(PL->data[i].job, fjob) == 0){//输出该类职工信息PEmployee PE = &(PL->data[i]);PrintOne(PE);}}
}void Finded_b(PLinear_List& PL)
{cout << "请输入要查找的职工的学历:";char fed_b[20];cin >> fed_b;printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\t\t\t出生日期\t\t\t工作日期\t\t\t学历\t\t\t职务\t\t\t住址\t\t\t电话\n");for (int i = 0; i < PL->size; i++){if (strcmp(PL->data[i].educational_backgrounf, fed_b) == 0){//输出该职工信息PEmployee PE = &(PL->data[i]);PrintOne(PE);}}
}void Findage(PLinear_List& PL)
{cout << "请输入要查找的职工的年龄:";int fage;cin >> fage;printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\t\t\t出生日期\t\t\t工作日期\t\t\t学历\t\t\t职务\t\t\t住址\t\t\t电话\n");for (int i = 0; i < PL->size; i++){if (PL->data[i].age == fage){//打印信息PEmployee PE = &(PL->data[i]);PrintOne(PE);}}
}void Find(PLinear_List& PL)
{int x;printf("…………1.根据姓名查找…………\n");printf("…………2.根据工号查找…………\n");printf("…………3.根据职务查找…………\n");printf("…………4.根据学历查找…………\n");printf("…………5.根据年龄查找…………\n");cin >> x;PEmployee cur;switch (x){case 1:cur = Findname(PL);if (cur){//输出该职工的信息PrintOne(cur);}break;case 2:cur = Findnumber(PL);if (cur){//输出该职工的信息PrintOne(cur);}break;case 3:Findjob(PL);break;case 4:Finded_b(PL);break;case 5:Findage(PL);break;}
}//排序
void Sort(PLinear_List& PL)
{int n = PL->size;//冒泡排序实现for (int i = 0; i < n - 1; i++){for (int j = 0; j < n - i - 1; j++){if (strcmp(PL->data[j].number, PL->data[j + 1].number) < 0)swap(PL->data[j], PL->data[j + 1]);}}cout << "排序成功" << endl;
}void Save(PLinear_List& PL)
{FILE* fp;int n = PL->size;char filename[100];cout << "请输入要保存的文件名: " << endl;cin >> filename;//断言assert(fp = fopen(filename, "w"));fprintf(fp, "工号\t\t\t姓名\t\t\t性别\t\t\t年龄\t\t\t-出生日期\t\t\t-工作日期\t\t\t学历\t\t\t职务\t\t\t住址\t\t\t电话\n");for (int i = 0; i < n; i++)fprintf(fp, "%s\t\t\t%s\t\t\t%s\t\t\t%d\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\n", PL->data[i].number, PL->data[i].name, PL->data[i].sex,PL->data[i].age, PL->data[i].date_of_birth, PL->data[i].date_work,PL->data[i].educational_backgrounf, PL->data[i].job, PL->data[i].address, PL->data[i].tele_num);cout << "保存成功" << endl;fclose(fp);}void Print(PLinear_List& PL)
{int n = PL->size;printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\t\t\t出生日期\t\t\t工作日期\t\t\t学历\t\t\t职务\t\t\t住址\t\t\t电话\n");for (int i = 0; i < n; i++)printf("%s\t\t\t%s\t\t\t%s\t\t\t%d\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\n", PL->data[i].number, PL->data[i].name, PL->data[i].sex,PL->data[i].age, PL->data[i].date_of_birth, PL->data[i].date_work,PL->data[i].educational_backgrounf, PL->data[i].job, PL->data[i].address, PL->data[i].tele_num);
}void PrintOne(PEmployee& PE)
{printf("工号\t\t\t姓名\t\t\t性别\t\t\t年龄\t\t\t出生日期\t\t\t工作日期\t\t\t学历\t\t\t职务\t\t\t住址\t\t\t电话\n");printf("%s\t\t\t%s\t\t\t%s\t\t\t%d\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\t\t\t%s\n", PE->number, PE->name, PE->sex,PE->age, PE->date_of_birth, PE->date_work,PE->educational_backgrounf, PE->job, PE->address, PE->tele_num);
}//修改职工信息void Modfif(PLinear_List& PL)
{//先找到要修改的职工, 通过工号和姓名进行型查找cout << "1.根据姓名查找该员工" << endl;cout << "2.根据工号查找该员工" << endl;int x;cin >> x;PEmployee cur;if (x == 1){cur = Findname(PL);PrintOne(cur);}else{cur = Findnumber(PL);PrintOne(cur);}//选择要修改的值printf("…………1.修改年龄…………\n");printf("…………2.修改学历…………\n");printf("…………3.修改住址…………\n");printf("…………4.修改职务…………\n");printf("…………5.修改电话…………\n");cin >> x;switch (x){case 1:cout << "年龄修改为:";cin >> cur->age;break;case 2:cout << "学历修改为:";cin >> cur->educational_backgrounf;break;case 3:cout << "住址修改为:";cin >> cur->address;break;case 4:cout << "职务修改为:";cin >> cur->job;break;case 5:cout << "电话修改为:";cin >> cur->tele_num;break;}cout << "修改成功" << endl;
}

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

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

相关文章

云渲染可以渲染SketchUp吗?

最近有很多人在问&#xff0c;云渲染可以渲染sketchup吗&#xff1f;答案是可以的&#xff0c;不过只有两三家支持&#xff0c;大部分云渲染是还是不支持的&#xff0c;今天就给大家介绍国内最新支持sketchup渲染的云渲染——炫云云渲染的使用方法。 炫云云渲染目前支持sketchu…

【QCustomPlot实战系列】QCPGraph堆叠面积图

在【QCustomPlot实战系列】QCPGraph堆叠图的基础上&#xff0c;使用setChannelFillGraph函数即可 static QCPScatterStyle GetScatterStyle(const QColor& color) {QPen pen(color, 2);return QCPScatterStyle(QCPScatterStyle::ssCircle,pen,Qt::white, 5); }static QCP…

Linux企业架构(存储服务)

1.1概述 存储&#xff1a;用户存放上传的内容&#xff08;数据&#xff09;&#xff0c;一般应用在网站集群中为何用&#xff1f; 1. 如果不使用存储&#xff0c;用户上传的数据就直接存放在网站服务器上&#xff0c;用户下次访问可能找不到 2. 如果使用存储&#xff0c;用户上…

低成本创业新篇章:上门回收小程序的崛起与挑战

在当今这个快速变化的时代&#xff0c;低成本创业项目成为了许多创业者的首选。其中&#xff0c;上门回收小程序以其独特的商业模式和市场需求&#xff0c;成为了创业市场中的一股新势力。本文将深入探讨上门回收小程序作为低成本创业项目的崛起之路以及面临的挑战。 一、上门回…

【Sa-Token|3】Sa-Token集成到现有微服务详细介绍

一、系统架构调整 用户中心&#xff1a;保持现有的用户登录、注册接口不变。多个项目&#xff1a;前后端分离&#xff0c;保持现有逻辑不变。网关服务&#xff1a;新增或配置网关服务&#xff0c;处理所有请求并进行 Token 校验和转发。统一 Token 管理&#xff1a;通过 Sa-Tok…

嵌入式系统软件开发环境_2.一般架构

1.Eclipse框架 嵌入式系统软件开发环境是可帮助用户开发嵌入式软件的一组工具的集合&#xff0c;其架构的主要特征离不开“集成”问题&#xff0c;采用什么样的架构框架是决定开发环境优劣主要因素。Eclipse框架是当前嵌入式系统软件开发环境被普遍公认的一种基础环境框架。目…

html做一个画热图的软件

完整示例 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>热图生成器</title><script src"https://cdn.plot.ly/plotly-latest.min.js"></script><style>body …

A.P.穆勒-马士基将作为银牌赞助商出席2024中国汽车供应链降碳和可持续国际峰会

作为一家综合性集装箱物流公司&#xff0c;A.P.穆勒-马士基致力于连接和简化我们客户的供应链。作为物流服务领域的全球领导者&#xff0c;公司拥有100,000多家客户&#xff0c;业务遍及130多个国家&#xff0c;拥有约80,000名员工。A.P.穆勒-马士基致力于通过新技术、新船舶和…

Syslog日志外发

Syslog是一种广泛应用于网络设备、操作系统和应用程序的日志通信协议&#xff0c;通过收集、监控和分析Syslog日志&#xff0c;企业可以有效维护网络安全、故障排除和运营管理。 除了内部监控&#xff0c;有时企业也需要将Syslog日志外发以实现更多的管理和合规需求。在实现Sy…

网络编程及练习

定义&#xff1a; 在网络通信协议下&#xff0c;不同计算机上运行的程序进行的数据传输。计算机和计算机之间通过网络进行数据传输 可以使用在java.net包下的技术开发出常见的网络应用程序 常见的软件架构&#xff1a; C/S: Client/Server 客户端/服务器 在用户本地需要下载…

打破数据分析壁垒:SPSS复习必备(四)

一、连续性变量的统计描述与参数估计 1、集中趋势的描述指标 均数&#xff08;Mean&#xff09; 中位数&#xff08;Median&#xff09; 众数&#xff08;Mode&#xff09; 总合&#xff08;Sum&#xff09; 2、离散趋势的描述指标 标准差&#xff08;Std. Deviation&#x…

STM32CubeMX WS2812B灯驱动

一、WS2812B 数据发送速度可达800Kbps。 数据协议采用单线归零码的通讯方式&#xff0c;像素点在上电复位以后&#xff0c;DIN端接受从控制器传输过来的数据&#xff0c;首先送过来的24bit数据被第一个像素点提取后&#xff0c;送到像素点内部的数据锁存器&#xff0c;剩余的…

openssl 命令行生成密钥对,生成hash,PSS填充签名,校验

生成密钥对 openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:4096 openssl rsa -pubout -in private_key.pem -out public_key.pem将源文件data.txt生成hash值&#xff08;sha-256&#xff09; openssl dgst -sha256 -binary data.txt > d…

MySQL进阶——SQL优化

目录 1插入数据 1.1 insert 1.2大批量插入数据 2主键优化 3 order by 优化 4 group by 优化 5 limit 优化 6 count 优化 6.1概述 6.2 count用法 7 update优化 1插入数据 1.1 insert 优化方案主要有3种 批量插入数据 Insert into tb_test values(1,Tom),(2,Cat)…

HarmonyOS开发知识 :扩展修饰器,实现节流、防抖、权限申请

引言 防重复点击&#xff0c;利用装饰器面向切面&#xff08;AOP&#xff09;的特性结合闭包&#xff0c;实现节流、防抖和封装权限申请。 节流 节流是忽略操作&#xff0c;在触发事件时&#xff0c;立即执行目标操作&#xff0c;如果在指定的时间区间内再次触发了事件&…

移动端 UI 风格,彰显不凡

移动端 UI 风格&#xff0c;彰显不凡

【车载AI音视频电脑】4/8路AHD 200万像素车载电脑SD卡录像机

产品主要特点&#xff1a; -支持4路实时高清AHD 1080P录像 -SD卡记录数据&#xff08;可支持2张大容量SD卡,最大支持单张256G&#xff09; -支持GPS全球定位, 可选模块 -支持WIFI高速自动下载功能, 可选模块 -内置3/4G模块&#xff0c;实时预览和远程管理&#xff0c; 可选…

汇凯金业:现货黄金投资平仓策略有哪些

现货黄金作为全球投资者广泛关注与参与的财富增值途径&#xff0c;其双向交易制度为市场参与者在不同行情下提供了盈利的可能。然而&#xff0c;如何在波动的市场中把握最佳的平仓时机&#xff0c;从而最大化收益&#xff0c;是所有投资者心中的疑问。正确的平仓策略可以说是现…

YYU系列电子引伸计

型号&#xff1a; YYU-50/10 YYU-50/25 YYU-25/10 YYU-100/10 YYU-100/25 轴向变形引伸计&#xff0c;适用于金属非金属材料的测试。用于测量弹性模量、规定非比例延伸强度、规定总延伸强度、各种延伸率、应变硬化指数等参数。 技术参数 1、应变片阻值&#xff1a;350欧…

vue+echarts ----中国地图 下拉选择省份地图中的省份区域高亮显示以及飞线图的效果

vueecharts ----中国地图 下拉选择省份地图中的省份区域高亮显示以及飞线图的效果 1、父组件核心代码&#xff1a;【/utils/area的详细数据】、【/utils/china详细数据】 <template><div class"center"><div class"digital"><el-se…