软件工程个人项目——买书的最低价格

题目要求:

书店针对《哈利波特》系列书籍进行促销活动,一共5卷,用编号0、1、2、3、4表示,单独一卷售价8元, 具体折扣如下所示:

                                  本数                  折扣

                                   2                       5%

                                   3                       10%

                                   4                       20%

                                   5                       25%

根据购买的卷数以及本数,会对应不同折扣规则情况。单数一本书只会对应一个折扣规则,例如购买了两本卷1,一本卷2,则可以享受5%的折扣,另外一本卷一则不享受优惠。
设计算法能够计算出读者购买一批书的最低价格。

一、设计思想
       本题采用的是找规律的方法,经过计算会发现,购买的数量在5以内的时候没什么问题,都是按照成套的购买打折的。但是从6开始就会出现多种组合方式,我们就逐一进行计算,发现10以内只有8是特殊的。她不是购买5的倍数最便宜,而是采用4+4的方式最便宜。所以我们先按照5的倍数记录折扣率方便以后的计算,然后再把购买情况按照10分类。单独讨论余数为8的情况:8按照4+4的方式购买,其余按照5的倍数成套购买。余数不为8的情况都以5的多少倍成套购买,剩下的单独购买。
二、代码实现
 
 1 //求买书的最低价格 2016/6/3 Zhao Ziyin
 2 #include<iostream>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int num = 0, s, b;
 8     int multi, remain;
 9     double p_price = 8;//单价为8
10     double rate, low_price;
11 
12     //输入
13     cout << "输入买书的数量:";
14     cin >> num;
15     while (num < 1)
16     {
17         cout << "输入的数量有误!"<<endl;
18         cout << "输入买书的数量:";
19         cin >> num;
20     }
21 
22     multi = num / 10;//除以10的商
23     remain = num % 10;//余数
24     s = num % 5;//除以5的余数
25     b = num / 5;//
26     switch (s)//根据数量是5的几倍求折扣率rate
27     {
28     case 0: rate = 0.75; break;
29     case 1: rate = 1; break;
30     case 2: rate = 0.95; break;
31     case 3: rate = 0.9; break;
32     case 4: rate = 0.8; break;
33     }
34     if (remain == 8)//8是特例,是4+4的形式
35     {
36         low_price = (multi * 10 * p_price * 0.75) + (2 * 4 * p_price * 0.8);
37     }
38     else
39     {
40         low_price = (b * 5 * p_price * 0.75) + (s * p_price * rate);
41     }
42     cout << "您购买这些书的最低价格为:" << low_price << endl;
43 
44     return 0;     
45 }
三、实现截图
 输入错误处理:
输入10以内:
特殊以8为基准的数:
其他情况:
         
四、个人总结
       本次实验并不难,但是开始时候我们还是没有什么思路,老师提醒我们把情况都列举出来找规律。我以后要学习这种编程的方法。
       还有就是代码的简略问题,开始的时候我用switch语句编写从余数为0到5的情况,写到6的时候我发现这些的情况都是相通的,无非是5的倍数不同、剩余单独购买的本数不同、折扣率不同,只有余数为8的时候不是以5为基准写的。所以我修改了代码,只是用if……else写出了余数是否为8,然后把情况合在一起写,这样减少了很多代码冗余,然后我看代码的时候也能比较清晰。
       最后就是要注意一些编程的细节,,貌似最近都在用java写安卓,swich语句开始居然忘记了写break!然后定义int类型的变量习惯了把这次的low_price等价格最开始也定义成了int……下次要细心啊……
posted on 2016-06-03 16:49  波棱盖儿卡秃噜皮  阅读(162)  评论(0编辑  收藏  举报