模拟 KFC 的点餐系统,假设若干餐品可点,每个餐品有一个价格,同时还有餐品的组合优惠[要求:] 1、显示简单的菜单,每个餐品对应一个字母,输入相应字母则表示点相应餐品2、一次输入若干餐品,按回车结束(单独输入 0 表示退出程序的执行)3、单品品种不超过 26 种,大小写不敏感,餐品组合的字母间无顺序限制4、点餐结束后,根据点餐的内容计算价格,其中组合优惠要计算优惠价5、假设优惠组合不存在重复(例: 不存在 “条+可乐”/“条+甜筒”同时优惠)6、输出结果中相同餐品要合并,后面加*m 即可 7、不用考虑时间限制(比如工作日午餐,周一~五 10:00-14:00 等限制不考虑) 8、要求餐品的种类、单价、优惠项目等修改后,程序能自动适应并打印新信息
时间: 2024-01-17 19:04:37 浏览: 148
以下是模拟 KFC 的点餐系统的 C++ 代码实现:
```C++
#include <iostream>
#include <map>
#include <vector>
#include <string>
using namespace std;
// 餐品信息结构体
struct Food {
string name; // 餐品名称
double price; // 餐品单价
};
// 优惠信息结构体
struct Discount {
vector<string> foods; // 优惠餐品组合
double discount; // 优惠金额
};
// KFC 点餐系统类
class KFCOrder {
public:
// 构造函数
KFCOrder() {
// 初始化餐品信息
foods_['A'] = { "汉堡", 15.0 };
foods_['B'] = { "薯条", 8.0 };
foods_['C'] = { "可乐", 4.0 };
foods_['D'] = { "炸鸡", 20.0 };
// 初始化优惠信息
discounts_.push_back({ { "A", "B" }, 5.0 }); // AB 组合优惠 5 元
discounts_.push_back({ { "C", "D" }, 8.0 }); // CD 组合优惠 8 元
}
// 程序入口
void run() {
// 显示菜单
showMenu();
// 输入点餐信息
string order;
getline(cin, order);
// 处理点餐信息
while (order != "0") {
double totalPrice = 0.0;
// 统计餐品数量和价格
map<string, int> count;
for (int i = 0; i < order.length(); i++) {
char c = toupper(order[i]);
if (foods_.find(c) == foods_.end()) {
continue; // 非法输入
}
string name = foods_[c].name;
double price = foods_[c].price;
count[name]++;
totalPrice += price;
}
// 处理优惠
for (auto discount : discounts_) {
bool isDiscount = true;
for (auto food : discount.foods) {
if (count[food] <= 0) {
isDiscount = false;
break;
}
}
if (isDiscount) {
totalPrice -= discount.discount;
}
}
// 输出订单信息
cout << "您的订单:\n";
for (auto food : count) {
cout << food.first << " * " << food.second << endl;
}
cout << "总价:" << totalPrice << " 元" << endl;
// 继续输入点餐信息
cout << "请输入您的点餐信息:\n";
getline(cin, order);
}
}
private:
// 显示菜单
void showMenu() {
cout << "欢迎光临 KFC,我们的菜单如下:\n";
for (auto food : foods_) {
cout << food.first << " - " << food.second.name << ":"
<< food.second.price << " 元\n";
}
cout << "请根据菜单输入您的点餐信息,输入 0 表示结束:\n";
}
// 餐品信息
map<char, Food> foods_;
// 优惠信息
vector<Discount> discounts_;
};
int main() {
KFCOrder order;
order.run();
return 0;
}
```
以上代码实现了一个简单的 KFC 点餐系统,可以根据实际需求进行修改和扩展。
阅读全文