基于JavaSwing设计和实现的酒店管理系统
作者:Cs 挽周 发布时间:2022-03-31 12:12:14
前言:
项目是使用Java swing开发,可实现基础数据维护用户登录、系统首页酒店信息管理、主要模块是开房管理、退房管理、房间信息管理、顾客信息管理等功能。界面设计比较简介、适合作为Java课设设计以及学习技术使用。获取源码
引言
在信息高度发达的今天, 酒店业务涉及的各个工作环节已不再仅仅是传统 的住宿、 结算业务,而是更广、更全面的服务性行业代表。酒店宾馆作为一个服务性行业,从客 房的营销即客人的预定开始, 到入住登记直到最后退房结账, 整个过程应该能够体现以 宾客为中心,提供快捷方便服务,给宾客感受一种顾客至上的享受,提高管理水平,简 化各种复杂操作, 在最短时间内完成酒店业务规范操作, 这样才能令旅客舒适难忘。 因 此,采用全新的计算机管理系统, 将成为提高酒店的管理效率, 改善服务水准的手段之 一。系统从满足客户的需求角度出发, 实现了酒店管理的基本流程。 系统的主要功能包 登录、重置、查看 设置等等。用户入住酒店的时候所要等待的时间就会大大的减少, 操作员能够很方便的 对用户信息的登记和对房间状态的的管理, 从而实现了酒店管理系统高效、 准确的特点。
主要技术和工具:
eclipse+JDK1.8+Navicat +swing +mysql
功能截图:
登录管理:
用户输入账号密码以及验证码进行登录验证
酒店管理信息:
开房:
用户录入开房相关信息、 提交的时候后台会验证数据的数据是否正确、房间是否被占用等情况
退房:
输入身份证信息和房间号进行验证正确后完成退房
房间信息:
房间信息管理管理页面可以查看所有的房间信息、房间标准以及状态等、也可以更具房间类型来查询房间信息。
顾客信息:
关键代码:
主入口:
public class LoginFrame extends JFrame {
private JPanel contentPane;
private JTextField textField;
private JPasswordField passwordField;
private JTextField textField_1;
private CaptchaUtils cpt;
private BufferedImage image1;
private String code;
private JLabel label_6;
//创建deskservice对象
private DeskService deskService=new DeskServiceImpl();
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
LoginFrame frame = new LoginFrame();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public LoginFrame() {
setBackground(Color.GREEN);
setTitle("KING'S LANDING");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setBounds(500, 250, 624, 524);
contentPane = new JPanel(){
protected void paintComponent(Graphics g){
super.paintComponent(g);
ImageIcon images=new ImageIcon("images/624524.jpg");
g.drawImage(images.getImage(),0,0,null);
}
};
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JLabel label_1 = new JLabel("\u7528\u6237\u540D");
label_1.setBackground(Color.WHITE);
label_1.setForeground(Color.WHITE);
label_1.setFont(new Font("微软雅黑", Font.PLAIN, 15));
label_1.setIcon(new ImageIcon(LoginFrame.class.getResource("/images/yonghu.png")));
textField = new JTextField();
textField.setBackground(Color.WHITE);
textField.setColumns(10);
label_6=new JLabel();
label_6.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
cpt=new CaptchaUtils();
//获取画布
image1=cpt.getBuffImg();
//获取随机数
code=cpt.getCode();
ImageIcon icon=new ImageIcon(image1,"jpeg");
label_6.setIcon(icon);
}
});
/**
* 验证码
*/
cpt=new CaptchaUtils();
//获取画布
image1=cpt.getBuffImg();
//获取随机数
code=cpt.getCode();
ImageIcon icon=new ImageIcon(image1,"jpeg");
label_6.setIcon(icon);
JLabel label_2 = new JLabel("\u5BC6\u7801");
label_2.setForeground(Color.WHITE);
label_2.setFont(new Font("微软雅黑", Font.PLAIN, 15));
label_2.setIcon(new ImageIcon(LoginFrame.class.getResource("/images/mima.png")));
JButton button = new JButton("\u767B\u5F55");
//设置按钮的透明
button.setContentAreaFilled(false);
//给按钮上的字设置颜色
button.setForeground(Color.WHITE);
button.setBackground(Color.WHITE);
button.setFont(new Font("微软雅黑", Font.PLAIN, 20));
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
//获取输入的用户名和密码
String name=textField.getText();
char[]array=passwordField.getPassword();
String password=new String(array);
System.out.println("name:"+name);
System.out.println("password:"+password);
//用户输入的验证码
String codeFrame=textField_1.getText();
if(!(code.equalsIgnoreCase((codeFrame)))){
JOptionPane.showMessageDialog(null, "验证码错误,请重新输入!");
return;
}
DeskDaoImpl deskDao=new DeskDaoImpl();
Desk desk=new Desk(name,password);
int code=deskDao.LoginDesk(desk);
//判断是否是管理员登录
if(code==1){
//登录成功
new HomeFrame().setVisible(true);
//符合 则跳转到管理员的后台管理界面
dispose();
return ;
}
else{
boolean bool=deskService.LoginDeskService(desk);
if(!bool){
JOptionPane.showMessageDialog(null, "账号或密码错误,请重新输入!");
return;
}
//登录成功
new HomeFrame().setVisible(true);
dispose();
}
});
}
开房入住:
@Override
//开房监听事件
public void mouseClicked(MouseEvent e) {
//获取输入的房间号
int houseId=Integer.parseInt(textField.getText());
//获取输入的姓名
String name=p_name.getText();
//获取输入的年龄
int age=Integer.parseInt(p_age.getText());
//获取输入的入住天数
int day=Integer.parseInt(p_day.getText());
//获取输入的身份证号
String id=p_id.getText();
//获取输入的性别
String sex=p_sex.getText();
//获取房间类型
String type=p_type.getText();
//封装到Guest实体中
Guest guest=new Guest();
guest.setG_roomid(houseId);
guest.setG_name(name);
guest.setG_age(age);
guest.setG_days(day);
guest.setG_id(id);
guest.setG_sex(sex);
//封装到Room实体中
Room room=new Room();
room.setR_id(houseId);
//判断年龄是否合理
if(!(age>0&&age<100)){
JOptionPane.showMessageDialog(null, "年龄输入不合理,请重新输入!");
return;
}
//判断性别是否合理
if(!(sex.equals("男")||sex.equals("女"))){
JOptionPane.showMessageDialog(null, "性别只能是男或女,请重新输入!");
return;
}
//入住天数不能小于1
if(!(day>0)){
JOptionPane.showMessageDialog(null, "入住天数不能小于1天,请重新输入!");
return;
}
boolean bool=rs.OpenRoom(room);
if(!bool){
//房间已满则开房失败
JOptionPane.showMessageDialog(null, "该房间已满,请更换房间!");
return;
}
if(!(type.equals("标准房")||type.equals("套房")||type.equals("双人房")||type.equals("豪华套房"))){
JOptionPane.showMessageDialog(null, "输入的信息有误,开房失败!");
return;
}
boolean bool1=gsi.AddGuest(guest);
if(bool1){
//身份证不符合格式也失败
JOptionPane.showMessageDialog(null, "身份证不符合格式,开房失败!");
return;
}
}
});
数据库设计:
用户表:
CREATE TABLE `NewTable` (
`d_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '前台id' ,
`d_name` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '姓名' ,
`d_password` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '密码' ,
INDEX `d_id` (`d_id`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci
AUTO_INCREMENT=112
ROW_FORMAT=COMPACT
;
入住信息表:
CREATE TABLE `NewTable` (
`g_roomid` int(11) NULL DEFAULT NULL COMMENT '房间id' ,
`g_id` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '顾客编号' ,
`g_name` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '姓名' ,
`g_sex` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT '性别' ,
`g_age` int(11) NULL DEFAULT NULL COMMENT '年龄' ,
`g_days` int(11) NULL DEFAULT NULL COMMENT '入住天数' ,
`g_time` datetime NULL DEFAULT NULL COMMENT '入住日期'
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci
ROW_FORMAT=COMPACT
;
房间信息表 :
CREATE TABLE `NewTable` (
`r_id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'roo id' ,
`r_type` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT 'room 类型' ,
`r_price` double NULL DEFAULT NULL COMMENT 'room价格' ,
`r_local` varchar(100) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT 'room位置' ,
`r_state` varchar(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL COMMENT 'room状态' ,
INDEX `r_id` (`r_id`) USING BTREE
)
ENGINE=InnoDB
DEFAULT CHARACTER SET=latin1 COLLATE=latin1_swedish_ci
AUTO_INCREMENT=106
ROW_FORMAT=COMPACT
;
ps:项目来于网络、作者整理优化测试、若有侵权联系作者删除
总结:
通过这次课程设计。我学到了许多令我受益匪浅的知识。感觉java的界面设计和 mfc差不多。只是java没有可视化的界面做起来太累了。其他主要是类和对象的问题。实现起来还是挺简单的。综合了根据中小型星级酒店的实际情况的特点, 虽然用户界面比较一般,但操作使用还是方便。符合酒店管理的基本流程。但由于时间仓促,一些不足之处还很多、比如美化和部分功能设计的都比较简单、但作为学生学习参考以及课程设计还是不错的选择。
来源:https://blog.csdn.net/weixin_45692705/article/details/119736784


猜你喜欢
- protobuf 是 google的一个开源项目,可用于以下两种用途:(1)数据的存储(序列化和反序列化),类似于xml、json等;(2)
- 本篇主要是自定义动画与Animatable。AnimationSpec上一篇中,出现了多次animationSpec属性,它是用来自定义动画
- 项目地址: GITHUB (本地下载)java mybatis 多表查询简介实现简单的实体类操作多表, 首先你的项目是
- @Value获取yml和properties配置参数Yml:#定时任务配置 application:
- 出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象)
- 使用@Tolerate实现冲突兼容使用Lombok能够减少程序员的重复工作提高工作效率,而Lombok的注解基本是基于标准的(如,标准的Bu
- 1.使用API设置主题如下所示,在Activity中使用setThemesetTheme(R.style.MyTheme1);2.调用API
- 一. 下载tomcat首先要到tomcat官网去下载安装包,官网下载地址如下:http://tomcat.apache.org/downlo
- 方法一:利用两个指针p,q,首先将q往链表尾部移动n位,然后再将p、q一起往后移,那么当q达到链表尾部时,p即指向链表的倒数第n个节点。no
- 一、先来看看效果演示二、实现原理:这个其实不难实现,通过一个定时器不断调用TextView的setText就行了,在setText的时候播放
- 实现 bean 初始化、摧毁方法的配置与处理spring支持我们自定义 bean 的初始化方法和摧毁方法。配置方式可以通过 xml 的 in
- RabbitMQ的示例,涉及到Direct、Fanout、Topic和Headers交换机以及普通队列、延迟队列和死信队列在pom.xml文
- 有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候。简单来说,可
- 多线程的好处是不言而喻的,它能帮我们刚更多的事情,同时干不同的事情在程序设计中是经常出现的,这种时候我们使用的是线程。在Kotlin 中,
- 本文实例讲述了C#实现的SQL备份与还原功能。分享给大家供大家参考,具体如下://记得加 folderBrowserDialog1 open
- 前言随着标准Java的版本更新,开发者总是可以从升级后的版本中获取想要的功能。本文将给大家详细介绍下mac下面的java9版本安装使用,分享
- 1、直接使用getWindow().getDecorView().getRootView()直接使用getWindow().getDecor
- 一、简介  本文今天主要是讲Redis中对过期key的监听,可能很多小伙伴不会,或者使用会出现一些不可思
- 苹果的iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里
- BeanDefinitionRegistryPostProcessor概述可以看到BeanDefinitionRegistryPostPro