1、C+实验设计二模拟网上购书的结账功能北京信息科技大学实验设计报告课程名称 面向对象程序设计实验设计题 目 模拟网上购书的结帐功能 指导教师 李 春 强 设计起止日期 设计地点 系 别 信息管理学院 专 业 _信息安全_ _学生姓名 _郭瑞_班级/学号 _ 信安0901/25_ 成 绩 _1.课程设计目的:通过本实验使学生利用面向对象程序设计软件开发方法,即软件开发过程划分为明显的几个阶段:问题分析和功能定义、对象设计及实现、核心控制设计、编码与测试、进化等实现模拟网上购书的结帐功能方面的应用。2.课程设计内容:用户在网上购书以后,系统根据购书人的不同类型计算出购书人的费用。网上购书的一般过程:
2、用户首先输入会员号,然后,选择想要买的书籍放到购书筐中,选择结束后,用户要求系统结帐,系统便计算出费用通知用户。注:本例并不模拟网上购书的全部过程,所以把选择书的过程略去,假设用户已经选定了两本书。3.课程设计要求:(1)根据实际情况,确定购书人分为3类:普通人、会员、贵宾。“普通人”的购书费用按照原价收取;“会员”购书费的计算方法是:五星级会员按照原价的70%收取, 四星级会员按照原价的80%收取, 三星级会员按照原价的85%收取, 二星级会员按照原价的90%收取, 一星级会员按照原价的95%收取。“贵宾”的购书费根据特别指定的折扣率计算机收取的费用,例如折扣率40%,则按照实际书费的60%
3、收取。(2)对象(类)的设计根据(1)分析,需要设计一个基类buyer和它的3各派生类member(会员) 、layfolk(普通人) 、honoured_guest(贵宾)。基类中包括的数据成员是姓名、购书人编号、地址、购书金额。member类中除了继承了buyer的数据,还增加了会员级别:honoured_guest则增加了折扣率一项。在基类中定义了构造函数和对所有类型的购书人相同的操作,getbuyname()负责取出购书者的姓名;getaddress()负责取出购书者的地址;getpay()负责取出购书者应付出的金额;getid()负责取出购书者的编号。由于对不同购书者的购书额的计算方
4、法不同,所以不能在基类中确定计算方法;又由于各类购书者的数据内容不同,显示的方法也不一样.因此在基类中将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首先确定基类成员函数,需要定义
5、两个虚函数setpay和display作为重载。2定义其派生类,member,layfolk,honoured_guest ,完成初始化构造。并且分别定义其私有成员计算对应的会员等级或3者折扣率,然后重新定义虚函数setpay和display4定义book类返回书的编号和价格。5 定义主函数,通过基类指针调用派生类或者自身类对象成员函数的方式实现功能。具体实现代码如下:#includeiostream#includestringusing namespace std;class buyer/基类protected: string name;/姓名 int buyerid;/购书人编号 stri
6、ng address;/地址 double pay;/购书金额public: buyer(); buyer(string n,int b,string a,double p); string getbuyname();/取姓名 string getaddress();/取地址 double getpay(); /取应付金额 int getid();/取购书人编号 virtual void display()=0;/显示对象 virtual void setpay(double=0)=0;/计算购书金额 ;class member:public buyer/会员类 int grade;/会员级别
7、public: member(string n,int b,int t,string a,double p):buyer(n,b,a,p) grade=t;/构造函数 void display();/显示对象 void setpay(double p);/计算购书金额;class guest:public buyer/贵宾类 double discount_rate;/贵宾折扣率public: guest(string n,int b,double r,string a,double p):buyer(n,b,a,p) discount_rate=r;/构造函数 void display();
8、/显示对象 void setpay(double p);/计算购书金额 ;class layfolk:public buyer/普通人员类public: layfolk(string n,int b,string a,double p):buyer(n,b,a,p) /构造函数 void display();/显示对象 void setpay(double p);/计算购书金额 ;/基类数据初始化buyer:buyer()/基类的构造函数 name=; buyerid=0; address=; pay=0;buyer: buyer(string n,int b,string a,double
9、p)/基类的构造函数 name=n; buyerid=b; address=a; pay=p;double buyer:getpay()/去购书人金额 return pay; string buyer:getaddress()/去购书人地址 return address; string buyer:getbuyname()/去购书人姓名 return name; int buyer:getid()/去购书人编号 return buyerid;/ member类数据初始化,成员函数的定义void member:display()/会员类的显示函数 cout购书人姓名:namet; cout购书人
10、编号:buyeridt; cout购书人为会员,级别:graden; cout地址:addressn;void member:setpay(double p)/会员类的计算购书金额 if(grade=1)/会员级别为1 pay=*p+pay; else if(grade=2)/会员级别为2 pay=*p+pay; else if(grade=3)/会员级别为3 pay=*p+pay; else if(grade=4)/会员级别为4 pay=*p+pay; else if(grade=5)/会员级别为5 pay=*p+pay; else cout级别错误!; void guest:display
11、()/贵宾类的显示函数 cout购书人姓名:namet; cout购书人编号:buyeridt; cout购书人为贵宾,折扣率为:discount_rate*100%n; cout地址:addressn; void guest:setpay(double p)/贵宾类的计算购书金额 pay=pay+(1-discount_rate)*p;void layfolk:display()/普通类的显示函数 cout购书人姓名namet; cout购书人编号:buyeridt; cout购书人为普通人n; cout地址:addressn;void layfolk:setpay(double p)/普通
12、类的计算购书金额 pay=pay+p; class book/图书类protected: string book_id;/书号 string book_name;/书名 string auther;/作者 string publishing;/出版社 double price;/定价public: book();/构造函数 book(string b_id,string b_n,string au,string pu,double pr); /*重载构造函数*/ void display(); string getbook_id();/取书号 string getbook_name();/取书
13、名 string getauther();/取作者 string getpublishing();/取出版社 double getprice();/取定价;book:book(string b_id,string b_n,string au,string pu,double pr) book_id=b_id; book_name=b_n; auther=au; publishing=pu; price=pr;book:book() book_id=; book_name=; auther=; publishing=; price=0;void book:display() cout书号:boo
14、k_idt; cout书名:book_namet; cout作者:authert; cout出版社:publishingt; cout定价:pricen; string book:getbook_id()/取书号 return book_id; string book:getbook_name()/取书名 return book_name; string book:getauther()/取作者 return auther; string book:getpublishing()/取出版社 return publishing; double book:getprice()/取定价 return
15、 price; /*int menu() int flag; cout是否继续:继续为1,不继续为0flag; return flag;*/void main() int i=0,buyerid,flag; book *c2;/ 基类指针指向派生类对象! layfolk b1(郭瑞,1,安徽,8); guest b2(丁珊珊,2,上海,0); member b3(张国荣,3,5,香港,0); buyer *b3=&b1,&b2,&b3; / ! /*用指针数组存放了buyer类的3个对象的地址*/ book c1(7-302-04504-6,程序设计,留在得,清华,25); book c2(7
16、-402-03889-6,数据结构,华英美,北大,21); c0=&c1; c1=&c2; cout购书人信息endl; for(i=0;idisplay();/ 虚函数的重载! cout图书信息endl; for(i=0;idisplay ();logo: cout请输入购书人的编号:buyerid; flag=0; for(i=0;igetid()=buyerid) flag=1; break; if(!flag) cout编号不存在setpay(c0-getprice ();/计算购书金额 bi-setpay(c1-getprice (); coutendl购书人需要付费:getpay()endl; goto logo;6.实验总结:通过此次试验,对于虚函数的应用进一步熟悉,特别是基类指针对于虚函数的调用,同时对于派生类的构造,继承等等知识点进一步巩固,对C+继承的理念的应用更具体的熟悉。附录:说明:1.实验过程由学生记录实验的过程,包括画出流程图、操作过程、遇到哪些问题以及如何解决等;2.实验总结由学生在实验后填写,总结本次实验的收获、未解决的问题以及体会和建议等;3.源程序(带注释)、代码、具体语句等,若表格空间不足时可作为附录另外附页。4.程序测试后,将多组测试结果附在程序后;5.提交报告时请将说明部分去掉。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1