————————更新(代码不更了……)————————

实现了一个很丑、很简单的界面……可以控制模拟天数……并且说明模拟的旅馆房间详情……

嘻嘻,实现了输入到excel中,使用的是jxl(据说已经很久没更新了,只支持2003版的excel文件,因此需要将文件另存为2003版本的,改后缀都不行,或者可以直接用代码生成一个也行),貌似现在都用opi了。

实现的功能

  1. 创建一个Costumer类,在构造函数中,随机数生成:客人人数、住宿时长、房间等级、是否愿意协商换房、客人距上一位客人到达的时间 interTime(*经典啊!!保证了客人的顺序是一定的,不需要考虑谁先订谁后订)

  2. 床位管理:旅馆设置为一个List < Queue > ,每一个房间都是一个< Queue>。

    • 初始化时,循环生成18个Queue;
    • 订房:在那个queue上添加客人信息(如果是住两天,就添加两次),
    • 退房:queue.poll(),删除表头信息,
    • 查看是否可以住:queue.peek() == null, 取头结点,如果是空,表示可以住人,
  3. 每24h(判断nowTime),退房一次(更新queue结点信息)

  4. 订房:先得出满足人数的房间(比如:2人-双人间)的预定情况,判断想住的等级是否可以入住;如果不行,判断是否能够换房;如果可以,则优先考虑满足人数(比如,普通双人间到豪华双人间),再考虑房型(比如,双人间没有了,选择三人间)

  5. 有个简单的界面,可以修改模拟的天数,并且将客户资料输出到excel中。

    未实现的功能

    • 因为是使用queue,因此无法在中间插入结点 == 无法预定几天后的房间!

    • 因为能力有限,代码量比较繁杂,所以未考虑 : 一同来的人数比较多(多于3个),然后需要分房睡(比如,5个人=双人间+三人间 = 2*双人间+单人间)

代码
“` java

package hyx;

import com.sun.javafx.scene.control.skin.VirtualFlow;
import com.sun.jmx.remote.internal.ArrayQueue;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

import java.io.File;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.ArrayBlockingQueue;

//房间等级:1、2、3
//人数:>= 1, <=3
//更新时间差:24小时 = 72 个20分钟,
//18间房:123456(普通),78910 11 12(商务)……
//房间价格:100 100 200 200 300 300 200 200 400 400 500 500 300 300 500 500 700 700

public class Hotel18 {
//项目初始化函数
static void initialization(List roomQueue,int roomNumber){//建立房间Queuefor (int i=0;i<roomNumber;i++){roomQueue.add(new ArrayDeque<Customer>(30));}
}//每日更新、退房
static void daliyUpdate(List<ArrayDeque> roomQueue, int roomNumber) {//房间Queue清空表头for (int i = 0; i < roomNumber; i++) {ArrayDeque temp = roomQueue.get(i);temp.poll();}
}//判断:满足人数,是否有房间
static boolean[][] rateTest(List<ArrayDeque> roomQueue, boolean rate[][] , int number,int rateNumber){int size = rate.length;while(size>0){//每个等级房型有两个房间if (roomQueue.get(2*rate.length*size+number*2-8).peek()==null){rate[size-1][0]=true;}if (roomQueue.get(6*size+number*2-7).peek()==null){rate[size-1][1]=true;}size-- ;}return rate;
}static boolean findRoom(Queue<Integer> avilableRoom,boolean[][] rate,int count,int number, int[] m){int tempCount =0;//   判断是否有住的地方,如果rate[level-1]没有的话,就住这里for (int i =0;i<3;i++){//默认考虑等级高的房间if(rate[i][0]) {m[0] = i;avilableRoom.add(6 * i - 2 + number * 2);tempCount++;}if (rate[i][1]){m[0] = i;avilableRoom.add(6*i-1+number*2);tempCount++;}}if (tempCount>=count){//满足条件,有count间房可住return true;}return false;
}//是否入住
static int reserve3(List<ArrayDeque> roomQueue,Customer customer, int rateNumber,int[] price) {Queue<Integer> avilableRoom = new ArrayDeque<Integer>();boolean[][] rate = new boolean[rateNumber][2];for (int i = 0; i < rateNumber; i++) {for (int j=0;j<2;j++){rate[i][j] = false;}}int[] m = {4};int tempRoomNumber = 19;int number = customer.number;int level = customer.level;boolean changable = customer.changable;int stayTime = customer.stayTime;if (number<=3){rateTest(roomQueue,rate,number,rateNumber);if (findRoom(avilableRoom,rate,1,number,m)){//找到了房间//房间号,默认取第一个tempRoomNumber = avilableRoom.poll();}else{//如果没有地方住,可以考虑大房间while ( number<3){number++;rateTest(roomQueue,rate,number,rateNumber);if (findRoom(avilableRoom,rate,1,number,m)){//找到了房间tempRoomNumber = avilableRoom.poll();}}//结束循环:找到房间了 temproomNumber!=19 ,或者,number=3,还是找不到房间}}String levelName = null;if (level == 1) {levelName = "普通";} else if (level == 2) {levelName = "商务";} else if(level == 3) {levelName = "豪华";}else if (level == 4){levelName= "总统";}else{levelName = "没有房间";}String numberName = null;if (number == 1) {numberName = "单人间";} else if (number == 2) {numberName = "双人间";} else if(number == 3) {numberName = "三人间";}//房间号int roomNumber = 0;if (rate[level - 1][0]||rate[level-1][1] ) {//住在自己想住的地方,入住成功!if (rate[level - 1][0]){roomNumber = level*6+number*2-8;for (int k =0;k<stayTime;k++){roomQueue.get(roomNumber).add(customer);}rate[level - 1][0] = false;}else{roomNumber = level*6-7+number*2;for (int k =0;k<stayTime;k++){roomQueue.get(roomNumber).add(customer);}rate[level - 1][1] = false;}System.out.println("  "+ customer.number + " 人     " + stayTime + " 天       " + roomNumber +" 号       "+ numberName + "      " + changable + "     "+levelName +"          "+levelName+"            "+price[roomNumber]+"        "+price[roomNumber]*stayTime);return price[roomNumber]*stayTime;}else if ( changable && (tempRoomNumber!=18+1)){//没有住在想入住的地方,入住成功!String mlevelName = null;if (m[0] == 0) {mlevelName = "普通";} else if (m[0] == 1) {mlevelName = "商务";} else if(m[0] == 2) {mlevelName = "豪华";}roomNumber = tempRoomNumber;for (int k =0;k<stayTime;k++){roomQueue.get(roomNumber).add(customer);}System.out.println("  "+ customer.number + " 人     " + stayTime + " 天       "+ roomNumber+" 号       " + numberName + "      " + changable + "      "+mlevelName +"         "+levelName +"            "+price[roomNumber]+"        "+price[roomNumber]*stayTime);return price[roomNumber]*stayTime;}else{//入住失败!System.out.println("  "+customer.number + " 人     " + stayTime + " 天                        " + "      "+changable +"                   "+levelName+"       没有房间,入住失败!    " );return 0;}
}public static void main(String args[]){//定义:房间QueueList<ArrayDeque> roomQueue =  new ArrayList();int nowTime = 0;int totalMoney = 0;//运行30天int dayTime = 30;//初始化18间房int roomNumber = 18;//价格int[] price = {100,100,200,200,300,300,200,200,400,400,500,500,300,300,500,500,700,700};//等级数int rateNumber = 3;//初始化initialization(roomQueue,roomNumber);//Day 1int k = 1;System.out.println("Day "+k);System.out.println("入住日期 "+" 入住人数 "+" 入住时间 "+" 房间号 "+"    入住房型 "+" 自愿更换等级 "+" 最终入住档次 "+" 原本想要的档次 "+ " 房间单价"+" 总房费:" );//生成新客户的条件:nowTime < 72*dayTimewhile( nowTime < 72* dayTime){Customer customer = new Customer();nowTime = nowTime+customer.intertime;if ( ((nowTime-customer.intertime) < 72*k) && (nowTime >= 72*k) ){k++;if (k<=dayTime){System.out.println("Day "+k);System.out.println("入住日期 "+" 入住人数 "+" 入住时间 "+" 房间号 "+"    入住房型 "+" 自愿更换等级 "+" 最终入住档次 "+" 原本想要的档次 "+ " 房间单价为:"+" 总房费:" );//先更新到第二日订房daliyUpdate(roomQueue,roomNumber);//再预订System.out.print("  第"+k+"天  " );totalMoney += reserve3(roomQueue,customer,rateNumber,price);}}else{//直接订房System.out.print("  第"+k+"天  " );totalMoney += reserve3(roomQueue,customer,rateNumber,price);}}System.out.print(dayTime+"天的辛苦收入是:"+totalMoney);
}
}

java模拟旅馆床位管理系统相关推荐

  1. java模拟真正学生管理系统

    这是我第一次,搞这种近乎于现实的学生管理系统,基本功能都实现了,做了我六个小时,昨天下午六点,跟着EDG敲了一路代码,EDG打比赛,我打代码,太燃了,EDG夺冠,EDG牛逼!!!! 全校都在高呼EDG ...

  2. c语言编程改变旅馆价格,模拟旅馆管理系统的一个功能——床位的分配与回收(c语言编程)...

    模拟旅馆管理系统的一个功能--床位的分配与回收 题目:模拟旅馆管理系统的一个功能--床位的分配与回收 ⒈问题描述: 某旅馆有n个等级的房间,第I等级有 个房间,每个等级有个床位(1≤I≤n).试模拟旅 ...

  3. java模拟登陆正方教务管理系统

    学了java后想设计一个在线提交活动中心使用申请的web网站,但问题是学生身份的验证.开始时是设想每年爬取一次全校学生信息,但速度太慢了,而且学号的规律也不清楚.然后想到借用教务管理系统自带的验证功能 ...

  4. JAVA毕业设计健身房信息管理系统计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计健身房信息管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计健身房信息管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开 ...

  5. 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...

    转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...

  6. java设计火车的类,JAVA课程设计--火车票管理系统

    JAVA课程设计--火车票管理系统 ******************* 实践教学实践教学 ******************* 兰州理工大学兰州理工大学 计算机与通信学院 2013 年秋季学期 ...

  7. 用Java模拟一个银行ATM系统

    用Java模拟一个银行ATM系统 系统功能介绍: 全部代码 示例截图 系统功能介绍: 使用面向对象的编程思想,尽可能模拟真实世界中的银行ATM业务流程. main方法里通过调用一行代码,完成整个业务流 ...

  8. 基于JAVA的私人牙科诊所管理系统(论文+PPT+源码)

    毕业设计(论文) 学生姓名 学 号 所 在 院 系 专 业 班 级 导师姓名职称 完成日期 论文题目 基于JAVA的私人牙科诊所管理系统 Thesis Topic JAVA – based priva ...

  9. 基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

最新文章

  1. Solr_全文检索引擎系统
  2. 17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)
  3. ​数字政府发展指数排名出炉!上海、浙江、北京位列前三,你的城市排第几?(附报告全文下载)...
  4. 入职不到3年,这所C9已有多位“90后”已成副教授!
  5. antv图例出现分页_2020,贴地飞行的 AntV 设计
  6. Linux下内存泄露工具
  7. 如何杀死一个已经detached的screen会话?
  8. java debug try catch 打印发生错误的代码的详细信息 代码行数
  9. 你好旧时光,斗罗大陆,红楼梦词云词频分析(动词形容词名词)
  10. android 分享到YouTube失败 403
  11. linux oel7没有网络,sudo su命令不在OEL 7中工作(sudo su command not working in OEL 7)
  12. (三)Grahpics之Blit
  13. IOB寄存器的使用:IOB= TRUE 属性
  14. C语言编写九九乘法表,实现不同三角形形状表格输出
  15. JavaScript 页面资源加载方法onload,onerror总结
  16. 太贪玩 书到用时方恨少
  17. 2021-10-15 - js
  18. 看看远处,也许可以恢复视力。
  19. u盘自动打开html,手机怎样读取u盘文件
  20. asp.net学生选课系统_网上选课系统_教师管理系统_ 学生管理系统_教务管理系统

热门文章

  1. 智能小区物业管理系统
  2. 后盾Thinkphp5 博客项目实战
  3. 微信小程序使用swoole实现websocket消息推送
  4. 数学分析教程史济怀练习14.7
  5. 【笑小枫的SpringBoot系列】【十六】SpringBoot生成PDF
  6. 小程序云开发中如何生成pdf?
  7. 微信分享详细步骤--java版
  8. 代刷装修音乐代码大全_代刷网音乐代码 | 手游网游页游攻略大全
  9. Android 集成新浪微博分享及授权 (上)
  10. 搜索引擎中输入检索词到返回十条结果,发生了哪些事情