本文主要详细介绍了用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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。