java模拟旅馆床位管理系统
————————更新(代码不更了……)————————
实现了一个很丑、很简单的界面……可以控制模拟天数……并且说明模拟的旅馆房间详情……
嘻嘻,实现了输入到excel中,使用的是jxl(据说已经很久没更新了,只支持2003版的excel文件,因此需要将文件另存为2003版本的,改后缀都不行,或者可以直接用代码生成一个也行),貌似现在都用opi了。
实现的功能
创建一个Costumer类,在构造函数中,随机数生成:客人人数、住宿时长、房间等级、是否愿意协商换房、客人距上一位客人到达的时间 interTime(*经典啊!!保证了客人的顺序是一定的,不需要考虑谁先订谁后订)
床位管理:旅馆设置为一个List < Queue > ,每一个房间都是一个< Queue>。
- 初始化时,循环生成18个Queue;
- 订房:在那个queue上添加客人信息(如果是住两天,就添加两次),
- 退房:queue.poll(),删除表头信息,
- 查看是否可以住:queue.peek() == null, 取头结点,如果是空,表示可以住人,
每24h(判断nowTime),退房一次(更新queue结点信息)
订房:先得出满足人数的房间(比如:2人-双人间)的预定情况,判断想住的等级是否可以入住;如果不行,判断是否能够换房;如果可以,则优先考虑满足人数(比如,普通双人间到豪华双人间),再考虑房型(比如,双人间没有了,选择三人间)
有个简单的界面,可以修改模拟的天数,并且将客户资料输出到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模拟旅馆床位管理系统相关推荐
- java模拟真正学生管理系统
这是我第一次,搞这种近乎于现实的学生管理系统,基本功能都实现了,做了我六个小时,昨天下午六点,跟着EDG敲了一路代码,EDG打比赛,我打代码,太燃了,EDG夺冠,EDG牛逼!!!! 全校都在高呼EDG ...
- c语言编程改变旅馆价格,模拟旅馆管理系统的一个功能——床位的分配与回收(c语言编程)...
模拟旅馆管理系统的一个功能--床位的分配与回收 题目:模拟旅馆管理系统的一个功能--床位的分配与回收 ⒈问题描述: 某旅馆有n个等级的房间,第I等级有 个房间,每个等级有个床位(1≤I≤n).试模拟旅 ...
- java模拟登陆正方教务管理系统
学了java后想设计一个在线提交活动中心使用申请的web网站,但问题是学生身份的验证.开始时是设想每年爬取一次全校学生信息,但速度太慢了,而且学号的规律也不清楚.然后想到借用教务管理系统自带的验证功能 ...
- JAVA毕业设计健身房信息管理系统计算机源码+lw文档+系统+调试部署+数据库
JAVA毕业设计健身房信息管理系统计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计健身房信息管理系统计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开 ...
- 微信读书登陆界面java_(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好...
转载地址:(JAVA后端)微信小程序-毕设级项目搭建-微信阅读小程序(内含源码,微信小程序+java逻辑后台+vue管理系统)~不求完美,实现就好 转载请注明出处 一.环境搭建 相关环境软件:JDK1 ...
- java设计火车的类,JAVA课程设计--火车票管理系统
JAVA课程设计--火车票管理系统 ******************* 实践教学实践教学 ******************* 兰州理工大学兰州理工大学 计算机与通信学院 2013 年秋季学期 ...
- 用Java模拟一个银行ATM系统
用Java模拟一个银行ATM系统 系统功能介绍: 全部代码 示例截图 系统功能介绍: 使用面向对象的编程思想,尽可能模拟真实世界中的银行ATM业务流程. main方法里通过调用一行代码,完成整个业务流 ...
- 基于JAVA的私人牙科诊所管理系统(论文+PPT+源码)
毕业设计(论文) 学生姓名 学 号 所 在 院 系 专 业 班 级 导师姓名职称 完成日期 论文题目 基于JAVA的私人牙科诊所管理系统 Thesis Topic JAVA – based priva ...
- 基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署
基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA保险公司风险测评管理系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...
最新文章
- Solr_全文检索引擎系统
- 17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)
- ​数字政府发展指数排名出炉!上海、浙江、北京位列前三,你的城市排第几?(附报告全文下载)...
- 入职不到3年,这所C9已有多位“90后”已成副教授!
- antv图例出现分页_2020,贴地飞行的 AntV 设计
- Linux下内存泄露工具
- 如何杀死一个已经detached的screen会话?
- java debug try catch 打印发生错误的代码的详细信息 代码行数
- 你好旧时光,斗罗大陆,红楼梦词云词频分析(动词形容词名词)
- android 分享到YouTube失败 403
- linux oel7没有网络,sudo su命令不在OEL 7中工作(sudo su command not working in OEL 7)
- (三)Grahpics之Blit
- IOB寄存器的使用:IOB= TRUE 属性
- C语言编写九九乘法表,实现不同三角形形状表格输出
- JavaScript 页面资源加载方法onload,onerror总结
- 太贪玩 书到用时方恨少
- 2021-10-15 - js
- 看看远处,也许可以恢复视力。
- u盘自动打开html,手机怎样读取u盘文件
- asp.net学生选课系统_网上选课系统_教师管理系统_ 学生管理系统_教务管理系统