为:\\t\}
第10章习题:
10-2、设计Employee类,其数据成员能保存如下信息: 雇员姓名:char *指针;
雇员编号:格式为XXX-L,X是0~9之间的数字,L是A~M之间的字母; 受雇日期:
向该类增加构造函数、析构函数和其他相关函数成员。
设计Employee类的子类EmployeePay,其具有如下数据成员: 月工资:double型变量; 部门号:int型变量;
编写完整的程序,要求用户从键盘输入雇员信息,然后在屏幕上显示这些信息。 //Employee.h #include
protected:
char * Name;
char EmployCode[6]; char EmployDate[9]; public:
Employee(char *);
bool setEmployCode(char *); bool setEmployDate(char *); ~Employee();
char *getName(){return Name;}
char *getEmployCode() {return EmployCode;} char *getEmployDate(){return EmployDate;} };
Employee::Employee(char *n) {
Name = new char[strlen(n) + 1]; strcpy(Name,n); }
Employee::~Employee() {
delete [] Name; }
bool Employee::setEmployCode(char* c) {
if(strlen(c)!=5)
{cout<<\编号长度为5个字符,请重输!\\n\ else if(!isdigit(c[0])||!isdigit(c[1])||!isdigit(c[2]))
{cout<<\编号前三位必须是0~9的数字,请重输!\\n\ else if(c[3]!='-')
{cout<<\编号第四位必须是-,请重输!\\n\ else if(c[4]>'M'||c[4]<'A')
{cout<<\编号第五位必须是A~M之间的字母,请重输!\\n\ else
{strcpy(EmployCode,c); return true;} }
bool Employee::setEmployDate(char* d) {
long tmp,yy,mm,dd; if(strlen(d)!=8)
{cout<<\日期长度为8个字符,请重输!\\n\ else
{tmp=atoi(d);yy=tmp/10000;mm=tmp/1000;dd=tmp0;} if(yy<2000)
{cout<<\受雇年份应大于2000,请重输!\\n\ else if(mm<1||mm>12)
{cout<<\月份应在1~12之间,请重输!\\n\ else if(dd<1||dd>31)
{cout<<\日期应在1~31之间,请重输!\\n\ else
{strcpy(EmployDate,d); return true;} }
//EmployeePay.h
#include\
class EmployeePay : public Employee {
protected:
double MonthPay; int DepartNum; public:
EmployeePay(char *,int);
void setMonthPay(double p){MonthPay=p;} double getMonthPay(){return MonthPay;} int getDepartNum() {return DepartNum;} void InfoShow(); };
EmployeePay::EmployeePay(char* n,int dnum) : Employee(n)
{ DepartNum=dnum; }
void EmployeePay::InfoShow() { cout<<\雇员的信息如下:\\n\ cout<<\姓名:\\t\
cout<<\编号:\\t\ cout<<\受雇日期:\\t\ cout<<\部门号:\\t\ cout<<\月工资:\\t\}
//main.cpp
#include
EmployeePay empay(\张三\ double p;
cout<<\请输入\的编号:\\n\ while(true) { char c[6];
cin.getline(c,6);
if(empay.setEmployCode(c)) break; }
cout<<\请输入\的受雇日期:\\n\ while(true) { char d[9];
cin.getline(d,9);
if(empay.setEmployDate(d)) break; }
cout<<\请输入\的月工资:\\n\ cin>>p;
empay.setMonthPay(p); empay.InfoShow(); }
10-3、设计EmployeePay的子类HourlyPay,其数据成员能存储如下信息: 正常工作每小时的工资、超时工作每小时的工资和已经工作的小时数。 编写程序,要求用户输入信息并做有效性检验。 //Employee.h见上题 //EmployeePay.h见上题 //HourlyPay.h
#include\
class HourlyPay : public EmployeePay {
protected:
double HourPay,ExHourPay; int Hours,ExHours; public:
HourlyPay(char*,int); bool setHourPay(double); bool setExHourPay(double); bool setHours(int); bool setExHours(int);
void setMonthPay(){MonthPay=HourPay*Hours+ExHourPay*ExHours;} };
HourlyPay::HourlyPay(char* n,int d):EmployeePay(n,d)
{}
bool HourlyPay::setHourPay(double hp) {
if(hp<0||hp>50) return false; HourPay=hp; return true; }
bool HourlyPay::setExHourPay(double exhp) {
if(exhp<0||exhp>100) return false; ExHourPay=exhp; return true; }
bool HourlyPay::setHours(int h) {
if(h<0||h>176) return false; Hours=h; return true; }
bool HourlyPay::setExHours(int exh) {
if(exh<0||exh>64) return false; ExHours=exh; return true; }
//main.cpp
#include
HourlyPay empay(\张三\
cout<<\请输入\的正常工作小时工资: while(true) { double hp;
\\n\