,,C++实现公司人事管理系统

,,C++实现公司人事管理系统

本文主要详细介绍了用C实现的公司人事管理系统。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。

本文分享C公司人事管理系统的具体代码,供大家参考。具体如下。

一问题描述

小公司包括四类人员:经理、技术人员、销售人员和销售经理。每类人员的工资计算方法如下:经理:固定月薪(8000);技师:月薪按技术等级(1~8)(1600等级* 300);销售人员:提成(4%*销售额);销售经理:底薪提成(1500 0.2%*总销售额);设计一个管理程序,输入、修改和显示各类人员的信息。

二 .基本要求

(1)用面向对象的编程思想编写开发过程中需要用到的类,如:设计Person类:编号、姓名、职务、工资,成员函数可以设置一个纯虚函数计算月薪;另外,为四类人员设计了四类继承人;添加相应的派生类数据成员和函数。经理和销售经理可以在没有新数据成员的情况下计算他们的月薪。技术人员添加技术级数据成员,销售人员添加数据成员:销售。还需要设计一个Manage类来完成各种操作。Person vector,其数据类型是基类指针。

(2)需要使用菜单功能显示添加人员(输入)、修改信息、浏览信息、按姓名搜索、月薪排序。

(3)为了设计简洁,假设只能有一个经理和一个销售经理;使用文本编辑器编辑包含各类人信息的文本文件(共20人以上);并且可以在程序中修改和保存。

基本流程图

#includeiostream

# includevector

#includestring

#includecstdlib

#includewindows.h

#includeiomanip

# include流

#包含算法

#定义文件名' student.txt '

使用命名空间std

阶级人士

{

公共:

Person(string,string,int=0);//构造函数

double虚拟pay _ salary()=0;//使用虚函数初始化薪资

void虚拟显示();//显示信息

bool运算符(const Person *)const;//重载薪资比较用于排序。

静态整数;//定义静态变量,自动分配员工号。

int数;//没有。

双薪;//工资

字符串名称;//名称

弦乐系;//部门

int c;//技术层面

};

l person:operator(const person * obj)const//函数重载,用于比较薪资。

{

返回this-Salary obj-Salary;

}

person: person (stringname1,stringwork1,int C1)//构造函数的实现

{

c=c1

Number=num

Name=name1

部门=工作1;

}

int Person:num=1;//数字从1开始

void Person:show() {

cout '-' endl;

cout rights et w(3)numbers et w(10)names et w(11)departments et w(8)Salary;//setw()控制输出宽度。

}

类:public person//manager类,继承person类。

{

公共:

Manager(string,string,int);//构造函数

双薪_薪水();//计算工资函数

void show();//显示经理的信息

};

Manager: manager (string name1,string post1,intc1): person (name1,post1,C1)//构造函数的实现

{

pay _ salary();

}

manager:pay _ salary()//计算经理的工资

{

工资=8000;

返还工资;

}

Void Manager:show() //显示经理的信息

{

cout '-' endl;

cout rights et w(3)numbers et w(10)names et w(9)departments et w(10)Salary;

}

class sales manager:public person//sales manager类,继承了person类。

{

公共:

SaleManager(string,string,int);//构造函数

双薪_薪水();//计算销售经理的工资

void show();//显示销售经理的信息

};

manager:sales manager(string name 1,string post1,intc1): person (name1,post1,C1)//构造函数的实现

{

pay _ salary();

}

DoubleSalesManager:pay _ salary()//计算经理的工资,底薪1500元。

{

工资=1500;

返还工资;

}

Void销售经理:Show()//显示销售经理的信息。

{

cout '-' endl;

cout rights et w(3)numbers et w(10)name et w(11)departments et w(8)Salary;

}

类业务员:公众人物//销售人员类,继承人类

{

公共:

推销员(string,string,int);//构造函数

内部销售量;//销售额

双薪_薪水();//计算销售人员的工资

void show();//显示销售人员的信息

};

Salesman:Salesman(string name1,string post1,int sv) :Person(name1,post1,sv)//构造函数的实现

{

销量=sv

pay _ salary();

}

双业务员* pay _ salary()//计算销售人员工资,4%销售额

{

工资=0.04 *销量;

返还工资;

}

void Salesman:show() //显示销售人员的信息

{

cout '-' endl;

cout rights et w(3)numbers et w(10)name et w(11)departments et w(8)Salary;

}

类技术人员:公众人物//技术人员类,继承人类

{

公共:

技术员(string,string,int);//技术等级为继承来的参数c

双薪_薪水();//计算技术人员的工资

void show();//显示技术人员的所有信息

};

技术员:技术员(字符串名称1,字符串post1,int rank1):人员(姓名1,职位1,排名1)

{

pay _ salary();

}

双料技师* pay _ salary()//计算技术人员的工资,技术等级300 1600

{

工资=1600 300 * c;

返还工资;

}

void Technician:show()//显示所有技术人员的信息

{

cout '-' endl;

cout rights et w(3)numbers et w(10)name et w(11)departments et w(8)Salary;

}

班级管理//管理类

{

公共:

void Menu(){ sale volume=0;}//菜单函数

内部销售量;//总销售额

vectorPerson * Ma//向量数组,存放人类的对象指针

void add(Person *);//添加人员信息

无效更改(字符串);//删除人员信息

void addtofile();//写入文件

void show();//显示所有信息

void show 1();//按月薪降序

人员*查找(字符串);//查找人员信息

};

person * Manage:find(字符串名称1){//查找

for(向量人*:)迭代器ITER=马。begin();iter!=马。end();iter ) {

if ((*iter)-Name==name1) {

返回* iter

}

}

返回空

}

void Manage:alter(字符串名称1){//删除

for(向量人*:)迭代器ITER=马。begin();iter!=马。end();iter ) {

if ((*iter)-Name==name1) {

马。擦除(ITER);

返回;

}

}

cout '查无此人恩德尔

}

void Manage:add(人*人)//添加

{

如果(人民-部门=='销售人员') {

销售量=(业务员*)人)-销量;

}

Ma.push_back(人);

}

void Manage:addtofile()//写入文件

{

ofstream outfile(文件名);//打开文件写入

for(向量人*:)迭代器ITER=马。begin();iter!=马。end();iter ) {

outfile(* ITER)-部门" "(* ITER)-名称" ";

if((* ITER)-c==0)outfile endl;

else outfile(* ITER)-c endl;

}

文件输出。close();//关闭

}

bool cmp(Person* x,Person* y) { //比较薪水

返回x-工资你-工资;

}

void manager:show(){

for(向量人*:)迭代器ITER=马。begin();iter!=马。end();iter ) {

if ((*iter)-Department=='销售经理') {

(* ITER)工资=销售额* 0.002 1500;

打破;

}

}

sort(Ma.begin()、Ma.end()、CMP);//薪水大小排序

for(向量人*:)迭代器ITER=马。begin();iter!=马。end();iter ) {

(* ITER)-show();

cout结束

}

}

void readfile(管理对象)//读取文件

{

文件* fp

fp=fopen(文件名,' r ');//打开文件,只读

if (fp==NULL) {

cout '未找到人员名单恩德尔

返回;

}

而(!feof(fp)) {

char post[20];

char Name[20];

int c;//销售额或技术等级

fscanf(fp,' %s%s%d ',post,Name,c);

如果(!strcmp(员额经理')) { //文件中为经理的人的信息先填入

人员* peo=新经理(姓名,职务,0);

obj。添加(peo);

}

else if(!strcmp(员额技术人员')) {

人员* peo=新技师(姓名,职务,c);

obj。添加(peo);

}

else if(!strcmp(员额销售人员')) {

人员* peo=新业务员(姓名,职务,c);

obj。添加(peo);

}

else if(!strcmp(员额销售经理')) {

Person* peo=新销售经理(姓名,职务,0);

添加对象(peo);

}

}

fclose(FP);//关闭文件

}

请参阅Manage:show1()//对向量(向量)数组进行读取

{

对于(矢量人*:迭代器ITER=马。begin();塔特!=马。end();ITER)}

(* ITER)显示();

端盖;端盖;

}

}

int main()

内部x;

管理t;

读取文件(T):

while(1)}

cout ' 33343————3543354——3354354354354354354354354354354354343543435434354343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343结束

|公司人事管理系统| '结束

————————————34————34——34——3434——3434——343434343434343434343434343434343434343434343434343-结束

' | 1 .添加员工| '结束

' | 2 .修改信息| '结束

' | 3 .按姓名查找| '结束

' | 4 .显示所有信息| '结束

' | 5。按月薪降序排序| '结束

' | 0。保存并退出程序| '结束

————————————34————34——34——343434——34343434343434343434343434343434343434343434343434343434343-结束;

嘿,嘿请选择-什么?

CIN十世;

交换机(十)

案例1:>

while(1)}

内部n;

字符串名称;

嘿,嘿请输入姓名* ":

cin名称;

嘿,嘿请输入人员岗位(1)。经理2.技术人员3.销售人员4.销售经理):';

CIN n;

if(n==1)}

人员* peo=新经理(姓名,'经理S7-1200可编程控制器:

t。添加(peo);

嘿,嘿添加成功'终点终点终点终点;

打断;打断;

}

else if(n==2)}

while(1)}

int rank=0:

嘿,嘿请输入技术等级(1 ~ 8):';

排名第五;

如果(排名8 ||排名1)>

嘿,嘿输入错误,请在1~8个之间输入* ":

}

其他

人员* peo=新技术人员(姓名,'技术人员排名(排名):

t。添加(peo);

打断;打断;

}

}

嘿,嘿添加成功'终点终点终点终点;

打断;打断;

}

else if(n==3)}

内部销售=0:

嘿,嘿请输入销售额*结束;

肮脏的cin

Person* peo=新销售员(姓名,'销售人员肮脏的;

t。添加(peo);

嘿,嘿添加成功'终点终点终点终点;

打断;打断;

}

else if(n==4)}

Person* peo=新销售经理(姓名,'销售经理S7-1200可编程控制器:

t。添加(peo);

嘿,嘿添加成功'终点终点终点终点;

打断;打断;

}

其他

嘿,嘿输入错误,请重新输入*结束;

}

}

系统("暂停");}

打断;打断;

案例2:>

字符串名称;

int n=0;

嘿,嘿请输入姓名* ":

cin名称;

Person* peo=T.find(名称);

if(peo==null)}

嘿,嘿查无此人'终点终点终点终点;

打断;打断;

}

peo show();

如果(peo部门==)经理')]

嘿,嘿经理无法修改'结束;

}

else if (peo部门==)技术人员')]

int rank=0:

while(1)}

端壁请输入技术等级(1~8):'结束;

排名第五;

如果(排名8 ||排名1)>

嘿,嘿等级输入错误,请重新输入'结束;

}

否则中断(其他中断):

}

t。年龄(姓名);

peo=新技术人员(名称,'技术人员排名(排名):

t。添加(peo);

嘿,嘿修改成功我的天结束;结束;

}

else if (peo部门==)销售人员')]

内部销售=0:

端壁请输入销售额*结束;

肮脏的cin

t。年龄(姓名);

peo=新销售员(名称,'销售人员肮脏的;

t。添加(peo);

嘿,嘿修改成功我的天结束;结束;

}

else if (peo部门==)销售经理')]

嘿,嘿销售经理无法修改'结束;

}

其他

嘿,嘿输入错误'结束;

}

}系统('暂停');

打断;打断;

案例3:>

字符串名称;

int n=0;

嘿,嘿请输入所查找人的姓名* ":

cin名称;

Person* peo=T.find(名称);

if(peo==null)}

嘿,嘿查无此人'结束;

系统(“cls”);

打断;打断;

}

-结束;

leftsetwt(8)层序号setw(9)'姓名setw(10)'岗位setw(10)'工资'结束;

peo show();

-结束;

端盖;端盖;

系统("暂停");

}

打断;打断;

案例4:>

-结束;

leftsetwt(8)层序号setw(9)'姓名setw(10)'岗位setw(10)'工资'结束;

t . show 1();

cout '-' endl;

系统(“暂停”);

系统(“cls”);

}

打破;

案例5: {

cout '-' endl;

Courleftsetw (8)'序号' setw(9)'姓氏' setw(10)'职务' setw(10)'就业' endl

t . show();

}

系统(“暂停”);

打破;

案例0:

t . addtofile();

退出(0);

默认值:

Cout '输入错误,请重新输入' endl

打破;

}

}

返回0;

}

这就是本文的全部内容。希望对大家的学习有帮助,支持我们。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: