Java课程设计:基于swing + mysql的酒店管理系统

文章目录

  • 一、项目介绍
  • 二、项目展示
  • 三、源码展示
  • 四、源码获取

一、项目介绍

项目功能

1、散客开单:完成散客的开单,可一次最多开5间相同类型的房间。
2、团体开单:完成团体的开单,开放数量没有限制,可同时开不同类型的房间。
3、宾客结帐:自动统计每个登记客人在店时所发生的消费额和应付款额,并完成结帐收银操作。
4、客房预订:完成增加预订、修改预订、删除预订,预订情况的查询等功能。
5、营业查询:完成结帐单、全部宾客消费、在店宾客消费、离店宾客消费的查询
6、客户管理:完成会员基本信息的维护和来宾一览。
7、网络设置:完成系统与数据库的连接设置和系统风格的设置。
8、系统设置:完成房间项目、客户类型、操作员、计费设置。

在这里插入图片描述

二、项目展示

登录页面
在这里插入图片描述
主页面
在这里插入图片描述
系统设计
在这里插入图片描述
客户管理
在这里插入图片描述
客户预定
在这里插入图片描述
收银结账
在这里插入图片描述
团体开单
在这里插入图片描述
散客开单
在这里插入图片描述

三、源码展示

在这里插入图片描述
在这里插入图片描述
登录

public Login() {
		super("系 统 登 录");
		top = new JLabel (new ImageIcon("pic/login_top.gif"));
		bott = new JLabel();
		panelMain = new JPanel(new BorderLayout(10, 10));
		bott.setBorder(new LineBorder (new Color(184, 173, 151)));
		buildCenter();
		
		panelMain.add("North", top);
		panelMain.add("South", bott);
		panelMain.add(panelInfo);
		
		//加事件监听
		bt1.addActionListener(this);
		bt2.addActionListener(this);
		bt1.addFocusListener (this);
		bt2.addFocusListener (this);
		bt1.addKeyListener (this);
		bt2.addKeyListener (this);
		cb.addItemListener (this);
		cb.addFocusListener(this);
		pf.addFocusListener(this);
		cb.addKeyListener (this);
		pf.addKeyListener (this);
		
		//加窗口监听 new WindowAdapter适配器类
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				quit();
			}//End windowClosing
		});
		
		this.setContentPane(panelMain);		//设置窗口面板
		this.setSize(350, 235);
		this.setResizable (false);			//设置窗口不可放大缩小
		this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
		sunswing.setWindowCenter(this);
		this.setVisible(true);
		pf.requestFocus(true);				//设置焦点给密码框
	}

构造函数

//构造函数
	public CheckOut(JFrame frame) {
		super (frame, "收银结账", true);
		
		panelMain = new JPanel(new GridLayout(2, 1, 0, 0));		//主面板为(2,1)表格布局
		p1        = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 10));//上半部分为(4,1)表格布局
		p2        = new JPanel(new BorderLayout(15, 0));		//下半部分为边界布局
		
		buildP1();//构造上半面板
		buildP2();//构造下半面板
		
		panelMain.add(p1);
		panelMain.add(p2);
		
		addListener();
		this.setContentPane(panelMain);
		this.setPreferredSize (new Dimension(640, 450));
		this.setMinimumSize (new Dimension(640, 450));
		this.setResizable(false);		//不允许改变窗口大小
		pack();
		sunswing.setWindowCenter(this);	//窗口屏幕居中
	}
	
	//加事件监听
	private void addListener() {
		tf1.addActionListener(this);
		tf2.addActionListener(this);
		tf3.addActionListener(this);
		bt1.addActionListener(this);
		bt2.addActionListener(this);
		bt1.addMouseListener(this);
		bt2.addMouseListener(this);
	}
	
	//构造上半面板
	private void buildP1() {
		JPanel p11,p111,p112,p113,
			   p12,p121,p122,p123,p124,
			   p13,p131,p132,p133,
			   p14,p141,p142,p15;
		JLabel lb1,lb2,lb3,lb4,lb5,lb6,lb7,lb8,lb9,lb10,lb11;
		p11 = new JPanel(new FlowLayout(FlowLayout.LEFT,5,3));	//放置结账单号...一行
		p111 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置结账单号
		p112 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置结账房间
		p113 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置宾客姓名
		p12  = new JPanel(new FlowLayout(FlowLayout.LEFT,10,3));//放置应收金额...一行
		p121 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置应收金额
		p122 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置已收押金
		p123 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置优惠金额
		p124 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置消费金额
		p13  = new JPanel(new FlowLayout(FlowLayout.LEFT,10,3));//放置实收金额...一行
		p131 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置实收金额
		p132 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置宾客支付
		p133 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置找零
		p14  = new JPanel(new FlowLayout(FlowLayout.LEFT,10,3));//放置结账备注...一行
		p141 = new JPanel(new FlowLayout(FlowLayout.LEFT,0,3)); //放置结账备注
		p142 = new JPanel(new FlowLayout(FlowLayout.LEFT,33,3)); //放置按钮
		p15  = new JPanel(new GridLayout(3,1,0,5));
		lb1 = new JLabel("结账单号:");
		lb2 = new JLabel("       结账房间:");
		lb3 = new JLabel("       宾客姓名:");
		lb4 = new JLabel("消费金额:");
		lb5 = new JLabel(" 应收金额:");
		lb6 = new JLabel(" 已收押金:");
		lb7 = new JLabel(" 优惠金额:");
		lb8 = new JLabel("实收金额:");
		lb9 = new JLabel("      宾客支付:");
		lb10 = new JLabel("   找     零:");
		lb11 = new JLabel("结账备注:");
		lb1.setFont(new Font("宋体",Font.BOLD,15));
		lb2.setFont(new Font("宋体",Font.BOLD,15));
		lb3.setFont(new Font("宋体",Font.BOLD,15));
		lb4.setFont(new Font("宋体",Font.BOLD,15));
		lb5.setFont(new Font("宋体",Font.BOLD,15));
		lb6.setFont(new Font("宋体",Font.BOLD,15));
		lb7.setFont(new Font("宋体",Font.BOLD,15));
		lb10.setFont(new Font("宋体",Font.BOLD,15));
		lb4.setForeground(Color.blue);
		lb5.setForeground(Color.blue);
		lb6.setForeground(Color.blue);
		lb7.setForeground(Color.blue);
		lb10.setForeground(Color.blue);
		
		lbA = new JLabel("ZD200604210001");
		lbB = new JLabel("BD001");
		lbC = new JLabel("你好吗");
		lbD = new JLabel("500.00");
		lbE = new JLabel("450.00");
		lbF = new JLabel("300.00");
		lbG = new JLabel("50.00");
		lbH = new JLabel("¥0.00");
		lbA.setFont(new Font("宋体",Font.BOLD,15));
		lbB.setFont(new Font("宋体",Font.BOLD,15));
		lbC.setFont(new Font("宋体",Font.BOLD,15));
		lbD.setFont(new Font("宋体",Font.BOLD,15));
		lbE.setFont(new Font("宋体",Font.BOLD,15));
		lbF.setFont(new Font("宋体",Font.BOLD,15));
		lbG.setFont(new Font("宋体",Font.BOLD,15));
		lbH.setFont(new Font("宋体",Font.BOLD,15));
		lbA.setForeground(Color.blue);
		lbB.setForeground(Color.blue);
		lbC.setForeground(Color.blue);
		lbD.setForeground(Color.blue);
		lbE.setForeground(Color.red);
		lbF.setForeground(Color.red);
		lbG.setForeground(Color.red);
		lbH.setForeground(Color.red);
		tf1 = new TJMoneyField("0.00",10);
		tf2 = new TJMoneyField("0.00",10);
		tf3 = new TJTextField(20);
		
		bt1 = new TJButton("pic/u04.gif", " 结   账 ", "结算房费");
		bt2 = new TJButton("pic/cancel.gif", " 取   消 ", "取消结账");
		
		//第一行
		p111.add(lb1);
		p111.add(lbA);
		p112.add(lb2);
		p112.add(lbB);
		p113.add(lb3);
		p113.add(lbC);
		p11.add(p111);
		p11.add(p112);
		p11.add(p113);
		p11.setBorder(BorderFactory.createTitledBorder(""));
		
		//第二行
		p121.add(lb4);
		p121.add(lbD);
		p122.add(lb5);
		p122.add(lbE);
		p123.add(lb6);
		p123.add(lbF);
		p124.add(lb7);
		p124.add(lbG);
		p12.add(p121);
		p12.add(p122);
		p12.add(p123);
		p12.add(p124);
		
		//第三行
		p131.add(lb8);
		p131.add(tf1);
		p132.add(lb9);
		p132.add(tf2);
		p133.add(lb10);
		p133.add(lbH);
		p13.add(p131);
		p13.add(p132);
		p13.add(p133);
		
		//第四行
		p141.add(lb11);
		p141.add(tf3);
		p142.add(bt1);
		p142.add(bt2);
		p14.add(p141);
		p14.add(p142);
		
		p15.add(p12);
		p15.add(p13);
		p15.add(p14);
		p15.setBorder(BorderFactory.createTitledBorder(""));
		p1.add(p11);
		p1.add(p15);
	}

添加会员

public AddHuiYuan (JDialog dialog) {
		super(dialog, "添加会员",true);
		
		panelMain = new JPanel(new BorderLayout(0,0));
		buildPanel();
		addListener();
		this.setContentPane(panelMain);
		this.setPreferredSize (new Dimension (300,300));
		this.setMinimumSize (new Dimension (300,300));
		this.setResizable(false);		//不允许改变窗口大小
		pack();
		sunswing.setWindowCenter(this);	//窗口屏幕居中
	}

预定修改

public ModiEngage (JDialog dialog) {
		super(dialog, "客房预订修改",true);
		
		panelMain = new JPanel(new BorderLayout ());
		ps = new JPanel(new FlowLayout(FlowLayout.CENTER,20,10));//放按钮
		pc = new JPanel(new BorderLayout());//除去按钮其他部分放在一个面板里
		buildPane();
		panelMain.add(pc);
		panelMain.add("South",ps);
		addListener();
		this.setContentPane(panelMain);
		this.setPreferredSize (new Dimension (280,415));
		this.setMinimumSize (new Dimension (280,415));
		this.setResizable(false);		//不允许改变窗口大小
		pack();
		sunswing.setWindowCenter(this);	//窗口屏幕居中
		
	}

创建面板

private void buildPane() {
		
		pcs = new JPanel(new FlowLayout(FlowLayout.CENTER,5,5));//放置JCheckBox
		pcc = new JPanel(new BorderLayout());//放置备注以上,tf以下的控件
		pccs = new JPanel(new FlowLayout(FlowLayout.CENTER,5,5));//放置备注
		pccw = new JPanel(new BorderLayout());//放置列表左边的控件
		pccwc = new JPanel(new FlowLayout(FlowLayout.CENTER,5,10));//放置填写项目
		pccwc1 = new JPanel(new GridLayout(6,1,0,14));//放置标签
		pccwc2 = new JPanel(new GridLayout(6,1,0,5));//放置文本框和下拉列表框

		JLabel lb1,lb2,lb3,lb4,lb5,lb6,lb7,lb8;
		lb1 = new JLabel("宾客姓名:");
		lb2 = new JLabel("联系电话:");
		lb3 = new JLabel("预定规格:");
		lb4 = new JLabel("房间编号:");
		lb5 = new JLabel("预抵时间:");
		lb6 = new JLabel("保留时间:");

		pccwc1.add(lb1);
		pccwc1.add(lb2);
		pccwc1.add(lb3);
		pccwc1.add(lb4);
		pccwc1.add(lb5);
		pccwc1.add(lb6);
		
		tf1 = new JTextField(12);
		tf2 = new JTextField(12);
		tf3 = new TJTextField(12);
		tf4 = new TJTextField(12);
		tf1.setEditable(false);
		tf2.setEditable(false);
		cb1 = new JComboBox();//公共类刷新
		sunsql.initJComboBox(cb1,"select r_type from roomtype where delmark = 0");
		cb2 = new JComboBox();
		String s = cb1.getSelectedItem()+"";
		sunsql.initJComboBox(cb2,"select a.id from roominfo as a,roomtype as b where b.r_type = '"+s+"' and a.r_type_id = b.id and a.state = '可供' and a.delmark = 0 and b.delmark = 0");
		
		pccwc2.add(tf1);
		pccwc2.add(tf2);
		pccwc2.add(cb1);
		pccwc2.add(cb2);
		pccwc2.add(tf3);
		pccwc2.add(tf4);
		
		pccwc.add(pccwc1);
		pccwc.add(pccwc2);
				
		pccw.add(pccwc);
		
		dtm1 = new DefaultTableModel();
		tb1	 = new JTable(dtm1);
		sp1  = new JScrollPane(tb1);
		String sqlCode1 = "select a.r_type 预定规格,b.r_no 房间 from roomtype as a,engage1 as b where a.id = b.r_type_id";
		sunsql.initDTM(dtm1,sqlCode1);
		
		lb8 = new JLabel("备  注:");
		ta  = new TJTextArea(3,12);
		sp2 = new JScrollPane(ta);
		
		pccs.add(lb8);
		pccs.add(sp2);
		
		pcc.add("South",pccs);
		pcc.add(pccw);
		
		chk = new JCheckBox(" 到达保留时间是否自动取消预定");
		
		pcs.add(chk);

		bt1 = new TJButton ("pic/save.gif", "保  存", "保存预定信息"); 
		bt2 = new TJButton ("pic/cancel.gif", "取  消", "取消操作"); 
		
		ps.add(bt1);
		ps.add(bt2);
		
		tf = new JTextField("基本预定信息");
		tf.setHorizontalAlignment (JTextField.CENTER);
		tf.setBackground(new Color(199,183,143));
		tf.setBorder(new LineBorder(new Color(87,87,47)));
		tf.setEditable(false);
		
		pc.add("North",tf);
		pc.add(pcc);
		pc.add("South",pcs);
		pc.setBorder(BorderFactory.createTitledBorder(""));
	}

散客开单

public Individual(JFrame frame) {
		super (frame, "散客开单", true);
		panelMain = new JPanel(new BorderLayout());	//主面板为边界布局,确定取消按钮放South
		buildPanel();
		addListener();
		this.setContentPane(panelMain);
		this.setPreferredSize (new Dimension (530,510));
		this.setMinimumSize (new Dimension (530, 510));
		this.setResizable(false);		//不允许改变窗口大小
		pack();
		sunswing.setWindowCenter(this);	//窗口屏幕居中
	}

四、源码获取

因为页面与源码太多了,所以页面与源码只展示了一部分,完整源码已经打包了,点击下面蓝色链接获取!

点我获取源码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/713543.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java阻塞队列:ArrayBlockingQueue

Java阻塞队列:ArrayBlockingQueue ArrayBlockingQueue是Java中的一个阻塞队列(Blocking Queue)实现,它是线程安全的,并且基于数组实现。ArrayBlockingQueue常用于生产者-消费者模型,在这种模型中&#xff…

北京人工智能数据运营平台发布,并开源大规模数据集

6月14日,AI行业顶级盛会2024北京智源大会正式拉开帷幕。作为大会的重要组成部分,智源大会“人工智能数据新基建”论坛同步召开。本论坛由北京智源人工智能研究院主办,中国互联网协会人工智能工委会和中国移动研究院承办。本次论坛邀请到来自中…

2-5 基于matlab的信号的希尔伯特-黄变换

基于matlab的信号的希尔伯特-黄变换,IMF分解,对IMF进行Hilbert处理,绘制二维/三维时-频图,时间-能量图(瞬时能量谱) ,频率-能量图(希尔伯特谱)。程序已调通,可直接运行。 2-5 希尔伯…

java Springboot网上音乐商城(源码+sql+论文)

1.1 研究目的和意义 随着市场经济发展,尤其是我国加入WTO ,融入经济全球化潮流,已进入国内外市场经济发展新时期,音乐与市场联系越来越紧密,我国音乐和网上业务也进入新历史发展阶段。为了更好地服务于市场&#xff0…

11.泛型、trait和生命周期(上)

标题 一、泛型数据的引入二、改写为泛型函数三、结构体/枚举中的泛型定义四、方法定义中的泛型 一、泛型数据的引入 下面是两个函数,分别用来取得整型和符号型vector中的最大值 use std::fs::File;fn get_max_float_value_from_vector(src: &[f64]) -> f64…

.net8 blazor auto模式很爽(五)读取sqlite并显示(2)

在BlazorApp1增加文件夹data&#xff0c;里面增加类dbcont using SharedLibrary.Models; using System.Collections.Generic; using Microsoft.EntityFrameworkCore;namespace BlazorApp1.data {public class dbcont : DbContext{public dbcont(DbContextOptions<dbcont>…

Python进阶:从函数到文件的编程艺术!!!

第二章&#xff1a;Python进阶 模块概述 函数是一段可重复使用的代码块&#xff0c;它接受输入参数并返回一个结果。函数可以用于执行特定的任务、计算结果、修改数据等&#xff0c;使得代码更具模块化和可重用性。 模块是一组相关函数、类和变量的集合&#xff0c;它们被封…

vs+qt5.0 使用poppler 操作库

Poppler 是一个用来生成 PDF 的C类库&#xff0c;从xpdf 继承而来。vs编译库如下&#xff1a; vs中只需要添加依赖库即可 头文件&#xff1a;

2.2 抽头

目录 为什么要抽头 什么是抽头 接入系数 怎么抽头 信号源端抽头 负载端抽头 例题分析 要点总结 为什么要抽头 阻抗转换&#xff0c;使信号源内阻Rs与负载电阻RL变得很大&#xff0c;分流小&#xff0c;再使用并联方式。 什么是抽头 接入系数 电容越大&#xff0c;分压越…

初识PHP

一、格式 每行以分号结尾 <?phpecho hello; ?>二、echo函数和print函数 作用&#xff1a;两个函数都是输出内容到页面中&#xff0c;多用于代码调试。 <?php echo "<h1 styletext-align: center;>test</h1>"; print "<h1 stylet…

使用python绘制三维曲线图

使用python绘制三维曲线图 三维曲线图定义特点 效果代码 三维曲线图 三维曲线图&#xff08;3D曲线图&#xff09;是一种用于可视化三维数据的图表&#xff0c;它展示了数据在三个维度&#xff08;X、Y、Z&#xff09;上的变化。 定义 三维曲线图通过在三维坐标系中绘制曲线…

AI大模型技术揭秘-参数,Token,上下文和温度

深入理解 AI 大模型:参数、Token、上下文窗口、上下文长度和温度 人工智能技术的飞速发展使AI大模型大放异彩,其中涉及的“参数”、“Token”、“上下文窗口”、“上下文长度”及“温度”等专业术语备受瞩目。这些术语背后究竟蕴含何意?它们如何影响AI大模型的性能?一起揭开…

htb_Freelancer

端口扫描 80 88 389 445 扫描ldap协议相关漏洞&#xff0c;没有发现 扫描子域名&#xff0c;加入/etc/hosts&#xff08;后面发现没用&#xff09; 枚举域用户 目录扫描&#xff0c;发现一个/admin目录 访问后发现要账号密码 访问80端口&#xff0c;注册一个freelancer用…

关于二分法的理解(以JS为例)

算法介绍 基本概念 二分查找算法&#xff0c;又称折半查找算法&#xff0c;是一种在有序数组中查找特定元素的高效方法。它的核心思想是将数组分成两半&#xff0c;然后根据目标值与中间元素的比较结果来决定是继续在左半部分还是右半部分进行搜索。 工作原理 初始化&#…

Vue3+Vite报错:vite忽略.vue扩展名 Failed to resolve import ..... Does the file exist?

Vue3Vite报错&#xff1a;vite忽略.vue扩展名 Failed to resolve import … Does the file exist? 先看报错&#xff1a; 分析原因 原因是我们没有写后缀名 建议你在你的vite.config.js中加上如下配置 import { defineConfig } from "vite"; import vue from &qu…

股指期货功能

其金融期货的本质&#xff0c;决定了股指期货具有以下几方面特点&#xff1a; &#xff08;1&#xff09;交割方式为现金交割&#xff1b; &#xff08;2&#xff09;股指期货的持有成本较低&#xff1b; &#xff08;3&#xff09;股指期货的保证金率较低&#xff0c;杠杆性…

R 初级教程之一

IT的发展目前已经相当的内卷&#xff0c;到处都在说24年是将来4年最难的一年&#xff01;确实是&#xff0c;眼下各大厂商都在疯狂的裁员砍掉不营利的业务&#xff0c;收紧业务&#xff0c;不再盲目的扩张。小公司更是水深火热&#xff0c;无以言表。近期有个医院联系让使用R给…

Zombie Animations Set

僵尸动画合集,包括成对攻击/抓取、各种移动方式、爬行、击中反应、死亡动画等。 生产说明 动画总数:99(包括22个位置变化) 配对动画:36 攻击次数:6次 爬网:9 命中反应:6 空转:14 行程2 跑步次数:9次 短跑:2 匝数:3 步行次数:12次 免责声明 任何游戏玩法蓝图都不包…

【计算机毕业设计】240基于微信小程序的校园综合服务平台

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

禁止methtype联网

mathtype断网_如何禁止mathtype联网-CSDN博客https://blog.csdn.net/qq_41060221/article/details/128144783