当前位置:文档之家› 销售员工管理系统

销售员工管理系统

C++大作业报告班级:031111学号:********姓名:***销售公司员工管理一.题目要求设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出销售员类Salesman,包含销售额保护数据成员以及相关的成员函数;再由Staff派生出经理类Manager;然后由Salesman和Manager类派生出销售经理类SalesManager。

设计一个利用文件处理方式实现对公司人员(包括销售员、经理和销售经理)进行管理,具有增加数据、更新数据、查询数据、删除数据以及重组文件的功能。

(删除数据在记录中做删除标志,重组文件指在物理上删除有删除标志的记录。

)另外要求分别统计这三类员工的人数以及所有员工的总数。

二.编程思想由题目知至少需要四个类:一个基类、两个直接由基类派生的类、一个由上面两个派生出来的类共同派生的子类。

首先定义一个虚基类Staff类,然后通过虚拟继承生成Salesman 类和Manager类,最后由Salesman和Manager派生出主任工程师类SalesManager。

这四个类中定义InputFromFile(istream &in)这一输入函数,另外每个类还定义输入信息和输出信息的成员函数。

之后定义StaffChart、SalesmanChart、ManagerChart和SalesManagerChart四个类。

为实现增加、更新、查询、删除以及全部显示人员的功能定义addItem、modifyItem、find、removeItem以及display函数。

最后在主函数定义Staff_Chart、Salesman_Chart、Manager_Chart和SalesManager_Chart四个对象,通过循环执行并用switch函数选择功能,然后调用相关的函数来实现各种功能。

三.实验代码#include<iostream>#include<fstream>using namespace std;class Staff{protected:char num[10];char name[10];int age;public:Staff * Next;void set_staff(){cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name;cout<<"请输入年龄:";cin>>age;}void InputFromFile(istream &in){in>>num>>name>>age;}void show(){cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;}char *get_num(){return num;}char *get_name(){return name;}int get_age(){return age;}};class Salesman:virtual public Staff{protected:char major[10];char t_title[10];public:Salesman * Next;void set_salesman(){cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name;cout<<"请输入年龄:";cin>>age;cout<<"请输入专业:";cin>>major;cout<<"请输入职称:";cin>>t_title;}void InputFromFile(istream &in){in>>num>>name>>age>>major>>t_title;}void show_salesman(){cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;cout<<"专业:"<<major<<endl;cout<<"职称:"<<t_title<<endl;}char *get_major(){return major;}char *get_t_title(){return t_title;}};class Manager:virtual public Staff{protected:char job[10];char dept[10];public:Manager * Next;void set_manager(){cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name;cout<<"请输入年龄:";cin>>age;cout<<"请输入职务:";cin>>job;cout<<"请输入部门:";cin>>dept;}void InputFromFile(istream &in){in>>num>>name>>age>>job>>dept;}void show_manager(){cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;cout<<"职务:"<<job<<endl;cout<<"部门:"<<dept<<endl;}char *get_job(){return job;}char *get_dept(){return dept;}};class SalesManager :public Salesman,public Manager{public:SalesManager * Next;void set_salesmanager(){cout<<"请输入编号:";cin>>num;cout<<"请输入姓名:";cin>>name;cout<<"请输入年龄:";cin>>age;cout<<"请输入专业:";cin>>major;cout<<"请输入职称:";cin>>t_title;cout<<"请输入职务:";cin>>job;cout<<"请输入部门:";cin>>dept;}void InputFromFile(istream &in){in>>num>>name>>age>>major>>t_title>>job>>dept;}void show_salesmanager(){cout<<"编号:"<<num<<endl;cout<<"姓名:"<<name<<endl;cout<<"年龄:"<<age<<endl;cout<<"专业:"<<major<<endl;cout<<"职称:"<<t_title<<endl;cout<<"职务:"<<job<<endl;cout<<"部门:"<<dept<<endl;}};class StaffChart{public:StaffChart();~StaffChart();void find(); //输出单个条目void save(); //将信息输出到文件void modifyItem(); //修改Staff条目void removeItem(); //删除Staff条目void display() //输出全部条目{Staff *p=Head->Next;for(p;p!=End;p=p->Next){p->show();cout<<endl;}}void addItem() //添加条目{End->set_staff();End->Next=new Staff;End=End->Next;save();}private:Staff * Head,* End;ifstream in; //文件输入ofstream out; //文件输出Staff * findItem(char * num){for(Staff * p=Head;p->Next!=End;p=p->Next)if(!strcmp(p->Next->get_num() ,num))return p;return NULL;}};StaffChart::StaffChart() //构造函数{Head=new Staff;Head->Next=new Staff;End=Head->Next;in.open("StaffChart.txt");while(!in.eof()){End->InputFromFile(in);if(End->get_num()[0]=='\0')break;End->Next=new Staff;End=End->Next;}in.close();}StaffChart::~StaffChart() //析构函数{for(Staff * temp;Head->Next!=End;){temp=Head->Next;Head->Next=Head->Next->Next;delete temp;}delete Head,End;}void StaffChart::find() //查找条目{char num[10];Staff * p=NULL;cout<<"请输入要查找员工的工号:";cin>>num;if(p=findItem(num))p->Next->show();else{cout<<"没有找到!!"<<endl<<endl;}}void StaffChart::modifyItem() //修改条目{char num[10];Staff * p=NULL;cout<<"请输入要修改员工的工号:";cin>>num;if(p=findItem(num)){p->Next->show();cout<<"请输入新的内容:"<<endl;p->Next->set_staff();}elsecout<<"没有找到!!"<<endl<<endl;save();}void StaffChart::removeItem() //删除条目{char num[10];Staff *p=NULL,*temp=NULL;cout<<"请输入要删除员工的工号:";cin>>num;if(p=findItem(num)){temp=p->Next;p->Next=p->Next->Next;delete temp;cout<<"删除成功!!"<<endl<<endl;}elsecout<<"没有找到!!"<<endl<<endl;save();}void StaffChart::save() //保存{out.open("StaffChart.txt");for(Staff * p=Head->Next;p!=End;p=p->Next)out<<p->get_num()<<" "<<p->get_name()<<" "<<p->get_age()<<endl;out.close();}class SalesmanChart{public:SalesmanChart();~SalesmanChart();void find(); //输出单个条目void save(); //将信息输出到文件void modifyItem(); //修改Engineer条目void removeItem(); //删除Engineer条目void display() //输出全部条目{for(Salesman *p=Head->Next;p!=End;p=p->Next)p->show_salesman();}void addItem() //添加条目{//End->set_salesman();End->Next=new Salesman;End=End->Next;save();}private:Salesman * Head,* End;ifstream in; //文件输入ofstream out; //文件输出Salesman * findItem(char * num){for(Salesman * p=Head;p->Next!=End;p=p->Next)if(!strcmp(p->Next->get_num() ,num))return p;return NULL;}};SalesmanChart::SalesmanChart() //构造函数{Head=new Salesman;Head->Next=new Salesman;End=Head->Next;in.open("SalesmanChaart.txt");while(!in.eof()){End->InputFromFile(in);if(End->get_num()[0]=='\0')break;End->Next=new Salesman;End=End->Next;}in.close();}SalesmanChart::~SalesmanChart() //析构函数{for(Salesman * temp;Head->Next!=End;){temp=Head->Next;Head->Next=Head->Next->Next;delete temp;}delete Head,End;}void SalesmanChart::find() //查找条目{char num[10];Salesman * p=NULL;cout<<"请输入要查找销售员的工号:";cin>>num;if(p=findItem(num))p->Next->show_salesman();elsecout<<"没有找到!!"<<endl<<endl;}void SalesmanChart::modifyItem() //修改条目{char num[10];Salesman * p=NULL;cout<<"请输入要修改销售员的工号:";cin>>num;if(p=findItem(num)){p->Next->show_salesman();cout<<"请输入新的内容:"<<endl;p->Next->set_salesman();}elsecout<<"没有找到!!"<<endl<<endl;save();}void SalesmanChart::removeItem() //删除条目{char num[10];Salesman *p=NULL,*temp=NULL;cout<<"请输入要删除销售员的工号:";cin>>num;if(p=findItem(num)){temp=p->Next;p->Next=p->Next->Next;delete temp;cout<<"删除成功!!"<<endl<<endl;}elsecout<<"没有找到!!"<<endl<<endl;save();}void SalesmanChart::save() //保存{out.open("SalesmanChart.txt");for(Salesman * p=Head->Next;p!=End;p=p->Next)out<<p->get_num()<<p->get_name()<<p->get_age()<<p->get_major()<<p->get_t_title()<<e ndl;out.close();}class ManagerChart{public:ManagerChart();~ManagerChart();void find(); //输出单个条目void save(); //将信息输出到文件void modifyItem(); //修改Leader条目void removeItem(); //删除Leader条目void display() //输出全部条目{Manager *p=Head->Next;for(p;p!=End;p=p->Next)p->show_manager();}void addItem() //添加条目{End->set_manager();End->Next=new Manager;End=End->Next;save();}private:Manager * Head,* End;ifstream in; //文件输入ofstream out; //文件输出Manager * findItem(char * num){for(Manager * p=Head;p->Next!=End;p=p->Next)if(!strcmp(p->Next->get_num() ,num))return p;return NULL;}};ManagerChart::ManagerChart() //构造函数{Head=new Manager;Head->Next=new Manager;End=Head->Next;in.open("ManagerChaart.txt");while(!in.eof()){End->InputFromFile(in);if(End->get_num()[0]=='\0')break;End->Next=new Manager;End=End->Next;}in.close();}ManagerChart::~ManagerChart() //析构函数{for(Manager * temp;Head->Next!=End;){temp=Head->Next;Head->Next=Head->Next->Next;delete temp;}delete Head,End;}void ManagerChart::find() //查找条目{char num[10];Manager * p=NULL;cout<<"请输入要查找经理的工号:";cin>>num;if(p=findItem(num))p->Next->show_manager();elsecout<<"没有找到!!"<<endl<<endl;}void ManagerChart::modifyItem() //修改条目{char num[10];Manager * p=NULL;cout<<"请输入要修改经理的工号:";cin>>num;if(p=findItem(num)){p->Next->show_manager();cout<<"请输入新的内容:"<<endl;p->Next->set_manager();}elsecout<<"没有找到!!"<<endl<<endl;save();}void ManagerChart::removeItem() //删除条目{char num[10];Manager *p=NULL,*temp=NULL;cout<<"请输入要删除经理的工号:";cin>>num;if(p=findItem(num)){temp=p->Next;p->Next=p->Next->Next;delete temp;cout<<"删除成功!!"<<endl<<endl;}elsecout<<"没有找到!!"<<endl<<endl;save();}void ManagerChart::save() //保存{out.open("ManagerChart.txt");for(Manager * p=Head->Next;p!=End;p=p->Next)out<<p->get_num()<<p->get_name()<<p->get_age()<<p->get_job()<<p->get_dept()<<endl;out.close();}class SalesManagerChart{public:SalesManagerChart();~SalesManagerChart();void find(); //输出单个条目void save(); //将信息输出到文件void modifyItem(); //修改Leader条目void removeItem(); //删除Leader条目void display() //输出全部条目{SalesManager *p=Head->Next;for(;p!=End;p=p->Next)p->show_salesmanager();}void addItem() //添加条目{End->set_salesmanager();End->Next=new SalesManager;End=End->Next;save();}private:SalesManager * Head,* End;ifstream in; //文件输入ofstream out; //文件输出SalesManager * findItem(char * num){for(SalesManager * p=Head;p->Next!=End;p=p->Next)if(!strcmp(p->Next->get_num() ,num))return p;return NULL;}};SalesManagerChart::SalesManagerChart() //构造函数{Head=new SalesManager;Head->Next=new SalesManager;End=Head->Next;in.open("SalesManagerChaart.txt");while(!in.eof()){End->InputFromFile(in);if(End->get_num()[0]=='\0')break;End->Next=new SalesManager;End=End->Next;}in.close();}SalesManagerChart::~SalesManagerChart() //析构函数{for(SalesManager * temp;Head->Next!=End;){temp=Head->Next;Head->Next=Head->Next->Next;delete temp;}delete Head,End;}void SalesManagerChart::find() //查找条目{char num[10];SalesManager * p=NULL;cout<<"请输入要查找销售经理的工号:";cin>>num;if(p=findItem(num))p->Next->show_salesmanager();elsecout<<"没有找到!!"<<endl<<endl;}void SalesManagerChart::modifyItem() //修改条目{char num[10];SalesManager * p=NULL;cout<<"请输入要修改销售经理的工号:";cin>>num;if(p=findItem(num)){p->Next->show_salesmanager();cout<<"请输入新的内容:"<<endl;p->Next->set_salesmanager();}elsecout<<"没有找到!!"<<endl<<endl;save();}void SalesManagerChart::removeItem() //删除条目{char num[10];SalesManager *p=NULL,*temp=NULL;cout<<"请输入要删除销售经理的工号:";cin>>num;if(p=findItem(num)){temp=p->Next;p->Next=p->Next->Next;delete temp;cout<<"删除成功!!"<<endl<<endl;}elsecout<<"没有找到!!"<<endl<<endl;save();}void SalesManagerChart::save() //保存{out.open("SalesManagerChart.txt");for(Manager * p=Head->Next;p!=End;p=p->Next)out<<p->get_num()<<p->get_name()<<p->get_age()<<p->get_job()<<p->get_dept()<<endl;out.close();}int main(){int x,y;StaffChart Staff_Chart;SalesmanChart Salesman_Chart;ManagerChart Manager_Chart;SalesManagerChart SalesManager_Chart;bool quit=false;while(!quit){cout<<"选择功能:\n1.增加数据\t2.更新数据\t3.查询数据\t4.删除数据\t5.列出全部人员\t6.退出"<<endl;cin>>x;switch(x){case 1:cout<<"选择增加的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y){case 1:Staff_Chart.addItem();break;case 2:Salesman_Chart.addItem();break;case 3:Manager_Chart.addItem();break;case 4:SalesManager_Chart.addItem();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);}break;case 2:cout<<"选择更新的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y){case 1:Staff_Chart.modifyItem();break;case 2:Salesman_Chart.modifyItem();break;case 3:Manager_Chart.modifyItem();break;case 4:SalesManager_Chart.modifyItem();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);}break;case 3:cout<<"选择查询的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y){case 1:Staff_Chart.find();break;case 2:Salesman_Chart.find();break;case 3:Manager_Chart.find();break;case 4:SalesManager_Chart.find();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);;}break;case 4:cout<<"选择删除的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y){case 1:Staff_Chart.removeItem();break;case 2:Salesman_Chart.removeItem();break;case 3:Manager_Chart.removeItem();break;case 4:SalesManager_Chart.removeItem();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);}break;case 5:cout<<"选择列出人员的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"<<endl;cin>>y;switch(y){case 1:Staff_Chart.display();break;case 2:Salesman_Chart.display();break;case 3:Manager_Chart.display();break;case 4:SalesManager_Chart.display();break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);}break;case 6:quit=true;break;default :cout<<"输入错误,程序终止!!"<<endl;exit(-1);}}return 0;}四.运行结果由于四个类的实现过程基本相同,所以在此只用Salesman做演示1.程序运行在工作空间中生成4个txt文件:2.增加两个Manager3.更新其中一个Manager4.查找一个Manager5.列出全部Manager6.删除一个Manager7.再次全部列出Manager以查看删除效果五.实验总结这次C++大作业很有综合性,知识面很广,用到的知识也很多。

相关主题