我有设计在线预订系统的任务。 用户可以输入邮政编码/没有人/预约时间并获得餐馆列表。假设(用户和餐厅总是在同一个城市)
每家餐厅可以有多个座位数不同的桌子。所以,2张桌子可容纳4人,4张桌子可容纳4人。
我无法想出正确的数据结构。
我的课程如下
餐厅:包含timeofopening,timeOfClosing,totalNoOfSeatsAvailable 不知道我将如何在餐厅内存储餐桌信息。为表创建一个单独的类是没有意义的。我需要的所有信息都是如何免费提供各种尺寸的。
预订:维持实际预订并允许取消预订
预订系统: 包含`List checkAvailability(long time,int people)'的接口 这将如何归还此列表?我最初想过使用priorityQueue来维护一个最多没有座位的队列。但是接下来我将通过该列表查看即使进行预订的时间是否正确,然后一旦进行预订,请更新此队列。一个问题是队列完全重复。
我的具体问题是:
编辑: 有关如何存储表信息的问题。我特别关注的是 存储表类意味着我正在创建不必要的对象。这是我的推理。 5个桌子,每个座位2个人拥有完全相同的对象 - 我的意思是没有任何有意义的信息会在它们之间产生差异。我只需要数字。没有座位/桌子。(如果我有一张4人但3人的桌子,我会考虑这张桌子)
我想过要创建3个数组。让我们说表代表1,2等所以int [] differentSeatingOnTable;它的索引是表格,值是允许的座位。接下来是一个包含totalNoOfThosetable的表数组,其中索引是表,值是这样的表的总数。类似于自由表freeTables,其中索引是表,剩下多少这样的空闲表。
答案 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的主键字段