在线餐厅预订系统(数据结构)

时间:2013-08-17 16:50:35

标签: java oop data-structures object-oriented-analysis

我有设计在线预订系统的任务。 用户可以输入邮政编码/没有人/预约时间并获得餐馆列表。假设(用户和餐厅总是在同一个城市)

每家餐厅可以有多个座位数不同的桌子。所以,2张桌子可容纳4人,4张桌子可容纳4人。

我无法想出正确的数据结构。

我的课程如下

餐厅:包含timeofopening,timeOfClosing,totalNoOfSeatsAvailable 不知道我将如何在餐厅内存储餐桌信息。为表创建一个单独的类是没有意义的。我需要的所有信息都是如何免费提供各种尺寸的。

预订:维持实际预订并允许取消预订

预订系统: 包含`List checkAvailability(long time,int people)'的接口 这将如何归还此列表?我最初想过使用priorityQueue来维护一个最多没有座位的队列。但是接下来我将通过该列表查看即使进行预订的时间是否正确,然后一旦进行预订,请更新此队列。一个问题是队列完全重复。

我的具体问题是:

  1. 如何在每家餐厅内存储餐桌信息。
  2. 维护这些餐馆列表的最佳方法是什么,这样我就可以返回一个列表而无需每次都对这些信息进行排序。
  3. 编辑: 有关如何存储表信息的问题。我特别关注的是 存储表类意味着我正在创建不必要的对象。这是我的推理。 5个桌子,每个座位2个人拥有完全相同的对象 - 我的意思是没有任何有意义的信息会在它们之间产生差异。我只需要数字。没有座位/桌子。(如果我有一张4人但3人的桌子,我会考虑这张桌子)

    我想过要创建3个数组。让我们说表代表1,2等所以int [] differentSeatingOnTable;它的索引是表格,值是允许的座位。接下来是一个包含totalNoOfThosetable的表数组,其中索引是表,值是这样的表的总数。类似于自由表freeTables,其中索引是表,剩下多少这样的空闲表。

3 个答案:

答案 0 :(得分:4)

<强> 1。 )如果您只是存放餐厅的座位数量,那么您就是在脚下拍摄自己。假设我需要为16个人预订,他们都必须在同一张桌子上(是的,我需要一张很长的桌子)。你的系统可以把我的客人送到他们必须坐在8张桌子里的地方,每人两个人。

你确实需要一个表类。然后你的餐馆需要有桌子的集合。如果你想知道你在餐馆里有多少座位,你只需要遍历它的桌子集合并计算座位数。如果你想知道你是否可以把一个家庭坐在餐厅的一张桌子上,你只需检查它是否有任何座位数量的桌子。

编辑:每个餐厅都有更简约的方式来存储座位。使用字典,哈希表或任何其他包含键和关联值的结构。所以让密钥代表一种表格。键可以是一个整数,表示该表所占的人数。该值是餐馆中存在的该类型的表的数量。我认为这比我原来的建议更好。

因此,例如,一家餐馆有这样一个哈希表:

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

有五张桌子,每张有4个座位,8张桌子,每张有两个座位,还有一张可容纳16人的长桌子。 (还使用表来存储表格是如此)。

<强> 2。 )您的推理适合预订。如果它正在重复,你应该发布一个更具体的问题,显示你是如何做的,这样我们就可以尝试帮助你找到错误。

答案 1 :(得分:2)

关系数据库使这些要求变得容易。

你将有两个表:RESTAURANT和SITTING(TABLE是SQL中的保留字),它们之间有一对多的关系。

RESTAURANT将有一个名称,因此您可以按名称订购。

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);
    }
}

答案 2 :(得分:0)

1)好吧..我觉得如果你创建了table class更有意义。比在餐厅里尝试捏它更容易。你也会觉得它更容易

2)维护一个主键字段,可能是一个复合键,标记出唯一字符,这可以防止重复

建议步骤:   Res_Table类   餐厅类

带有ORDERING的主键字段