用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;
}
五、效果图
到此为止,没有啦