一、 设计目的
Ø 熟练掌握C++语法、能够使用该语言编写较为复杂的程序。
Ø 进一步熟悉类的用法,加深对类之间继承的规律的理解。
Ø 提高对较为复杂程序的编写能力,提高编程能力。
二、 题目设计要求
销售公司员工管理
设计一个虚基类Staff(员工),包含编号、姓名和年龄保护数据成员以及相关的成员函数;由Staff派生出销售员类Salesman,包含销售额保护数据成员以及相关的成员函数;再由Staff派生出经理类Manager;然后由Salesman和Manager类派生出销售经理类SalesManager。
设计一个利用文件处理方式实现对公司人员(包括销售员、经理和销售经理)进行管理,具有增加数据、更新数据、查询数据、删除数据以及重组文件的功能。(删除数据在记录中做删除标志,重组文件指在物理上删除有删除标志的记录。)另外要求分别统计这三类员工的人数以及所有员工的总数。
三、 问题分析
1.分析问题
由题目知至少需要四个类:一个基类、两个直接由基类派生的类、一个由上面两个派生出来的类共同派生的子类。对这四个类分别取名为:classstaff (基类)classSalesman、classManager、classSalesManager。其中classSalesman、classManager为基类直接派生,classSalesManager由classSalesman、classManager直接派生,他们之间关系图下图:
2.功能分析
根据对问题的分析为了实现要求的功能,对基类设计voidInputInfo()用来输入信息,voidOutputInfo()用来输出信息、char*ShowInfo(int i)用来返回当前类的信息。在派生类中各自加入自己的函数。
>>类:
class staff
class Salesman:virtual public staff
class Manager:virtual public staff
class SalesManager:public Salesman,public Manager
>>函数:
void AddInfo(); //增加数据函数
void DeleteInfo(char no[ ]); //删除数据函数
void LookforInfo(char no[ ]); //查询数据函数
void ModifyInfo(char no[ ]); //修改数据函数
void InputInfo();
void OutputInfo();
char *ShowInfo(int i);
3.主要功能流程图
Ø 主要功能图:
Ø 增加数据:
Ø 查询数据:
四、 源代码
由于时间原因,此问题已经是好久之前写的了,在此只是做简单分析,具体细节的面向对象分析的uml图中类图等的分析并未给出,需要的话可以自行分析。
此题的具体代码实现如下:
MyHeader.h
#ifndef MYHEADER_H_INCLUDED
#define MYHEADER_H_INCLUDED
#include <iostream>
#include <windows.h>
#include <cstdlib>
#include <cstring>
#include <fstream>
void AddInfo(); //增加数据函数
void DeleteInfo(char no[]); //删除数据函数
void LookforInfo(char no[]); //查询数据函数
void ModifyInfo(char no[]); //修改数据函数
#endif // MYHEADER_H_INCLUDED
MyClass.h
#ifndef MYCLASS_H_INCLUDED
#define MYCLASS_H_INCLUDED
#include "MyHeader.h"
using namespace std;
class staff //staff类
{
protected:
char Name[10];
char Uid[10];
char Age[10];
public:
void InputInfo() //构造函数
{
;
}
void OutputInfo()
{
;
}
char *ShowInfo(int i)
{
;
}
};
class Salesman:virtual public staff //销售员类虚拟继承staff
{
protected:
char career[10];
char title[10];
public:
void InputInfo()
{
cout<<"请输入编号:"<<endl;
cin>>Uid;
cout<<"请输入姓名:"<<endl;
cin>>Name;
cout<<"请输入年龄:"<<endl;
cin>>Age;
cout<<"请输入专业:"<<endl;
cin>>career;
// cout<<"请输入职称:"<<endl;
}
void OutputInfo()
{
cout<<"编号:"<<Uid<<endl;
cout<<"姓名:"<<Name<<endl;
cout<<"年龄:"<<Age<<endl;
cout<<"专业:"<<career<<endl;
// cout<<"职称:"<<endl;
}
char *ShowInfo(int i)
{
if(i==1)
{
return Uid;
}
else if(i==2)
{
return Name;
}
else if(i==3)
{
return Age;
}
else if(i==4)
{
return career;
}
else if(i==5)
{
return title;
}
return 0;
}
};
class Manager:virtual public staff //经理类虚拟继承staff
{
protected:
char Dep[10];
char Job[10];
public:
void InputInfo()
{
cout<<"请输入编号:"<<endl;
cin>>Uid;
cout<<"请输入姓名:"<<endl;
cin>>Name;
cout<<"请输入年龄:"<<endl;
cin>>Age;
cout<<"请输入职务:"<<endl;
cin>>Job;
cout<<"请输入部门:"<<endl;
cin>>Dep;
}
void OutputInfo()
{
cout<<"编号:"<<Uid<<endl;
cout<<"姓名:"<<Name<<endl;
cout<<"年龄:"<<Age<<endl;
cout<<"职务:"<<Job<<endl;
cout<<"部门:"<<Dep<<endl;
}
char *ShowInfo(int i)
{
if(i==1)
{
return Uid;
}
else if(i==2)
{
return Name;
}
else if(i==3)
{
return Age;
}
else if(i==4)
{
return Job;
}
else if(i==5)
{
return Dep;
}
return 0;
}
};
class SalesManager:public Salesman,public Manager //多继承销售经理类
{
public:
void InputInfo()
{
cout<<"请输入编号:"<<endl;
cin>>Uid;
cout<<"请输入姓名:"<<endl;
cin>>Name;
cout<<"请输入年龄:"<<endl;
cin>>Age;
cout<<"请输入职务:"<<endl;
cin>>Job;
cout<<"请输入部门:"<<endl;
cin>>Dep;
cout<<"请输入专业:"<<endl;
cin>>career;
cout<<"请输入职称:"<<endl;
cin>>title;
}
void OutputInfo()
{
cout<<"编号:"<<Uid<<endl;
cout<<