Java Swing 点餐 APP 开源项目探讨

点餐应用是现代餐饮行业的重要组成部分。随着技术的发展,越来越多的餐厅使用在线点餐应用来提高效率和用户体验。本文将探讨一个基于 Java Swing 的点餐 APP 开源项目,包括其结构、功能实现及代码示例。

项目概述

该项目实现了一个简单的点餐系统,用户可以通过界面选择菜品并下单。系统包含以下几个基本功能:

  1. 菜品展示
  2. 购物车功能
  3. 订单管理
  4. 数据持久化

项目结构

项目结构如下:

├── src/
│   ├── main/
│   │   ├── java/
│   │   │   ├── com/
│   │   │   │   ├── restaurant/
│   │   │   │   │   ├── model/
│   │   │   │   │   │   ├── Dish.java
│   │   │   │   │   │   ├── Order.java
│   │   │   │   │   ├── controller/
│   │   │   │   │   │   ├── OrderController.java
│   │   │   │   │   ├── view/
│   │   │   │   │   │   ├── MenuView.java
│   │   │   │   │   │   ├── CartView.java
│   ├── resources/
│   │   ├── images/

在此结构中,model 包含数据模型,controller 包含操作数据的控制逻辑,view 则负责用户界面的展示。

关系图

项目的基本实体关系如下所示:

erDiagram
    DISH {
        int id
        string name
        float price
    }
    
    ORDER {
        int id
        string customerName
        date orderDate
    }
    
    ORDER_DISH {
        int orderId
        int dishId
        int quantity
    }

    ORDER }|--o| ORDER_DISH : contains
    DISH }|--o| ORDER_DISH : contains

功能实现

菜品展示

在菜单界面中,用户可以查看所有可点餐的菜品。代码示例如下:

package com.restaurant.view;

import javax.swing.*;
import java.awt.*;
import java.util.List;

public class MenuView extends JFrame {
    private JPanel panel;

    public MenuView(List<Dish> dishes) {
        setTitle("菜单");
        setSize(400, 600);
        panel = new JPanel();
        panel.setLayout(new GridLayout(dishes.size(), 1));

        for (Dish dish : dishes) {
            JButton button = new JButton(dish.getName() + " - $" + dish.getPrice());
            button.addActionListener(e -> {
                // 添加到购物车功能
            });
            panel.add(button);
        }

        add(panel);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
}

购物车功能

用户选中的菜品会被存储在购物车中,便于下单。以下是购物车的简单实现:

package com.restaurant.model;

import java.util.ArrayList;
import java.util.List;

public class Cart {
    private List<OrderDish> items;

    public Cart() {
        items = new ArrayList<>();
    }

    public void addItem(Dish dish, int quantity) {
        items.add(new OrderDish(dish.getId(), quantity));
    }

    public List<OrderDish> getItems() {
        return items;
    }

    public void clear() {
        items.clear();
    }
}

订单管理

用户支付后,会生成订单,订单信息如顾客姓名和订单日期会被存储。代码示例如下:

package com.restaurant.model;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Order {
    private int id;
    private String customerName;
    private Date orderDate;
    private List<OrderDish> orderDishes;

    public Order(String customerName) {
        this.customerName = customerName;
        this.orderDate = new Date();
        this.orderDishes = new ArrayList<>();
    }

    public void addDish(OrderDish orderDish) {
        this.orderDishes.add(orderDish);
    }

    // Getter and Setter methods...
}

数据持久化

为了方便存取,所有的订单信息可以保存在一个文件中。以下是一个简单的文本文件写入示例:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

public class OrderPersistence {
    public void saveOrder(Order order) {
        try (BufferedWriter writer = new BufferedWriter(new FileWriter("orders.txt", true))) {
            writer.write("Order ID: " + order.getId());
            writer.write("Customer: " + order.getCustomerName());
            writer.write("Date: " + order.getOrderDate());
            writer.newLine();
            // 保存菜品信息...
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结

通过 Java Swing,我们实现了一个基础的点餐 APP。这个开源项目不仅涵盖了基础的应用逻辑,包括菜单展示、购物车功能、订单管理与数据持久化,而且为开发者提供了一个良好的学习平台。

希望本文的内容和代码示例能帮助您了解 Java Swing 的基本使用及其在实际项目中的应用。如果您有兴趣,可以访问我们的开源项目并提供反馈,贡献您的智慧!