目 录
本系统使用Java语言实现,编写代码的工具是eclipse,为了连接数据库,要下载JDBC驱动,并且改变SQL Server2022的一些配置,例如把SQLEXPRESS的协议中的TCP /IP端口设为1433,并重新启动SQLEXPRESS服务器。
使用Visual Paradigm online绘制初步类图、事件顺序图、功能用例图、优化类图;使用WPS自带的本地流程图绘制状态图、功能级数据流图。
姓名 | 具体工作内容 |
tbc | (1)完善数据库的创建与连接,配置和导入jdbc (2)编写包connection、包com、包waiter、包zhuce中的代码,修改错误 (3)撰写报告中的需求陈述、初步对象模型、动态模型中的顺序图、功能模型中的用例图、类图优化及说明、人机交互子系统设计中的用户分类、类的关联设计、类中服务的设计、主要界面截图、总结与心得体会、参考的网上资源及文献 |
hyt | (1)实现数据库的创建与连接,下载jdbc (2)编写包admin、包data、包customer中的代码,修改错误 (3)撰写报告中的设计工具、动态模型中的状态图、功能模型中的数据流图、问题域子系统设计、人机交互子系统设计中的人机交互类设计、数据库设计、核心代码及说明、总结与心得体会、参考的网上资源及文献 |
tbc:负责完善数据库的创建与连接,配置和导入jdbc,编写包connection(数据库的连接)、包com(登陆页面)、包waiter(服务员模块)和包zhuce(注册页面)中的代码,撰写课设报告的需求陈述、初步对象模型、动态模型中的顺序图、功能模型中的用例图、类图优化及说明、人机交互子系统设计中的用户分类、类的关联设计、类中服务的设计、主要界面截图、总结与心得体会、参考的网上资源及文献。
hyt:负责数据库的创建(顾客信息表、服务员信息表、KTV房间表、房间预约单表、房间使用记录表、用户登录表),下载jdbc,编写包admin(管理员模块)、包data(数据库信息的增删改查)、包customer(顾客模块)中的代码,撰写课设报告的设计工具、动态模型中的状态图、功能模型中的数据流图、问题域子系统设计、人机交互子系统设计中的人机交互类设计、数据库设计、核心代码及说明、总结与心得体会、参考的网上资源及文献。
3.1需求陈述
3.1.1用户需求
本系统设计初衷是希望在快节奏的时代,不论是家庭,还是工作场所,亦或是学校,在业余时候,人们能找到一种释放压力疲惫的娱乐方式,也能感受到和朋友与家人聚会的乐趣。顾客来到KTV会开包房消费,但是包房会有大小之分,有不同时长要求,不同类型的包房价格也不同。本系统希望可以按照顾客的需求进行包房分配,并且及时知道包房剩余状态,更方便服务员快捷的进行包房分配,并且服务员可以了解顾客的个人信息,可以准确地为顾客提供服务。KTV厢房管理系统是娱乐场所的一项管理措施,它具有简单的软件特征,系统结构与现实生活紧密结合,具体直观,具有典范的便捷软件特点,操作简单直观,用起来极为方便,使每个用户都能根据自己时间等因素选择可定包厢。因此,KTV厢房管理系统是企业化、智能化、科学化、正规化不可缺少的管理软件。
3.1.2业务流程分析
本系统面向的用户是顾客、服务员和管理员。在选择页面选择不同的身份进入不同的身份界面。下面对于这三个身份对KTV系统的处理不同进行分析:
- 顾客:要在本系统有一个可以登录的账号和密码,如果没有可以注册一个账号和设置密码。顺利登录账号后可以查询KTV房间使用状态(使用中、已预约、空闲中),可以通过输入房间号、价格、推荐人数和使用时间来预约KTV房间并显示预约记录。也可以通过输入房间号来取消预约并给出相应提示。可以查看登录者的个人信息并选择退出系统。
- 服务员:也是要登录或注册一个自己的账号,登录账号后可以按房间号查询顾客预约情况。可以选择查看不同信息:按顾客姓名查询顾客个人信息,按不同的房间状态查询KTV房间预约信息和查看顾客预约记录。可以查看登录者的个人信息并选择退出系统。
- 管理员:登录或注册一个自己的账号,成功登录后可以分别对KTV房间信息、顾客信息、服务员信息进行管理。对KTV房间管理,可以增加、修改、删除KTV房间信息,包括房间号、房间价格、推荐人数和房间状态。对顾客信息管理,同样可以对其进行增加、修改、删除操作,包括顾客账号、姓名、性别、身份证号、联系方式。对服务员信息管理,可以增加、修改、删除服务员信息,包括工号、姓名、账号、性别、联系方式和密码。同样也可以查看登录者的个人信息并选择退出系统。
3.1.3信息需求分析
KTV业务流程中主要涉及了顾客基本信息,服务员基本信息,KTV房间信息,房间预约信息,房间使用记录,用户登录信息。下面举出例子说明。
表1 顾客基本信息(例子)
账号 | 姓名 | 性别 | 身份证号 | 电话号码 |
Daming | 大明 | 男 | 3456789233556 | 123456235665 |
表2服务员基本信息(例子)
工号 | 姓名 | 性别 | 电话号码 |
001 | 张三 | 男 | 2347315465 |
表3 KTV房间信息(例子)
房间号 | 房间价格 | 房间容纳人数 | 房间使用情况 |
A001 | 184 | 4 | 已预约 |
A005 | 200 | 8 | 使用中 |
表4 房间预约信息(例子)
预约单号 | 预约顾客账号 | 预约顾客姓名 | 房间号 | 预约价格 |
1 | 11 | 小红 | A003 | 388 |
表5 房间使用记录信息(例子)
账号 | 房间号 | 开始使用时间 | 结束使用时间 |
11 | A001 | 1:00 | 5:00 |
表6 用户登录信息(例子)
账号 | 密码 | 登录身份 |
11 | 1 | 顾客 |
zhangsan | 123456 | 服务员 |
admin | 123456 | 管理员 |
3.1.4功能需求分析
功能需求分析
KTV管理系统主要有三大功能模块。用户方面要求可以查看个人信息,可以查看并预定KTV房间,可以查看并取消预定情况记录。服务员方面功能要求可以查看个人信息、查看顾客预约情况、查看顾客信息、查看KTV房间预约情况。管理员方面,功能要求可以查看个人信息;可以对服务员信息、KTV房间信息和顾客信息进行增加、修改、删除操作,即可以对所有的用户进行管理。
3.2初步的对象模型
以上是一个简单的类图示例,其中包含了顾客、服务员、KTV房间、预约单和用户登录这几个实体的类及其属性和方法。
- 顾客信息和用户登录信息之间的关系是关联关系。顾客信息实体包含一个账号属性,而用户登录信息实体包含一个登录账号属性。通过这个账号属性,可以将顾客和对应的登录信息关联起来。关联关系可以是一对一或一对多,具体取决于业务需求。
- 服务员信息和用户登录信息之间的关系也是关联关系,类似于顾客信息和用户登录信息之间的关系。服务员信息实体包含一个工号属性,而用户登录信息实体包含一个登录账号属性。通过这个工号属性,可以将服务员和对应的登录信息关联起来。
- 预约单信息和顾客信息、KTV房间信息之间的关系是关联关系。预约单信息实体包含顾客账号和KTV房间号属性,通过这两个属性可以将预约单关联到对应的顾客和房间信息上。
- 用户登录信息实体中的角色属性可以表示用户的身份,用于区分顾客、服务员和管理员。这个角色属性与顾客信息、服务员信息、管理员信息之间存在关联关系。
各个类之间的联系:
1.Customer(顾客)和Reservation(预订)之间的联系:
Reservation类中的customerAccount属性引用了Customer类中的accountId属性,表示预订记录与顾客账号的关联。
Reservation类中的customerName属性表示预订记录中的顾客姓名。
2.Waiter(服务员)和Reservation之间的联系:
Waiter类并未直接与Reservation类关联,可能是通过其他途径或业务流程进行关联。
3.KTVRoom(KTV包厢)和Reservation之间的联系:
Reservation类中的roomNumber属性表示预订记录中的包厢编号。
Reservation类中的roomPrice属性表示预订记录中的包厢价格。
KTVRoom类中的checkAvailability()方法可以查询包厢是否可用,与Reservation类中的创建、更新和取消预订等方法相互作用。
4.UserLogin(用户登录)和其他类之间的联系:
UserLogin类代表用户登录信息,与其他类之间可能存在关联,但在当前给出的类图中未显示具体关系。
Customer类和Waiter类都有login()和register()方法,可能与UserLogin类相关。
3.3动态模型
3.3.1 顺序图
3.3.2 状态图
(1)顾客类
(2)服务员类
(3)管理员类
3.4 功能模型
(1)用例图
(2)数据流图
数据字典:
(1)
名字:用户信息
别名:账号密码信息、账号密码
描述:用户登录时匹配的三种不同身份的信息
定义:用户信息=用户名+密码+身份
位置:更新到数据库用户登录表(dbo.login)
(2)
名字:房间使用状态
别名:房间使用记录
描述:筛选出“使用中”或“空闲中”的KTV房间信息
定义:房间使用状态=房间号+房间价格+推荐人数+房间使用状态
位置:输出到程序运行界面(JPanel面板)
(3)
名字:预约记录
描述:选择空闲KTV房间进行预约的信息
定义:预约记录=房间号+价格+推荐人数+使用时间
位置:输出到程序运行界面
(4)
名字:房间预约信息
描述:顾客预约的空闲房间的预约记录
定义:房间预约信息=顾客账号+顾客姓名+房间号+消费金额
位置:输出到程序运行界面
更新到数据库房间预约单表(dbo.bill)
(5)
名字:房间使用情况
别名:KTV房间预约信息
描述:所有“使用中”、“空闲中”或“已预约”的KTV房间信息
定义:房间使用情况=房间号+房间价格+推荐使用人数+房间使用状态
位置:输出到程序运行界面
(6)
名字:预约情况
别名:顾客预约信息
描述:顾客预约或者取消预约KTV房间的相关信息
定义:预约情况=顾客姓名+顾客预约房间+[预约|取消预约]
位置:输出到程序运行界面
(7)
名字:顾客信息
描述:使用该程序的顾客个人信息
定义:顾客信息=顾客姓名+顾客性别+顾客身份证+顾客联系方式
位置:输出到程序运行界面
(8)
名字:修改后的信息
别名:
描述:管理员对KTV房间、顾客信息、服务员信息的增加、删除、修改操作
定义:修改后的信息=(房间号+房间价格+推荐人数+房间使用状态)+(
顾客账号+姓名+性别+身份证号+联系方式)+(工号+姓名+性别+联系方式)
位置:输出到程序运行界面
更新到数据库服务员信息表(dbo.waiter)
更新到数据库顾客信息表(dbo.customer)
更新到数据库KTV房间表(dbo.room)
(9)
名字:房间号
描述:唯一地标识KTV房间中的一个特定房间的关键域
定义:房间号=1{字符}255
位置:KTV房间表(dbo.room)
输出到程序运行界面
(10)
名字:顾客账号
描述:唯一地标识所有顾客中的一个特定顾客的关键域
定义:顾客账号=1{字符}255
位置:顾客信息表(dbo.customer)
输出到程序运行界面
(11)
名字:工号
描述:唯一地标识所有服务员中的一个特定服务员的关键域
定义:工号=1{字符}255
位置:服务员信息表(dbo.waiter)
输出到程序运行界面
4.1 类图优化及说明
根据初步类图进行了以下优化:
- Customer 类
- ① 将 "login" 和 "register" 方法的参数从类属性改为方法参数,使得调用方法时需要明确提供用户名和密码;
② 添加构造函数以便创建对象时可以初始化属性。
- Waiter类
① 将 "login" 和 "register" 方法的参数从类属性改为方法参数,使得调用方法时需要明确提供用户名和密码。
② 添加构造函数以便创建对象时可以初始化属性。
- KTVRoom类
- 增加 "startTime" 和 "endTime" 属性,表示房间的预定起始时间和结束时间
- 修改 "checkAvailability" 方法的参数,从原来的无参方法改为带有 "startTime" 和 "endTime" 参数的方法,以便查询指定时间段内的可用房间。
- 添加构造函数以便创建对象时可以初始化属性。
- Reservation类
- 增加 "startTime" 和 "endTime" 属性,表示预订的起始时间和结束时间。
- 修改 "createReservation" 方法的参数,从原来的无参方法改为带有 "customerAccountId"、"customerName"、"roomNumber"、"roomPrice"、"startTime" 和 "endTime" 参数的方法,以便创建预订信息。
- 修改 "updateReservation" 方法的参数,从原来的无参方法改为带有 "reservationId"、"newRoomNumber"、"newRoomPrice"、"newStartTime" 和 "newEndTime" 参数的方法,以便更新预订信息。
- 修改 "cancelReservation" 方法的参数,从原来的无参方法改为带有 "reservationId" 参数的方法,以便取消指定的预订信息。
- 添加构造函数以便创建对象时可以初始化属性。
- UserLogin类
- 将 "verifyLogin" 方法的参数从类属性改为方法参数,使得调用方法时需要明确提供用户名和密码。
- 将 "changePassword" 方法的参数从类属性改为方法参数,使得调用方法时需要明确提供用户名、原密码和新密码。
- 添加构造函数以便创建对象时可以初始化属性。
根据上面优化后的类图,可以看到以下关联关系:
1. Customer 类与 UserLogin 类之间有关联关系。Customer 类中的 login 和 register 方法需要通过 UserLogin 类来验证用户登录和注册信息。这是一个关联关系。
2. Waiter 类与 UserLogin 类之间也有关联关系。Waiter 类中的 login 和 register 方法也需要通过 UserLogin 类来验证员工登录和注册信息。这也是一个关联关系。
3. KTVRoom 类与 Reservation 类之间存在组合关系。Reservation 类中的 roomNumber 和 roomPrice 属性表示预订的房间号和价格,它们与 KTVRoom 类是组合关系,即 Reservation 类是由 KTVRoom 类组合而成的。
4. Reservation 类与 Customer 类之间存在聚合关系。Reservation 类中的 customerAccount 和 customerName 属性表示预订的客户账号和姓名,它们与 Customer 类是聚合关系,即 Reservation 类中包含了 Customer 类的实例。
综上所述,以上优化后的类图中存在关联关系、组合关系和聚合关系。
4.2 问题域子系统设计
1.用户管理子系统:(依赖于服务员管理子系统和顾客管理子系统)
①包括注册和登录功能。
②提供用户身份验证和权限管理。
2.服务员管理子系统:
①管理员工信息,如员工号、姓名、性别、联系方式等。
②提供员工的添加、删除、更新和查询功能。
3.顾客管理子系统:
①管理客户信息,如账号、姓名、性别、身份证号、联系方式等。
②提供客户的添加、删除、更新和查询功能。
4.房间管理子系统:
①管理KTV房间信息,如房间号、价格、容量等。
②提供房间的添加、删除、更新和查询功能。
5.预订管理子系统:(依赖于顾客管理子系统和房间管理子系统)
①处理预订相关的业务逻辑,包括创建预订、更新预订、取消预订等。
②管理预订信息,包括预订号、客户账号、房间号、起始时间、结束时间等。
4.3 人机交互子系统设计
(1)用户分类
KTV厢房管理系统中业务实体包括顾客信息,服务员信息,KTV房间信息,预约单信息,用户登录信息,下面将详细介绍这些实体模型的含义。
- 顾客信息:代表一个可在系统中登录或注册的顾客实体,由顾客账号唯一标识,其主要属性有账号,姓名,性别,身份证号码,电话号码。
- 服务员信息:代表一个可在系统中登录或注册的服务员实体,代表所有的服务员信息,由服务员工号唯一标识,其主要属性有工号,姓名,性别,电话号码。
- KTV房间信息:代表所有的KTV房间信息,由房间号唯一标识,其主要属性有KTV房间号、房间价格、房间容纳人数、房间使用状态。
- 预约单信息:包括所有的预约信息,由预约单单号唯一标识,其主要属性有预约单号、顾客账号、顾客姓名、KTV房间号、房间价格。
- 用户登录信息:代表所有的用户信息,用户包括顾客、服务员、管理员,由用户账号唯一标识,其主要属性有登录账号、登录密码、登录身份。
根据上面的实体模型的描述,可以分为这几大实体:顾客实体,服务员实体,KTV房间实体,预约单实体,用户登录实体。
顾客实体属性图
KTV房间实体属性图
预约单实体属性图
用户登录实体属性图
具体关系模型的表格设计:
在SQL Server中新建一个名为KTV系统的数据库,并启用SQL Server身份验证,用户为sa,然后具上面的分析创建6个表格,6个表格的具体设计如下:
房间预约单表
表字段 | 数据类型 | 是否允许为空 | 是否为主键 | 说明 |
bill_id | int | 不允许 | 是 | 单号 |
bill_user | varchar(255) | 不允许 | 否 | 顾客账号 |
bill_name | varchar(255) | 不允许 | 否 | 顾客姓名 |
bill_room | varchar(255) | 不允许 | 否 | 房间号 |
bill_price | decimal(18,0) | 不允许 | 否 | 价格 |
顾客信息表
表字段 | 数据类型 | 是否允许为空 | 是否为主键 | 说明 |
customer_id | varchar(255) | 不允许 | 是 | 账单 |
customer_name | varchar(255) | 不允许 | 否 | 顾客姓名 |
customer_sex | varchar(255) | 允许 | 否 | 顾客性别 |
customer_idcard | varchar(255) | 不允许 | 否 | 身份证号 |
customer_phone | varchar(255) | 不允许 | 否 | 联系电话 |
waiter_id | varchar(255) | 不允许 |
用户登录表
表字段 | 数据类型 | 是否允许为空 | 是否为主键 | 说明 |
user | varchar(255) | 不允许 | 是 | 账号 |
password | varchar(255) | 不允许 | 否 | 密码 |
identify | varchar(255) | 不允许 | 否 | 用户身份 |
房间使用记录表
表字段 | 数据类型 | 是否允许为空 | 是否为主键 | 说明 |
record_id | varchar(255) | 不允许 | 是 | 账号 |
record_room | varchar(255) | 不允许 | 是 | 房间号 |
record_firsttime | varchar(255) | 不允许 | 否 | 开始时间 |
record_endtime | varchar(255) | 不允许 | 否 | 结束时间 |
KTV房间表
表字段 | 数据类型 | 是否允许为空 | 是否为主键 | 说明 |
room_id | varchar(255) | 不允许 | 是 | 房间号 |
room_price | Decimal(18,0) | 不允许 | 否 | 房间价格 |
room_number | varchar(255) | 不允许 | 否 | 推荐人数 |
room_condition | varchar(255) | 不允许 | 否 | 房间状态 |
服务员信息表
表字段 | 数据类型 | 是否允许为空 | 是否为主键 | 说明 |
waiter_id | varchar(255) | 不允许 | 是 | 工号 |
waiter_name | varchar(255) | 不允许 | 否 | 姓名 |
waiter_sex | varchar(255) | 不允许 | 否 | 性别 |
waiter_phone | varchar(255) | 不允许 | 否 | 电话 |
(2)人机交互类设计
实体之间联系的E-R图如下所示:
(2)人机交互类设计
实体之间联系的E-R图如下所示:
实体联系图
E-R图向关系模型的转换如下:
顾客信息表(账号,工号,姓名,性别,身份证号,联系电话)
服务员信息表(工号,姓名,性别,电话)
KTV房间表(房间号,账号,工号,房间价格,推荐人数,房间状态)
房间预约单表(单号,顾客账号,顾客姓名,房间号,价格)
房间使用记录表(账号,房间号,开始使用时间,结束使用时间)
用户登录表(账号,密码,身份)
字体加粗且有下划线的属性为主码,只有下划线的为外码
4.5 数据库设计
按照实体之间的联系,本次设计的数据库的表中用户登录表中账号必须是登录表中的账号,并输入对应的密码,只有在登陆系统中有记录的用户账号和密码才能使用本系统,且一定要根据对应身份进行登录,若提示“账号或则密码错误”则需要重新输入账号和密码,用户注册时,只能注册未注册的账号。
房间预约单表中的顾客账号必须时用户登录表中已有的账号,即是在注册之后才可以在系统中进行KTV房间预约操作;顾客信息表、房间使用记录表、服务员信息表中的账号也一样,必须是注册后的才能使用;房间预约单中的房间号和价格必须是KTV房间表中的房间号(要相对应),在创建表时要根据E-R图进行设计主键。下面是创建表的SQL语句。
(1)创建顾客信息表的的SQL 语句为:
CREATE TABLE customer (
customer_id varchar(255) NOT NULL,
customer_name varchar(255) NOT NULL,
customer_sex varchar(255) default NULL,
customer_idcard varchar(255) NOT NULL,
customer_phone varchar(255) NOT NULL,
PRIMARY KEY (customer_id)
);
(2)创建服务员信息表的SQL 语句为
CREATE TABLE waiter (
waiter_id varchar(255) NOT NULL,
waiter_name varchar(255) NOT NULL,
waiter_sex varchar(255) NOT NULL,
waiter_phone varchar(255) NOT NULL,
PRIMARY KEY (waiter_id)
);
(3)创建KTV房间表的SQL 语句为:
CREATE TABLE room (
room_id varchar(255) NOT NULL,
room_price double(18,0) NOT NULL,
room_number varchar(255) NOT NULL,
room_conditon varchar(255) NOT NULL,
PRIMARY KEY (room_id)
);
- 创建房间预约表的SQL 语句为:
CREATE TABLE bill (
bill_id int(255) NOT NULL auto_increment,
bill_user varchar(255) NOT NULL,
bill_name varchar(255) NOT NULL,
bill_room varchar(255) NOT NULL,
bill_price double(18,0) NOT NULL,
PRIMARY KEY (bill_id)
)
- 创建房间使用记录表的SQL 语句为:
CREATE TABLE record (
record_id varchar(255) NOT NULL,
record_room varchar(255) NOT NULL,
record_firsttime varchar(255) NOT NULL,
record_endtime varchar(255) NOT NULL,
PRIMARY KEY (record_id,record_room)
)
- 创建用户登录表的SQL 语句为:
CREATE TABLE login (
user varchar(255) NOT NULL,
password varchar(255) NOT NULL,
identify varchar(255) NOT NULL,
PRIMARY KEY (user)
)
4.6 类的关联设计
表间联系图
4.7 类中服务的设计
- 登录、注册、注销、退出功能:使用本系统时先弹出登录界面,点击下拉框可选择不同身份。如果是已经注册过了的用户就直接输入账号和密码就能成功登录到主界面,如果不是就先注册和填写完基本信息后再转入主界面,进入主界面后在基本信息的界面中会有“退出系统”按钮。若想删除顾客和服务员的账号信息,则需登录管理员账号进行账号注销相关操作。一些登录、注册、注销的细节处理有:非用户的账号无法登录并提示“账号或密码错误”;监测到有该用户但密码不对时,会提示;按下“退出系统”按钮后主界面关闭;在管理员界面按下“删除”按钮后系统把该用户从用户信息表中删除,并且该用户想要再次登录系统,就必须再进行注册。
- 修改信息功能:在增加信息时,如果输入的信息错误,则直接点击“重置”按钮即可重新输入信息,不用一个一个删除重新输入。在删除信息时,只需要输入账号或者房间号就可以删除顾客、服务员或KTV房间信息,不用输入它们的全部基本信息。
- 对KTV房间、顾客信息、服务员信息的管理功能:在操作界面点击相应的按钮,即可跳到相应的管理界面进行添加、修改、删除信息,不会显得界面杂乱无章。
- 查看当前登录用户:在三个用户的界面中,均设置“个人中心”,显示个人信息,以表明是哪一个身份的用户账号正在使用系统。
- 查询信息:在查询KTV房间使用状态时,分别提供“使用中”和“空闲中”的选择,点击“查询”按钮便可将“空闲中”的房间与“使用中”、“已预约”的房间区分开来并将信息单独列为表,方便顾客预约空闲房间。在服务员界面采取与管理员界面一样的按钮控制,通过点击不同按钮可以跳到对应的信息表,并提供查询方式。
5.1 主要界面截图
- 顾客页面(主界面的设计是在同一个界面设计的,不存在点击按钮跳出新的界面情况。主界面主要使用JPanel实现在同一个界面跳转。)
- 登录页
登录界面如下所示,可以通过此页面进行注册和登录。
- 登录后主界面
登录后,进入主界面,功能包括使用状态查询记录、预约KTV房间、查看预约记录以及取消预约、查看个人信息功能。
(当点击“查询”按钮时,通过isSelected()获取选择的状态(使用中/空闲中),从而连接对应数据表(KTV房间表),判断表中房间使用状态是否与获取到的数据相同,相同就输出整条房间记录将其存放在table表中,从而达到查询效果。这里显示查询使用中的KTV房间)
(这里显示查询空闲中的KTV房间)
(给KTV房间使用状态表(即查询后的表)加入了鼠标监听事件,当点击表中其中一行记录,相对应的信息就可以显示在预约KTV方法相对应的JTextField框中,就不需要那么复杂输入房间号、价格以及推荐人数了,但是预约部分还是需要自己选择时间段。之后是“预约”按钮,当选好要预约的KTV房间后,点击按钮,如果选择的房间状态为使用中或已预约,则提示“该房间不能预约”,如果查询到该房间已被预约,则提示“您已预约该房间!”。反之,如果选择的房间使用状态为空闲中,则提示“预约成功!”,同时需要连接相对应的数据表(房间预约单表),向表中插入一条新的数据;并且需要修改KTV房间表的房间状态为“已预约”。)
(查看预约记录部分主要是以表格table实现,通过数据库连接查找对应表(房间预约单表),通过登录部分传参,将顾客登录使用时的账号传过来,从而在表中找到该顾客的预约记录。)
(取消预约同样是在预约记录表中建了一个监听事件,当点击表中某一行记录时,可以将对应信息显示在取消预约的textfield、label中。当点击取消“预约”按钮时,提示“预约取消成功!”,同时仍然需要建立数据库连接,查找房间预约单表,删除表中相对应的预约记录;并且修改KTV房间表的使用状态为“空闲中”。)
(个人中心界面同样是在同一个界面中实现,左边为操作选择界面,右边为相对应的操作功能界面。当点击查看个人信息按钮,右边跳出个人信息界面的内容。 查看个人信息界面主要是由JTabel控件实现,该部分不能进行增删改查,只能查看个人信息。个人信息是通过登录时获取到顾客使用的账号,通过传参将账号作为条件,在连接数据库查找相对应的表,如果表中的账号与登录输入的账号相同,则把表中记录通过setText()将对应数据显示在tabel中。)
- 服务员页面(主界面的设计是在同一个界面设计的,不存在点击按钮跳出新的界面情况。主界面主要使用JPanel实现在同一个界面跳转。)
(1)登录页
登录界面如下所示,可以通过此页面进行注册和登录。
(2)登录后主界面
登录后,进入主界面,功能包括查询顾客预约记录、查看信息、查看个人信息功能。
(根据JComboBox(顾客姓名或房间号)以及getText()获取文本框输入的内容,从而查询顾客预约信息记录,通过连接数据库,查找对应表,遍历表中记录,如果存在相同的顾客姓名(或房间号),则将对应记录输出存放在table表中。)
(顾客信息表主要是建立数据库连接,然后将对应表中的记录导出到table中,之后有一个查询系统,通过getSelectedItem()获取comboBox信息,查询表中对应记录,如果查询到相对应的记录,使用DefaultTableModel更新table表,然后将符合该条件的记录输出存放在table中。)
(KTV房间预约表是将对应数据表导出到table表中。KTV房间表有一个查询功能(按房间状态查询:使用中/已预约/空闲中),通过isSeleted()来获取选择的内容,然后查找表中对应记录输出。这里展示已预约的房间。)
(顾客预约记录表是将对应数据表导出到table表中。)
(服务员的个人信息界面与顾客界面中的个人信息界面相同。)
- 管理员页面(主界面的设计是在同一个界面设计的,不存在点击按钮跳出新的界面情况。主界面主要使用JPanel实现在同一个界面跳转。)
(1)登录页
登录界面如下所示,可以通过此页面进行登录。(管理员只有一个,不能再注册)
(2)登录后主界面
登录后,进入主界面,功能包括信息(KTV房间、顾客信息、服务员信息)的增删查改功能。
(新增KTV房间的功能就是向数据库中的表插入一条数据,需要对输入的信息进行初步判断。首先房间号是每一个KTV房间一个,不能重复,需要调用数据库中所有的记录,查找所有的房间号,再判断输入的房间号是否在表中已经存在,其他信息可以随意输入,全部无误后点击增加。
修改KTV房间的功能是修改数据库中表的某一条记录的内容,需要对输入的房间号进行判断。查找所有的房间号,再判断输入的房间号(除修改前本身的房间号)是否在表中已经存在,若存在,则不能正确修改信息,反之,可以修改,其他信息可以随意输入,全部无误后点击修改。
删除KTV房间的功能是向删除数据库中表的某一条记录,同样需要对输入的房间号进行判断。查找所有的房间号,再判断输入的房间号是否在表中已经存在,若存在,则删除成功,反之,不能正确的删除记录。)
(顾客信息管理的主页)
(与KTV房间管理操作相同)
(服务员信息管理的主页)
(与KTV房间管理操作相同)
(个人信息中的查看个人信息与之前顾客界面(或服务员界面)中的操作一样)
5.2 核心代码及说明
(1)先新建一个名为“ktv”的工程,把JDBC驱动中的mssql-jdbc-12.2.0.jre8.jar导入该工程,然后编写一段测试代码测试是否能成功连接数据库,测试代码入下。
package connection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class GetDBConnection {
private static final String DBName = "ktv";
private static final String id = "sa";
private static final String password = "123456";
public static Connection connectDB() {
Connection con = null;
String uri = "jdbc:sqlserver://localhost:1433;databaseName=" + DBName + ";user=" + id + ";password=" + password + ";encrypt=false";
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
con = DriverManager.getConnection(uri);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
}
(2)根据需要的代码实现的不同编写不同的类,再在工程目录下新建一个文件夹“images”,把用到的图片存到此文件下,最后的工程目录如下。
- 在zhuce包、admin包、com包、customer包、waiter包、data包中的各个类中存放着实现系统不同界面的代码,例如登录界面的代码放在com包的LoginWeb.java里,这里也是程序的入口。
LoginWeb.java的部分代码
- 注册页面在zhuce包的Zhuce1.java和Zhuce2.java中,并将其作为注册界面的窗体。
Zhuce1.java的部分代码
- 注册界面主要是由JLabel、JTextField、JPasswordField、JRadioButton以及JButton四个控件组成。从上往下看,两个JLabel组成注册界面的标题。第一个JLabel设置Icon用于存放图片,第二个JLabel用于存放“欢迎注册”字体。后面都是一些JLabel和JTextField(或JPasswordField)结合组成注册界面行,JRadioButton主要用于性别“男/女”的选择。JButton主要有“确定”按钮和“重置”按钮。
Zhuce2.java的部分代码
- 在包customer中创建类,命名为CustomerWeb.java作为顾客登录总体界面。在CustomerWeb.java界面下包含:P1.java作为顾客预约KTV房间以及取消KTV房间预约、查看预约记录的界面;P2.java作为个人信息查看界面,包括查看个人信息。所以在P2.java中下还包含:Myself.java用作个人信息查看界面。
CustomerWeb.java的部分代码
P2.java的部分代码
- KTV房间预约首先顾客可以通过JRadioButton实现的“使用中/空闲中”来查询KTV房间使用状态。KTV房间情况和KTV房间使用状态都是用JTable来创建的。下面预约KTV房间操作,主要由JLabel、JTextField和JComboBox、JButton组成。JTextField用于输入,JComboBox用于选择需要预约的时间。我的预约记录可以查看预约的记录,主要由JTable来创建表,取消预约主要由JLabel、JTextField和JButton组成。
P1.java的部分代码
- 在包waiter中创建类,命名为WaiterWeb.java作为服务员登录总体界面。在WaiterWeb.java界面下包含:P1.java作为服务员查看顾客预约记录;P2.java作为查看信息界面(包括查看顾客信息、KTV房间预约信息、顾客预约记录信息)。所以在P2.java中还包含:QueryCustomer.java作为查看顾客信息界面、QueryRoom作为查看KTV预约信息界面、QueryOrder作为查看顾客预约记录信息界面。
WaiterWeb.java的部分代码
P1.java的部分代码
P2.java的部分代码
- 查看顾客信息界面开头以两个JLabel,第一个label设置Icon属性,插入图标;第二个label插入“顾客信息表”文字。然后设置JTable用于存放顾客信息。最后再以JLabel、JComboBox、JTextField、JButton组成查询操作。
QueryCustomer.java的部分代码
- 查看KTV房间预约界面前面和顾客信息界面一样用到两个JLabel和一个JTable,在此就不详细阐述了。最后是由JLabel、JRadioButton(使用中/已预约/空闲中)以及JButton组成一个房间状态查询功能。
QueryRoom.java的部分代码
- 顾客预约情况首先时服务员可以通过JComboBox实现的(通过“房间号”)来查询相对应顾客。查询部分主要是通过JComboBox、JTextField、JButton以及JLabel四个控件组成。显示数据部分主要使用JTable实现。JTextField用于输入。
QueryOrder.java的部分代码
- 关于与数据库的处理的代码在包data中,例如在管理员界面中要对KTV房间信息进行增删查改操作。
BillDao.java的部分代码
CustomerDao.java的部分代码
OrderDao.java的部分代码
WaiterDao.java的部分代码
6.1 通过一周的课程设计,我们组基本完成了“ KTV 厢房管理系统”的设计。本系统基本实现了良好的人机交互界面,方便按照顾客的需求进行包房分配,并且及时知道包房剩余状态,更方便服务员快捷的进行包房分配,并且服务员可以了解顾客的个人信息,可以准确地为顾客提供服务。但与此同时,此次的设计仍存在许多的不足,比如修改用户信息功能还存在些许错误,服务员界面尚还可增加帮顾客线上预约等其他更便捷的功能。同时,有一些界面的收缩性不够好,例如顾客预约记录界面的分割面板比例控制得不够好,造成操作区域与整个页面不够协调。
6.2针对本次课程设计,我们组巩固了软件工程面向对象开发、建立模型并绘制流程图类图等图像和SQL数据库的知识,也通过实践学习到了很多课本上学不到的知识,学到了很多解决实际问题的经验。同时我们深刻地意识到在做软件工程设计时,必须包含面向对象分析、面向对象设计和面向对象实现三个方面。在实验过程中,我们组从最初的需求分析确定系统的方向,到分工建立三个面向对象模型(对象模型、动态模型和功能模型)以进一步确定系统的功能与实际需求,再到一起对软件设计对软件的具体实现,数据库的设计与建立,并且将二者进行结合,形成一个较为完整的系统,最后对系统的功能及模块进行了测试,发现了一些实现过程中考虑不够周到的功能以及错误并加以修改。
6.3此次设计过程中简化了非常多的步骤,在调试过程中,总会想到更多符合实际需求的条件去充实完善系统,也知道我们当初设计的时候考虑略欠周全,也明白了实际应用的系统是需要不断更新、维护,是需要许多人的智慧和努力的。我们会从中吸取教训,不断努力学习更多的知识,认真完成每一次具有非常意义的课程设计!
7.1需求分析——CSDN博客
数据库课程设计-KTV点歌系统(VB.net 窗体,MySQL5.5)_ktv点歌系统vb_是我,Zack的博客-CSDN博客,2023-6-10
7.2进行良好的程序设计,博客园,
https://www.cnblogs.com/LeftNotEasy/archive/2010/09/12/1824591.html,
2023-6-16
7.3软件需求分析方法,搜狐,
https://www.sohu.com/a/461819709_121038823,2023-6-16
7.4 Java连接SQL Server数据库——CSDN博客
java连接SQL Sever数据库(超详细!)_jdbc:sqlserver协议版本_qq_53170849的博客-CSDN博客,2023-6-12
7.5 JFrame(框架)中添加和设置JPanel(面板)的方法——CSDN博客
JFrame(框架)中添加和设置JPanel(面板)的方法_如何在边界布局中加入一个jpanel面板_shixiaoguo90的博客-CSDN博客,2023-5-24
7.6软工绘图——CSDN博客
软工——各种图_控制流图-CSDN博客,2023-7-5