2013-08-17 99 views
4

我有一個任務來設計一個在線預訂系統。 用戶可以輸入郵編/沒有人/保留時間並獲得餐館列表。假設(用戶和餐廳總是在同一個城市)在線餐廳預約系統(數據結構)

每個餐廳可以有不同數量的座位的多個表。所以,可容納4人座位的兩張桌子和可容納4人的4張桌子。

我很難提出正確的數據結構來使用。

我的類如下

餐廳:包含timeofopening,timeOfClosing,totalNoOfSeatsAvailable 不知道我怎麼會存放在餐廳內表信息。爲表格單獨分類是沒有意義的。我需要的所有信息都是如何免費的,以及它們的尺寸是多少。

預訂:這維持了實際預約,並允許取消預訂

ReservationSystem: 包含接口`名單checkAvailability(很長一段時間,詮釋人)」 這將如何回報這個名單?我最初考慮使用priorityQueue來維護一個隊列,並且最多可以有一個座位。但是接下來我會查看該列表,看看是否有時間進行預訂,然後一旦預訂完成,請更新此隊列。一個問題是隊列確實重複。

我的具體問題是:

  1. 如何存放每個餐廳內的表信息。
  2. 什麼是最好的方式來維護這個餐館的列表,所以我可以返回一個列表,而不必每次都排序這些信息。

編輯: 對於如何存儲表信息的問題。我的具體問題是 存儲一個表類將意味着我創建不需要的對象。這是我的推理。 5個表格,每個人擁有兩個完全相同的對象 - 我的意思是沒有任何有意義的信息,它們之間會有差異。我只需要數字。 (如果我有一個4人桌但是3人桌,我會考慮這個桌子)

我想創建3個數組。讓我們說表代表1,2等等int [] differentSeatingOnTable;其索引是表和值是座位允許的。接下來是具有totalNoOfThosetable的表的數組,其中索引是表和值是這樣的表的總數。爲免費表freeTables類似,其索引是表和剩餘多少這樣的空閒表。

+1

你能

主鍵字段發佈一些類的代碼而不是僅僅描述它們? –

+1

每一個這取決於你的項目水平和你有多少能力。首先這看起來像一個家庭作業。需要更多的細節,你已經做了什麼 –

+0

'設置'沒有涉及重複 –

回答

4

1)如果你只是存儲在一個餐廳的座位數量,你是搬起石頭砸自己的腳。假設我需要爲16人預訂,他們都必須在同一張桌子上(是的,我需要一張很長的桌子)。你的系統可以把我的客人帶到某個地方,他們不得不坐在8張桌子上,每人兩個人。

你確實需要一個表類。然後你的餐廳需要收集餐桌。如果你想知道你在餐廳有多少個座位,你只需要遍歷它的餐桌收藏並計算座位。如果你想知道你是否可以將一個家庭坐在餐廳的一張桌子上,你只需要檢查它是否有任何桌子上有這麼多的座位。

編輯:有一個更簡約的方式來存儲每個餐廳的座位。使用字典,散列表或任何其他包含鍵和相關值的結構。所以鑰匙代表一種表格。關鍵字可能是一個整數,表示有多少人坐在桌子上。該值是餐廳中該類型的表格數量。我認爲這比我最初的建議更好。

因此,舉例來說,這樣的哈希表餐廳:

Key | Value 
4 | 5 
2 | 8 
16 | 1 

擁有每4個席位,每2個席位8桌,和一個長桌子,坐在16人五桌。 (也使用表來存儲表是如此元)。

2.)您的推理是正確的保留。如果它做的是重複的,你應該發佈一個更具體的問題,說明你是如何做的,所以我們可以試着幫助你找到錯誤。

+0

但是存儲一個表類將意味着我正在創建不需要的對象。這是我的推理。 5張桌子可以容納2人,每個人都擁有完全相同的物品 - 我的意思是我沒有從他們那裏得到任何有意義的信息,除了沒有座位/桌子。我想創建兩個數組。讓我們說表代表1,2等等int [] differentSeatingOnTable;其指數是表格和數值是座位允許的。接下來是帶有totalNoOfThosetable的表的數組,其中索引是表和值是這些表的總和。相似的免費餐桌。 – 12rad

+0

你看到我的觀點了嗎? – 12rad

+0

我明白了。爲什麼你不這樣做呢:有一個字典/散列表而不是兩個數組。他們在結構中的每個項目的關鍵是每個表格的席位數量,並且值是坐在這個數量的人員的表格的數量。我正在更新我的答案。 – Renan

1

關係數據庫使這兩個要求變得簡單。

您將有兩個表:RESTAURANT和SITTING(TABLE是SQL中的保留字),它們之間具有一對多關係。

餐廳將有一個名稱,所以你可以按名稱命令。

package model; 

class Table { 
    private int id; 
    private int numSeats; 

    public Table(int id, int numSeats) { 
     this.id = id; 
     this.numSeats = numSeats; 
    } 
    public int getId() { return this.id; } 
    public int getNumSeats() { return this.getNumSeats; } 
} 

class Restaurant implements Comparable { 
    private String name; 
    private List<Table> tables; 

    public Restaurant(String name) { 
     this.name = name; 
     this.tables = new ArrayList<Table>(); 
    } 

    public void addTable(Table t) { this.tables.add(t); } 
    public void removeTable(int id) { 
     for (Table t : this.tables) { 
      if (t.getId() == id) { 
       this.tables.remove(t); 
       break; 
      } 
     } 
    }  
    public int getCapacity() { 
     int capacity = 0; 
     for (Table t : this.tables) { 
      capacity += t.getNumSeats(); 
     } 
     return capacity; 
    } 
    public int compareTo(Restaurant r) { 
     return this.name.compareTo(r.name); 
    } 
} 
+0

我想在內存數據結構中使用。有什麼建議麼? – 12rad

+1

當然 - 做一個內存中的表示。往上看。 – duffymo

0

1)well..i覺得它更有意義,如果你創建的表class.its更容易比試圖抽筋它在餐廳class.and你會發現它更容易太

2)維持原關鍵的領域,也許是複合鍵,標示出唯一身份,這可能保持了複製

建議步驟: Res_Table類 餐廳類訂購