C++职工管理系统(课程设计报告)

news2024/11/24 20:35:47

C++职工管理系统

  • 项目介绍
    • 设计任务
    • 设计要求
  • 程序设计
    • 代码讲解
    • 实例输出
  • 源码领取

项目介绍

项目介绍
该职工管理系统主要是用来管理整个公司的信息,基于C++继承和多态来实现,同时也包含文件流操作。

设计任务

设计任务
(1)设计个职工管理系统,管理整个公司的信息,公司的职工分为三类:老板,经理,员工,他们的公有属性都包含职工编号,职工姓名,以及职责。
(2)职责:
①老板职责:管理公司所有的事物.
②经理职责:完成老板交给任务,并下达任务给员工。
③员工职责:完成经理交给的任务。

设计要求

设计要求
(1)职工管理系统中需要实现以下几种功能:
①退出功能:退出当前程序。
②增加职工信息:实现批量增加(自己可以确定一次性增加几个职工的信息)职工信息,并将信息录入到文件中,职工信息分为:职工编号,职工职责,职工姓名。
③显示职工信息:显示公司内所有职工的信息。
④删除职工信息:按照职工编号删除信息。
⑤修改职工信息:按照职工编号修改职工信息
⑥排序功能:按照职工编号对职工进行排序。
⑦清空信息功能:清空文件中记录所有职工的信息。
此次项目采用分文件,文件流,C++继承和多态完成。(采用公有继承),并且第二次运行程序时,第一的运行程序的数据仍能保留(信息数据能够保留。

程序设计

代码讲解

2.1程序的总体结构
(1)头文件:
①common.h:包含该项目用到的所有头文件。

(2)类:
②worker(基类,只需要写出声明(worker.h头文件),让其他类继承其中的属性和行为就行,不需要写出实现):包含公司职工的公有属性和行为(成员函数为纯虚函数)。boss(老板类),manager(经理类),employer(员工类),采用公有继承的方式继承worker类。 然后,就可以用一个worker**类型的,管理三个继承worker的类的数据(用new创建,worker*类型)。
③workerManger类:用来实现该程序的所有功能。
④源.cpp,进行该项目的测试。

(3)分文件截图
在这里插入图片描述

(4)头文件截图
①common.h
在这里插入图片描述
②worker.h(包含职工编号,姓名,部门编号,以及获取岗位和显示信息的函数)
在这里插入图片描述
③boss.h 继承worker类
在这里插入图片描述

④manager.h 继承worker
在这里插入图片描述

⑤employer.h 继承worker
在这里插入图片描述

⑥workerManger.h 包含实现该系统功能的所有函数,以及员工总人数(EmpNum),判断文件是否为空(FileEmpty)等数据成员。

(1)boss.cpp,manager.cpp,employer.cpp的实现
①这三个类的实现思路都是一样的,他们的构造函数对继承worker.h的属性,进行初始化。
②ShowInfo()函数,就对他们的数据成员进行打印,getDeptName()函数,就返回对应的职工(老板,经理,员工)。

                                   boss类

在这里插入图片描述
employer类

在这里插入图片描述
manager类
在这里插入图片描述

(2)managerWorker.cpp的实现
①Show_Menu()函数的实现
直接用cout打印即可。

在这里插入图片描述
②ExitSystem()函数的实现
直接调用exit()函数,就可以实现程序的退出。
在这里插入图片描述

③addInfo()函数的实现(添加信息)
添加信息,先进行添加信息数量的输入, 然后进行信息添加,分两步,第一步,先对原来的信息进行拷贝。第二步就添加信息(用cin添加),职工编号,
姓名,部门编号,这几个继承的属性,通过new创建出各自的对象,调用其构造函数即可。
这里的work**类型的便是用于存储,用new创建的work*类型的老板,经理,员工类的数据。
注意:还需要判断添加的信息是否重复,因为后面会多次用到,我单独写了个函数JudgeInformation(int ID),就将之前存储的数据挨个遍历,看是否能找到相同的ID,能找到自己就算是添加信息重复,
当然还有文件信息的保存与更新(saveFile()函数),将存储的信息,输入到文件中去(用文件流操作)
下面是具体代码的实现(以截图形式展示,部分代码分析见上):
函数JudgeInformation(int ID)的实现
当然这里如果添加重新重复了,就还可以重新输入职工编号。

在这里插入图片描述

                  **saveFile()函数的实现**

第一步:就先打开文件,第二步:然后将信息输入到文件中,第三步:关闭文件
文件名这里采用的宏定义(FILENAME)便于后面修改,宏定义和头文件都放在common.h这个头文件中。

在这里插入图片描述

   **addInfo()函数的实现(下面代码)**

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
④ShowInformation()函数,显示信息
就调用存储在work**类型 EmpArray数组中的老板类,员工类,或者是经理类的showInfo()函数既可。 当然要先判断,文件是否为空或者是否存在

在这里插入图片描述

⑤DeleteInformation()函数 删除信息
先看文件是否存在或者是否为空,通过职工编号删除信息,调用函数JudgeInformation(int ID),判断编号是否存在,如果存在吗,用数据覆盖的方式删除,删除后,人数减1。

在这里插入图片描述

⑥ ModifyInformation(),修改信息
也就是判断文件是否存在或者是否为空,通过职工编号修改,后面修改信息思路部分类似于添加信息。
在这里插入图片描述
在这里插入图片描述

⑦ searchInformayion()函数 查找信息

也就是判断文件是否存在或者是否为空,通过职工编号查找,找到就调用showInfo()函数
在这里插入图片描述

⑧sortInformation() 排序函数
就是通过职工编号,对职工的信息进行排序。主要通过选择排序实现排序效果(找到最小的)

在这里插入图片描述

⑨ clearInformation()函数,清空文件记录
用delete,删除信息就行,然后文件更新等一系列初始化操作。

在这里插入图片描述

⑩initArray()函数
将文件中的信息读取到程序中,初始化(关闭程序,下次运行程序中仍然有信息记录)

在这里插入图片描述

⑩① mangerWorker() 构造函数
就先判断关于文件的情况,对其中的数据成员那些进行初始化,再调用之前写的initArray()函数。

在这里插入图片描述

注意:在添加信息,删除信息,修改信息,排序等功能,只要是存储的信息发生了改变,都需要调用saveFile()函数,对文件中的信息进行一次更新和保存。
之所以能做到系统的程序有上次的运行程序的记录,是因为文件的信息及时更新与保存,然后下次运行的时候,在把文件的信息重新从重新读取到系统中就可以实现。(在managerWorker的构造函数中调用initArray函数(这个函数作用就是将文件的信息读取到系统中))。
便于观赏性,合理利用system(“cls”)清屏函数,和system(“pause”)函数暂停。

(3)测试代码 源.cpp

在这里插入图片描述

实例输出

(1)这里的职工数为1,是上次运行程序保留的数据,这里再次添加信息(可以对一次性要添加的数量进行选择,这里我选择一次性添加一个信息)
在这里插入图片描述

(2)显示信息(控制台显示信息和文件显示信息)

在这里插入图片描述
在这里插入图片描述

(3)删除信息
在这里插入图片描述

在这里插入图片描述

(4)修改信息
在这里插入图片描述

在这里插入图片描述

(5)查找信息
在这里插入图片描述

(6)排序 (因为录入信息人数较少,不方便排序,我再录入几个人的信息)

现在系统共有4人信息,进行职工编号排序

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

(7)清空文件信息(系统信息和文件信息都清空)
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(8)退出功能

在这里插入图片描述

源码领取

这是当时大一下写的课程设计,由于交的时候代码就是图片的形式,然后这里博客也发的图片的形式,具体源码我上传到gitee上,大家可以自己领取gitee职工管理系统源码领取链接

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

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

相关文章

你知道音频文件格式转换要用什么软件吗?今天就来分享给你

你是否曾经遇到过这样的情况?你正在享受着一首心爱的歌曲,却突然发现它的音频格式不兼容你的设备或播放器?或者你需要将录音文件从一种格式转换成另一种,以便在不同场景中使用?音频格式转换软件就像是一个通向音乐自由…

流量、日志分析

流量分析 知识点: 流量包分析简介 - CTF Wiki (ctf-wiki.org) Wireshark 基本语法,基本使用方法,及包过虑规则_wireshark语法_竹痕的博客-CSDN博客 MISC:流量包取证(pcap文件修复、协议分析、数据提取)…

网络编程——数据包的组装和拆解

数据包的组装和拆解 一、数据包在各个层之间的传输 二、各个层的封包格式 1、链路层封包格式 -------------------------------------------------------------------------------------------------------------------------------------- | 目标MAC地址(6字节&a…

Java实现电影信息查询系统

Java实现电影信息查询系统 需求分析代码实现小结Time 需求分析 首先每一部电影,都包含这部电影的相关信息,比如:电影的编号(id)、电影的名称(name)、电影的价格(price)、…

数据结构: 线性表(带头双向循环链表实现)

之前一章学习了单链表的相关操作, 但是单链表的限制却很多, 比如不能倒序扫描链表, 解决方法是在数据结构上附加一个域, 使它包含指向前一个单元的指针即可. 那么怎么定义数据结构呢? 首先我们先了解以下链表的分类 1. 链表的分类 链表的结构非常多样, 以下情况组合起来就有…

Plecs最新安装免费版下载链接/Plecs 电力仿真软件4.7.5版本下载/实测能用

Plecs最新安装免费版下载链接 Plecs 电力仿真软件4.7.5版本下载 实测能用:

信息安全:认证技术原理与应用.

信息安全:认证技术原理与应用. 认证机制是网络安全的基础性保护措施,是实施访问控制的前提,认证是一个实体向另外一个实体证明其所声称的身份的过程。在认证过程中,需要被证实的实体是声称者,负责检查确认声称者的实体…

校园跑腿小程序为什么这么受欢迎呢?

校园跑腿小程序是一种在校园内提供快递、代购、代拿快递、代办事项等服务的手机应用程序。它通常由学生或校园内的志愿者组成,通过该应用程序接受用户的委托,并且根据用户的需求完成任务。校园跑腿小程序通过与学校或社区合作,提供便利的服务…

关于SQL查询面试题,测试会这些基本够用了

Sutdent表的定义 Score表的定义 1、创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表…

大数据-玩转数据-Flink-Transform

一、Transform 转换算子可以把一个或多个DataStream转成一个新的DataStream.程序可以把多个复杂的转换组合成复杂的数据流拓扑. 二、基本转换算子 2.1、map(映射) 将数据流中的数据进行转换, 形成新的数据流,消费一个元素并产出一个元素…

研究人员发现特斯拉汽车能被越狱,可免费解锁付费功能

Bleeping Computer 网站披露,柏林工业大学(Technical University of Berlin)的研究人员开发出一种新技术,可以破解特斯拉近期推出所有车型上使用的基于 AMD 的信息娱乐系统,并使其运行包括付费项目在内的任何软件。 实…

22、springboot的Profile(通过yml配置文件配置 profile,快速切换项目的开发环境)

springboot的Profile ★ 何谓Profile 应用所在的运行环境发生切换时,配置文件常常就需要随之修改。Profile:——就是一组配置文件及组件的集合。可以整个应用在不同的profile之间切换(设置活动profile),整个应用都将使…

QGIS二次开发三:显示Shapefile

Shapefile 为 OGR 所支持的最重要的数据格式之一&#xff0c;自然可以被 QGIS 加载。那么该如何显示Shapefile呢&#xff1f; 一、先上代码 #include <qgsapplication.h> #include <qgsproviderregistry.h> #include <qgsmapcanvas.h> #include <qgsvec…

HDFS中snapshot快照机制

HDFS中snapshot快照机制 介绍作用功能实现相关命令和操作相关命令 介绍 snapshot是数据存储的某一时刻的状态记录&#xff0c;备份&#xff08;backup&#xff09;则是数据存储的某一个时刻的副本HDFS snapshot快照是整个文件系统或某个目录在某个时刻的镜像&#xff0c;该镜像…

黑马机器学习day1

1.sklearn数据集 sklearn.datasets datasets.load_*() 获取小规模的数据集 datasets.fetch_*(data_homeNone) 获取大规模数据集 函数的第一个参数是data_home,标识数据集下载目录&#xff0c;默认/scikit_learn_data/ 1.1sklearn小数据集 sklearn.da…

无涯教程-Perl - fcntl函数

描述 该函数是系统fcntl()函数的Perl版本。使用FILEHANDLE上的SCALAR执行FUNCTION指定的功能。 SCALAR包含函数要使用的值,或者是任何返回信息的位置。 语法 以下是此函数的简单语法- fcntl FILEHANDLE, FUNCTION, SCALAR返回值 该函数返回0,但如果fcntl()的返回值为0,则返…

Vue2:组件高级(下)

Vue2&#xff1a;组件高级&#xff08;下&#xff09; Date: May 25, 2023 Sum: 自定义指令、插槽、商品列表、动态组件 目标&#xff1a; 自定义指令 基础概念&#xff1a; 概念&#xff1a; 内置指令&#xff1a;vue 官方提供了 v-for、v-model、v-if 等常用的内置指令。…

整数规划——第七章 分支定界算法

整数规划——第七章 分支定界算法 目前大部分整数规划商业软件如CPLEX&#xff0c;Gurobi和BARON等都是基于分枝定界算法框架的。 7.1 最优性条件和界 考虑下列一般线性整数规划问题&#xff1a; (IP) min ⁡ c T x , s . t . A x ≤ b , x ∈ Z n (7.1) \text{(IP)}\quad…

部署-打包并提交代码到Git服务器

前期准备工作 vue.config.js const { defineConfig } require(vue/cli-service) module.exports defineConfig({// 项目出Bug,点击错误可以跳到对应的位置&#xff0c;实际生成环境是不需要的 默认为trueproductionSourceMap: false,lintOnSave: false,publicPath: process.…

720度全视角!VR直播遇上法院庭审,你体验过吗?

在元宇宙发展背景之下&#xff0c;VR直播技术同样驶入了发展的快车道&#xff0c;以沉浸式、交互式体验为特点的VR技术&#xff0c;将原本就受欢迎的直播变得更加立体、真实、可靠&#xff0c;观众只需要一部手机就可以实现全方位、无死角地观看直播现场&#xff0c;体验宛如身…