C++ 大作业/课程设计 小型公司工资管理软件

news2025/2/21 22:21:57

小型公司工资管理软件

  • 一、实验目的
  • 二、实验要求
  • 三、项目分工
  • 四、软件设计
    • 0.效果图:
    • 1.类的继承关系
    • 2.类的设计
    • 3.程序运行流程
    • 4.异常处理
      • 1. 用户输入异常
      • 2.文件操作异常
  • 五、程序代码

一、实验目的

熟悉面向对象程序设计思想,掌握类、类的派生、静态成员、多态性、异常处理、文件读写的实际综合应用。

二、实验要求

1. 编写一个小型公司的工资管理程序。该公司主要有4类人员:经理、兼职技术人员、销售员和销售经理。要求每位职工的工号能够自动编号(从10000起编号)。其中月薪计算方法为:经理固定月薪8000元,兼职技术人员100元/小时,销售员为当月销售额的4%,销售经理保底工资5000元另加其所管部门销售额的5‰。

(1) 能够输入多位兼职技术人员的信息。
(2) 能够输入多位销售人员的信息,并能在自动计算销售总额的基础上,自动计算销售经理的月薪。
(3) 基类Employee中计算月薪的成员函数,要求为纯虚函数,以便约束四个子类重写计算月薪函数。
(4) 实现计算职工当月工资并写入文件的功能。
(5) 实现从文件中读取职工当月工资并显示的功能。
(6) 软件运行界面友好。

2. 锻炼小组合作能力。每个班内,学生自由结成开发小组,以小组形式完成软件开发。每个小组要求学生3-4名(最好3名学生),必须分工明确、体现合作意识。

三、项目分工

四、软件设计

0.效果图:

包括但不限于类的设计,函数的设计,异常处理,文件读写等
在这里插入图片描述

类和主要函数分开设计。
通过对实验要求的分析研究,我们可以得到各类职工之间的上下级关系,以及他们各自信息之间的相似性和差异性。例如各职工姓名,工号,职位的相似性,和职位不同导致计算工资的方式也不同。
通过这些关系可以抽象出不同的类,存储各职工的信息,即封装他们的属性和方法。

1.类的继承关系

首先定义Employee职工基类,用基类派生出不同职位所代表的类:经理(Manger),销售(Salesman),销售经理(SalesManager),兼职技术人员(Technician)。继承关系如下

类的继承关系

2.类的设计

各类具体的属性和方法就不详细描述了
在这里插入图片描述

3.程序运行流程

在这里插入图片描述

4.异常处理

1. 用户输入异常

整个程序在用户输入和打开文件时可能会出现错误,例如在输入选择时不小心输入了字母或者符号或者输入给定选项之外的数字;建立文件或打开文件失败等错误。 为了不让程序崩溃,我们需要处理这些异常,即提高程序的容错率。

在用户输入选项时添加以下代码:

 cout << "请输入您的选择(1-3): ";
    int choose; cin >> choose;
    while (1) {
        //判断是否输入数字
        if (!cin)
        {
            cout << "非法输入,请输入数字:";
            cin.clear(); cin.ignore(1024,'\n');
            cin >> choose; continue;
        }
        ...//继续执行

当用户输入为数字时通过switch…case…default语句选择要执行的内容

2.文件操作异常

在写入文件时用if语句测试文件是否建立成功:

ofstream out("Employee.txt"); //建立Employee.txt文件,写入职工工资信息
if (!out)                     //测试建立文件是否成功
    {
        cout << "建立文件失败!" << endl;
        exit(0);
    }

在读取文件时用try…catch…throw语句测试打开文件是否成功:

ifstream in("Employee.txt"); //打开Employee.txt,读取职工工资信息
try { if (!in) throw 1; }    //测试打开文件是否成功
catch (int) {
    cout << "打开文件失败!" << endl;
    exit(0);
    }

五、程序代码

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

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

相关文章

JVM之运行时数据区 方法区

JVM方法区概述设置方法区的大小参数如何解决这些OOM内部结构补充non-final的类变量全局变量&#xff1a;static final常量池运行时常量池方法区的演进StringTable为什么要调整&#xff1f;方法区垃圾回收总览概述 《java虚拟机规范》中明确说明&#xff1a;“尽管所有的方法区…

Tableau可视化项目

文章目录Tableau可视化项目一、数据来源二、项目介绍1.项目目的2.架构三、数据可视化1.人口1.1 总人口、城镇人口、乡村人口1.2 人口出生率、死亡率、自然增长率1.3 人口年龄结构1.4 男女比例2.居民生活水平2.1 医疗情况2.2 恩格尔系数2.3 人均消费支出3.经济3.1 能源弹性系数3…

matlab中图像分割技术之一边缘检测

1.边缘检测 &#xff08;1&#xff09;Roberts边缘算子 (2)Sobel算子 (3)Prewitt算子 (4)拉普拉斯&#xff08;Laplacian&#xff09;算子 (5)LOG&#xff08;Laplacian-Gauss&#xff09;算子 &#xff08;6)坎尼&#xff08;Canny&#xff09;算子 &#xff08;7&#xff09;…

数仓搭建-DWD层

DWD层&#xff08;用户行为日志&#xff09; 6.1.1 日志解析思路 1&#xff09;日志结构回顾 &#xff08;1&#xff09;页面埋点日志 &#xff08;2&#xff09;启动日志 2&#xff09;日志解析思路 6.1.2 get_json_object函数使用 1&#xff09;数据 [{"name&qu…

力扣(LeetCode)128. 最长连续序列(C++)

哈希集合 建立哈希集合&#xff0c;存入所有数。一次遍历数组&#xff0c;对每个数检查是否有前一个数&#xff0c;如果某个数没有前一个数&#xff0c;说明这个数是一个序列的起点&#xff0c;从这个数开始遍历得到序列长度&#xff0c;维护最大序列长度&#xff0c;即是本题…

【SpringBoot项目中Knife4j在线API文档】

目录 1. Knife4j在线API文档基本使用 2. 配置API文档信息 1. Knife4j在线API文档基本使用 Knife4j是一款基于Swagger 2的在线API文档框架。 使用Knife4j的基础步骤&#xff1a; 添加依赖在application.properties / application.yml中添加配置在项目中添加配置类关于依赖项…

甲烷排放通量的计算

甲烷或N2O的排放通量计算公式如下&#xff1a; 式 (1) 中, F为CH4 (以C计) 或N2O (以N计) 排放通量, mgm-2h-1或μgm-2h-1;ρ为标准状况下CH4或N2O的密度, 分别为0.54和1.25 gL-1;V为采样箱体积, m3;A为采样底座内土壤表面积, m2;ΔCΔtΔCΔt表示CH4或N2O的排放速率, μLL-1h-…

浅谈正则表达式——C++正则替换引起的性能下降

目录问题引入正则替换测试常规方法测试模拟外部多次调用正则性能差的原因写在最后问题引入 最近在一次解析大文件(10万行)时&#xff0c;处理空格用到了正则替换&#xff0c;却没想到带来了性能上的问题&#xff0c;特别在此记录给需要的人避坑。假如要用C处理一个字符串首尾的…

4-four: 我收到的赞

我收到的赞 重构点赞功能&#xff08;用上节的功能较为麻烦&#xff0c;需要将用户发布的帖子和评论所获得的赞加起来&#xff09; 以用户为key&#xff0c;记录点赞数量increment(key), decrement(key)。 开发个人主页 以用户为key&#xff0c;查询点赞数量 1.在Redis.Ut…

RabbitMQ------其他知识点(幂等性、优先级队列、惰性队列)(九)

RabbitMQ------其他知识点&#xff08;&#xff09;&#xff08;九&#xff09; 幂等性 用户对于统一操作发起的一次请求或者多次请求的结果是一致的&#xff0c;不会因为多次点击而产生副作用。同一次还款&#xff0c;通过多次点击不会生成多条还款记录&#xff0c;一个人的…

crm客户管理系统为企业带来的价值

简道云CRM场景套件对中小企业来说&#xff0c;crm客户管理系统最核心的作用&#xff0c;一是客户信息(联系信息和洽谈过程&#xff09;的存留&#xff0c;不会因为业务人员的离职造成流失&#xff0c;这点对老板很重要。二是可帮助业务人员&#xff08;客户获取、主管指导等&am…

Win32API操作文件

在Windows编程中CreateFile函数是用得非常多的&#xff0c;不仅可以打开文件&#xff0c;还可以打开管道、邮槽、通信资源、磁盘设备&#xff08;早期Windows)&#xff0c;控制台、目录。该函数返回一个句柄&#xff0c;该句柄可用于根据文件或设备以及指定的标志和属性访问文件…

SpringSecurity(二十)---OAuth2:实现资源服务器(上)资源服务器搭建以及直接调用授权服务器模式

一、 前言 本章将讨论如何使用Spring Security实现一个资源服务器&#xff0c;资源服务器是管理用户资源的组件。另外&#xff0c;学习本章有个前提&#xff0c;需要先把前面搭建授权服务器的相关文章先给阅读&#xff0c;否则可能后面出现的授权服务器相关代码不知道个所以然…

【Redis】缓存击穿的产生情况解决方案

1. 缓存击穿产生 也叫做 热点 Key 问题&#xff0c;高并发访问并且缓存重建业务较复杂的 key 突然失效了&#xff0c;无数的请求想要重建缓存&#xff0c;大量的访问会在瞬间给数据库带来巨大冲击。 2. 解决方案 2.1 方案一&#xff1a;互斥锁 查询缓存不存在时&#xff0c;…

【OpenFOAM】-olaFlow-算例1- baseWaveFlume

算例路径&#xff1a; olaFlow\tutorials\baseWaveFlume 算例描述&#xff1a; 一个基础的二维波浪水槽 算例快照&#xff1a; 图1 波浪模拟结果图2 算例网格文件结构&#xff1a; ├── 0.org │ ├── U │ ├── alpha.water │ ├── alpha.water.org │ └─…

关于Redis的远程连接 Connection: Disconnect on error 问题

bug描述&#xff1a; Connection: Disconnect on error: Connection error: Connection timed outConnection: 192.168.245.128 > connection failed 问题复现&#xff1a; redis版本&#xff1a; redis-6.2.6 Linux版本&#xff1a;CenterOS 7 在linux上已经完成了red…

第五章. 可视化数据分析分析图表—常用图表的绘制1—折线图,柱形图

第五章. 可视化数据分析分析图 5.3 常用图表的绘制1—折线图,柱形图 本节主要介绍常用图表的绘制&#xff0c;主要包括折线图&#xff0c;柱形图。 1.折线图&#xff08;matplotlib.pyplot.plot&#xff09; 折线图可以显示随时间而变化的连续数据&#xff0c;适用于显示在相…

Hadoop原理与技术——hdfs命令行基本操作

一、实验目的 熟悉hdfs命令行基本操作 二、实验环境 Windows 10 VMware Workstation Pro虚拟机 Hadoop环境 Jdk1.8 三、实验内容 1&#xff1a;hdfs常见命令&#xff1a; &#xff08;1&#xff09;查看帮助&#xff1a;hdfs dfs -help &#xff08;2&#xff09;查看当前目录…

OpenCV图像处理——目标追踪

总目录 图像处理总目录←点击这里 二十四、目标追踪 24.1、多目标&#xff08;手动检测&#xff09;追踪 24.1.1、原理 目标检测&#xff1a;运行之后按下s&#xff0c;通过鼠标对某个目标进行检测&#xff0c;然后点击空格或者回车 目标追踪&#xff1a;opencv的八种追踪…

【JavaEE】JavaScript(基础语法)1

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录前言一、JavaScript初识&#xff08;简单了解就行&#xff0c;没时间跳过&#xff09;二、【JS的代码相关】【注释】【输入输出】三、语法1. 变量2. 【基本数据类型】THINK前言 一个人最大的痛苦就是对自己无能的愤…