美文网首页
设计餐厅管理系统

设计餐厅管理系统

作者: 放开那个BUG | 来源:发表于2022-05-01 21:37 被阅读0次

    1、前言

    餐厅管理系统,主体是 Restaurant,然后输入是 Party,输出是 Table。

    2、设计

    除此之外,还有 Meal,记录菜品和价格。Reservation 记录预定的信息。如果去掉 Reservation,那么餐厅不支持预定。如果支持预定,Table 需要记录 Reservation。关于预定,需要提供 search、confirm、cancel 三个方法。

    类图如下:


    类图

    3、代码

    Meal:

    public class Meal {
    
        /**
         * 菜品名称
         */
        private String name;
    
        /**
         * 菜品价格
         */
        private int price;
    
        public Meal(String name, int price) {
            this.name = name;
            this.price = price;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getPrice() {
            return price;
        }
    
        public void setPrice(int price) {
            this.price = price;
        }
    }
    

    Order:

    public class Order {
    
        /**
         * 吃饭的团体
         */
        private Party party;
    
        /**
         * 占用的桌子
         */
        private Table table;
    
        /**
         * 点的菜
         */
        private List<Meal> meals;
    
        public Order(Party party, Table table, List<Meal> meals) {
            this.party = party;
            this.table = table;
            this.meals = meals;
        }
    
        /**
         * 获取此次订单的花费
         * @return
         */
        public int getBill(){
            int costMoney = 0;
            for (Meal meal : this.getMeals()) {
                costMoney += meal.getPrice();
            }
            return costMoney;
        }
    
        public Party getParty() {
            return party;
        }
    
        public void setParty(Party party) {
            this.party = party;
        }
    
        public Table getTable() {
            return table;
        }
    
        public void setTable(Table table) {
            this.table = table;
        }
    
        public List<Meal> getMeals() {
            return meals;
        }
    
        public void setMeals(List<Meal> meals) {
            this.meals = meals;
        }
    }
    
    ``
    
    Party:
    ```java
    public class Party {
    
        /**
         * 人数
         */
        private int size;
    
        public Party(int size) {
            this.size = size;
        }
    
        public int getSize() {
            return size;
        }
    
        public void setSize(int size) {
            this.size = size;
        }
    }
    

    Reservation:

    public class Reservation {
    
        /**
         * 要预定的桌子
         */
        private Table table;
    
    
        /**
         * 要预定的时间范围,这里就不做检验了,一般来说会做一个时间间隔校验
         */
        private TimePeroid timePeroid;
    
        public Reservation(Table table, TimePeroid timePeroid) {
            this.table = table;
            this.timePeroid = timePeroid;
        }
    
        /**
         * 当前时间是否在范围内
         * @param date
         * @return
         */
        public boolean containsCurrentDate(Date date) {
            return date.after(timePeroid.getReserveStartTime()) && date.before(timePeroid.getReserveEndTime());
        }
    
        @Override
        public boolean equals(Object o) {
            Reservation that = (Reservation) o;
            return this.timePeroid.equals(that);
        }
    
        public Table getTable() {
            return table;
        }
    
        public void setTable(Table table) {
            this.table = table;
        }
    
        public TimePeroid getTimePeroid() {
            return timePeroid;
        }
    
        public void setTimePeroid(TimePeroid timePeroid) {
            this.timePeroid = timePeroid;
        }
    }
    

    Table:

    public class Table implements Comparable<Table>{
    
        /**
         * 桌子能容纳的人数
         */
        private int capacity;
    
        /**
         * 是否可用
         */
        private boolean avaliable;
    
        /**
         * 编号
         */
        private int No;
    
        /**
         * 预定区间
         */
        private List<Reservation> reservations;
    
        public Table(int No, int capacity) {
            this.No = No;
            this.capacity = capacity;
            this.avaliable = true;
            this.reservations = new ArrayList<>();
        }
    
        /**
         * 当前桌子是否可用
         * @param party
         * @return
         */
        public boolean isAvaliable(Party party){
            return avaliable && capacity >= party.getSize() && this.noReservation(new Date());
        }
    
        /**
         * 标记桌子不可用
         */
        public void markUnAvaliable() {
            this.avaliable = false;
        }
    
        /**
         * 标记桌子可用
         */
        public void markAvaliable() {
            this.avaliable = true;
        }
    
        /**
         * 当前时间是否在预定区间
         * @param date
         * @return
         */
        private boolean noReservation(Date date) {
            for (Reservation reservation : reservations) {
                if(reservation.containsCurrentDate(date)){
                    return false;
                }
            }
            return true;
        }
    
        public int getCapacity() {
            return capacity;
        }
    
        public void setCapacity(int capacity) {
            this.capacity = capacity;
        }
    
        public int getNo() {
            return No;
        }
    
        public void setNo(int no) {
            No = no;
        }
    
        public List<Reservation> getReservations() {
            return reservations;
        }
    
        public void setReservations(List<Reservation> reservations) {
            this.reservations = reservations;
        }
    
        @Override
        public int compareTo(Table o) {
            return this.capacity - o.capacity;
        }
    }
    

    TimePeroid:

    public class TimePeroid {
    
        private Date reserveStartTime;
    
        private Date reserveEndTime;
    
        public TimePeroid(Date reserveStartTime, Date reserveEndTime) {
            this.reserveStartTime = reserveStartTime;
            this.reserveEndTime = reserveEndTime;
        }
    
        @Override
        public boolean equals(Object o) {
            TimePeroid that = (TimePeroid) o;
            return this.reserveStartTime.equals(that.reserveStartTime)
                    && this.reserveEndTime.equals(that.reserveEndTime);
        }
    
    
        public Date getReserveStartTime() {
            return reserveStartTime;
        }
    
        public void setReserveStartTime(Date reserveStartTime) {
            this.reserveStartTime = reserveStartTime;
        }
    
        public Date getReserveEndTime() {
            return reserveEndTime;
        }
    
        public void setReserveEndTime(Date reserveEndTime) {
            this.reserveEndTime = reserveEndTime;
        }
    }
    
    

    Restaurant:

    public class Restaurant {
    
        /**
         * 拥有的桌子,按容量从小到大排序
         */
        private List<Table> tables;
    
        /**
         * 饭店的菜单
         */
        private List<Meal> meals;
    
        public Restaurant() {
            this.tables = new ArrayList<>();
            this.meals = new ArrayList<>();
    
            Random random = new Random();
            for(int i = 1; i <= 4; i++){
                this.tables.add(new Table(i, random.nextInt(3) + 3));
            }
            Collections.sort(this.tables);
    
            for(int i = 1; i <= 10; i++){
                this.meals.add(new Meal("公保鸡丁_" + i, i));
            }
        }
    
        /**
         * 找到相应的 table
         * @param party
         * @return
         */
        public Table findTable(Party party){
            for (Table table : this.tables) {
                if(table.isAvaliable(party)){
                    return table;
                }
            }
            return null;
        }
    
        /**
         * 在当前桌子下单
         * @param order
         */
        public void takeOrder(Order order){
            order.getTable().markUnAvaliable();
        }
    
        /**
         * 对当前订单结算
         * @param order
         */
        public void checkOut(Order order){
            System.out.println("花费了:" + order.getBill());
            order.getTable().markAvaliable();
        }
    
        // 后面的都是为预定服务的
        public Reservation findTableForReversation(Party party, TimePeroid timePeroid) throws Exception {
            if(timePeroid.getReserveStartTime().after(timePeroid.getReserveEndTime())){
                throw new Exception("时间区间不合法");
            }
            for (Table table : this.tables) {
                if(table.isAvaliable(party)){
                    Reservation reservation = new Reservation(table, timePeroid);
                    table.getReservations().add(reservation);
                    return reservation;
                }
            }
            return null;
        }
    
        /**
         * 确认订购
         * @param reservation
         */
        public void confirmReversation(Reservation reservation){
            reservation.getTable().markUnAvaliable();
        }
    
        /**
         * 取消预定
         * @param reservation
         */
        public void cancelReservation(Reservation reservation){
            Table table = reservation.getTable();
            table.getReservations().remove(reservation);
            table.markAvaliable();
        }
    
        public static void main(String[] args) {
            Restaurant restaurant = new Restaurant();
            Party party = new Party(3);
    
            // 找到桌子
            Table table = restaurant.findTable(party);
    
            // 浏览菜单
            List<Meal> meals = restaurant.meals;
    
            // 下单
            Order order = new Order(party, table, meals);
            restaurant.takeOrder(order);
    
            // 结算
            restaurant.checkOut(order);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:设计餐厅管理系统

          本文链接:https://www.haomeiwen.com/subject/lusjyrtx.html