面向对象程序设计实例——模拟网上购书的结帐功能
来源:互联网 发布:苹果电脑软件推荐 编辑:程序博客网 时间:2024/05/18 02:26
首先得对这个问题进行分析,我们知道在网上买书的流程为输入会员号,如果不是会员则跳过,然后选择所要购买的书籍放如购书筐中,选择结束后,用户要求结帐,系统则根据用户的身份计算出他所需要付的钱数,整个系统很复杂,所以我在这里要解决的只是最后一步,既系统根据用户的身份计算出他所需要付的钱款。
因为有三种不同身份的人,但是他们又有共同之处,比如姓名,购书人编号,地址,购书金额,因此我们设计一个基类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;
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;
};
class member:public buyer
{
int leaguer_grade;
public:
member(char* n,int b,int l,char* a,double p):buyer(n,b,a,p)
{leaguer_grade=l;}
void display();
void setpay(double p);
};
class honoured_guest:public buyer
{
double discount_rate;
public:
honoured_guest(char* n,int b,double r,char* a,double p):buyer(n,b,a,p)
{discount_rate=r;}
void display();
void setpay(double p);
};
class layfolk:public buyer
{
public:
layfolk(char* n,int b,char* a,double p):buyer(n,b,a,p)
{}
void display();
void setpay(double p);
};
buyer::buyer()
{
name=" ";
buyerID=0;
address=" ";
pay=0;
}
buyer::buyer(char* n,int b,char* a,double p)
{
name=new char[strlen(n)+1];
strcpy(name,n);
buyerID=b;
address=new char[strlen(a)+1];
strcpy(address,a);
pay=p;
}
buyer::~buyer()
{
delete [] name;
delete [] address;
}
double buyer::getpay()
{
return pay;
}
char* buyer::getaddress()
{
return address;
}
char* buyer::getbuyname()
{
return name;
}
int buyer::getid()
{
return buyerID;
}
void member::display()
{
cout<<"购书人姓名:"<<name<<"/t";
cout<<"购书人编号:"<<buyerID<<"/t";
cout<<"购书人地址:"<<address<<"/t";
cout<<"购书人为会员,级别:"<<leaguer_grade<<endl;
}
void member::setpay(double p)
{
if(leaguer_grade==1)
pay=0.95*p+pay;
else if(leaguer_grade==2)
pay=0.9*p+pay;
else if(leaguer_grade==3)
pay=0.85*p+pay;
else if(leaguer_grade==4)
pay=0.8*p+pay;
else if(leaguer_grade==5)
pay=0.7*p+pay;
else
cout<<"级别错误!";
}
void honoured_guest::display()
{
cout<<"购书人姓名:"<<name<<"/t";
cout<<"购书人编号:"<<buyerID<<"/t";
cout<<"购书人地址:"<<address<<"/t";
cout<<"购书人为贵宾!折扣率为:"<<discount_rate<<endl;
}
void honoured_guest::setpay(double p)
{
pay=pay+(1-discount_rate)*p;
}
void layfolk::display()
{
cout<<"购书人姓名:"<<name<<"/t";
cout<<"购书人编号:"<<buyerID<<"/t";
cout<<"购书人地址:"<<address<<"/t";
cout<<"购书人为普通人"<<endl;
}
void layfolk::setpay(double p)
{
pay=pay+p;
}
//buy.h结束
//book.h
#include <iostream.h>
#include <string.h>
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::book()
{
bookID=" ";
bookname=" ";
auther=" ";
publishing=" ";
price=0;
}
book::book(char* bid,char* bn,char* au,char* pu,double pr)
{
bookID=new char[strlen(bid)+1];
strcpy(bookID,bid);
bookname=new char[strlen(bn)+1];
strcpy(bookname,bn);
auther=new char[strlen(au)+1];
strcpy(auther,au);
publishing=new char[strlen(pu)+1];
strcpy(publishing,pu);
price=pr;
}
char* book::getbookID()
{
return bookID;
}
char* book::getbookname()
{
return bookname;
}
char* book::getauther()
{
return auther;
}
char* book::getpublish()
{
return publishing;
}
double book::getprice()
{
return price;
}
void book::display()
{
cout<<"书号:"<<bookID<<endl;
cout<<"书名:"<<bookname<<endl;
cout<<"作者:"<<auther<<endl;
cout<<"出版社:"<<publishing<<endl;
cout<<"定价:"<<price<<endl;
}
book::~book()
{
delete [] bookID;
delete [] bookname;
delete [] auther;
delete [] publishing;
}
//book.h结束
//主函数buybook.cpp
#include <iostream.h>
#include "buy.h"
#include "book.h"
void main()
{
int i=0,buyerid;
book *c[2];
layfolk b1("小王",1,"武汉",0);
honoured_guest b2("小李",2,0.6,"郑州",0);
member b3("小赵",3,5,"济南",0);
buyer *b[3]={&b1,&b2,&b3};
book c1("566-625-365","c++","richard","qinghua",25);
book c2("655-365-654","c","zihan","beida",39);
c[0]=&c1;
c[1]=&c2;
cout<<"购书人信息:/n/n";
for(i=0;i<3;i++)
b[i]->display();
cout<<"/n图书信息:/n/n";
for(i=0;i<2;i++)
c[i]->display();
cout<<"请输入购书人编号:";
cin>>buyerid;
for(i=0;i<3;i++)
if(b[i]->getid()==buyerid)
{
b[i]->setpay(c[0]->getprice());
b[i]->setpay(c[1]->getprice());
cout<<endl<<"购书人需要付费:"<<b[i]->getpay()<<endl;
}
else
{
cout<<"错误的编号!"<<endl;
break;
}
}
- 面向对象程序设计实例——模拟网上购书的结帐功能
- js温故而知新—面向对象的程序设计
- 面向对象的程序设计——理解对象
- 面向对象的程序设计——创建对象
- JavaScript面向对象程序设计—创建对象的模式
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 面向对象的程序设计
- 看到一家网上购书的了
- 面向对象程序设计——什么是对象
- 面向对象程序设计——理解对象
- 数据库脚本:Database.sql
- 个人受益的一点看书的建议
- 数据库脚本:System.sql
- 升级Linux硬件驱动结构
- ASP.NET中提示音乐的实现
- 面向对象程序设计实例——模拟网上购书的结帐功能
- 常见短语歧义结构
- 检测远程URL是否存在的三种方法
- live:微软把操作系统塞进了浏览器(出自:米晓彬专栏)
- 数据库重建方法小节
- [学习笔记][ASP.NET2.0]Must declare the variable '@Rid' exception
- Java Bean 生成器
- [ZZ]成功站长必看:购物网站的经营要素
- Tiles框架介绍