草庐IT

java - 设计问题 : Reservation system

coder 2024-03-06 原文

我必须为酒店设计和实现预订系统。我有

  • 预订对象的数组列表
  • 房间对象的数组列表

我想在指定日期“预订”房间。

预订没有日期的房间很容易,但日期部分却让事情变得复杂。我正在为此设计而苦苦挣扎,并且有信心朝着正确的方向轻推我可以对其进行编码。

怎么说一个房间在这个日期被预订但那个日期没有?

没有数据库或任何东西,它只是一个抽象的预订系统。

(我已经盯着这个看了一段时间,如果解决方案很简单,请原谅我)

谢谢。

最佳答案

创建三个类(HotelRoom & Reservation):

  • Reservation 对象在这里用作发票,并且与预订流程分离

  • 每个 Room 对象(专用于酒店中的每个房间号)都包含一个 map,它存储 reservedDates 作为键和 reservationObject 作为值。

  • 酒店房间组成。对于每个预订请求,Hotel 循环遍历 room 列表,每个 room 遍历自己的 map 查找是否可以预订要求 天。

请注意,预订功能将日期作为列表,而不仅仅是两个日期(如开始日期和结束日期)。这与前者可以从后者推导出来是一样的。

示例代码如下:

class Hotel {
    private String name, address;
    private List<Room> roomList;   //key : roomNumber
    public Hotel(){
        roomList = new ArrayList<Room>();
    }
    public Reservation bookRoomForDates(List<Integer> dateList, Guest guest){
        for(Room room : roomList){
            Reservation reservation = room.bookForGivenDates(dateList, guest);
            if(reserved != null) return reservation; //Reservation successFull!
        }
        return null; //Reservation failed!
    }
}
class Reservation {
    private String id;
    private Date inDate, outDate;
    private Guest guest;

    public Reservation(Room room, int startDate, int endDate, Guest guest){
        //populate the member variables.
    }
}

class Room {
    private String id;
    private int roomNumber, floorNum;
    private Map<Integer, Reservation> reservedDates;  // key : date as Integer (YYYYMMDD)

    public Room(int roomNumber){
        reservedDates = new HashMap<Integer, Reservation>();
        this.roomNumber = roomNumber;
    }

    //A guest request for booking on dates(in YYYYMMDD format) in the dateList
    public Reservation bookForGivenDates(List<Integer> dateList, Guest guest)  
    {   
        if(dateList.isEmpty()) return null;

        for(Integer date : dateList){
            Reservation res = reservedDates.get(date);  
            if(res != null) {  // We don't store null value for unreserved dates for the room.
                return null;  // Room is reserved on this date by another guest. So, this room is unavailable.
            }
        }
        //this room is unreserved on all requested dates. So go on and reserve this room for asked dates
        int startDate = dateList.get(0);
        int endDate   = dateList.get(dateList.size() - 1);

        Reservation newReservation = new Reservation(this, startDate, endDate, guest);
        for(Integer date : dateList){
            reservedDates.put(date, newReservation);
        }
        return newReservation;
    }
}

关于java - 设计问题 : Reservation system,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8113070/

有关java - 设计问题 : Reservation system的更多相关文章

  1. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  2. ruby - 在 64 位 Snow Leopard 上使用 rvm、postgres 9.0、ruby 1.9.2-p136 安装 pg gem 时出现问题 - 2

    我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po

  3. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  4. ruby - 通过 RVM (OSX Mountain Lion) 安装 Ruby 2.0.0-p247 时遇到问题 - 2

    我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search

  5. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  6. ruby - Fast-stemmer 安装问题 - 2

    由于fast-stemmer的问题,我很难安装我想要的任何ruby​​gem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=

  7. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  8. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  9. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  10. ruby-on-rails - 简单的 Ruby on Rails 问题——如何将评论附加到用户和文章? - 2

    我意识到这可能是一个非常基本的问题,但我现在已经花了几天时间回过头来解决这个问题,但出于某种原因,Google就是没有帮助我。(我认为部分问题在于我是一个初学者,我不知道该问什么......)我也看过O'Reilly的RubyCookbook和RailsAPI,但我仍然停留在这个问题上.我找到了一些关于多态关系的信息,但它似乎不是我需要的(尽管如果我错了请告诉我)。我正在尝试调整MichaelHartl'stutorial创建一个包含用户、文章和评论的博客应用程序(不使用脚手架)。我希望评论既属于用户又属于文章。我的主要问题是:我不知道如何将当前文章的ID放入评论Controller。

随机推荐