1、 销售员工管理系统 40 2020年4月19日 文档仅供参考,不当之处,请联系改正。 C++大作业报告 班级:031111 学号:03111052 姓名:杨柳 销售公司员
2、工管理 一.题目要求 设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出销售员类Salesman,包含销售额保护数据成员以及相关的成员函数;再由Staff派生出经理类Manager;然后由Salesman和Manager类派生出销售经理类SalesManager。 设计一个利用文件处理方式实现对公司人员(包括销售员、经理和销售经理)进行管理,具有增加数据、更新数据、查询数据、删除数据以及重组文件的功能。(删除数据在记录中做删除标志,重组文件指在物理上删除有删除标志的记录。)另外要求分别统计这三类员工的人数以及所有员工的总数。 二.编
3、程思想 由题目知至少需要四个类:一个基类、两个直接由基类派生的类、一个由上面两个派生出来的类共同派生的子类。首先定义一个虚基类Staff类,然后经过虚拟继承生成Salesman类和Manager类,最后由Salesman和Manager派生出主任工程师类SalesManager。这四个类中定义InputFromFile(istream &in)这一输入函数,另外每个类还定义输入信息和输出信息的成员函数。之后定义StaffChart、SalesmanChart、ManagerChart和SalesManagerChart四个类。为实现增加、更新、查询、删除以及全部显示人员的功能定义addIte
4、m、modifyItem、find、removeItem以及display函数。最后在主函数定义Staff_Chart、Salesman_Chart、Manager_Chart和SalesManager_Chart四个对象,经过循环执行并用switch函数选择功能,然后调用相关的函数来实现各种功能。
三.实验代码
#include
5、
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<<"编号:"< 6、l;
}
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<<"请输入编号:";ci 7、n>>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<<"编号:"< 8、t<<"年龄:"< 9、oid 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<<"编号:"< 10、 cout<<"姓名:"< 11、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_t 12、itle>>job>>dept;
}
void show_salesmanager()
{
cout<<"编号:"< 13、t();
~StaffChart();
void find(); //输出单个条目
void save(); //将信息输出到文件
void modifyItem(); //修改Staff条目
void removeItem(); //删除Staff条目
void display() //输出全部条目
{
Staff *p=Head->Next;
for(p;p!=End;p=p->Next)
{
14、
p->show();
cout< 15、har * 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( 16、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;
17、 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<<"没有找到!!"< 18、 //修改条目
{
char num[10];
Staff * p=NULL;
cout<<"请输入要修改员工的工号:";cin>>num;
if(p=findItem(num))
{
p->Next->show();
cout<<"请输入新的内容:"< 19、m[10];
Staff *p=NULL,*temp=NULL;
cout<<"请输入要删除员工的工号:";cin>>num;
if(p=findItem(num))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
cout<<"删除成功!!"< 20、pen("StaffChart.txt");
for(Staff * p=Head->Next;p!=End;p=p->Next)
out< 21、 //将信息输出到文件
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( 22、);
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_n 23、um() ,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')
24、 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 25、find() //查找条目
{
char num[10];
Salesman * p=NULL;
cout<<"请输入要查找销售员的工号:";cin>>num;
if(p=findItem(num))
p->Next->show_salesman();
else
cout<<"没有找到!!"< 26、L;
cout<<"请输入要修改销售员的工号:";cin>>num;
if(p=findItem(num))
{
p->Next->show_salesman();
cout<<"请输入新的内容:"< 27、temp=NULL;
cout<<"请输入要删除销售员的工号:";cin>>num;
if(p=findItem(num))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
cout<<"删除成功!!"< 28、xt");
for(Salesman * p=Head->Next;p!=End;p=p->Next)
out< 29、 //将信息输出到文件
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_manage 30、r();
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 31、) ,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')
brea 32、k;
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() 33、 //查找条目
{
char num[10];
Manager * p=NULL;
cout<<"请输入要查找经理的工号:";cin>>num;
if(p=findItem(num))
p->Next->show_manager();
else
cout<<"没有找到!!"< 34、理的工号:";cin>>num;
if(p=findItem(num))
{
p->Next->show_manager();
cout<<"请输入新的内容:"< 35、理的工号:";cin>>num;
if(p=findItem(num))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
cout<<"删除成功!!"< 36、Next;p!=End;p=p->Next)
out< 37、 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();
38、 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- 39、>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);
40、
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; 41、
}
delete Head,End;
}
void SalesManagerChart::find() //查找条目
{
char num[10];
SalesManager * p=NULL;
cout<<"请输入要查找销售经理的工号:";cin>>num;
if(p=findItem(num))
p->Next->show_salesmanager();
else
cout<<"没有找到!!"< 42、m() //修改条目
{
char num[10];
SalesManager * p=NULL;
cout<<"请输入要修改销售经理的工号:";cin>>num;
if(p=findItem(num))
{
p->Next->show_salesmanager();
cout<<"请输入新的内容:"< 43、art::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<<"删除成功!!"< 44、
void SalesManagerChart::save() //保存
{
out.open("SalesManagerChart.txt");
for(Manager * p=Head->Next;p!=End;p=p->Next)
out< 45、 SalesmanChart Salesman_Chart;
ManagerChart Manager_Chart;
SalesManagerChart SalesManager_Chart;
bool quit=false;
while(!quit)
{
cout<<"选择功能:\n1.增加数据\t2.更新数据\t3.查询数据\t4.删除数据\t5.列出全部人员\t6.退出"< 46、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<<"输入错误,程序终止!!"< 47、更新的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"< 48、t(-1);
}
break;
case 3:
cout<<"选择查询的类型:\n1.员工\t2.销售员\t3.经理\t4.销售经理"< 49、<"输入错误,程序终止!!"< 50、ager_Chart.removeItem();break;
default :cout<<"输入错误,程序终止!!"<






