MOOC清华《程序设计基础》第9章:自动售卖程序 v 1.0

xiaoxiao2021-02-28  107

//可以一边分析一边设计一边写代码 //先考虑整体框架,再考虑细节,称为“自顶向下,逐步求精” #include <iostream> #include <cstdlib> #include <cmath> #include <iomanip> using namespace std; void ShowMenu() { cout << "****************************************" << endl; cout << "* 欢迎使用自动售卖机,请输入您的选择。 *" << endl; cout << "* 1. 下订单 *" << endl; cout << "* 2. 退出自动售卖 *" << endl; cout << "****************************************" << endl; } void ShowSubMenu() { cout << "++++++++++++++++++++++++++++++++++++++++" << endl; cout << "+ 开始处理订单,请输入您的选择。 +" << endl; cout << "+ 1. 购买苹果(3.5元/公斤) +" << endl; cout << "+ 2. 购买香蕉(2.7元/公斤) +" << endl; cout << "+ 3. 结账 +" << endl; cout << "+ 4. 放弃购买 +" << endl; cout << "++++++++++++++++++++++++++++++++++++++++" << endl; }//苹果是北方水果,香蕉是南方水果,所以北京那边香蕉比苹果贵,但在武汉苹果比香蕉贵 //子菜单的花边框用+组成,区别于主菜单的*边框 void DealOrder() { double apple_price = 3.5; double apple_weight = 0; double banana_price = 2.7; double banana_weight = 0; double sum = 0; //需严格注意变量的作用域 double weight = 0; while(1) { //显示子菜单 ShowSubMenu(); //todo:显示已买水果总价 cout << "已购买水果总价: " << fixed << setprecision(2) << setw(8) << sum << "元" << endl; cout << "您的选择是:"; int input; cin >> input; switch(input) { case 1: //todo:处理买苹果 cout << "请输入称重(公斤):"; cin >> weight; sum += apple_price * weight; //注意分清weight和apple_weight apple_weight += weight; break; case 2: //todo:处理买香蕉 cout << "请输入称重(公斤):"; cin >> weight; sum += banana_price * weight; banana_weight += weight; break; case 3: //todo:显示总价 //cout << "已购买水果总价:" << fixed << setprecision(2) << setw(8) << sum << "元" << endl; if(sum > 1E-6) { cout << "您一共购买了"; if(fabs(apple_weight) > 1E-6) //加绝对值的原因是允许“买了苹果后嫌买多了又退几个”的情况 cout << apple_weight << "公斤苹果,"; if(fabs(banana_weight) > 1E-6) //加绝对值原因同上,退货的时候也要称重,所以存在负数,总重可能略小于0 cout << banana_weight << "公斤香蕉,"; cout << "总价是" << sum << "元" << endl; //核心技巧:前面已经对sum作了输出流格式控制,然后所有跟sum发生计算关系的变量 //都统一成了与sum相同的输出流格式,所以这里就不必再加格式控制符了 system("pause"); } case 4: system("cls"); return; } } } int main() { while(1) { ShowMenu(); cout << "您的选择是:"; int input; cin >> input; switch(input) { case 1: DealOrder(); break; case 2: return 0; } } }

主流程图:

子流程图:

运行结果:

转载请注明原文地址: https://www.6miu.com/read-22068.html

最新回复(0)