写一个充分利用c++面向对象思想的酒水管理系统
时间: 2023-12-24 13:05:00 浏览: 23
好的,我可以给你写一个更充分利用C++面向对象思想的酒水管理系统,以下是代码实现:
```cpp
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 酒水类
class Drink {
public:
Drink(string name, int price, int count) : name(name), price(price), count(count) {}
string getName() const {
return name;
}
int getPrice() const {
return price;
}
int getCount() const {
return count;
}
void addCount(int num) {
count += num;
}
virtual void showInfo() const {
cout << "名称:" << name << ",价格:" << price << "元,库存:" << count << "瓶" << endl;
}
virtual int getDiscount() const {
return 100;
}
protected:
string name; // 名称
int price; // 价格
int count; // 数量
};
// 啤酒类
class Beer : public Drink {
public:
Beer(string name, int price, int count, bool isImported) : Drink(name, price, count), isImported(isImported) {}
void showInfo() const override {
cout << "啤酒:" << name << ",价格:" << price << "元,库存:" << count << "瓶,";
if (isImported) {
cout << "进口";
} else {
cout << "国产";
}
cout << endl;
}
int getDiscount() const override {
if (isImported) {
return 90;
} else {
return 95;
}
}
private:
bool isImported; // 是否进口
};
// 红酒类
class Wine : public Drink {
public:
Wine(string name, int price, int count, int age) : Drink(name, price, count), age(age) {}
void showInfo() const override {
cout << "红酒:" << name << ",价格:" << price << "元,库存:" << count << "瓶,年份:" << age << "年" << endl;
}
int getDiscount() const override {
if (age >= 5) {
return 85;
} else {
return 90;
}
}
private:
int age; // 年份
};
// 酒水管理类
class DrinkManager {
public:
// 添加酒水
void addDrink(Drink* drink) {
drinks.push_back(drink);
}
// 根据名称查找酒水
Drink* findDrink(string name) {
for (auto& drink : drinks) {
if (drink->getName() == name) {
return drink;
}
}
return nullptr;
}
// 显示所有酒水
void showDrinks() const {
cout << "酒水列表:" << endl;
for (auto& drink : drinks) {
drink->showInfo();
}
}
// 购买酒水
bool buyDrink(string name, int num) {
Drink* drink = findDrink(name);
if (drink == nullptr) {
cout << "找不到该酒水" << endl;
return false;
} else if (drink->getCount() < num) {
cout << "库存不足" << endl;
return false;
} else {
int price = drink->getPrice() * num * drink->getDiscount() / 100;
drink->addCount(-num);
cout << "购买成功,共支付:" << price << "元" << endl;
return true;
}
}
private:
vector<Drink*> drinks; // 酒水列表
};
int main() {
DrinkManager manager;
Drink* beer1 = new Beer("百威", 5, 10, false);
Drink* beer2 = new Beer("青岛", 4, 20, true);
Drink* wine1 = new Wine("拉菲", 100, 5, 5);
Drink* wine2 = new Wine("窖藏", 50, 10, 2);
manager.addDrink(beer1);
manager.addDrink(beer2);
manager.addDrink(wine1);
manager.addDrink(wine2);
while (true) {
cout << "请选择:1.查看酒水 2.购买酒水 3.退出" << endl;
int choice;
cin >> choice;
if (choice == 1) {
manager.showDrinks();
} else if (choice == 2) {
cout << "请输入酒水名称和购买数量:" << endl;
string name;
int num;
cin >> name >> num;
manager.buyDrink(name, num);
} else if (choice == 3) {
break;
} else {
cout << "输入有误,请重新选择" << endl;
}
}
delete beer1;
delete beer2;
delete wine1;
delete wine2;
return 0;
}
```
这个酒水管理系统充分利用了C++面向对象思想,使用了继承和多态等特性。它支持添加啤酒和红酒两种类型的酒水,并且可以根据不同的酒水类型显示不同的信息和折扣率。在购买酒水时,会根据酒水的信息计算出实际需要支付的金额。
希望这个更加优化的酒水管理系统能够满足你的需求,如果有任何问题或者需要改进的地方,欢迎指出。