用c++编写公司人员管理系统(课程设计 vs2010)

用c++编写公司人员管理系统(课程设计 vs2010)

这学期马上结束了,刚把课设做完,记录下自己的做过的东西.

一、需求

某公司有四类人员:经理、技术人员、销售人员和销售经理;需要存储雇员的编号、姓名、性别、所在部门、级别,并进行工资的计算。四类人员的月薪计算方法如下:经理领取固定月薪;技术人员按小时领取月薪;销售人员按其当月销售额的提成领取工资;销售经理既领取固定月薪也领取销售提成。可以读取.txt文件,在控制台中显示出文件中的员工信息,在控制台中完成对公司人员的添加,删除,查找,修改功能,完成该功能后自动保存到.txt文件中。

二、流程图和类图

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

三、涉及知识

  • C++继承
  • C++的多态
  • vector智能指针
  • C++基本语法
  • string类型转换为double

四、源代码

话不多说直接上代码
Base类
#pragma once
#include<string>
#include<iostream>
#include<iomanip>
using namespace std; 
extern double strDou(string str);
class Base
{
public:
	string ID,name,sex,section,level;
public:
	virtual double getsalary();
	virtual void toString();
	virtual string getinformation();
	virtual void setID(string ID);
	virtual void setname(string name);
	virtual void setsex(string sex);
	virtual void setsection(string section);
	virtual void setlevel(string level);
	virtual void setmonthsalary(string monthsalary);
	virtual void setsale(string sale);
	virtual void setworktime(string worktime);
	Base(string ID,string name,string sex,string section,string level){
		this->ID=ID;
		this->name=name;
		this->sex=sex;
		this->section=section;
		this->level=level;
	}
	~Base(void){}
	#include "StdAfx.h"
#include "Base.h"
double strDou(string str) {	//string 转换 double
	char *ch = new char[0];
	double d;
	for (int i = 0; i != str.length(); i++)
		ch[i] = str[i];
	d = atof(ch);
	return d;
}
double Base::getsalary(){
	return 0;
}

void  Base::toString(){
	cout<<"这是基类toString!"<<endl;
}
string Base::getinformation(){
	return "这是基类的getinformation!";
}
void Base::setID(string ID){}
void Base::setname(string name){ }
void Base::setsex(string sex){}
void Base::setsection(string section){}
void Base::setlevel(string level){}
void Base::setmonthsalary(string monthsalary){	}
void Base::setsale(string sale){ }
void Base::setworktime(string worktime){}
};
Employee类
#pragma once
#include "base.h"
class Employee :
	public Base
{
protected:
	string monthsalary,sale,worktime;
public:
	Employee(string ID,string name,string sex,string section,string level,string monthsalary,string sale,string worktime):Base(ID,name,sex,section,level){
		this->monthsalary=monthsalary;
		this->sale=sale;
		this->worktime=worktime;
	}
	~Employee(void);
	virtual double getsalary();
	virtual void toString();
	virtual string getinformation();
	virtual void setID(string ID);
	virtual void setname(string name);
	virtual void setsex(string sex);
	virtual void setsection(string section);
	virtual void setlevel(string level);
	virtual void setmonthsalary(string monthsalary);
	virtual void setsale(string sale);
	virtual void setworktime(string worktime)#include "StdAfx.h"
#include "Employee.h"
Employee::~Employee(void)
{
}
double Employee::getsalary(){
	//得到销售人员的工资
	if(strDou(monthsalary)==0 && strDou(worktime)==0){
		return (strDou(sale)*0.7)+3000;
	}
	//得到经理的工资
	if(strDou(sale)==0 && strDou(worktime))
	{
	return strDou(monthsalary);
	}
	//得到销售经理的工资
	if(strDou(worktime)==0){
	return strDou(monthsalary)+(strDou(sale)*0.7);
	}
	//得到技术人员的工资
	if(strDou(worktime)!=0){
		return strDou(worktime)*200;
	}
}

void  Employee::toString(){
	cout<cout<<ID<<setw(13)<<name<<setw(8)<<sex<<setw(12)<<section<<setw(13)<<level<<setw(11)<<monthsalary<<setw(11)<<sale<<setw(16)<<worktime<<setw(15)<<getsalary()<<endl;
}
string Employee::getinformation(){
	return ID+"	"+name+"		"+sex+"	"+section+"	"+level+"	"+monthsalary+"	"+sale+"		"+worktime;;
}
void Employee::setID(string ID){ this->ID=ID;}
void Employee::setname(string name){ this->name=name;}
void Employee::setsex(string sex){this->sex=sex;}
void Employee::setsection(string section){this->section=section;}
void Employee::setlevel(string level){this->level=level;}
void Employee::setmonthsalary(string monthsalary){	this->monthsalary=monthsalary;}
void Employee::setsale(string sale){ this->sale=sale;}
void Employee::setworktime(string worktime){this->worktime=worktime;}
};
Manager类
#pragma once
#include "base.h"
class Manager :
	public Base
{
protected:
	string monthsalary;
public:
	virtual double getsalary();
	virtual void toString();
	virtual string getinformation();
	virtual void setID(string ID);
	virtual void setname(string name);
	virtual void setsex(string sex);
	virtual void setsection(string section);
	virtual void setlevel(string level);
	virtual void setmonthsalary(string monthsalary);
	virtual void setsale(string sale);
	virtual void setworktime(string worktime);
	Manager(string ID,string name,string sex,string section,string level,string monthsalary):Base(ID,name,sex,section,level){
		this->monthsalary=monthsalary;
	}
	~Manager(void);
};
#include "StdAfx.h"
#include "Manager.h"
double Manager::getsalary(){
	return strDou(monthsalary);
}
Manager::~Manager(void)
{
}
void Manager::toString(){
	cout<<ID<<setw(13)<<name<<setw(8)<<sex<<setw(12)<<section<<setw(13)<<level<<setw(11)<<monthsalary<<setw(43)<<getsalary()<<endl;
}
string Manager::getinformation(){
	return ID+"	"+name+"		"+sex+"	"+section+"	"+level+"	"+monthsalary+"	"+"null"+"	"+"null";
}
void Manager::setID(string ID){ this->ID=ID;}
void Manager::setname(string name){ this->name=name;}
void Manager::setsex(string sex){this->sex=sex;}
void Manager::setsection(string section){this->section=section;}
void Manager::setlevel(string level){this->level=level;}
void Manager::setmonthsalary(string monthsalary){	this->monthsalary=monthsalary;}
void Manager::setsale(string sale){cout<<"暂不支持更改该属性!"<<endl;}
void Manager::setworktime(string worktime){cout<<"暂不支持更改该属性!"<<endl;}
salesman类
#pragma once
#include "base.h"
class salesman :
	public Base
{
protected:
	string sale;
public:
	salesman(string ID,string name,string sex,string section,string level,string sale):Base(ID,name,sex,section,level){
		this->sale=sale;
	}
	virtual void toString();
	~salesman(void);
	virtual double getsalary();
	virtual string getinformation();
	virtual void setID(string ID);
	virtual void setname(string name);
	virtual void setsex(string sex);
	virtual void setsection(string section);
	virtual void setlevel(string level);
	virtual void setmonthsalary(string monthsalary);
	virtual void setsale(string sale);
	virtual void setworktime(string worktime);
};
#include "StdAfx.h"
#include "salesman.h"
double salesman::getsalary(){
	return (strDou(sale)*0.7)+3000;;
}

salesman::~salesman(void)
{
}
void salesman::toString(){
	 cout<<ID<<setw(13)<<name<<setw(8)<<sex<<setw(16)<<section<<setw(8)<<level<<setw(23)<<sale<<setw(31)<<getsalary()<<endl;
}
string salesman::getinformation(){
	return ID+"	"+name+"		"+sex+"	"+section+"	"+level+"	"+"null"+"	"+sale+"		"+"null";
}
void salesman::setID(string ID){ this->ID=ID;}
void salesman::setname(string name){ this->name=name;}
void salesman::setsex(string sex){this->sex=sex;}
void salesman::setsection(string section){this->section=section;}
void salesman::setlevel(string level){this->level=level;}
void salesman::setmonthsalary(string monthsalary){cout<<"暂不支持更改该属性!"<<endl;}
void salesman::setsale(string sale){ this->sale=sale;}
void salesman::setworktime(string worktime){cout<<"暂不支持更改该属性!"<<endl;}
SalesManager类
#pragma once
#include "manager.h"
class SalesManager :
	public Manager
{
protected:
	string sale;
public:
	SalesManager(string ID,string name,string sex,string section,string level,string monthsalar,string sale):Manager(ID,name,sex,section,level,monthsalar){
		this->sale=sale;
	}
	~SalesManager(void);
	virtual double getsalary();virtual void toString();
	virtual string getinformation();
	virtual void setID(string ID);
	virtual void setname(string name);
	virtual void setsex(string sex);
	virtual void setsection(string section);
	virtual void setlevel(string level);
	virtual void setmonthsalary(string monthsalary);
	virtual void setsale(string sale);
	virtual void setworktime(string worktime);
};
#include "StdAfx.h"
#include "SalesManager.h"
SalesManager::~SalesManager(void)
{
}
double SalesManager::getsalary(){
	return strDou(monthsalary)+(strDou(sale)*0.7);
}
void SalesManager::toString(){
	cout<<ID<<setw(13)<<name<<setw(8)<<sex<<setw(16)<<section<<setw(8)<<level<<setw(11)<<monthsalary<<setw(12)<<sale<<setw(31)<<getsalary()<<endl;
}
string SalesManager::getinformation(){
	return ID+"	"+name+"		"+sex+"	"+section+"	"+level+"	"+monthsalary+"	"+sale+"		"+"null";
}
void SalesManager::setID(string ID){ this->ID=ID;}
void SalesManager::setname(string name){ this->name=name;}
void SalesManager::setsex(string sex){this->sex=sex;}
void SalesManager::setsection(string section){this->section=section;}
void SalesManager::setlevel(string level){this->level=level;}
void SalesManager::setmonthsalary(string monthsalary){	this->monthsalary=monthsalary;}
void SalesManager::setsale(string sale){ this->sale=sale;}
void SalesManager::setworktime(string worktime){cout<<"暂不支持更改该属性!"<<endl;}
Technicist类
#pragma once
#include "base.h"
class Technicist :
	public Base
{
private:
	string worktime;
public:
	Technicist(string ID,string name,string sex,string section,string level,string worktime):Base(ID,name,sex,section,level){
		this->worktime=worktime;
	}
	~Technicist(void);
	virtual double getsalary();
	virtual void toString();
	virtual string getinformation();
	virtual void setID(string ID);
	virtual void setname(string name);
	virtual void setsex(string sex);
	virtual void setsection(string section);
	virtual void setlevel(string level);
	virtual void setmonthsalary(string monthsalary);
	virtual void setsale(string sale);
	virtual void setworktime(string worktime);
};
#include "StdAfx.h"
#include "Technicist.h"
double Technicist::getsalary(){
	return strDou(worktime)*200;
}
Technicist::~Technicist(void)
{
}
void Technicist::toString(){
	cout<<ID<<setw(13)<<name<<setw(8)<<sex<<setw(16)<<section<<setw(8)<<level<<setw(38)<<worktime<<setw(16)<<getsalary()<<endl;
}
string Technicist::getinformation(){
	return ID+"	"+name+"		"+sex+"	"+section+"	"+level+"	"+"null"+"	"+"null"+"		"+worktime;
}
void Technicist::setID(string ID){ this->ID=ID;}
void Technicist::setname(string name){ this->name=name;}
void Technicist::setsex(string sex){this->sex=sex;}
void Technicist::setsection(string section){this->section=section;}
void Technicist::setlevel(string level){this->level=level;}
void Technicist::setmonthsalary(string monthsalary){cout<<"暂不支持更改该属性!"<<endl;}
void Technicist::setsale(string sale){cout<<"暂不支持更改该属性!"<<endl;}
void Technicist::setworktime(string worktime){ this->worktime=worktime;}
Read类
#pragma once
#include<iostream>
#include<fstream>
#include<vector>
#include"Base.h"
using namespace std;
class Read
{
public:
	Read(void){}
	~Read(void){}
	void readFile();//读文件
	void writeFile();//写文件
	void addEmployee();//添加功能
	void display();//显示功能
	void findEmployee(string ID);//查询功能
	void modify(string ID);//修改功能
	void deleteEmployee(string ID);//删除功能
	void totalEmployee();//统计功能
	void menu();//菜单选择
};#include "StdAfx.h"
#include "Read.h"
#include"Base.h"
#include"Manager.h"
#include"salesman.h"
#include"SalesManager.h"
#include"Employee.h"
#include"Technicist.h"
#include<cassert>
vector <shared_ptr<Base>> vect_read;
void Read::readFile(){
	ifstream readfile("E:\\公司人员管理.txt",ios::in);
	string ID,name,sex,section,level,monthsalary,sale,worktime;
	if(!readfile){
		cout<<"FileNotFindException!"<<endl;
	}
	while(readfile>>ID>>name>>sex>>section>>level>>monthsalary>>sale>>worktime)
	{
		if(section=="经理"){
			shared_ptr<Base> manager= make_shared<Manager>(ID,name,sex,section,level,monthsalary);
			vect_read.push_back(manager);

		}//存放经理
		if(section=="销售人员"){
			shared_ptr<Base> salesmanw= make_shared<salesman>(ID,name,sex,section,level,sale);
			vect_read.push_back(salesmanw);
		}//存放销售   
		if(section=="技术人员"){
			shared_ptr<Base> tech= make_shared<Technicist>(ID,name,sex,section,level,worktime);
			vect_read.push_back(tech);
		}//存放技术
		if(section=="销售经理"){
			shared_ptr<Base> salesmanager= make_shared<SalesManager>(ID,name,sex,section,level,monthsalary,sale);
		 vect_read.push_back(salesmanager);
		}//存放销售经理
	}
	readfile.close();
}
void Read::writeFile(){
	ofstream outfile("E:\\公司人员管理.txt",ios::out);
	for(int i=0;i<vect_read.size();i++){
		outfile<<vect_read[i]->getinformation()<<endl;
	}
}
void Read::addEmployee(){
		cout<<"客官您现在已进入增加功能:请依次输入员工:编号|姓名|性别|部门职位|等级|月薪|销售提成|工作时长 !!没有的均输入null"<<endl;
		string ID,name,sex,section,level,monthsalary,sale,worktime;
		cin>>ID>>name>>sex>>section>>level>>monthsalary>>sale>>worktime;
		shared_ptr<Base> addemployee= make_shared<Employee>(ID,name,sex,section,level,monthsalary,sale,worktime);
		vect_read.push_back(addemployee);writeFile();
		cout<<"添加成功!该员工信息已自动保存"<<endl;
}
void Read::display(){
	//先清除当前vect_read的大小;再次读取文件
	vect_read.clear();
	readFile();
	cout<<"*************************公司人员信息*************************"<<endl;
	cout<<"编号"<<setw(10)<<"姓名"<<setw(10)<<"性别"<<setw(15)<<"部门职位"<<setw(10)<<"等级"<<setw(10)<<"月薪"<<setw(15)<<"销售提成"<<setw(15)<<"工作时长"<<setw(15)<<"本月工资"<<endl;
	for(int i=0;i<vect_read.size();i++){
		vect_read[i]->toString();
	}
}
void Read::findEmployee(string ID){
	int k=-1;
	for(int i=0;i<vect_read.size();i++){
		if(ID==vect_read[i]->ID){
			k=i;break;
		}
		else {continue;}
	}
		if(k!=-1){
			vect_read[k]->toString();
		}
		else{
			cout<<"要查找的员工不存在!"<<endl;
		}
	cout<<"查找功能结束!"<<endl;
}
void Read::modify(string ID){
	cout<<"*******************修改员工信息*******************"<<endl;
	int k=-1;string IDm,name,sex,section,level,monthsalary,sale,worktime;
	for(int i=0;i<vect_read.size();i++){
		if(ID==vect_read[i]->ID){
			k=i;break;
		}
		else {continue;}
	}
		if(k!=-1){
			//打印出当前员工信息
			findEmployee(vect_read[k]->ID);
			//修改编号
			cout<<"输入修改后的编号:如果不修改则输入null"<<endl;cin>>IDm;
			if(IDm=="null"){
			}
			else{
			 vect_read[k]->setID(ID);
			cout<<"修改成功!"<<endl;
			}
			//修改姓名
			cout<<"输入修改后的姓名:如果不修改则输入null"<<endl;cin>>name;
			if(name=="null"){
			}
			else{
			 vect_read[k]->setname(name);
			 cout<<"修改成功!"<<endl;
			}
			//修改性别
			cout<<"输入修改后的性别:如果不修改则输入null"<<endl;cin>>sex;
			if(sex=="null"){
			}
			else{
			 vect_read[k]->setsex(sex);
			 cout<<"修改成功!"<<endl;
			}
			//修改部门职位
			cout<<"输入修改后的部门职位:如果不修改则输入null"<<endl;cin>>section;
			if(section=="null"){
			}
			else{
			 vect_read[k]->setsection(section);
			 cout<<"修改成功!"<<endl;
			}
			//修改等级
			cout<<"输入修改后的等级:如果不修改则输入null"<<endl;cin>>level;
			if(level=="null"){
			}
			else{
			 vect_read[k]->setlevel(level);
			cout<<"修改成功!"<<endl;
			}
			//修改月薪
			cout<<"输入修改后的月薪:如果不修改则输入null"<<endl;cin>>monthsalary;
			if(monthsalary=="null"){
			}
			else{
			 vect_read[k]->setmonthsalary(monthsalary);
			cout<<"修改成功!"<<endl;
			}
			//修改销售额度
			cout<<"输入修改后的销售额度:如果不修改则输入null"<<endl;cin>>sale;
			if(sale=="null"){
			}
			else{
			 vect_read[k]->setsale(sale);
			 cout<<"修改成功!"<<endl;
			}
			//修改工作时长
			cout<<"输入修改后的工作时长:如果不修改则输入null"<<endl;cin>>worktime;
			if(worktime=="null"){
			}
			else{
			 vect_read[k]->setworktime(worktime);
			 cout<<"修改成功!"<<endl;
			}
		}
		else{
			cout<<"员工不存在!"<<endl;
		}
		writeFile();
		cout<<"修改功能结束!"<<endl;
}
void Read::deleteEmployee(string ID){
	cout<<"*********************删除员工*********************"<<endl;
	//重新读取文件
	ifstream readm("E:\\公司人员管理.txt",ios::in);
	vector <Employee> vect_a;
	string IDm,name,sex,section,level,monthsalary,sale,worktime;
	while(readm>>IDm>>name>>sex>>section>>level>>monthsalary>>sale>>worktime){
		vect_a.push_back(Employee(IDm,name,sex,section,level,monthsalary,sale,worktime));
	}readm.close();
	//准备删除指定员工
	//迭代器erase后会自动向下一位
	vector <Employee>::iterator it;
	for(it = vect_a.begin();it!=vect_a.end();)
	{
		if((*it).ID==ID){
			it=vect_a.erase(it);
			cout<<"删除成功!"<<endl;
		}
		else{
			it++;
		}
	}
	//重新写入文件
	ofstream out("E:\\公司人员管理.txt",ios::out);
	for(int i=0;i<vect_a.size();i++){
		out<<vect_a[i].getinformation()<<endl;
	}
	//清理vect_a的长度
	vect_a.clear();
}
void Read::totalEmployee(){
	cout<<"改公司的总员工有:"<<vect_read.size()<<endl;
}
void Read::menu(){
		cout<<"***************************欢迎来到公司人员管理系统***************************"<<endl;
		cout<<"1、查看公司人员信息"<<endl;
		cout<<"2、增加员工"<<endl;
		cout<<"3、修改员工信息"<<endl;
		cout<<"4、删除员工"<<endl;
		cout<<"5、查看公司员工总人数"<<endl;
		cout<<"任意键退出本系统!"<<endl;
		cout<<"********************************************************************************"<<endl;
}

五、效果图

在这里插入图片描述

到此为止,没有啦

  • 6
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值