C++实验设计二模拟网上购书的结账功能.docx

上传人:b****5 文档编号:12213214 上传时间:2023-04-17 格式:DOCX 页数:12 大小:40.04KB
下载 相关 举报
C++实验设计二模拟网上购书的结账功能.docx_第1页
第1页 / 共12页
C++实验设计二模拟网上购书的结账功能.docx_第2页
第2页 / 共12页
C++实验设计二模拟网上购书的结账功能.docx_第3页
第3页 / 共12页
C++实验设计二模拟网上购书的结账功能.docx_第4页
第4页 / 共12页
C++实验设计二模拟网上购书的结账功能.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C++实验设计二模拟网上购书的结账功能.docx

《C++实验设计二模拟网上购书的结账功能.docx》由会员分享,可在线阅读,更多相关《C++实验设计二模拟网上购书的结账功能.docx(12页珍藏版)》请在冰豆网上搜索。

C++实验设计二模拟网上购书的结账功能.docx

C++实验设计二模拟网上购书的结账功能

北京信息科技大学

实验设计报告

 

课程名称面向对象程序设计实验设计

题目模拟网上购书的结帐功能

指导教师李春强

设计起止日期

设计地点

 

系别信息管理学院

专业____信息安全____

学生姓名____郭瑞________

班级/学号__信安0901/25_

成绩___________________

1.课程设计目的:

通过本实验使学生利用面向对象程序设计软件开发方法,即软件开发过程划分为明显的几个阶段:

问题分析和功能定义、对象设计及实现、核心控制设计、编码与测试、进化等实现模拟网上购书的结帐功能方面的应用。

2.课程设计内容:

用户在网上购书以后,系统根据购书人的不同类型计算出购书人的费用。

网上购书的一般过程:

用户首先输入会员号,然后,选择想要买的书籍放到购书筐中,选择结束后,用户要求系统结帐,系统便计算出费用通知用户。

注:

本例并不模拟网上购书的全部过程,所以把选择书的过程略去,假设用户已经选定了两本书。

3.课程设计要求:

(1)根据实际情况,确定购书人分为3类:

普通人、会员、贵宾。

①“普通人”的购书费用按照原价收取;

②“会员”购书费的计算方法是:

五星级会员按照原价的70%收取,四星级会员按照原价的80%收取,三星级会员按照原价的85%收取,二星级会员按照原价的90%收取,一星级会员按照原价的95%收取。

③“贵宾”的购书费根据特别指定的折扣率计算机收取的费用,例如折扣率40%,则按照实际书费的60%收取。

(2)对象(类)的设计

①根据

(1)分析,需要设计一个基类buyer和它的3各派生类member(会员)、layfolk(普通人)、honoured_guest(贵宾)。

基类中包括的数据成员是姓名、购书人编号、地址、购书金额。

member类中除了继承了buyer的数据,还增加了会员级别:

honoured_guest则增加了折扣率一项。

②在基类中定义了构造函数和对所有类型的购书人相同的操作,getbuyname()负责取出购书者的姓名;getaddress()负责取出购书者的地址;getpay()负责取出购书者应付出的金额;getid()负责取出购书者的编号。

由于对不同购书者的购书额的计算方法不同,所以不能在基类中确定计算方法;又由于各类购书者的数据内容不同,显示的方法也不一样.因此在基类中将setpay和display定义为虚函数。

4.实验条件:

(1)主要设备:

586或更高机型,256MB或更高的内存,40G或更大的硬盘。

(2)主要软件:

①操作系统可为Windows9X、WinMe、Win2000或更高版本等;

②开发环境为VC++或者TC++。

(3)参考书目:

①《C++面向对象程序设计》第10章面向对象设计方法与实例陈维兴等编着中国铁道出版社2004年6月第1版

②《C++面向对象程序设计》陈维兴等编着清华大学出版社2004年6月第1版

5.实验方法与步骤:

1首先确定基类成员函数,需要定义两个虚函数setpay和display作为重载。

2定义其派生类,member,layfolk,honoured_guest,完成初始化构造。

并且分别定义其私有成员计算对应的会员等级或3者折扣率,然后重新定义虚函数setpay和display

4定义book类返回书的编号和价格。

5定义主函数,通过基类指针调用派生类或者自身类对象成员函数的方式实现功能。

具体实现代码如下:

 

#include"iostream"

#include"string"

usingnamespacestd;

classbuyer//基类

{

protected:

stringname;//姓名

intbuyerid;//购书人编号

stringaddress;//地址

doublepay;//购书金额

public:

buyer();

buyer(stringn,intb,stringa,doublep);

stringgetbuyname();//取姓名

stringgetaddress();//取地址

doublegetpay();//取应付金额

intgetid();//取购书人编号

virtualvoiddisplay()=0;//显示对象

virtualvoidsetpay(double=0)=0;//计算购书金额

};

classmember:

publicbuyer//会员类

{

intgrade;//会员级别

public:

member(stringn,intb,intt,stringa,doublep):

buyer(n,b,a,p)

{grade=t;}//构造函数

voiddisplay();//显示对象

voidsetpay(doublep);//计算购书金额

};

classguest:

publicbuyer//贵宾类

{

doublediscount_rate;//贵宾折扣率

public:

guest(stringn,intb,doubler,stringa,doublep):

buyer(n,b,a,p)

{discount_rate=r;}//构造函数

voiddisplay();//显示对象

voidsetpay(doublep);//计算购书金额

};

classlayfolk:

publicbuyer//普通人员类

{

public:

layfolk(stringn,intb,stringa,doublep):

buyer(n,b,a,p)

{}//构造函数

voiddisplay();//显示对象

voidsetpay(doublep);//计算购书金额

};

//基类数据初始化

buyer:

:

buyer()//基类的构造函数

{

name="";

buyerid=0;

address="";

pay=0;

}

buyer:

:

buyer(stringn,intb,stringa,doublep)//基类的构造函数

{

name=n;

buyerid=b;

address=a;

pay=p;

}

doublebuyer:

:

getpay()//去购书人金额

{returnpay;}

stringbuyer:

:

getaddress()//去购书人地址

{returnaddress;}

stringbuyer:

:

getbuyname()//去购书人姓名

{returnname;}

intbuyer:

:

getid()//去购书人编号

{returnbuyerid;}

//member类数据初始化,成员函数的定义

voidmember:

:

display()//会员类的显示函数

{

cout<<"购书人姓名:

"<

cout<<"购书人编号:

"<

cout<<"购书人为会员,级别:

"<

cout<<"地址:

"<

}

voidmember:

:

setpay(doublep)//会员类的计算购书金额

{

if(grade==1)//会员级别为1

pay=*p+pay;

elseif(grade==2)//会员级别为2

pay=*p+pay;

elseif(grade==3)//会员级别为3

pay=*p+pay;

elseif(grade==4)//会员级别为4

pay=*p+pay;

elseif(grade==5)//会员级别为5

pay=*p+pay;

else

cout<<"级别错误!

";

}

voidguest:

:

display()//贵宾类的显示函数

{

cout<<"购书人姓名:

"<

cout<<"购书人编号:

"<

cout<<"购书人为贵宾,折扣率为:

"<

cout<<"地址:

"<

}

voidguest:

:

setpay(doublep)//贵宾类的计算购书金额

{

pay=pay+(1-discount_rate)*p;

}

voidlayfolk:

:

display()//普通类的显示函数

{

cout<<"购书人姓名"<

cout<<"购书人编号:

"<

cout<<"购书人为普通人"<<"\n";

cout<<"地址:

"<

}

voidlayfolk:

:

setpay(doublep)//普通类的计算购书金额

{pay=pay+p;}

 

classbook//图书类

{

protected:

stringbook_id;//书号

stringbook_name;//书名

stringauther;//作者

stringpublishing;//出版社

doubleprice;//定价

public:

book();//构造函数

book(stringb_id,stringb_n,stringau,stringpu,doublepr);

/*重载构造函数*/

voiddisplay();

stringgetbook_id();//取书号

stringgetbook_name();//取书名

stringgetauther();//取作者

stringgetpublishing();//取出版社

doublegetprice();//取定价

};

book:

:

book(stringb_id,stringb_n,stringau,stringpu,doublepr)

{

book_id=b_id;

book_name=b_n;

auther=au;

publishing=pu;

price=pr;

}

book:

:

book()

{

book_id="";

book_name="";

auther="";

publishing="";

price=0;

}

voidbook:

:

display()

{

cout<<"书号:

"<

cout<<"书名:

"<

cout<<"作者:

"<

cout<<"出版社:

"<

cout<<"定价:

"<

}

stringbook:

:

getbook_id()//取书号

{returnbook_id;}

stringbook:

:

getbook_name()//取书名

{returnbook_name;}

stringbook:

:

getauther()//取作者

{returnauther;}

stringbook:

:

getpublishing()//取出版社

{returnpublishing;}

doublebook:

:

getprice()//取定价

{returnprice;}

/*intmenu()

{

intflag;

cout<<"是否继续:

继续为1,不继续为0"<

cin>>flag;

returnflag;

}*/

voidmain()

{

inti=0,buyerid,flag;

book*c[2];//基类指针指向派生类对象!

layfolkb1("郭瑞",1,"安徽",8);

guestb2("丁珊珊",2,,"上海",0);

memberb3("张国荣",3,5,"香港",0);

buyer*b[3]={&b1,&b2,&b3};//!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

!

/*用指针数组存放了buyer类的3个对象的地址*/

bookc1("7-302-04504-6","程序设计","留在得","清华",25);

bookc2("7-402-03889-6","数据结构","华英美","北大",21);

c[0]=&c1;

c[1]=&c2;

cout<<"购书人信息"<

for(i=0;i<3;i++)//显示3个继承了buyer类的对象

b[i]->display();//虚函数的重载!

cout<<"图书信息"<

for(i=0;i<2;i++)//显示book对象的信息

c[i]->display();

logo:

cout<<"请输入购书人的编号:

"<

cin>>buyerid;

flag=0;

for(i=0;i<3;i++)

if(b[i]->getid()==buyerid)

{flag=1;break;}

if(!

flag)

cout<<"编号不存在"<

else

{

b[i]->setpay(c[0]->getprice());//计算购书金额

b[i]->setpay(c[1]->getprice());

cout<

"<getpay()<

}

gotologo;

}

 

6.实验总结:

通过此次试验,对于虚函数的应用进一步熟悉,特别是基类指针对于虚函数的调用,同时对于派生类的构造,继承等等知识点进一步巩固,对C++继承的理念的应用更具体的熟悉。

 

附录:

 

说明:

1.实验过程由学生记录实验的过程,包括画出流程图、操作过程、遇到哪些问题以及如何解决等;

2.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等;

3.源程序(带注释)、代码、具体语句等,若表格空间不足时可作为附录另外附页。

4.程序测试后,将多组测试结果附在程序后;

5.提交报告时请将说明部分去掉。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1