C大作业报告.docx
《C大作业报告.docx》由会员分享,可在线阅读,更多相关《C大作业报告.docx(30页珍藏版)》请在冰豆网上搜索。
C大作业报告
C++
大作业报告
姓名:
常皓
学号:
03101261
班级:
031013
销售公司员工管理
设计一个虚基类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"
usingnamespacestd;
classStaff
{
protected:
charnum[10];
charname[10];
intage;
public:
Staff*Next;
voidset_staff()
{
cout<<"请输入编号:
";cin>>num;
cout<<"请输入姓名:
";cin>>name;
cout<<"请输入年龄:
";cin>>age;
}
voidInputFromFile(istream&in)
{
in>>num>>name>>age;
}
voidshow()
{
cout<<"编号:
"<cout<<"姓名:
"<cout<<"年龄:
"<}
char*get_num()
{
returnnum;
}
char*get_name()
{
returnname;
}
intget_age()
{
returnage;
}
};
classSalesman:
virtualpublicStaff
{
protected:
charmajor[10];
chart_title[10];
public:
Salesman*Next;
voidset_salesman()
{
cout<<"请输入编号:
";cin>>num;
cout<<"请输入姓名:
";cin>>name;
cout<<"请输入年龄:
";cin>>age;
cout<<"请输入专业:
";cin>>major;
cout<<"请输入职称:
";cin>>t_title;
}
voidInputFromFile(istream&in)
{
in>>num>>name>>age>>major>>t_title;
}
voidshow_salesman()
{
cout<<"编号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"专业:
"<cout<<"职称:
"<}
char*get_major()
{
returnmajor;
}
char*get_t_title()
{
returnt_title;
}
};
classManager:
virtualpublicStaff
{
protected:
charjob[10];
chardept[10];
public:
Manager*Next;
voidset_manager()
{
cout<<"请输入编号:
";cin>>num;
cout<<"请输入姓名:
";cin>>name;
cout<<"请输入年龄:
";cin>>age;
cout<<"请输入职务:
";cin>>job;
cout<<"请输入部门:
";cin>>dept;
}
voidInputFromFile(istream&in)
{
in>>num>>name>>age>>job>>dept;
}
voidshow_manager()
{
cout<<"编号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"职务:
"<cout<<"部门:
"<}
char*get_job()
{
returnjob;
}
char*get_dept()
{
returndept;
}
};
classSalesManager:
publicSalesman,publicManager
{
public:
SalesManager*Next;
voidset_salesmanager()
{
cout<<"请输入编号:
";cin>>num;
cout<<"请输入姓名:
";cin>>name;
cout<<"请输入年龄:
";cin>>age;
cout<<"请输入专业:
";cin>>major;
cout<<"请输入职称:
";cin>>t_title;
cout<<"请输入职务:
";cin>>job;
cout<<"请输入部门:
";cin>>dept;
}
voidInputFromFile(istream&in)
{
in>>num>>name>>age>>major>>t_title>>job>>dept;
}
voidshow_salesmanager()
{
cout<<"编号:
"<cout<<"姓名:
"<cout<<"年龄:
"<cout<<"专业:
"<cout<<"职称:
"<cout<<"职务:
"<cout<<"部门:
"<}
};
classStaffChart
{
public:
StaffChart();
~StaffChart();
voidfind();//输出单个条目
voidsave();//将信息输出到文件
voidmodifyItem();//修改Staff条目
voidremoveItem();//删除Staff条目
voiddisplay()//输出全部条目
{
Staff*p=Head->Next;
for(p;p!
=End;p=p->Next)
{
p->show();
cout<}
}
voidaddItem()//添加条目
{
End->set_staff();
End->Next=newStaff;
End=End->Next;
save();
}
private:
Staff*Head,*End;
ifstreamin;//文件输入
ofstreamout;//文件输出
Staff*findItem(char*num)
{
for(Staff*p=Head;p->Next!
=End;p=p->Next)
if(!
strcmp(p->Next->get_num(),num))
returnp;
returnNULL;
}
};
StaffChart:
:
StaffChart()//构造函数
{
Head=newStaff;
Head->Next=newStaff;
End=Head->Next;
in.open("StaffChart.txt");
while(!
in.eof())
{
End->InputFromFile(in);
if(End->get_num()[0]=='\0')
break;
End->Next=newStaff;
End=End->Next;
}
in.close();
}
StaffChart:
:
~StaffChart()//析构函数
{
for(Staff*temp;Head->Next!
=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
deletetemp;
}
deleteHead,End;
}
voidStaffChart:
:
find()//查找条目
{
charnum[10];
Staff*p=NULL;
cout<<"请输入要查找员工的工号:
";cin>>num;
if(p=findItem(num))
p->Next->show();
else
{
cout<<"没有找到!
!
"<}
}
voidStaffChart:
:
modifyItem()//修改条目
{
charnum[10];
Staff*p=NULL;
cout<<"请输入要修改员工的工号:
";cin>>num;
if(p=findItem(num))
{
p->Next->show();
cout<<"请输入新的内容:
"<p->Next->set_staff();
}
else
cout<<"没有找到!
!
"<save();
}
voidStaffChart:
:
removeItem()//删除条目
{
charnum[10];
Staff*p=NULL,*temp=NULL;
cout<<"请输入要删除员工的工号:
";cin>>num;
if(p=findItem(num))
{
temp=p->Next;
p->Next=p->Next->Next;
deletetemp;
cout<<"删除成功!
!
"<}
else
cout<<"没有找到!
!
"<save();
}
voidStaffChart:
:
save()//保存
{
out.open("StaffChart.txt");
for(Staff*p=Head->Next;p!
=End;p=p->Next)
out<get_num()<<""<get_name()<<""<get_age()<out.close();
}
classSalesmanChart
{
public:
SalesmanChart();
~SalesmanChart();
voidfind();//输出单个条目
voidsave();//将信息输出到文件
voidmodifyItem();//修改Salesman条目
voidremoveItem();//删除Salesman条目
voiddisplay()//输出全部条目
{
for(Salesman*p=Head->Next;p!
=End;p=p->Next)
p->show_salesman();
}
voidaddItem()//添加条目
{
End->set_salesman();
End->Next=newSalesman;
End=End->Next;
save();
}
private:
Salesman*Head,*End;
ifstreamin;//文件输入
ofstreamout;//文件输出
Salesman*findItem(char*num)
{
for(Salesman*p=Head;p->Next!
=End;p=p->Next)
if(!
strcmp(p->Next->get_num(),num))
returnp;
returnNULL;
}
};
SalesmanChart:
:
SalesmanChart()//构造函数
{
Head=newSalesman;
Head->Next=newSalesman;
End=Head->Next;
in.open("SalesmanChaart.txt");
while(!
in.eof())
{
End->InputFromFile(in);
if(End->get_num()[0]=='\0')
break;
End->Next=newSalesman;
End=End->Next;
}
in.close();
}
SalesmanChart:
:
~SalesmanChart()//析构函数
{
for(Salesman*temp;Head->Next!
=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
deletetemp;
}
deleteHead,End;
}
voidSalesmanChart:
:
find()//查找条目
{
charnum[10];
Salesman*p=NULL;
cout<<"请输入要查找销售员的工号:
";cin>>num;
if(p=findItem(num))
p->Next->show_salesman();
else
cout<<"没有找到!
!
"<}
voidSalesmanChart:
:
modifyItem()//修改条目
{
charnum[10];
Salesman*p=NULL;
cout<<"请输入要修改销售员的工号:
";cin>>num;
if(p=findItem(num))
{
p->Next->show_salesman();
cout<<"请输入新的内容:
"<p->Next->set_salesman();
}
else
cout<<"没有找到!
!
"<save();
}
voidSalesmanChart:
:
removeItem()//删除条目
{
charnum[10];
Salesman*p=NULL,*temp=NULL;
cout<<"请输入要删除销售员的工号:
";cin>>num;
if(p=findItem(num))
{
temp=p->Next;
p->Next=p->Next->Next;
deletetemp;
cout<<"删除成功!
!
"<}
else
cout<<"没有找到!
!
"<save();
}
voidSalesmanChart:
:
save()//保存
{
out.open("SalesmanChart.txt");
for(Salesman*p=Head->Next;p!
=End;p=p->Next)
out<get_num()<get_name()<get_age()<get_major()<get_t_title()<out.close();
}
classManagerChart
{
public:
ManagerChart();
~ManagerChart();
voidfind();//输出单个条目
voidsave();//将信息输出到文件
voidmodifyItem();//修改Manager条目
voidremoveItem();//删除Manager条目
voiddisplay()//输出全部条目
{
Manager*p=Head->Next;
for(p;p!
=End;p=p->Next)
p->show_manager();
}
voidaddItem()//添加条目
{
End->set_manager();
End->Next=newManager;
End=End->Next;
save();
}
private:
Manager*Head,*End;
ifstreamin;//文件输入
ofstreamout;//文件输出
Manager*findItem(char*num)
{
for(Manager*p=Head;p->Next!
=End;p=p->Next)
if(!
strcmp(p->Next->get_num(),num))
returnp;
returnNULL;
}
};
ManagerChart:
:
ManagerChart()//构造函数
{
Head=newManager;
Head->Next=newManager;
End=Head->Next;
in.open("ManagerChaart.txt");
while(!
in.eof())
{
End->InputFromFile(in);
if(End->get_num()[0]=='\0')
break;
End->Next=newManager;
End=End->Next;
}
in.close();
}
ManagerChart:
:
~ManagerChart()//析构函数
{
for(Manager*temp;Head->Next!
=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
deletetemp;
}
deleteHead,End;
}
voidManagerChart:
:
find()//查找条目
{
charnum[10];
Manager*p=NULL;
cout<<"请输入要查找经理的工号:
";cin>>num;
if(p=findItem(num))
p->Next->show_manager();
else
cout<<"没有找到!
!
"<}
voidManagerChart:
:
modifyItem()//修改条目
{
charnum[10];
Manager*p=NULL;
cout<<"请输入要修改经理的工号:
";cin>>num;
if(p=findItem(num))
{
p->Next->show_manager();
cout<<"请输入新的内容:
"<p->Next->set_manager();
}
else
cout<<"没有找到!
!
"<save();
}
voidManagerChart:
:
removeItem()//删除条目
{
charnum[10];
Manager*p=NULL,*temp=NULL;
cout<<"请输入要删除经理的工号:
";cin>>num;
if(p=findItem(num))
{
temp=p->Next;
p->Next=p->Next->Next;
deletetemp;
cout<<"删除成功!
!
"<}
else
cout<<"没有找到!
!
"<save();
}
voidManagerChart:
:
save()//保存
{
out.open("ManagerChart.txt");
for(Manager*p=Head->Next;p!
=End;p=p->Next)
out<get_num()<get_name()<get_age()<get_job()<get_dept()<out.close();
}
classSalesManagerChart
{
public:
SalesManagerChart();
~SalesManagerChart();
voidfind();//输出单个条目
voidsave();//将信息输出到文件
voidmodifyItem();//修改Manager条目
voidremoveItem();//删除Manager条目
voiddisplay()//输出全部条目
{
SalesManager*p=Head->Next;
for(;p!
=End;p=p->Next)
p->show_salesmanager();
}
voidaddItem()//添加条目
{
End->set_salesmanager();
End->Next=newSalesManager;
End=End->Next;
save()