您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > C++实验设计二(模拟网上购书的结账功能)
—1—北京信息科技大学实验设计报告课程名称面向对象程序设计实验设计题目模拟网上购书的结帐功能指导教师李春强设计起止日期设计地点系别信息管理学院专业____信息安全____学生姓名____郭瑞________班级/学号__信安0901/2009012225_成绩___________________—2—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定义为虚函数。—3—4.实验条件:(1)主要设备:586或更高机型,256MB或更高的内存,40G或更大的硬盘。(2)主要软件:①操作系统可为Windows9X、WinMe、Win2000或更高版本等;②开发环境为VC++6.0或者TC++3.0。(3)参考书目:①《C++面向对象程序设计》第10章面向对象设计方法与实例陈维兴等编著中国铁道出版社2004年6月第1版②《C++面向对象程序设计》陈维兴等编著清华大学出版社2004年6月第1版5.实验方法与步骤:1首先确定基类成员函数,需要定义两个虚函数setpay和display作为重载。2定义其派生类,member,layfolk,honoured_guest,完成初始化构造。并且分别定义其私有成员计算对应的会员等级或3者折扣率,然后重新定义虚函数setpay和display4定义book类返回书的编号和价格。5定义主函数,通过基类指针调用派生类或者自身类对象成员函数的方式实现功能。具体实现代码如下:#includeiostream#includestringusingnamespacestd;classbuyer//基类{protected:stringname;//姓名intbuyerid;//购书人编号stringaddress;//地址doublepay;//购书金额public:buyer();buyer(stringn,intb,stringa,doublep);stringgetbuyname();//取姓名—4—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;—5—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购书人姓名:name\t;cout购书人编号:buyerid\t;cout购书人为会员,级别:grade\n;cout地址:address\n;}voidmember::setpay(doublep)//会员类的计算购书金额{if(grade==1)//会员级别为1pay=0.95*p+pay;elseif(grade==2)//会员级别为2pay=0.9*p+pay;elseif(grade==3)//会员级别为3pay=0.85*p+pay;elseif(grade==4)//会员级别为4pay=0.8*p+pay;elseif(grade==5)//会员级别为5pay=0.75*p+pay;elsecout级别错误!;—6—}voidguest::display()//贵宾类的显示函数{cout购书人姓名:name\t;cout购书人编号:buyerid\t;cout购书人为贵宾,折扣率为:discount_rate*100%\n;cout地址:address\n;}voidguest::setpay(doublep)//贵宾类的计算购书金额{pay=pay+(1-discount_rate)*p;}voidlayfolk::display()//普通类的显示函数{cout购书人姓名name\t;cout购书人编号:buyerid\t;cout购书人为普通人\n;cout地址:address\n;}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();—7—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书号:book_id\t;cout书名:book_name\t;cout作者:auther\t;cout出版社:publishing\t;cout定价:price\n;}stringbook::getbook_id()//取书号{returnbook_id;}stringbook::getbook_name()//取书名{returnbook_name;}stringbook::getauther()//取作者{returnauther;}stringbook::getpublishing()//取出版社{returnpublishing;}doublebook::getprice()//取定价{returnprice;}—8—/*intmenu(){intflag;cout是否继续?:继续为1,不继续为0endl;cinflag;returnflag;}*/voidmain(){inti=0,buyerid,flag;book*c[2];//基类指针指向派生类对象!layfolkb1(郭瑞,1,安徽,8);guestb2(丁珊珊,2,0.6,上海,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购书人信息endl;for(i=0;i3;i++)//显示3个继承了buyer类的对象b[i]-display();//虚函数的重载!cout图书信息endl;for(i=0;i2;i++)//显示book对象的信息c[i]-display();logo:cout请输入购书人的编号:endl;cinbuyerid;flag=0;for(i=0;i3;i++)if(b[i]-getid()==buyerid){flag=1;break;}if(!flag)cout编号不存在endl;else{b[i]-setpay(c[0]-getprice());//计算购书金额b[i]-setpay(c[1]-ge
本文标题:C++实验设计二(模拟网上购书的结账功能)
链接地址:https://www.777doc.com/doc-6495293 .html