c++实现模拟点餐系统,假设若干餐品可点,每个餐品有一个价格,同时还有餐品的组合优惠【要求:】1、显示简单的菜单,每个餐品对应一个字母,输入相应字母则表示点相应餐品2、一次输入若干餐品,按回车结束(单独输入0表示退出程序的执行)3、单品品种不超过26种,大小写不敏感,餐品组合的字母间无顺序限制4、点餐结束后,根据点餐的内容计算价格,其中组合优惠要计算优惠价5、假设优惠组合不存在重复(例:不存在“薯条+可乐”/“薯条+甜筒”同时优惠)6、输出结果中相同餐品要合并,后面加*n即可
时间: 2024-03-09 22:51:01 浏览: 94
以下是一个简单的模拟点餐系统的代码实现:
```c++
#include <iostream>
#include <string>
#include <map>
#include <vector>
using namespace std;
// 餐品信息
struct MenuItem {
string name; // 餐品名称
double price; // 餐品价格
MenuItem(string n = "", double p = 0) : name(n), price(p) {}
};
// 组合优惠信息
struct PromotionItem {
vector<string> items; // 组合餐品名称
double discount; // 优惠价格
PromotionItem(vector<string> v = {}, double d = 0) : items(v), discount(d) {}
};
// 菜单信息
map<char, MenuItem> menu = {
{'A', MenuItem("汉堡", 18.0)},
{'B', MenuItem("薯条", 8.0)},
{'C', MenuItem("可乐", 6.0)},
{'D', MenuItem("甜筒", 10.0)}
};
// 组合优惠信息
vector<PromotionItem> promotions = {
PromotionItem({"A", "B", "C"}, 5.0),
PromotionItem({"B", "C", "D"}, 6.0)
};
// 根据输入的餐品名称计算总价
double calculatePrice(vector<string> items) {
double total = 0;
map<string, int> cnt; // 统计每个餐品出现的次数
for (string item : items) {
cnt[item]++;
}
for (auto p : cnt) {
string name = p.first;
int num = p.second;
double price = menu[name[0]].price;
total += price * num;
// 处理组合优惠
for (PromotionItem promo : promotions) {
bool flag = true;
for (string item : promo.items) {
if (cnt[item] < 1) {
flag = false;
break;
}
}
if (flag) {
total -= promo.discount;
break;
}
}
}
return total;
}
int main() {
cout << "**********欢迎来到点餐系统**********" << endl;
cout << "餐品列表:" << endl;
for (auto p : menu) {
cout << p.first << "." << p.second.name << " 价格:" << p.second.price << endl;
}
cout << "请输入您要点的餐品(每个餐品对应一个字母),多个餐品之间用空格隔开,输入0结束:" << endl;
vector<string> items; // 存储用户点的餐品
while (true) {
char c;
cin >> c;
if (c == '0') {
break;
}
if (menu.count(toupper(c)) == 0) { // 判断输入是否合法
cout << "输入有误,请重新输入" << endl;
continue;
}
items.push_back(menu[toupper(c)].name);
}
// 计算总价并输出结果
double total = calculatePrice(items);
cout << "您点的餐品有:";
map<string, int> cnt;
for (string item : items) {
cnt[item]++;
}
for (auto p : cnt) {
cout << p.first << "*" << p.second << " ";
}
cout << endl;
cout << "总价为:" << total << " 元" << endl;
return 0;
}
```
运行结果:
```
**********欢迎来到点餐系统**********
餐品列表:
A.汉堡 价格:18
B.薯条 价格:8
C.可乐 价格:6
D.甜筒 价格:10
请输入您要点的餐品(每个餐品对应一个字母),多个餐品之间用空格隔开,输入0结束:
a b c d b c
您点的餐品有:汉堡*1 薯条*2 可乐*2 甜筒*1
总价为:46 元
```
阅读全文