写一个c++程序,不能定义string类变量,模拟KFC的点餐系统,假设若干餐品可点,每个餐品有一个价格,同时还有餐品的组合优惠,商品名称/单价的信息存储必须是定义结构体并进行相应的访问。要求:1、显示简单的菜单,每个餐品对应一个字母,输入相应字母则表示点相应餐品 2、一次输入若干餐品,按回车结束 4、点餐结束后,根据点餐的内容计算价格,其中组合优惠要计算优惠价 6、输出结果中相同餐品要合并,后面加*n即可
时间: 2024-03-08 16:50:54 浏览: 68
好的,以下是一个简单的实现:
```c++
#include <iostream>
using namespace std;
// 定义餐品结构体
struct Food {
string name; // 名称
double price; // 单价
};
// 定义餐品数组和组合优惠数组
Food foods[] = {
{"炸鸡", 20},
{"薯条", 10},
{"可乐", 6},
{"汉堡", 18}
};
struct Discount {
int food1; // 餐品1编号
int food2; // 餐品2编号
double price; // 优惠价
};
Discount discounts[] = {
{0, 1, 25},
{2, 3, 20},
{0, 2, 22}
};
int main() {
// 显示菜单
cout << "欢迎来到KFC,请点餐:" << endl;
for (int i = 0; i < sizeof(foods) / sizeof(Food); i++) {
cout << (char)('A' + i) << ". " << foods[i].name << " " << foods[i].price << "元/份" << endl;
}
// 输入餐品
string order;
getline(cin, order);
// 计算价格
double totalPrice = 0;
int count[sizeof(foods) / sizeof(Food)] = {0}; // 统计每个餐品的数量
for (char c : order) {
if (c >= 'A' && c <= 'A' + sizeof(foods) / sizeof(Food) - 1) { // 菜单中存在该餐品
int index = c - 'A';
count[index]++;
totalPrice += foods[index].price;
}
}
// 处理组合优惠
for (int i = 0; i < sizeof(discounts) / sizeof(Discount); i++) {
int c1 = count[discounts[i].food1];
int c2 = count[discounts[i].food2];
if (c1 > 0 && c2 > 0) { // 存在组合优惠的两个餐品都被点了
int discountCount = min(c1, c2); // 取两个餐品数量的最小值作为优惠数量
totalPrice -= discounts[i].price * discountCount;
count[discounts[i].food1] -= discountCount;
count[discounts[i].food2] -= discountCount;
}
}
// 输出结果
cout << "您点了:";
for (int i = 0; i < sizeof(foods) / sizeof(Food); i++) {
if (count[i] > 0) {
cout << foods[i].name << "*" << count[i] << " ";
}
}
cout << endl;
cout << "总价:" << totalPrice << "元" << endl;
return 0;
}
```
这个程序使用结构体存储餐品信息和组合优惠信息,通过循环遍历菜单数组和组合优惠数组来显示菜单和计算价格,使用一个数组来统计每个餐品被点了多少份,最后输出点餐结果和总价。
阅读全文