2022年宾馆管理系统课外实践设计报告.doc
安阳师范学院 数据库高级应用课外实践·数据库高级应用课外实践报告项 目 名 称: 宾馆治理系统 所 在 班 级: 小 组 成 员: 指 导 教 师: 起 止 时 间: 11月10日12月30日 工程根本信息工程名称 宾馆治理系统工程简介随着人民生活水平的提高,酒店在效劳行业中占有越来越重要的地位。努力在当前效劳行业日趋剧烈的竞争中脱颖而出,已成为每位运营者所追求的目的。通过多年开展,酒店治理已经逐步由定性治理,进入到注重定量治理的科学阶段。众所周知,在定量治理的详细实现方法和手段方面,最有效的工具确实是电脑治理。传统的手工操作治理存在着许多无法防止的咨询题,例如:一、 人工计算帐单金额容易出现过失二、 收银工作中跑单、漏单、偷钱现象普遍三、 无法进展会员治理和追踪四、 无法精确迅速的处理折扣和优惠等咨询题五、 无法精确满足客人的个性需求六、 不管收银依然财务都需要大量的人力物力酒店治理系统确实是针对以上咨询题设计的。系统实现了一般酒店日常营运的自动治理本治理信息系统将采纳技术成熟的C#做为前台开发工具。后台数据库采纳微软公司的SQL Sever数据库,它的灵敏性,平安性,和易用性为数据库编程提供了良好的条件。因而,系统的软件开发平台已成熟可行。本宾馆治理系统主要功能包括:客房治理、来客登记、客户查询、客房查询、客户结算等几大子系统。能够对宾馆日常的工作进展治理,比方客户到来后,依照客户的个性化需求查找房间并入住,还能够在客户结算时依照客户品种是否为会员来进展便捷的结算。尽管该系统的功能还不太完善,其他相关的功能没有涉及,但是该系统能够支持宾馆治理和效劳的过程。便于对中小型宾馆进展有效的治理,是工作人员从繁杂忙乱的工作事物中解脱出来。小组成员任务分工七、 系统设计1. 系统功能描绘宾馆治理系统已经广泛应用于各种宾馆、旅馆、招待所等,为居住的户提供了更加快捷、便利的效劳。一个宾馆治理系统应该的根本功能需要包括:客房类型治理、客房信息治理、客房查询、客户查询、客户入住、客户结算等功。u 客房类型治理提供有关宾馆客房的类型情况的标准,如客房编号,类型标准间,奢华间等的设置。u 客房信息治理是治理各个客房的信息和情况,包括客房的楼层号,房间号,价钱,额定人数,实际人数等。u 客房查询是客户入住前依照客户的要求为客户查询当前客房的入住情况,尽最大可能满足客户的要求。u 客户查询主要是依照客户的身份证号或者入住的房间号俩显示客户的住宿记录,以便用户治理和用户的结算。u 客户入住确实是登记客户的入住信息。u 客户结算是客户付清住宿费用并退房后注销房间。 2. 系统模块划分依照系统功能的需求分析,应该把系统的功能划分为3大模块。(1) 客房信息治理v 客房类型治理v 客房信息治理 (2) 前台操作v 客房查询v 客户查询v 客户入住v 客户结算 (3) 系统功能v 系统退出3. 系统流程分析客房治理系统查询剩余客房客户结算客户入住客户查询前台操作修正客房信息删除客房信息查询客房信息添加客房标准修正客房标准删除客房标准添加客房信息设置客房标准客房信息治理设置客房信息 添加用户系统退出系统顾客房间类型房间住房退房标准mm11m14. 功能模块调用 来客登记子系统功能A. 对来客进展登记入住工作 顾客编号,顾客姓名,入住时间,离开时间, B. 对来客进展分配住房工作 房间号,顾客编号,房间类型,房价该系统的流程图如下:来客登记住房信息顾客顾客档案当前住房信息更新住房信息分配住房顾客个人信息顾客离开时间八、 数据库设计 1. 创立数据库这一设计阶段是在需求分析的根底上,设计出能满足用户需求的各种实体,以及它们之间的关系,为后面的逻辑构造设计打下根底。依照上面的设计规划出的实体有顾客实体、客房类型、房间实体。宾馆治理系统的数据库功能主要表达在对各种信息提供、保存、更新和查询等操作上,包括客房信息、客房类型信息、客户入住信息、和客户信息等,各个部分的信息又有着内在的联络。针对该系统的数据特点,有以下需求:l 客房信息包括客房的详细信息l 每个不同的客房都属于一个类型l 客户信息记录客户登记时的详细信息 数据项和数据构造设计如下: 客房类型信息,包括客房类型编号,客房类型名称价钱等 客房信息,包括房间号,房间楼层,额定人数等 客户信息,包括客户编号,姓名,证件号,籍贯等 下面用E-R图来表示各个实体间的关系:房间信息房间编号房间类型房间位置房间价格房间状态床位数房间信息E-R图房间类型实体属性图房间类型类型编号价格类型名称客户类型客户ID折扣价客户品种姓名客户类型E-R图客户入住信息E-R图客户入住客户编号客户名称房间编号入住日期证件号客房类型名顾客房间类型房间住房退房标准mm11m1实体联络E-R图2. 数据库逻辑构造设计l 创立数据库 启动“效劳器资源治理器”,在SQL Sever 效劳器节点中右击,来新建一个名为MYhotel的数据库。代码如下:CREATE DATABASE MYhotel ON PRIMARY(NAME='MYhotel',FILENAME='D:MYhotel.mdf',SIZE=10MB,FILEGROWTH=1MB)LOG ON (NAME='MYhotel_log.ldf',filename='D:MYhotel.ldf',size=10MB,FILEGROWTH=1MB)GOl 创立表/字段 在数据库中要创立6张表,包括治理员信息表、客房类型信息表、客房信息查询表、客户信息表、客户品种信息查询表、楼层信息表。各个表中各个字段的意义入表16所示。(1) 治理员信息表字段名称数据类型是否NULL说明1治理员姓名nvarchar(50)NOT NULL2治理员登陆密码nvarchar(50)NULL(2) 客房类型信息表 字段名称数据类型是否NULL说明1客房类型intNOT NULL2客房类型名称nvarchar(50)NOT NULL3价格smallmoney NOT NULL(3)客房信息查询表字段名称数据类型是否NULL说明1客房编号char(50)NOT NULL类型编号2 客房号nvarchar(50)NOT NULL 房间编号3客房类型名称char(50)NULL类型名称4床位数char(50)NULL床位数5顾客数量char(50)NULL6使用状态nvarchar(50)NULL是否有人入住 (4)客户信息表 字段名称数据类型是否NULL说明1客户编号intNOT NULL2 客户姓名varchar(50)NOT NULL 3客户性别 char(10)NULL4身份证号nvarchar(50)NULL5客户品种名称nvarchar(12)NULL6客房号char(12)NULL 7到达时间nvarchar(12)NULL 8联络nvarchar(12)NULL(5) 客户品种信息查询表 字段名称数据类型是否NULL说明1客户品种IDchar(15)NOT NULL2客户品种姓名char(15)NOT NULL3折扣价char(15) NOT NULL (6) 楼层信息表 字段名称数据类型是否NULL说明1楼层号intNOT NULL2楼层名char(50)NOT NULL建立完所有数据表后,为客房类型信息表和客房信息查询表添加关系,为客户信息和客户信息查询表添加关系,为客房信息查询和客户信息查询表添加关系。事实上现代码如下:CREATE TABLE 客房类型信息表 /*创立客房类型登记表*/( 客房类型 int PRIMARY KEY , 客房类型名称 nvarchar(50) NOT NULL, 价格 SMALLMONEY NOT NULL,)CREATE TABLE 楼层信息表 /*创立楼层登记表*/( 楼层号 int NOT NULL, 楼层名 nvarchar(50) NOT NULL,)CREATE TABLE 治理员信息表 /*创立治理员登记表*/( 治理员姓名 nvarchar(50) NOT NULL, 治理员登陆密码 nvarchar(50)NOT NULL,) GoCREATE TABLE 客房信息查询表 /*创立客房信息表*/(客房编号 char(50)PRIMARY KEY,客房号 nvarchar(50)NOT NULL,客房类型名称 char(50) NOT NULL,床位数 char(50) NOT NULL,顾客数量 char(50) NOT NULL,使用状态 nvarchar(50) NOT NULL) Go CREATE TABLE 客户品种信息查询表 /*创立客户品种登记表*/( 客户品种ID char(15) NOT NULL, 客户品种姓名 char(15)NOT NULL, 折扣价 char(15)NOT NULL,) Go/*客户信息表*/CREATE TABLE 客户信息表 /*创立客户信息表*/(客户编号 int PRIMARY KEY,客户姓名 nvarchar(50) NOT NULL,客户性别 CHAR(10)NOT NULL,身份证号 nvarchar(50)NOT NULL,客户品种名称 nvarchar(12) NOT NULL,客房号 char(12)NOT NULL,到达时间 nvarchar(12) NOT NULL,联络 NVARCHAR(12) NOT NULL)Go九、 连接数据库 宾馆治理系统使用VC#和SQL Sever 来进展开发。为了使系统正常工作,需要建立与数据库系统的连接来读取和写入数据。 在VC#环境下,建立MYhotel工程,在工程“MYhotelManage”上的DAl层添加DBHelps类。用于数据库连接。代码如下: public class DBHelps private static SqlConnection con; public static SqlConnection Con get string strcon = "Data Source=.;Initial Catalog=MYhotel;Integrated Security=SSPI" if (con = null) con = new SqlConnection(strcon); con.Open(); else if (con.State = System.Data.ConnectionState.Closed) con.Open(); else if (con.State = System.Data.ConnectionState.Broken) con.Close(); con.Open(); return con; public SqlDataAdapter Select(string sql) SqlDataAdapter inform = new SqlDataAdapter(sql, Con); return inform; public int ExecuteNonQuery(string sql) SqlCommand cmd = new SqlCommand(sql,Con); int result = cmd.ExecuteNonQuery(); return result; public static int ExecuteCommand(string sql) SqlCommand cmd = new SqlCommand(sql,Con); int result = cmd.ExecuteNonQuery(); return result; public static int GetScalar(string sql) SqlCommand cmd = new SqlCommand(sql,Con); int result = Convert.ToInt32(cmd.ExecuteScalar(); return result; public static int GetScalar(string sql, params SqlParameter values) SqlCommand cmd = new SqlCommand(sql, Con); cmd.Parameters.AddRange(values); int result = Convert.ToInt32(cmd.ExecuteScalar(); return result; public SqlDataReader GetReader(string sql) using (SqlCommand cmd = new SqlCommand(sql, Con) SqlDataReader reader = cmd.ExecuteReader(); return reader; public DataTable get_table(string sql) try if (con.State = ConnectionState.Closed) con.Open(); SqlDataAdapter da = new SqlDataAdapter(sql, con); DataSet ds = new DataSet(); da.Fill(ds); return ds.Tables0; catch (Exception ex) throw ex; finally con.Close(); 十、 设计工程框架十一、 创立工程并设置主界面在VC#环境下创立Windows窗体工程MYhotel,在该工程中需要包括一下界面:系统主界面,登陆界面,客房类型治理界面,客房信息治理界面,客户查询界面,客房查询界面,客户入住界面和客户结算界面。本界面由ToolStripMenuItem控件和一个图片编辑框Picture组成。当成功地通过身份验证后,系统将展示主界面。主要有七个模块:客房类型治理、客户信息治理、客房查询、客户查询、客户入住查询、客户结算、退出系统。界面如下:十二、 设计登录模块 该登录只为系统治理人员所设计,利用Label,textbox ,button 控件来实现治理员的登录。十三、 功能模块设计客房类型治理界面设计及功能实现代码治理员能够在此界面上方便地修正客房的类型及打折活动,和添加新的客房类型信息或者删除不存在的客房信息。界面设计如下:客房查询界面设计: 在界面中,系统能够依照用户输入的一个或者几个条件来进展查询。同时还能够按“空房”和“未满”按钮来直截了当找出空房和未满的房间。界面如下:当检索到的房间被选中时按下“入住”按钮,就能够进展客户入住操作。如此的目的是,当顾客入住宾馆时一般情况下都要先查一下符合要求的房间,然后在符合要求的房间中选择某个进展入住。如此操作方便快捷,便于治理。客户入住界面设计: 当客户查询到满意客房是,点击“入住”按钮进入到客户入住界面。在入住界面输入客户的相关信息和所住房间的信息。单击“保存”时,客户入住记录被保存到数据库中,并改变相应客房的的入住人数,等客户结算时添加相关信息,结算完成后同时减少相应客房的入住人数。界面设计如下: 客户查询界面设计: 在此界面中输入客户的名字,此客户的信息就会显示出来:当单击“结账”按钮时,就会进入到客户结算界面客户结算设计: 通过输入房间号或者客户姓名进展查找显示客户的入住情况,还能够在折扣中选择是否打折,开进展客户结算,单击“结算”按钮来完成客户结算。十四、 系统演示及使用说明 在VC#环境下运转程序,出现登陆界面: 在输入治理员的登录名和密码后进入主功能界面: 当有客户要进展入住时,能够依照他们的要求进展客房查询,查找他们所需的客房类型及是否有空房,点击“客房查询”后进入客房查询界面:假如客户满意就,选择适宜的房间,单击“入住按钮”,进入客户入住界面: 在此界面中进展客户信息的填写,单击“确定”按钮该客户就添加到数据库中,以便以后的查询可客户结算。在客房类型治理中,能够增添或者删除新的客房类型,还能够查找当前客房的所有类型:当客户结算时能够进入客户结算界面,通过输入客户的姓名或者所住房间号来查该客户的住房信息在此界面中进展结算,还能够依照客户类型选择是否打折,如下所示:十五、 咨询题及处理方法 咨询题1:在运转程序中,当登陆后,出现主功能界面的窗口,这时,登录窗口应该消失,但是却还显示如下列图:处理方法:在登录按钮的click 事件中将原来的: if (result = "登录成功!") 主界面f = new 主界面(); f.Show(); 改为:if (result = "登录成功!") this.Visible = false; 主界面f = new 主界面(); f.Show(); 咨询题2: 在客户入住时,记录客户信息,应该是一个客户信息只能添加一次,但在程序运转时,当重复添加一样的信息时,不会提示重复。 将原来的代码: Insert customer = new Insert(number, name, sex, Id, kind, r_number, s_date, phone); i=customer.Insert_customer(); if(i=1) MessageBox.Show("插入成功!"); 为了使推断条件不单单是客户的姓名,我们需要添加多个条件推断,代码修正如下:Insert customer1 = new Insert(); i = customer1.Select_customer(name); j = customer1.Select_room(r_number); s = customer1.Select_number(r_number); w = customer1.Select_num(Id); if (i = 1w=1) MessageBox.Show("该客户已存在!"); textBox4.Clear(); textBox2.Clear(); comboBox1.Text = "" textBox3.Clear(); comboBox2.Text = "" textBox1.Clear(); textBox6.Clear(); textBox5.Clear(); if (j != 1) MessageBox.Show("该房间不存在"); textBox1.Clear(); if (s != 1) MessageBox.Show("该?房间已注满,请重新选择!"); textBox1.Clear(); if (i != 1 j = 1s=1) Insert customer = new Insert(number, name, sex, Id, kind, r_number, s_date, phone, customerinform); k = customer.Insert_customer(); if (k = 1) int m,n; MessageBox.Show("添加成功!"); textBox1.Clear(); textBox2.Clear(); textBox3.Clear(); textBox4.Clear(); textBox5.Clear(); textBox6.Clear(); comboBox1.Text = "" comboBox2.Text = "" Insertroom ins = new Insertroom(); m = ins .Select (r_number); m = m + 1; n=ins.Update(r_number ,m); 咨询题3: 在客户结算时,能够获取客户入住时间和离开时间,但是所用的是DateTime控件获取的,不能转为整型的天数: DateTime dt = new DateTime(int.Parse(str.Substring(0, 4), int.Parse(str.Substring(5, (str.IndexOf("月") - str.IndexOf("年")-1), int.Parse(str.Substring(str.IndexOf("月") + 1, (str.IndexOf("日") - str.IndexOf("月")-1); DateTime dt2 = dateTimePicker1.Value; string tmstr=(dt2 - dt).ToString(); txtDay.Text = tmstr.Substring (0,tmstr .IndexOf ('.'); 处理方案:用一个字符串截取函数SubString();来截取DateTime中的一部分相减,然后后转化为字符串类型,显示在入住天数的textbox中,但是DateTime中,相减后有可能出现小数的天数,为处理此咨询题需将天数的小数部分再用SubString()进展截取小数点之前的部分加1如此就能不满一天按一天计罢了。代码修正如下: DateTime dt = new DateTime(int.Parse(str.Substring(0, 4), int.Parse(str.Substring(5, (str.IndexOf("月") - str.IndexOf("年") - 1), int.Parse(str.Substring(str.IndexOf("月") + 1, (str.IndexOf("日") - str.IndexOf("月") - 1); DateTime dt2 = dateTimePicker1.Value; string tmstr = (dt2 - dt).ToString(); if (tmstr.Contains(".") txtDay.Text = (1 + int.Parse(tmstr.Substring(0, tmstr.IndexOf('.').ToString(); else txtDay.Text = "1" 咨询题4: 在添加客户后,只更新了客房中床位数,但是客房的使用状态未更新,在客户查询和客户结算中与数据库绑定额DataGrivdeView中都未更新,因而需要添加一个更新函数: public int Update_UseState(string number, string use) int i; string sql = "update 客房信息查询表括 使用状态='" + use + "'where 客房?号='" + number + "'" DBHelps db = new DBHelps(); i = db.ExecuteNonQuery(sql); return i; 七、课外实践总结 系统能够扩大的功能及系统展望受开发时间的限制和对VC#编程的技术水平,本系统的开发主要是完成酒店客房的预订、入住、退房及信息查询的治理,这只是整个酒店治理系统的一部分内容,对系统的系统权限设置方面没有设置。另外本系统的美观方面缺乏,没有增加系统提示功能,如当顾客的入住日期到时,进展相关提示。因而系统还存在较大的接着开发空间。这在做系统设计时已经考虑到了的,主要有以下几个方面:第一,进一步完善系统功能,增加商务中心治理模块、餐饮治理模块、计费模块,使得客人能够凭借房卡在酒店实现“一卡式”消费。第二,随着互联网上电子商务的开展,没有开展电子商务的酒店将没有活力,将失去竞争力。尤其是随着国内游泳业的开展,酒店竞争和开展迫在眉睫,它要求酒店运营者不断寻找新的经济增长点、采取新的营销形式。由于Internet具有传播面广、费用低、效率高的特点,有效地通过Internet进展电子商务形式的市场营销活动,将成为酒店在于剧烈市场竞争中成功的关键之一,如网上宣传、网上订房系统,而电子商务系统也必将成为酒店MIS的延伸和拓展。总结语 酒店治理系统是一个以计算机为工具,对酒店信息进展治理和处理的人机系统,它能精确、及时地反映酒店各项业务的当前状态,能利用过去的数据统计分析,能从全局出发辅助酒店各职能部门以及经理治理酒店。可见,酒店信息系统首先必须具有强大的电子数据处理功能,能大大提高酒店治理人员和操作人员的工作效率,减轻劳动强度,同时,该系统应当采纳治理模型,将仿真、优化等现代决策手段结合起来,为酒店治理层的决策提供有效的信息。关于我的设计,还有许多的设想(动态房台状态的显示,图表汇总,菜单权限的设置等)由于时间和本身和要素无法得以实现,这不能不说是本次设计的遗憾之处。不过,至少它已经启发了本人的思维,提高了我的动手才能,这是我在课本中学不到的。通过这次毕业设计我除了在VC#程序设计水平和数据库应用才能上有了非常大程度的提高,也更加深化地理解了与数据库相关的设计中常见咨询题和其相关设计的意义。八、源代码 在三层架构中,DAL层中两个类DBHelpes的代码如下:namespace DAL public class DBHelps private static SqlConnection con; public static SqlConnection Con get string strcon = "Data Source=.;Initial Catalog=MYhotel;Integrated Security=SSPI" if (con = null) con = new SqlConnection(strcon); con.Open(); else if (con.State = System.Data.ConnectionState.Closed) con.Open(); else if (con.State = System.Data.ConnectionState.Broken) con.Close(); con.Open();