实验设计二模拟网上购书的结账功能.docx
《实验设计二模拟网上购书的结账功能.docx》由会员分享,可在线阅读,更多相关《实验设计二模拟网上购书的结账功能.docx(20页珍藏版)》请在冰豆网上搜索。
实验设计二模拟网上购书的结账功能
北京信息科技大学
实验设计报告
课程名称面向对象程序设计实验设计
题目模拟网上购书的结帐功能
指导教师李春强
设计起止日期
设计地点
系别信息安全
专业信息安全
学生姓名__李继文________________
班级/学信安1002/2010012713
成绩___________________
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++6.0或者TC++3.0。
(3)参考书目:
①《C++面向对象程序设计》第10章面向对象设计方法与实例陈维兴等编著中国铁道出版社2004年6月第1版
②《C++面向对象程序设计》陈维兴等编著清华大学出版社2004年6月第1版
5.实验方法与步骤:
界面如下:
(1)这个用户是普通用户:
(2)登陆进去后的界面
(3)查看自己的购物车
(4)结算
(5)用会员用户登陆
会员是有优惠的!
如上图。
(6)用贵宾用户登陆
如上图:
优惠
6.实验总结:
通过这次课设,进一步掌握了c++stl中map这一个容器的使用,并且对于c++stl中的一些算法有了一定的掌握,并且对于模板函数有了一定的了解。
附录:
代码如下:
#include
#include
#include
#include
#include
#include
usingnamespacestd;
classbook
{
private:
stringbookname;
floatprice;
stringpress;
public:
book(stringbn,floatp,stringpr)
{
bookname=bn;
price=p;
press=pr;
}
book(){}
stringgetbn()
{
returnbookname;
}
floatgetp()
{
returnprice;
}
voidbdisplay()
{
cout<<"书名:
"<cout<<"出版社:
"<cout<<"价格:
"<}
};
mapbook1;//书的类定义
classbuyer
{
protected:
stringname;
stringaddress;
stringid;
floatmoney;
public:
vectorbi;
voidsum(mapll)
{
money=0;
for(vector:
:
iteratorir=bi.begin();ir!
=bi.end();ir++)
{
money+=ll.find((*ir))->second.getp();
}
}
stringgetbuyname()
{
returnname;
}
stringgetaddress()
{
returnaddress;
}
stringgetid()
{
returnid;
}
floatgetpay()
{
returnmoney;
}
virtualvoidsetpay()
{
money=money;
}
virtualvoiddisplay()
{
}
buyer(stringn,stringa,stringi,floatm,vectorb)
{
name=n;
address=a;
id=i;
money=m;
bi=b;
}
};
classmember:
publicbuyer//会员的定义
{
private:
inthonoured_guest;
public:
member(stringn,stringa,stringi,floatm,vectorb,inth):
buyer(n,a,i,m,b)
{
honoured_guest=h;
}
voidsetpay()
{
switch(honoured_guest)
{
case1:
money=money*0.95;break;
case2:
money=money*0.9;break;
case3:
money=money*0.85;break;
case4:
money=money*0.8;break;
case5:
money=money*0.7;break;
}
}
voiddisplay()
{
cout<<"亲爱的"<"<cout<<"你的购书款为:
"<setpay();
cout<<"优惠后的购书款:
"<}
};
classhonoured_guest:
publicbuyer
{
private:
floatdisaccont;
public:
honoured_guest(stringn,stringa,stringi,floatm,vectorb,floatd):
buyer(n,a,i,m,b)
{
disaccont=d;
}
voidsetpay()
{
money=money*(1-disaccont);
}
voiddisplay()
{
cout<<"亲爱的贵宾:
"<cout<<"你的购书价格:
"<setpay();
cout<<"优惠后的价格为:
"<}
};
classlayfolk:
publicbuyer//普通用户
{
public:
layfolk(stringn,stringa,stringi,floatm,vectorsc):
buyer(n,a,i,m,sc)
{
}
voidsetpay()
{
money=money;
}
voiddisplay()
{
cout<<"亲爱的用户:
"<cout<<"你的购书款为:
"<setpay();
cout<<"你优惠后购书款为:
"<}
};
classdeal
{
private:
mapbook1;
vectorla;
vectormb;
vectorhgt;
public:
deal(mapm1,vectorla1,vectormb1,vectorhgt1)
{
book1=m1;
la=la1;
mb=mb1;
hgt=hgt1;
}
intjudge(stringll)//判断登录用户的类型
{
if(ll.substr(0,2)=="lf")
return1;
elseif(ll.substr(0,2)=="mb")
return2;
elseif(ll.substr(0,2)=="hg")
return3;
elsereturn4;
}
voidland()
{
stringcid,cname;
vector:
:
iteratorit;
vector:
:
iteratorim;
vector:
:
iteratorih;
boolmybl=true;
intflag;
do
{
cout<<"----------------------------------------------"<cout<<"----------------欢迎你的到来------------------"<cout<<"----------------------------------------------"<cout<<"请输入你的账号"<cin>>cid;
cout<<"请输入用户名"<cin>>cname;
switch(judge(cid))
{
case1:
for(it=la.begin();it!
=la.end();it++)
{
if(cname==(*it).getbuyname()&&cid==(*it).getid())
break;
elsecontinue;
}
if(it==la.end())
{
system("CLS");
cout<<"输入错误或者没有该账号!
请重新输入!
"<continue;
}
else
{
cout<<"登陆成功!
正在跳转中!
请稍候。
。
。
!
"<Sleep(1000);
system("CLS");
boolmybool=true;
do
{
cout<<"请输入你所要执行命令的编号"<cout<<"1:
查看自己的购物车"<cout<<"2:
结算"<cout<<"3:
退出"<cin>>flag;
switch(flag)
{
case1:
for(vector:
:
iteratorio=(*it).bi.begin();io!
=(*it).bi.end();io++)
{
map:
:
iteratorib=book1.find((*io));
ib->second.bdisplay();
cout<<"---------------------------------------------"<}
cout<<"返回主菜单请按:
1"<cout<<"退出请按:
2"<cout<<"重新登录请按:
3"<intf1;
cin>>f1;
switch(f1)
{
case1:
system("CLS");continue;
case2:
system("CLS");mybool=false;mybl=false;break;
case3:
system("CLS");mybool=false;break;
}break;
case2:
(*it).sum(book1);
(*it).display();
cout<<"---------------------------------------------"<cout<<"返回主菜单请按:
1"<cout<<"退出请按:
2"<cout<<"重新登录请按:
3"<cin>>f1;
switch(f1)
{
case1:
system("CLS");
continue;
case2:
system("CLS");mybool=false;mybl=false;break;
case3:
system("CLS");
mybool=false;break;
}
break;
case3:
mybool=false;mybl=false;break;
}
}while(mybool);
}break;
case2:
for(im=mb.begin();im!
=mb.end();im++)
{
if(cname==(*im).getbuyname()&&cid==(*im).getid())
break;
elsecontinue;
}
if(im==mb.end())
{
cout<<"输入错误或者没有该账号!
请重新输入!
"<system("CLS");
continue;
}
else
{
cout<<"登陆成功!
正在跳转中!
请稍候。
。
。
!
"<Sleep(1000);
system("cls");
boolmya=true;
do
{
cout<<"请输入你所要执行命令的编号"<cout<<"1:
查看自己的购物车"<cout<<"2:
结算"<cout<<"3:
退出"<cin>>flag;
switch(flag)
{
case1:
for(vector:
:
iteratorio=(*im).bi.begin();io!
=(*im).bi.end();io++)
{
map:
:
iteratorib=book1.find((*io));
ib->second.bdisplay();
cout<<"---------------------------------------------"<}
cout<<"返回主菜单请按:
1"<cout<<"退出请按:
2"<cout<<"重新登录请按:
3"<intf1;
cin>>f1;
switch(f1)
{
case1:
system("CLS");
continue;
case2:
mya=false;mybl=false;break;
case3:
system("CLS");
mya=false;
break;
}
break;
case2:
(*im).sum(book1);
(*im).display();
cout<<"---------------------------------------------"<cout<<"返回主菜单请按:
1"<cout<<"退出请按:
2"<cout<<"重新登录请按:
3"<cin>>f1;
switch(f1)
{
case1:
system("CLS");
continue;
case2:
mya=false;mybl=false;break;
case3:
system("CLS");
mya=false;
break;
}
break;
case3:
mya=false;mybl=false;break;
}
}while(mya);
}break;
case3:
boolmyb=true;
for(ih=hgt.begin();ih!
=hgt.end();ih++)
{
if(cname==(*ih).getbuyname()&&cid==(*ih).getid())
break;
elsecontinue;
}
if(ih==hgt.end())
{
cout<<"输入错误或者没有该账号!
请重新输入!
"<system("CLS");
continue;
}
else
{
cout<<"登陆成功!
正在跳转中!
请稍候。
。
。
!
"<Sleep(1000);
system("cls");
do
{
cout<<"请输入你所要执行命令的编号"<cout<<"1:
查看自己的购物车"<cout<<"2:
结算"<cout<<"3:
退出"<cin>>flag;
switch(flag)
{
case1:
for(vector:
:
iteratorio=(*ih).bi.begin();io!
=(*ih).bi.end();io++)
{
map:
:
iteratorib=book1.find((*io));
ib->second.bdisplay();
cout<<"---------------------------------------------"<}
cout<<"返回主菜单请按:
1"<cout<<"退出请按:
2"<cout<<"重新登录请按:
3"<intf1;
cin>>f1;
switch(f1)
{
case1:
system("CLS");
continue;
case2:
myb=false;mybl=false;break;
case3:
system("CLS");myb=false;break;
}
break;
case2:
(*ih).sum(book1);
(*ih).display();
cout<<"---------------------------------------------"<cout<<"返回主菜单请按: