随着互联网技术的迅速发展,计算机技术的普及以及信息化时代的推波助澜,宾馆客房需求的逐渐增大,这也是挑战了宾馆客房管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的宾馆客房管理系统,提高了宾馆的工作效率,为想要入住宾馆的人提供更好的服务。宾馆客房管理工作面对大量顾客的私人信息,引入信息化的管理方式可以事半功倍,极大的提高管理效率。我们开发宾馆客房管理系统就是采用现代化的信息管理方式代替手工管理方式,提高宾馆管理工作效率,做到信息的规范管理,科学统计和快速查询,让宾馆体验达到最佳,方便广大人民群众出行住宿。
①顾客基本信息的输入,包括顾客编号、顾客姓名、房号和联系方式等。
②顾客基本信息的查询、修改,包括顾客编号、顾客姓名、房号和联系方式等。
③客房类别标准的制定、类别信息的输入,包括房号、是否空置、房型和价格等。
④顾客类别信息的查询、修改,包括顾客编号、顾客姓名等。
⑤房源信息信息的更改,包括房号、是否空置、房型、房子归还日期和房价。
⑥房源库存信息的查询,修改,包括房号、是否空置、房型、房子归还日期和房价等。
⑦顾客入住信息的输入,包括顾客编号、房号、退房日期。
⑧顾客入住信息的查询、修改,包括顾客编号、顾客姓名、房号和联系方式等。
⑨退房信息的输入,包括顾客编号、顾客姓名、房号和退房日期。
⑩退房信息的查询和修改,包括顾客编号、顾客姓名、房号和退房日期等。

首先映入眼帘的是程序登录系统,这里内部设置了两个账户,一个是管理员账户,权限是管理员权限(增删查改)。还有一个是来宾用户,只可以查看。采用Java Swing 的模板创建,用户界面还是十分友好的。登录界面如图6-1 所示。该部分伪代码如下:
public static void main(String[] args) {
Login log = new Login();
log.setIconImage(Toolkit.getDefaultToolkit().createImage("img1.jpg"));// 登录界面标题logo图片
log.setTitle("宾馆客房管理系统");
log.setLocation(600, 300); // 方框出现在屏幕的位置
log.setSize(750, 548); // 调整登录框大小
log.setResizable(false);// 设置为不可调整窗口大小
log.setVisible(true); // 是否可视化
}
class Enter implements ActionListener {
@SuppressWarnings("deprecation")
public void actionPerformed(ActionEvent e)// 重写事件反映
{
Login log = new Login();// 持有对象引用
if ((f1.getText()).equals("nuist") && (f2.getText()).equals("123")) {
// JOptionPane.showMessageDialog(null, "登录成功!用户权限是adimistrator");// 弹出要求用户提供值或向其发出通知的标准对话
power = "adminstrator";// 赋予管理员权限
Qframe frame = new Qframe();// 验证成功后就建对象调用构造方法连接数据库
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(
"img1.jpg"));// 进入管理系统的logo图片
frame.setLocation(400, 200);
frame.setSize(500, 285);
frame.setResizable(false);
frame.setVisible(true);
dispose();// 释放此图形的上文以及它使用的所有系统资源,即实现关闭弹出新窗口后关闭上个窗口
} else if ((f1.getText()).equals("admin")
&& (f2.getText()).equals("123")) {
JOptionPane.showMessageDialog(null, "登录成功!用户权限是user");// 弹出要求用户提供值或向其发出通知的标准对话框
power = "adminstrator";
Qframe frame = new Qframe();
frame.setIconImage(Toolkit.getDefaultToolkit().createImage(
"img1.jpg"));
frame.setLocation(400, 200);
frame.setSize(750, 543);// 500/285
frame.setResizable(false);
frame.setVisible(true);
dispose();
} else
JOptionPane.showMessageDialog(null, "登录失败,请重新登录!");
}
} }

然后,就是登录后的主界面,有五大板块,分别是:增加、删除、修改、查询和显示订房表。最后还有一个退出程序的按钮。如图6-2所示主界面。该部分伪代码如下:
JPanel contentPane;
BorderLayout borderLayout1 = new BorderLayout(5, 10);// 构造边框布局,水平间距5,垂直间距10
public static final TextArea result = new TextArea();//注意此result不是结果集,是展示表的文本区
public Qframe() {
contentPane = (JPanel) this.getContentPane();// 返回此窗体的 contentPane 对象
contentPane.setLayout(borderLayout1);
this.setTitle("宾馆客房管理系统");// 设置窗口标题
addWindowListener(new WindowAdapter() {// 监听窗口处理事件 按X就结束程序
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
result.setEditable(false);// 设置信息显示文本框区域为不可编辑
result.setBackground(Color.WHITE);// 设置文本背景为白色
JPanel option = new JPanel();// 选择功能按钮容器
final Button zenjia = new Button("增加");// 增加按钮
option.add(zenjia, BorderLayout.NORTH);// 将组件置于其显示区域的顶部,并在水平方向上居中。
zenjia.addActionListener(new ActionListener() {// 监听增加按钮事件
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == zenjia) {
Adddialog add1 = new Adddialog();// 调用增加窗口类
add1.setVisible(true);// 显示窗口
}
}
});

下方的空白是文本区,可以显示订单表中的信息,只需要点击一下显示订单表按钮即可显示。如图6-3所示。该部分伪代码如下:
try {
stmt = sin.prepareStatement("select * from 订房表 where 客户编号=?");
stmt.setObject(1, sno);
rs = stmt.executeQuery();
int count = 0;//查询不到记为0,查询得到记为1
while (rs.next()) {
String msg = rs.getString("客户编号") + "\t"
+ rs.getString("房号") + "\t"
+ rs.getString("退房日期") + "\n";
JOptionPane.showMessageDialog(null, msg, "查询结果:",
JOptionPane.NO_OPTION);
dispose();
count = 1;//查询得到就记count为1,
}
if (count == 0)//查询不到就显示无该商品号
JOptionPane.showMessageDialog(null, "无该客户", "查询结果:",
JOptionPane.NO_OPTION);
// stmt.close();
// con.close();
} catch (SQLException h) {
// TODO Auto-generated catch block
h.printStackTrace();
}
最后,演示一下添加顾客功能,对应的顾客表、房源表和订单表在后端数据库都会发生相应改变。如图6-4和6-5所示。该部分伪代码如下:
public final static void insert(Connection con, Object obj[]) {
PreparedStatement stmt = null;
PreparedStatement stmt2 = null;
PreparedStatement stmt3 = null;
try {
stmt = con.prepareStatement("insert into 订房表(客户编号,房号,退房日期) values(?,?,?)"
+ "insert into 客户表(客户编号,房号,退房日期,购房日期,客户姓名,性别,所购房型,联系方式) values(?,?,?,?,?,?,?,?)"
+ "update 房源表 set 是否空置 ='否',退房日期 =? where 房号 =?");
// SQL 语句被预编译并存储在 PreparedStatement 对象中,包含多个 '?' IN 参数占位符的 SQL 语句
stmt.setString(1, obj[0].toString());// 将指定参数设置为传入的字符串
stmt.setString(2, obj[1].toString());
stmt.setString(3, obj[2].toString());
........
stmt.execute(); // 执行sql语句
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "失败", "操作提示!",
JOptionPane.NO_OPTION);
}
}


我正在使用i18n从头开始构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在rubyonrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
我安装了ruby版本管理器,并将RVM安装的ruby实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby。有没有办法让emacs像shell一样尊重ruby的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el
我正在尝试使用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
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s
电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。 准备工作: 1、U盘一个(尽量使用8G以上的U盘)。 2、一台正常联网可使用的电脑。 3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。 4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。 U盘启动盘制作步骤: 注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/