关于C++编程的问题!高分急急急啊
学校要求编写员工管理系统:
一、 系统概要
公司职员的信息管理程序主要实现以下功能:输入员工的姓名,输出该员工的基本信息、级别以及当月工资信息。需求如下。
1、 某小型公司,主要由总经理、技术经理和技术人员、销售经理和销售人员。要求存储所有人员的一下信息:姓名、性别、出生年月、技术特长、血型、星座、参加工作时间、接入本公司时间、联系电话、编号、级别、当月薪、计算月薪总额并显示全部信息。
2、 人员的编号从1开始,依次递增。
3、 程序对所有人员有提升级别的功能。假设所有人员的初始级别均为1级,然后进行升级,总经理升为4级,技术经理和销售经理升为3级,技术人员升为2级,销售人员为1级。
4、 月工资计算办法如下:总经理拿固定月薪10000元; 技术经理拿固定月薪6000元加奖金;技术人员拿固定月薪3000元加奖金;销售经理既拿固定月薪也领取销售提成,固定月薪为4000元,销售提成为所辖部门的当月销售总额的5‰;销售人员的月薪按当月销售额的1%提成。
5、 考核结果作为升级和工资提成的依据,考核结果按百分制计算。
二、 基本功能要求
设计一个基类employee,然后派生出technician(技术人员)类、manager(经理)类和saleman(销售人员)类共3类,在此基础上通过继承和派生实现其它类。职员信息要求保存到文件。对部分数据应设置有操作权限。
三、 功能描述
1、 新进入公司员工基本信息的输入。
2、 公司员工基本信息的查询、修改。
3、 离开公司员工信息的处理。
4、 与员工级别有关的操作。
5、 与月薪有关的操作。
6、 与人员考核有关的操作。
看我的要求:
1、copy过来的程序坚决不要,我不是不会写
2、程序的主类,包括派生类都已经写好了,只需要高手解决我的几个小问题
我的问题就是:
1、如何找到一个容器,能存储各种类的实例,比如既能存技术人员,也能存技术经理,这个主要是为了能方便的存储和进行查找
2、查找函数的编写,以及参数的传递
3、等级提升的问题,例如,技术人员在提升等级后变成技术经理,这个怎么实现类的转换
答案:1.容器用template<class T>class YourClassName 模板类。模板类,可以操作未知的各种类,关于模板类你自己查看相关资料。
2.查找函数用 基类employee的指针啦。基类指针可以指向所有的其它派生类的对象。
3.类的转换我等下来写一段例子。
//类型转换的demo,VS2005编译通过
#include <iostream>
using namespace std;
class CEmployee//员工
{
public:
CEmployee(const char name[]="UnKnow",int laborage=1000);
~CEmployee();
char * GetName();
virtual void PrintInfo();
protected:
char sName[20];
int nLaborage;
};
class CTechnician:public CEmployee//技术员
{
public:
CTechnician(const char name[]="UnKnow",int laborage=2000,int bonus=800);
~CTechnician();
virtual void PrintInfo();
protected:
int nBonus;//奖金
};
class CManager:public CEmployee//(经理)
{
public:
CManager(const char name[]="UnKnow",int laborage=10000);
~CManager();
virtual void PrintInfo();
void operator = (CTechnician &man);//转换时用到
protected:
};
template<typename T1,typename T2>
T2 * ChangeType(T1 *name1)//转换函数
{
T2* name2=new T2();
(*name2)=(*name1);//一定要先重载=运算符,否则会出错
delete name1;
return name2;
}
int main()
{
CEmployee *pEmployee;
pEmployee=new CEmployee("wangaochao");
pEmployee->PrintInfo();
delete pEmployee;//用完了删除
CTechnician *pMan=new CTechnician("dengxiaoqin");
pMan->PrintInfo();
pEmployee=ChangeType<CTechnician,CManager>(pMan);//由技术员升级为经理
pEmployee->PrintInfo();
delete pEmployee;
cin.get();//暂停,以便观察结果
return 0;
}
CEmployee::CEmployee(const char name[],int laborage)
{
strcpy_s(sName,20,name);nLaborage=laborage;
}
CEmployee::~CEmployee()
{
}
char * CEmployee::GetName()
{
return sName;
}
void CEmployee::PrintInfo()
{
cout<<"[员工] 姓名:"<<sName<<" 工资:"<<nLaborage<<endl;
}
CTechnician::CTechnician(const char name[],int laborage, int bonus):CEmployee(name,laborage)
{ nBonus=bonus; }
CTechnician::~CTechnician(){}
void CTechnician::PrintInfo()
{
cout<<"[技术员] 姓名:"<<sName<<" 基本工资+奖金:"<<nLaborage+nBonus<<endl;
}
CManager::CManager(const char name[],int laborage):CEmployee(name,laborage)
{}
CManager::~CManager(){}
void CManager::PrintInfo()
{
cout<<"[经理] 姓名:"<<sName<<" 固定月薪:"<<nLaborage<<endl;;
}
void CManager::operator =(CTechnician &man)
{
strcpy_s(sName,20,man.GetName());
//其它的成员如果相同的就可以赋值过来。不需要的就不用管。
}
/*以下为运行结果
[员工] 姓名:wangaochao 工资:1000
[技术员] 姓名:dengxiaoqin 基本工资+奖金 2800
[经理] 姓名:dengxiaoqin 固定月薪:10000
*/struct UserAnnalsNote
{
int m_nStyle;//用户操作类型,0, 1,- 2, =//以此类推
int** m_szInt;//用户参与计算的值 二维动态数组
int m_nSize;//数组的长度
}
class 类名
{
vector<UserAnnalsNote> _pUserAnnalsNote;//保存用户的操作记录
void 加法(int n1,int n2);
void 减法(int n1,int n2);
以此类推
在每个函数执行的时候,都把用户的的操作记录到_pUserAnnalsNote 这个容器内
void Save(LPCTSTR pFileName);//保存的时候,_pUserAnnalsNote把这个容器内的数据一条一条的顺序保存到对应的文件内就可以了
}
上一个:c++ primer是以什么标准写的?
下一个:c语言和c+ 和c++语言的不同