问题描述(功能要求): 某软件公司,共有4类人员:老板、技术人员、业务人员、财务人员、文秘、业务经理、技术经理。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息,并且老板可以对各种人员进行增加、查寻、修改、删除。 ### 知识点分析 #### 一、C++面向对象编程基础 - **类与对象**:本系统中,定义了多个类来表示不同类型的员工,例如`Person`作为所有员工的基础类,`Manager`、`Secretary`、`SalesManager`、`Technician`和`Sales`等作为具体员工类。 - **继承**:通过继承`Person`类来创建不同的员工子类,实现了代码的复用和结构的清晰。 - **多态**:通过虚函数`CalcSalary()`和`Output()`实现了多态性,使得不同类型的员工可以根据自己的特点计算薪水并显示相关信息。 #### 二、具体类的设计与实现 - **Person类**:此为所有员工类的基础类,包含了基本属性如编号、姓名、职责等,并声明了纯虚函数`CalcSalary()`用于计算薪水和`Output()`用于输出信息。 - **成员变量**: - `int No`:员工编号。 - `char Name[20]`:员工姓名。 - `int Duty`:员工职责。 - `double Earning`:员工薪水。 - `Person *next`:链表中的下一个节点指针。 - **构造函数**:用于初始化员工的基本信息。 - **纯虚函数**:`CalcSalary()`和`Output()`用于计算薪水和输出信息。 - **Manager类**:管理者类,继承自`Person`。 - **成员函数**: - `void CalcSalary()`:计算管理者的薪水,固定值。 - `void Output()`:输出管理者的信息及薪水。 - **Secretary类**:秘书类,同样继承自`Person`。 - **成员函数**: - `void CalcSalary()`:计算秘书的薪水,固定值。 - `void Output()`:输出秘书的信息及薪水。 - **SalesManager类**:销售经理类,继承自`Person`。 - **成员变量**: - `double Amount`:销售业绩。 - **成员函数**: - `void SetAmount(double s)`:设置销售业绩。 - `void CalcSalary()`:根据销售业绩计算薪水。 - `void Output()`:输出销售经理的信息及薪水。 - **Technician类**:技术人员类,继承自`Person`。 - **成员变量**: - `double t`:工作小时数。 - **成员函数**: - `double GetT()`:获取工作小时数。 - `void SetT(double T)`:设置工作小时数。 - `void CalcSalary()`:根据工作小时数计算薪水。 - `void Output()`:输出技术人员的信息及薪水。 - **Sales类**:销售人员类,继承自`Person`。 - **成员变量**: - `double Amount`:销售金额。 - **成员函数**: - `double GetAmount()`:获取销售金额。 - `void SetAmount(double Amount)`:设置销售金额。 - `void CalcSalary()`:根据销售金额计算薪水。 - `void Output()`:输出销售人员的信息及薪水。 #### 三、系统功能实现 - **增加员工**:可以通过调用特定的构造函数来创建新的员工对象并加入到系统中。 - **查询员工**:利用员工编号或其他属性进行查询。 - **修改员工信息**:更新员工的某些属性或信息。 - **删除员工**:从系统中移除某个员工。 #### 四、其他关键概念 - **内存管理**:本程序涉及动态分配内存,需注意释放内存避免内存泄漏。 - **异常处理**:在输入员工信息时,应考虑异常情况的处理,如非法输入。 - **数据持久化**:虽然示例代码没有涉及到文件操作,但在实际应用中通常会将数据保存到文件以便长期存储和读取。 #### 五、扩展思考 - **多线程处理**:对于大型的人事管理系统来说,考虑到并发操作的需求,可以引入多线程处理机制来提高系统的响应速度。 - **数据库支持**:随着系统规模的扩大,使用关系型数据库或者文档数据库存储员工信息会更加高效和安全。 - **用户界面设计**:开发一个友好的用户界面,可以让非技术人员更方便地操作人事管理系统。 该“公司人事管理系统”不仅涉及到了C++语言的基础知识,还体现了面向对象编程的重要概念和技术实践,同时提供了丰富的功能和扩展的可能性。
#include <iostream.h>
#include <fstream.h>
#include <ctype.h>
#include <string.h>
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include <iomanip.h>
//全局数据
double ManagerSalary; //经理固定月薪
double SecretarySalary; //文秘固定月薪
double SalesManagerSalary; //销售经理固定月薪
double SalesManagerPercent; //销售经理提成%
double SalesPercent; //销售人员提成%
double WagePerHour; //技术人员小时工资
int ID; //员工标识要保证唯一
class Person //员工类
{
protected:
int No; //编号
char Name[20]; //姓名
int Duty; //岗位
double Earning; //收入
Person *next;
Person(char ID,char *Name,int Duty)
{
this->Duty=Duty;
strcpy(this->Name,Name);
this->No=ID;
}
virtual void CalcSalary()=0;
virtual void Output()=0;
virtual void SetAmount(double){}
friend class Company;
};
class Manager:public Person //经理类
{
public:
Manager(char ID,char *Name,int Duty):Person(ID,Name,Duty){}
void CalcSalary(){Earning=ManagerSalary;}
void Output()
{
CalcSalary();
cout<<No<<"\t"<<Name<<"\t经理\t"<<Earning<<endl;
}
};
class Secretary:public Person //文秘类
{
public:
Secretary(char ID,char *Name,int Duty):Person(ID,Name,Duty){}
void CalcSalary()
剩余25页未读,继续阅读
- shanshuipingguo2013-10-14很有用~~~对我帮助很大~!
- lan2lan1234567892013-01-12很有用,作为参考帮了我很大忙。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Kotlin语言的Android开发工具类集合源码
- 零延迟 DirectX 11 扩展实用程序.zip
- 基于Java的语音识别系统设计源码
- 基于Java和HTML的yang_home766个人主页设计源码
- 基于Java与前端技术的全国实时疫情信息网站设计源码
- 基于鸿蒙系统的HarmonyHttpClient设计源码,纯Java实现类似OkHttp的HttpNet框架与优雅的Retrofit注解解析
- 基于HTML和JavaScript的廖振宇图书馆前端设计源码
- 基于Java的Android开发工具集合源码
- 通过 DirectX 12 Hook (kiero) 实现通用 ImGui.zip
- 基于Java开发的YY网盘个人网盘设计源码