根据以下要求,使用MySQL编写一个餐馆管理系统,并使用JAVA或C语言给出合适的代码。要求:主要有前台、顾客、后厨三个方面;在前台部分,餐馆对外有一个相对稳定的菜单,上面有菜品的照片和价格,但是也会时不时增加、减少或者修改菜单;顾客可以点菜和用餐结束之后核实票据并付款;票据中有菜品及其价格的列表、下单时间、总费用等信息;后厨主要负责材料的维护,餐馆内部记录着菜单上每道菜需要消耗的材料量。收到顾客订单后,依据菜品准备材料。
时间: 2024-03-15 21:41:36 浏览: 181
为了实现这个餐馆管理系统,需要先设计数据库。以下是一个简单的餐馆管理系统的数据库设计:
1. 菜品表(dishes)
| 字段名 | 数据类型 | 说明 |
| ------------ | --------- | ------------------------------ |
| id | int(11) | 菜品ID |
| name | varchar | 菜品名称 |
| description | varchar | 菜品描述 |
| price | decimal | 菜品价格 |
| image_path | varchar | 菜品图片路径 |
| create_time | timestamp | 菜品创建时间 |
| update_time | timestamp | 菜品最近更新时间 |
| ingredients | varchar | 菜品所需材料 |
| category_id | int(11) | 菜品所属分类ID |
| is_available | tinyint | 菜品是否可用(1表示可用,0表示不可用) |
2. 菜品分类表(category)
| 字段名 | 数据类型 | 说明 |
| ----------- | --------- | ---------- |
| id | int(11) | 分类ID |
| name | varchar | 分类名称 |
| description | varchar | 分类描述 |
| create_time | timestamp | 分类创建时间 |
| update_time | timestamp | 分类最近更新时间 |
3. 订单表(orders)
| 字段名 | 数据类型 | 说明 |
| ------------- | --------- | ---------------------- |
| id | int(11) | 订单ID |
| table_number | int(11) | 桌号 |
| create_time | timestamp | 订单创建时间 |
| total_amount | decimal | 总金额 |
| is_paid | tinyint | 是否已支付(1表示已支付,0表示未支付) |
| payment_time | timestamp | 支付时间 |
| payment_type | varchar | 支付方式 |
| waiter_name | varchar | 服务员姓名 |
| chef_name | varchar | 厨师姓名 |
| customer_name | varchar | 顾客姓名 |
4. 订单明细表(order_details)
| 字段名 | 数据类型 | 说明 |
| ------------ | --------- | ---------------------------- |
| id | int(11) | 订单明细ID |
| order_id | int(11) | 订单ID |
| dish_id | int(11) | 菜品ID |
| dish_name | varchar | 菜品名称 |
| dish_price | decimal | 菜品单价 |
| dish_amount | int(11) | 菜品数量 |
| create_time | timestamp | 订单明细创建时间 |
| update_time | timestamp | 订单明细最近更新时间 |
| is_available | tinyint | 订单明细是否可用(1表示可用,0表示不可用) |
5. 材料表(ingredients)
| 字段名 | 数据类型 | 说明 |
| ----------------- | --------- | ---------------------- |
| id | int(11) | 材料ID |
| name | varchar | 材料名称 |
| description | varchar | 材料描述 |
| quantity | decimal | 材料数量 |
| unit | varchar | 材料单位 |
| create_time | timestamp | 材料创建时间 |
| update_time | timestamp | 材料最近更新时间 |
| last_replenish_at | timestamp | 上次补货时间 |
| min_quantity | decimal | 最小库存量 |
| max_quantity | decimal | 最大库存量 |
| category_id | int(11) | 材料所属分类ID |
| is_available | tinyint | 材料是否可用(1表示可用,0表示不可用) |
6. 材料分类表(ingredient_categories)
| 字段名 | 数据类型 | 说明 |
| ----------- | --------- | ---------- |
| id | int(11) | 分类ID |
| name | varchar | 分类名称 |
| description | varchar | 分类描述 |
| create_time | timestamp | 分类创建时间 |
| update_time | timestamp | 分类最近更新时间 |
以上是餐馆管理系统的数据库设计,接下来是JAVA代码示例:
1. 前台代码
```java
import java.util.List;
public class FrontDesk {
private Menu menu;
private List<Order> orders;
public FrontDesk(Menu menu) {
this.menu = menu;
this.orders = new ArrayList<>();
}
public void displayMenu() {
menu.display();
}
public void placeOrder(Order order) {
orders.add(order);
}
public void checkout() {
double total = 0;
for (Order order : orders) {
total += order.getTotalAmount();
}
System.out.println("Total amount: " + total);
}
}
```
2. 顾客代码
```java
import java.util.List;
import java.util.Scanner;
public class Customer {
private int tableNumber;
private Scanner scanner;
private List<Order> orders;
public Customer(int tableNumber, List<Order> orders) {
this.tableNumber = tableNumber;
this.orders = orders;
this.scanner = new Scanner(System.in);
}
public void placeOrder(Menu menu) {
Order order = new Order(tableNumber);
menu.display();
while (true) {
System.out.print("Enter dish ID (0 to finish): ");
int dishId = scanner.nextInt();
if (dishId == 0) {
break;
}
Dish dish = menu.getDishById(dishId);
if (dish == null) {
System.out.println("Invalid dish ID, please try again.");
continue;
}
System.out.print("Enter dish quantity: ");
int quantity = scanner.nextInt();
order.addDish(dish, quantity);
}
orders.add(order);
}
public void checkout() {
for (Order order : orders) {
if (order.getTableNumber() == tableNumber) {
order.display();
orders.remove(order);
break;
}
}
}
}
```
3. 后厨代码
```java
import java.util.List;
public class Chef {
private List<Order> orders;
public Chef(List<Order> orders) {
this.orders = orders;
}
public void prepareOrders() {
for (Order order : orders) {
if (order.getStatus() == OrderStatus.NEW) {
for (OrderDetail detail : order.getDetails()) {
Dish dish = detail.getDish();
List<Ingredient> ingredients = dish.getIngredients();
for (Ingredient ingredient : ingredients) {
ingredient.consume(ingredient.getQuantity() * detail.getQuantity());
}
}
order.setStatus(OrderStatus.READY);
}
}
}
}
```
以上是JAVA代码示例。
阅读全文