《宾馆信息管理系统课程设计报告.docx》由会员分享,可在线阅读,更多相关《宾馆信息管理系统课程设计报告.docx(34页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库课程设计报告 -宾馆信息管理系统学院:软件学院 专业:软件工程 班级:2014级软件3班姓名:邱天乐学号:201400301248任课教师:任国珍老师助教老师:姜鹏程目录一、开发平台41.1 数据库: MySQL:41.2 操作系统:41.3 开发工具:41.4 整个系统采用C/S架构4二、数据库规划42.1 任务陈述42.2 任务目标5三、系统定义53.1 系统边界53.2 用户视图53.2.1 酒店前台视图53.2.2 数据库系统多用户视图63.3 系统模型图6四、需求分析74.1 用户需求说明74.1.1 数据需求74.1.2事务需求74.2系统需求说明84.2.1软件环境84.2
2、.2硬件环境84.2.3初始数据库大小84.2.4数据库增长速度94.2.5记录查找的类型和平均数量94.2.6性能94.2.7安全性9五、数据库逻辑设计95.1 ER图105.2 数据字典105.2.1实体和联系属性:105.2.2属性描述:10六、数据库物理设计126.1 索引126.2 安全机制126.2.1系统安全126.2.2数据安全12七、应用程序设计137.1 功能模块137.1.1 换房137.1.2 登记入住137.1.3 查看预定137.1.4 预订客户入住137.1.5 更新房态功能147.1.6 结账功能147.1.7 显示会员及添加会员功能147.2 界面设计147.
3、2.1 登入界面147.2.2 系统主界面15.2.3 预定界面157.2.4 预订信息界面167.2.5 预定入住界面167.2.6 客人登记界面177.2.7 换房界面177.2.8 结账界面187.2.9 会员制度及会员信息界面187.2.10 本店会员界面197.2.11 会员办理界面197.3 重要事务代码207.3.1 入住代码207.3.2 更换房间代码27八、测试和运行338.1 房间的个数的测试338.2 系统运行bug测试338.3 客户端的数量33九、总结339.1 课设总结339.2 系统优点349.3 系统不足349.4 经验与收获34一、开发平台1.1 数据库: M
4、ySQL:MySQL数据库是目前最流行的关系型数据库,其体积小、速度快,使用的SQL语言也是用于访问数据库的最常用语言,一般的中小型系统都使用MySQL进行开发。1.2 操作系统: Windows 10 1.3 开发工具: Eclipse NeonEclipse是一个开源的、基于java的可扩展开发平台。是一个较老的集成开发环境,主要用于开发java程序。通过其他插件,可以构建其他语言的开发环境。1.4 整个系统采用C/S架构Java服务器架构图: Java客户端数据库二、数据库规划2.1 任务陈述一套功能强大而又使用简便的客房管理软件,适用于宾馆管理、酒店管理、招待所管理。主要功能:团体,散
5、客入住客人的信息登记,换房,正常退房,挂帐退房,挂单补款结帐,预定管理,贵宾卡管理,押金管理,各种强大的宾馆统计报表,异常处理。要求:1、 需求分析;2、 数据库的概念设计;3、 数据库的逻辑设计;4、 数据库的物理设计;5、 应用程序设计;6、 编程实现;2.2 任务目标实现一个宾馆信息 管理系统,具有如下功能:1、 更新并查看房态(列出每种房间类型的房号列表并标注状态)。2、 预定信息的添加、删除(若有客人预定,则添加预定信息,若退订,则删除信息)。3、 预定入住(若有预定的客人到店入住,则需提供预定入住)。4、 登记信息的添加、更新(即客人未预定,直接到店入住,进行登记)。5、 换房信息
6、的添加、更新(对要求换房的客人进行房态等的更新)。6、 押金的添加及查询(对押金的管理)。7、 结账(客人退房结账,需更新住房信息以及房态)。8、 VIP的管理(添加、删除以及更新,包括等级管理、以及住房晚数管理)。9、 VIP的查询(查看本酒店中所有的VIP,以及相关信息,或者查看单个VIP信息)。10、VIP优惠(管理VIP优惠尺度的数据)。三、系统定义3.1 系统边界本系统包括预订管理、入住管理、VIP管理、客房管理、退房管理。3.2 用户视图 3.2.1 酒店前台视图(1) 预订管理:预订房间、为客人办理预订、取消预订、查看指定客人的预订信息、查看酒店所有的预订信息(2) VIP管理:
7、查看酒店所有的VIP信息、办理VIP、管理酒店所有的VIP信息(3) 客房管理:查看房态、更新房态(4) 入住管理:为客人办理入住、查看所有入住信息、换房操作(5) 退房管理:办理退房、管理押金、管理VIP房价、打印账单3.2.2 数据库系统多用户视图 酒店前台3.3 系统模型图预订房号预订预订,提交预订信息客人交付押金入住付款成为 客人信息客房信息结账预订记录登记结帐单、押金VIP结账房号 修改房态/宾客记录退房四、需求分析4.1 用户需求说明4.1.1 数据需求 数据视图:(红色字为主码)客房信息 room:(房间号, 房间类型, 房间入住状态, 房间价格, 房间大小,房间中的床数) 预定
8、信息 book:(订单号, 姓名, 性别, 电话, 身份证号, 预订房间号,入住天数, 房间保留时间, 金额, 备注) 顾客登记信息 checkin:(入住订单号, 姓名, 性别, 电话, 身份证号, 会员等级, 房间号, 押金, 入住时间,入住天数,备注) 换房信息 :(需要更换房间号, 登记ID,客户姓名,房间总价,入住天数,变更成的房间号,增减房费,变更后的房间总价) 结账信息:(房间号,登记ID,姓名,手机号,房费,入住时间,入住天数,退房时间,押金,卡内余额,会员登记,生成积分) 会员信息 vip:(会员编号,姓名,性别,身份证号,电话,邮箱,会员等级,积分,晚数) 办理会员信息:(
9、会员ID,姓名,性别,身份证号,电话,邮箱,会员等级,应交纳金额)4.1.2事务需求 酒店前台: 数据查询:(1)现有所有房间的详细信息:房间是否可用。(2)已有的所有预订订单:订单号、预订人、预订房间号及类型、预定时间、房间保留时间时间(3)已有的所有入住单:入住单号、入住人信息(手机号、身份证等)、入住晚数、入住时间(4)换房的房间信息以及当前可用房间(5)已有的所有VIP信息:VIP编号、姓名、身份信息、等级、入住晚数(6)退房信息:退房人姓名、房号、房费、押金 数据录入: (1)录入预订订单:订单号、预订人、预订房间号及类型、预定时间、房间保留时间时间(3)录入入住单:入住单号、入住人
10、信息(手机号、身份证等)、入住晚数、入住时间(4)录入换房信息(5)录入新注册的VIP信息:VIP编号、姓名、身份信息、等级(6)录入退房信息:退房人姓名、房号、房费、押金 数据删除:(1)删除过期订单(2)删除入住单4.2系统需求说明4.2.1软件环境支持MySQL数据库4.2.2硬件环境Inter(R)Core(TM)i5-3230M CPU 2.60GHz 2.60GHz4.2.3初始数据库大小 客房信息21条 会员信息1条 预订订单信息3条 入住订单信息7条 预订登记信息2条 入住登记信息10条4.2.4数据库增长速度住宿信息每天增长大约50条 预订信息每天增长大约50条退宿信息每天增
11、长大约30条 换房信息每天增长大约10条其他信息增长速度不定4.2.5记录查找的类型和平均数量 查询客房信息大约每天50次 查询住宿信息大约每天50次 查询客户信息大约每天50次查询退宿信息大约每天50次4.2.6性能单个记录查询时间少于1秒,高峰期少于5秒多个记录查询时间少于5秒,高峰期少于10秒更新/保存记录时间少于1秒,高峰期少于5秒4.2.7安全性前台管理人员登录时需要用户名及密码。五、数据库逻辑设计5.1 ER图入住客人房间交押金预订成为交押金 预订客人会员5.2 数据字典5.2.1实体和联系属性:Book : bid, bname, bsex, bpnum, bidcard, br
12、num, bday, bholdtime, bsummoneyCheckin : cid, cname, csex, cpnum, cidcard, crnum, cmoney, ccheckin, ccheckout, cday, ccheckoutornot, cash, cps, clevel Room : rid, rtype, rrate, rsize, rbednum, rstateVip : vid, vname, vsex, vidcard, vpnum, vmailbox, vlevel, vpoints, fangwannumUser(酒店前台): name, passwo
13、rd5.2.2属性描述:实体属性属性描述数据类型NULL预订信息表bookbid预订单号VARCHAR(45)Notbname预订人姓名VARCHAR(45)Notbsex性别VARCHAR(45)Notbpnum电话号码VARCHAR(45)Notbidcard身份账号VARCHAR(45)Notbrnum房间号VARCHAR(45)Notbday预订时间VARCHAR(45)Yesbsummoney合计费用VARCHAR(45)Yesbps备注VARCHAR(45)Yesbholdtime房间保留时间VARCHAR(45)Yes登记入住信息表checkincid入住单号VARCHAR(45
14、)Notcname入住人姓名VARCHAR(45)Notcsex性别VARCHAR(45)Notcpnum电话号码VARCHAR(45)Notcidcard身份证号VARCHAR(45)NotcviplevelVip级别VARCHAR(45)Yescrnum房间号VARCHAR(45)Notccheckin入住时间VARCHAR(45)Yesccheckout退房时间VARCHAR(45)Yescday入住天数VARCHAR(45)Yesccheckoutornot是否已退房VARCHAR(45)Yescsummoney房费合计VARCHAR(45)Yescps备注VARCHAR(45)Yes
15、房间信息表roomrid房间号VARCHAR(45)Notrtype房间类型VARCHAR(45)Notrrate房价VARCHAR(45)Notrsize房间面积VARCHAR(45)Notrbednum床数VARCHAR(45)Notrstate当前是否可用VARCHAR(45)Not会员信息表vipvidVip号码VARCHAR(45)Notvname姓名VARCHAR(45)Notvsex性别VARCHAR(45)Notvidcard身份证号VARCHAR(45)Notvpnum电话号码VARCHAR(45)Notvmailbox邮箱VARCHAR(45)Notvlevel等级VARC
16、HAR(45)Notvpoints积分VARCHAR(45)Notfangwannum已住房晚数VARCHAR(45)Yes前台人员信息表username用户名VARCHAR(45)Notpassword密码VARCHAR(45)Not六、数据库物理设计6.1 索引数据库中的索引:表名主键外键bookbidridcheckincidridroomrid无vipvidcidusername无所有表中都对主键做了索引,作为表的主索引,方便快速查找6.2 安全机制6.2.1系统安全1、提供了充足的异常处理机制,能够捕获由各种错误引发的异常(如:越权操作、输入数据类型与数据库要求类型不一致、查询过程中
17、出现的错误等等)。2、系统登录时要凭用户名和密码进入,输入正确时才可以进入系统。若用户名和密码输入正确,系统可以打开符合该用户身份的操作界面。其他界面该用户没有权限访问。3、严格控制用户权限、防止SQL注入、对用户信息管理,遵守法律6.2.2数据安全1、根据用户身份,用户进入不同的用户界面,即享有不同的权限,只有管理员才可以实现修改一些重要信息,以确保数据库不被随意更改,保证数据安全。2、在该系统中,任何有关删除或添加数据的操作都需要二次确认才可以在数据库中真正执行。通过高级语言应用程序的限制,不同的用户只能查询修改其有权访问的数据。七、应用程序设计7.1 功能模块7.1.1 换房当住户想更换
18、房间时,点击换房按钮,进入换房界面,输入需要更换的房间号,点击 “显示登记信息” 按钮,将会显示换房界面及房态,再输入要变更成的房间号,点击 “显示该房间信息” 按钮,系统会自动计算出新的房价以及差价。在输入已预订或者已入住的房间时系统会做出提示。7.1.2 登记入住录入该登记客户的姓名,性别,身份证号,手机号等信息,输入要入住的房间号,入住天数,点击显示相关信息按钮,将会显示房间的房态以及自动计算出总的消费情况,在登记的过程中,如果输入错误信息系统会进行提示,例如:输入房间号不合法,忘记输入入住天数,输入房间号已入住或预定,忘记输入押金等等。7.1.3 查看预定在主界面,点击 “预定” 按钮
19、,便可显示出预定信息界面,选择一行,点击 “入住” 按钮即可进入预定客户入住界面,假如某条预定信息已过预留时间,可以选择删除该条信息。特色功能:积分换房,使用积分换房的预定入住时无需缴纳押金,结账时将不产生积分,但是入住房多少晚加一,进入预定客户入住界面时,预定的信息将会自动显示出来。7.1.4 预订客户入住在预订信息界面中,可以选择一个已经预订了的客人信息,然后点击下面的“入住”按钮,便可以弹出预订入住的界面,里面所有的预订信息系统都会自动生成,只需要到店并且付了押金,便可以办理入住了。7.1.5 更新房态功能界面中有四个按钮分别对应着四种房型(大床房,标准间,家庭房,豪华套房)。点击按钮,
20、下方文本域会列出对应房型的所有房号。已被占用的房号会被标注“不可用”。7.1.6 结账功能 输入要结账的房间号,点击显示入住信息按钮,系统会自动生成相关信息,根据卡内余额可以得出该客户需要追加的房费或退还的押金,同时假如该客户是会员,系统会自动计算出生成的积分情况,入住房多少晚也会自动加一。7.1.7 显示会员及添加会员功能点击VIP按钮,显示会员制度及会员信息界面,界面内详细阐述了本店的会员制度,会员等级判定情况,点击 “本店会员” 按钮将显示本店现有会员的相关信息,点击会员办理按钮,将进行会员的办理,其中办理黄金会员需要交纳现金30元,白金会员需要交纳现金200元,系统会自动提示,输入相关
21、信息,点击 “办理” 按钮即可。7.2 界面设计7.2.1 登入界面前台人员必须先通过用户名、密码登入系统才能进行操作。 7.2.2 系统主界面左图为主页面,右列四个按钮点击后就会在下方文本域显示对应房型的房间信息。左列则是预定、入住、换房、结账和VIP的功能按钮。.2.3 预定界面左图为预订界面,输入客人姓名等信息,以及预订的房间和天数,便可进行预订。7.2.4 预订信息界面显示当前酒店所有的预订信息,包括预订人的各种信息,下面可以进行预订,并且可以对已经有预订的用户进行入住操作。7.2.5 预定入住界面界面风格与下面的客人登记界面相同,酒店管理员可以在这个界面插入新的预定信息。7.2.6
22、客人登记界面7.2.7 换房界面换房时只需输入两个房间号即可,其他内容自动生成。7.2.8 结账界面结账时只需输入要结账的房间号,其他内容系统自动生成。7.2.9 会员制度及会员信息界面7.2.10 本店会员界面7.2.11 会员办理界面7.3 重要事务代码7.3.1 入住代码import javax.swing.JFrame;import hm.database;import java.awt.Point;import java.awt.Dimension;import java.awt.Color;import java.awt.event.ActionEvent;import java.
23、awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.io.DataInputStream;import java.io.DataOutputStream;import .Socket;import java.text.SimpleDateFormat;import java.util.Date;import javax.swing.*;public class Checkin private JFrame jf;database da
24、ta3;private JTextField cname;private JTextField cpnum;private JTextField cidcard;private JTextField crnum;private JTextField crtype;private JTextField crrate;private String rtype;String id, name, sex, pnum, idcard, rnum, money, checkin, checkout, day,cash, checkoutornot, ps;private String viplevel;J
25、Label type;JComboBox cviplevel;JRadioButton male, female;private JTextField crsize;private JTextField crbednum;private JTextField cmoney;private JTextField cday;private JLabel lblNewLabel_11;private JTextField ccash;private JLabel lblNewLabel_12;private JLabel label;private JLabel labelregister;priv
26、ate JTextField ctime;private JTextField cps;Socket soc;public Checkin(final String ck) data3 = new database();jf = new JFrame();jf.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent we) jf.dispose(););jf.setSize(new Dimension(600, 400);jf.setLocation(new Point(300, 150);jf.s
27、etTitle(客人登记);jf.getContentPane().setLayout(null);JLabel cid = new JLabel(登记ID: + ck);cid.setBounds(10, 10, 166, 28);jf.getContentPane().add(cid);JLabel lblNewLabel = new JLabel(姓名:);lblNewLabel.setBounds(124, 47, 52, 28);jf.getContentPane().add(lblNewLabel);cname = new JTextField();cname.setBounds(
28、168, 51, 66, 21);jf.getContentPane().add(cname);cname.setColumns(10);JLabel lblNewLabel_1 = new JLabel(性别:);lblNewLabel_1.setBounds(262, 51, 52, 21);jf.getContentPane().add(lblNewLabel_1);ButtonGroup groupsex = new ButtonGroup();male = new JRadioButton(男, true);male.setBounds(298, 50, 42, 23);jf.get
29、ContentPane().add(male);female = new JRadioButton(女, false);female.setBounds(342, 50, 42, 23);jf.getContentPane().add(female);groupsex.add(male);groupsex.add(female);/ if (female.isSelected() / sex = 女;/ else / sex = 男;/ JLabel lblNewLabel_2 = new JLabel(手机号:);lblNewLabel_2.setBounds(390, 54, 54, 15
30、);jf.getContentPane().add(lblNewLabel_2);cpnum = new JTextField();cpnum.setBounds(441, 51, 110, 21);jf.getContentPane().add(cpnum);cpnum.setColumns(10);JLabel lbll = new JLabel(身份证号:);lbll.setBounds(124, 95, 75, 28);jf.getContentPane().add(lbll);cidcard = new JTextField();cidcard.setBounds(201, 99,
31、154, 21);jf.getContentPane().add(cidcard);cidcard.setColumns(10);JLabel lblNewLabel_3 = new JLabel(会员等级:);lblNewLabel_3.setBounds(390, 102, 66, 15);jf.getContentPane().add(lblNewLabel_3);cviplevel = new JComboBox();cviplevel.setEditable(false);cviplevel.addItem(非会员);cviplevel.addItem(黄金会员);cviplevel
32、.addItem(白金会员);cviplevel.addItem(钻石会员);/ 会员等级cviplevel.setBounds(451, 99, 100, 21);jf.getContentPane().add(cviplevel);JLabel lblNewLabel_4 = new JLabel(房间号:);lblNewLabel_4.setBounds(124, 143, 54, 28);jf.getContentPane().add(lblNewLabel_4);crnum = new JTextField();crnum.setBounds(168, 147, 66, 21);jf
33、.getContentPane().add(crnum);crnum.setColumns(10);JLabel lblNewLabel_5 = new JLabel(房间类型:);lblNewLabel_5.setBounds(262, 150, 70, 15);jf.getContentPane().add(lblNewLabel_5);crtype = new JTextField();crtype.setEditable(false);crtype.setBounds(326, 147, 66, 21);jf.getContentPane().add(crtype);crtype.se
34、tColumns(10);type = new JLabel(房间图片);type.setBounds(10, 143, 100, 74);jf.getContentPane().add(type);JLabel lblNewLabel_6 = new JLabel(房费:);lblNewLabel_6.setBounds(402, 150, 54, 15);jf.getContentPane().add(lblNewLabel_6);crrate = new JTextField();crrate.setEditable(false);crrate.setBounds(451, 147, 6
35、6, 21);jf.getContentPane().add(crrate);crrate.setColumns(10);JLabel lblNewLabel_7 = new JLabel(房间面积:);lblNewLabel_7.setBounds(262, 198, 70, 15);jf.getContentPane().add(lblNewLabel_7);crsize = new JTextField();crsize.setEditable(false);crsize.setBounds(326, 196, 66, 21);jf.getContentPane().add(crsize
36、);crsize.setColumns(10);JLabel lblNewLabel_8 = new JLabel(床数:);lblNewLabel_8.setBounds(402, 198, 54, 15);jf.getContentPane().add(lblNewLabel_8);crbednum = new JTextField();crbednum.setEditable(false);crbednum.setBounds(451, 196, 66, 21);jf.getContentPane().add(crbednum);crbednum.setColumns(10);JLabe
37、l lblNewLabel_9 = new JLabel(总消费:);lblNewLabel_9.setBounds(262, 245, 54, 15);jf.getContentPane().add(lblNewLabel_9);cmoney = new JTextField();cmoney.setEditable(false);cmoney.setBounds(326, 242, 66, 21);jf.getContentPane().add(cmoney);cmoney.setColumns(10);JLabel lblNewLabel_10 = new JLabel(入住天数:);l
38、blNewLabel_10.setBounds(124, 198, 66, 15);jf.getContentPane().add(lblNewLabel_10);cday = new JTextField();cday.setBounds(186, 195, 48, 21);jf.getContentPane().add(cday);cday.setColumns(10);/ #lblNewLabel_11 = new JLabel(押金:);lblNewLabel_11.setBounds(402, 245, 54, 15);jf.getContentPane().add(lblNewLa
39、bel_11);ccash = new JTextField();ccash.setBounds(451, 242, 42, 21);jf.getContentPane().add(ccash);ccash.setColumns(10);JButton rbutton = new JButton(显示相关信息);rbutton.addActionListener(new ActionListener() public void actionPerformed(ActionEvent arg0) rtype = data3.rType(crnum.getText();if (rtype = nu
40、ll) JOptionPane.showMessageDialog(null, 房间号不正确!); else if (data3.rState(crnum.getText() JOptionPane.showMessageDialog(null, 该房间已被预定或入住!); else if (cday.getText().equals() JOptionPane.showMessageDialog(null, 入住天数不能为空!);type.setIcon(new ImageIcon(Checkin.class.getResource(/pictures/ + rtype + .jpg);crtype.setText(rtype);crrate.setText(data3.rRate(crnum.getText() + 元);crsize.setText(data3.rSize(crnum.getText() + 平方米);crbednum.setText(data3.rBednum(crnum.getText() + 张);name = cname.getText();pnum = cpnum.getText();idcard = cidcard.getText();rnum = crnum.getText();if (female.isSelected() sex = 女;