1、 课程设计报告 课程名称课程名称 _ _C C+面向对象面向对象程序设计程序设计 设计题目设计题目 _ _ 模拟网上模拟网上购书的结账功能购书的结账功能 2015 年 6 月 模拟网上模拟网上购书的结账功能购书的结账功能 一、一、 课题内容和要求课题内容和要求 随着互联网的飞速发展,网上购物越来越受到大家的喜爱,坐在家中,点点鼠标,就有人把你要的 东西送到手中,多惬意呀! 现在要解决的问题是,用户在网上购书以后,系统根据购书人的不同类型计算出购书人的费用。 网上购书的一般过程是:用户首先输入自己的会员号,然后,选择想买的书籍放到购书筐中,选择 结束以后,用户要求系统结账,系统便计算出费用通知用
2、户。本设计并不想模拟网上购书的全部过程, 所以会把选择书的过程略去,假设用户已经选定了两本书。 根据实际情况,确定购书人可以分为三类:普通人、会员、贵宾。 “普通人”的购书费用按照书的原价收取。 、 “会员”的购书费用计算方法是:五星级会员按照原价的 70% 收取,四星级会员按照原价的 80% 收 取, 三星级会员按照原价的 85% 收取, 二星级会员按照原价的 90% 收取, 一星级会员按照原价的 95% 收 取。 “贵宾”的购书费用根据特别指定的折扣率计算收取的费用, 例如折扣率 40%, 则按照实际书费的 60% 收取。 用例图比较简单,在此略去。 二、二、 对象对象(类)设计(类)设计
3、 根据上面的分析,需要设计一个基类 buyer 和它的 3 个派生类 member(会员) 、layfolk(普通人) 、 honoured_guest(贵宾) 。基类中包含的数据成员是姓名、购书人编号、地址、购书金额。member 类中除 了继承 buyer 的 数据 ,还增 加了 会员 级别 leaguer_grade。honoured_guest 则增 加了 折扣率 discount_rate。 在基类中定义了构造函数和对所有类型的购书人相同的操作,getbuyname 负责取出购书者的姓名, getaddress 负责取出购书者的地址,getpay 负责取出购书者应付的金额,getid
4、 则负责取出购书者的编 号。由于对不同购书者的购书金额的计算方法不同,所以不能在基类中确定计算方法,又由于各类购书 者的数据内容不同,显示的方法也不一样,因此,在基类中将 setpay 和 display 定义为虚函数。 在此基础上增加 buyers 和 bookshop 类,再利用 c+STL 里的 vector 类库,实现对图书和购书人信息 的增删补查操作。 有关购书者的类定义如下: class buyer / 基类 protected: string name; / 姓名 int buyerID; / 购书人编号 string address; / 地址 double pay; / 购书
5、金额 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 leaguer_grade;
6、 / 会员级别 public: member(string n, int b, int l, string 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(string n, int b, double r, string a, double p) : buyer(n, b, a, p) / 构造函数 discount_rate = r; void display(); / 显示函数 void setpay(double p); / 计算购书金额 ; class layfolk : public buyer /