首先得对这个问题进行分析,我们知道在网上买书的流程为输入会员号,如果不是会员则跳过,然后选择所要购买的书籍放如购书筐中,选择结束后,用户要求结帐,系统则根据用户的身份计算出他所需要付的钱数,整个系统很复杂,所以我在这里要解决的只是最后一步,既系统根据用户的身份计算出他所需要付的钱款。
因为有三种不同身份的人,但是他们又有共同之处,比如姓名,购书人编号,地址,购书金额,因此我们设计一个基类buyer类,其他的类layfolk(普通人),member(会员),honoured_guest(贵宾)均由它派生而出。基类中定义构造函数和对所有购书者相同的操作,函数getbuyername()用于得到购书者的姓名,getaddress()用于得到购书者的地址,getpay()用来取出购书者应付的金额,getid()用来取出购书者的编号。由于各类购书者的数据内容不同,显示方法也不一样,因此在基类中将setpay&display定义为虚函数。基类定义如下:
class buyer
{
protected:
char* name;
int buyerID;
char* address;
double pay;
public:
buyer();
buyer(char* n,int b,char* a,double p);
~buyer();
char* getbuyname();
int getid();
char* getaddress();
double getpay();
virtual void display()=0;
virtual void setpay(double=0)=0;
};
买书的过程中我们还需要得到关于书的一些基本情况,故我们还需要定义一个book类用来完成对书的一些基本操作。类book定义如下:
class book
{
protected:
char* bookID;
char* bookname;
char* auther;
char* publishing;
double price;
public:
book();
book(char* bid,char* bn,char* au,char* pu,double pr);
~book();
void display();
char* getbookID();
char* getbookname();
char* getauther();
char* getpublish();
double getprice();
};
在主函数中,我们建立了三个派生类的实例来证实程序的正确性,并假设已经选好两本书籍(book类对象),并将购书人的基本情况和书本的基本情况都显示出来,虽然在实际买书的过程中购书人的基本情况是不需要显示的,但我们将它显示出来只是为了证明程序的正确性和结果的可读性。
完整的程序如下:
//buy.h
#include <iostream.h>
#include <string.h>
class buyer
{
protected:
char* name;