使用C++的链表结构实现,不要用vector 饭店点菜系统的设计 系统有两类用户:管理员和食客。 系统应该实现权限管理、点餐管理、订单管理、结账管理、菜谱评分等功能。 头文件只有#include<iostream> #include<string> using namespace std; 代码部分给出注释,并给出主函数测试
时间: 2024-03-24 13:38:52 浏览: 77
好的,以下是使用C++的链表结构实现饭店点菜系统的设计,代码中有详细注释:
```c++
#include <iostream>
#include <string>
using namespace std;
// 菜品结构体,包含菜品名、价格、评分等信息
struct Dish {
string name; // 菜品名
double price; // 菜品价格
double rating; // 菜品评分
Dish* next; // 指向下一个菜品的指针
};
// 菜单链表,每个节点包含一个菜品的信息
class Menu {
private:
Dish* head; // 链表头指针,指向第一个菜品
public:
Menu() { // 构造函数,初始化链表头指针为nullptr
head = nullptr;
}
~Menu() { // 析构函数,释放链表中所有节点的内存
Dish* current = head;
while (current != nullptr) {
Dish* temp = current;
current = current->next;
delete temp;
}
}
void addDish(string name, double price, double rating) { // 向菜单中添加一个菜品
Dish* newDish = new Dish;
newDish->name = name;
newDish->price = price;
newDish->rating = rating;
newDish->next = nullptr;
if (head == nullptr) { // 如果菜单为空,新菜品成为第一个节点
head = newDish;
}
else { // 如果菜单不为空,将新菜品添加到链表末尾
Dish* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newDish;
}
}
void display() { // 显示菜单中的所有菜品
Dish* current = head;
cout << "菜品\t\t价格\t\t评分" << endl;
while (current != nullptr) {
cout << current->name << "\t\t" << current->price << "\t\t" << current->rating << endl;
current = current->next;
}
}
};
// 订单结构体,包含订单号、菜品名、数量、总价等信息
struct Order {
int id; // 订单号
string dishName; // 菜品名
int quantity; // 数量
double totalPrice; // 总价
Order* next; // 指向下一个订单的指针
};
// 订单链表,每个节点包含一个订单的信息
class OrderList {
private:
Order* head; // 链表头指针,指向第一个订单
int nextId; // 下一个订单号
public:
OrderList() { // 构造函数,初始化链表头指针为nullptr,下一个订单号为1
head = nullptr;
nextId = 1;
}
~OrderList() { // 析构函数,释放链表中所有节点的内存
Order* current = head;
while (current != nullptr) {
Order* temp = current;
current = current->next;
delete temp;
}
}
void addOrder(string dishName, int quantity, double price) { // 向订单链表中添加一个订单
Order* newOrder = new Order;
newOrder->id = nextId;
newOrder->dishName = dishName;
newOrder->quantity = quantity;
newOrder->totalPrice = quantity * price;
newOrder->next = nullptr;
nextId++;
if (head == nullptr) { // 如果订单链表为空,新订单成为第一个节点
head = newOrder;
}
else { // 如果订单链表不为空,将新订单添加到链表末尾
Order* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newOrder;
}
}
void display() { // 显示订单链表中的所有订单
Order* current = head;
cout << "订单号\t\t菜品\t\t数量\t\t总价" << endl;
while (current != nullptr) {
cout << current->id << "\t\t" << current->dishName << "\t\t" << current->quantity << "\t\t" << current->totalPrice << endl;
current = current->next;
}
}
};
// 餐厅类,包含菜单和订单链表
class Restaurant {
private:
Menu menu; // 菜单
OrderList orderList; // 订单链表
public:
void addDish(string name, double price, double rating) { // 向菜单中添加一个菜品
menu.addDish(name, price, rating);
}
void displayMenu() { // 显示菜单中的所有菜品
menu.display();
}
void addOrder(string dishName, int quantity, double price) { // 向订单链表中添加一个订单
orderList.addOrder(dishName, quantity, price);
}
void displayOrderList() { // 显示订单链表中的所有订单
orderList.display();
}
};
int main() {
Restaurant restaurant;
// 添加菜品
restaurant.addDish("糖醋排骨", 25.0, 4.5);
restaurant.addDish("宫保鸡丁", 20.0, 4.0);
restaurant.addDish("鱼香肉丝", 22.0, 4.2);
// 显示菜单
cout << "菜单:" << endl;
restaurant.displayMenu();
// 下订单
restaurant.addOrder("糖醋排骨", 2, 25.0);
restaurant.addOrder("宫保鸡丁", 1, 20.0);
// 显示订单
cout << "订单:" << endl;
restaurant.displayOrderList();
return 0;
}
```
以上是一个简单的饭店点菜系统的设计,包含菜单管理和订单管理两个功能。可以根据实际需求进行扩展和修改。
阅读全文