1、前言
餐厅管理系统,主体是 Restaurant,然后输入是 Party,输出是 Table。
2、设计
除此之外,还有 Meal,记录菜品和价格。Reservation 记录预定的信息。如果去掉 Reservation,那么餐厅不支持预定。如果支持预定,Table 需要记录 Reservation。关于预定,需要提供 search、confirm、cancel 三个方法。
类图如下:
![](https://img.haomeiwen.com/i11345146/706fbf8515a2adbf.png)
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);
}
}
网友评论