面向对象A面向对象习题(南航皮德常)(4)

2019-05-24 19:46

为:\\t\}

第10章习题:

10-2、设计Employee类,其数据成员能保存如下信息: 雇员姓名:char *指针;

雇员编号:格式为XXX-L,X是0~9之间的数字,L是A~M之间的字母; 受雇日期:

向该类增加构造函数、析构函数和其他相关函数成员。

设计Employee类的子类EmployeePay,其具有如下数据成员: 月工资:double型变量; 部门号:int型变量;

编写完整的程序,要求用户从键盘输入雇员信息,然后在屏幕上显示这些信息。 //Employee.h #include using namespace std; class Employee {

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 using namespace std; #include\void main() {

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 using namespace std; #include\void main() {

HourlyPay empay(\张三\

cout<<\请输入\的正常工作小时工资: while(true) { double hp;

\\n\


面向对象A面向对象习题(南航皮德常)(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:Journal of Hazardous Materials投稿说明(英文)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: