用mvc写一个简单外卖系统
时间: 2023-10-29 19:06:09 浏览: 43
假设我们需要实现的外卖系统包含以下功能:
1. 用户可以注册、登录、退出登录;
2. 用户可以查看所有可用的餐厅列表;
3. 用户可以查看某个餐厅的所有菜单;
4. 用户可以将菜品加入购物车;
5. 用户可以查看购物车中的所有商品、总价和提交订单;
6. 用户可以查看自己的历史订单记录。
基于上述需求,我们可以采用MVC架构,将应用程序分成三个部分:模型、视图和控制器。以下是一个简单的MVC外卖系统的代码实现。
## 模型
### User
```python
class User:
def __init__(self, username, password):
self.username = username
self.password = password
self.cart = Cart()
self.orders = []
def add_to_cart(self, item):
self.cart.add(item)
def remove_from_cart(self, item):
self.cart.remove(item)
def checkout(self):
order = self.cart.checkout()
self.orders.append(order)
self.cart = Cart()
return order
def get_order_history(self):
return self.orders
```
### Restaurant
```python
class Restaurant:
def __init__(self, name, menu):
self.name = name
self.menu = menu
def get_menu(self):
return self.menu
```
### Menu
```python
class Menu:
def __init__(self, dishes):
self.dishes = dishes
def get_dishes(self):
return self.dishes
```
### Dish
```python
class Dish:
def __init__(self, name, price):
self.name = name
self.price = price
```
### Cart
```python
class Cart:
def __init__(self):
self.items = []
self.total_price = 0
def add(self, item):
self.items.append(item)
self.total_price += item.price
def remove(self, item):
if item in self.items:
self.items.remove(item)
self.total_price -= item.price
def checkout(self):
order = Order(self.items, self.total_price)
return order
```
### Order
```python
class Order:
def __init__(self, items, total_price):
self.items = items
self.total_price = total_price
```
## 视图
以下是一个简单的命令行视图,用于与用户交互。
```python
class View:
def __init__(self, controller):
self.controller = controller
def start(self):
while True:
print("Welcome to the food ordering app!")
print("1. Register")
print("2. Login")
print("3. Quit")
choice = input("Enter your choice: ")
if choice == "1":
username = input("Enter username: ")
password = input("Enter password: ")
self.controller.register(username, password)
elif choice == "2":
username = input("Enter username: ")
password = input("Enter password: ")
self.controller.login(username, password)
elif choice == "3":
break
else:
print("Invalid choice!")
def show_restaurants(self, restaurants):
print("Available restaurants:")
for i, r in enumerate(restaurants):
print(f"{i+1}. {r.name}")
print()
def show_menu(self, menu):
print("Menu:")
for i, d in enumerate(menu.dishes):
print(f"{i+1}. {d.name} (${d.price})")
print()
def show_cart(self, cart):
print("Cart:")
for i, item in enumerate(cart.items):
print(f"{i+1}. {item.name} (${item.price})")
print(f"Total price: ${cart.total_price}")
print()
def show_order(self, order):
print("Order:")
for i, item in enumerate(order.items):
print(f"{i+1}. {item.name} (${item.price})")
print(f"Total price: ${order.total_price}")
print("Thank you for your order!")
print()
def show_order_history(self, orders):
print("Order history:")
for i, order in enumerate(orders):
print(f"{i+1}. Total price: ${order.total_price}")
print()
```
## 控制器
```python
class Controller:
def __init__(self, model, view):
self.model = model
self.view = view
def register(self, username, password):
user = User(username, password)
self.model.users.append(user)
def login(self, username, password):
for user in self.model.users:
if user.username == username and user.password == password:
self.logged_in_user = user
self.view.show_restaurants(self.model.restaurants)
self._restaurant_menu_loop()
break
else:
print("Invalid username or password")
def _restaurant_menu_loop(self):
while True:
choice = input("Enter restaurant number to view menu, or q to quit: ")
if choice == "q":
break
try:
i = int(choice) - 1
restaurant = self.model.restaurants[i]
self.view.show_menu(restaurant.menu)
self._menu_item_loop(restaurant)
except (ValueError, IndexError):
print("Invalid choice!")
def _menu_item_loop(self, restaurant):
while True:
choice = input("Enter menu item number to add to cart, c to checkout, or q to quit: ")
if choice == "q":
break
elif choice == "c":
order = self.logged_in_user.checkout()
self.view.show_order(order)
break
try:
i = int(choice) - 1
dish = restaurant.menu.dishes[i]
self.logged_in_user.add_to_cart(dish)
self.view.show_cart(self.logged_in_user.cart)
except (ValueError, IndexError):
print("Invalid choice!")
def show_order_history(self):
orders = self.logged_in_user.get_order_history()
self.view.show_order_history(orders)
```
## 测试
```python
# 初始化模型
menu1 = Menu([Dish("Burger", 5), Dish("Fries", 2), Dish("Soda", 1)])
menu2 = Menu([Dish("Pizza", 10), Dish("Garlic bread", 3), Dish("Salad", 4)])
restaurant1 = Restaurant("Burger place", menu1)
restaurant2 = Restaurant("Pizza place", menu2)
users = []
restaurants = [restaurant1, restaurant2]
model = Model(users, restaurants)
# 初始化控制器和视图
controller = Controller(model, View(controller))
# 开始运行外卖系统
view.start()
```
以上代码实现了一个简单的外卖系统,包括用户注册、登录、查看餐厅和菜单、加入购物车、提交订单和查看历史订单记录等功能。注意,在实际应用中,我们需要将模型、视图和控制器分别放在不同的文件中,以便于维护和扩展。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)