1、河南城建学院C课程设计报告书专业:信息管理与信息系统课程设计名称:可视化编程技术课程设计题目:宾馆管理系统班级:0634081班组长:063408139_苏朝锴同组人员:063408138_任建超 063408105_孔焕颖063408106_李文艳指导老师:张延红 赵军民 郭猛完成时间:2010年1月6日前言2一、需求分析:3(一)系统主要功能:3(二)关系模式3(三)功能模块4(四)数据库需求分析4二、概要设计5(一)数据库概念结构设计51、用户管理E-R图62.、顾客信息实体ER图:63、房间信息实体ER图:64、顾客入住信息实体E-R图:75、房间类型实体E-R图:76.、整体结构E-
2、R图:8(二)数据表设计9三、详细设计11(一)系统详细设计目标规划11(二)系统详细设计任务11(三)系统物理配置方案设计11(四)系统输出设计12(五)系统输入设计12(六)界面设计121、用户登录界面设计122、超级用户登录界面133、用户管理界面设计134、用户添加界面设计145、用户修改界面146、主界面157、房间类型管理界面158、客房查询界面169、客房信息管理界面1610、客户记录查询界面1711、客户结算界面1712、客户入住界面17四、代码设计181、用户表示层(room窗体)182、业务逻辑层203、model层214、数据访问层235、公用类层24(1)data。cs
3、24(2)d_Bind.cs28五、参考文献29六、心得29前言随着计算机技术的飞速发展,信息时代的到来,信息改变了我们这个社会.各类行业在日常经营管理各个方面也在悄悄地走向规范化和网络化。宾馆管理的信息化程度体现在将计算机及网络与信息技术应用于经营与管理,以现代化工具代替传统手工作业。无疑,使用网络信息化管理使宾馆管理更先进、更高效、更科学,信息交流更迅速。宾馆管理系统是典型的信息管理系统的一部份,而且是必不可少的一部份。其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起简洁且资料一致性和完整性强、资料安全性好的数据库.而对于后者则要求应用程序功能完备,易
4、使用等特点。宾馆管理系统是宾馆经营管理中不可缺少的部分,它的内容对于经营的决策者和管理者来说都至关重要,所以宾馆管理系统、信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多弊端,如:效率低、保密性差,容易出现差错等,且对于查询空房间及已定房间等极为不方便。在当今时代,这些完全可以改用计算机来代替人的手工操作.作为计算机及网络应用的一部分,使用计算机对客房信息进行管理,具有手工管理所无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等.这些优点能够极大地提高宾馆管理的效率,也是企业的科
5、学化、正规化管理,与世界接轨的重要条件。且办事效率也是决定收入的一个关键因素。因此,我决定选择宾馆管理系统作为本人的毕业设计,力求开发出一套界面友好,功能强大,使用简单的适用于各大、中、小规模的宾馆的管理系统.同时也是一款完全适合宾馆或旅馆管理傻瓜式日常业务管理的软件.一、需求分析:(一)系统主要功能:1、 客房类型管理:提供有关客房类型状况的规范:有客房类型名、房间面积、额定床数、额定人数、住房单价、是否有空调、电视机、电话以及单独卫生间等,并可进行添加、修改、删除、查询等操作。2、 客房信息管理:用来管理各个客房的信息和状况,并在客户入住之前根据客户的要求提供给客户的客房的情况,可进行添加
6、、修改、删除、查询等操作。3、 客户入住信息管理:记录用户入住的信息,根据客户的身份证号码来显示客户的 入住记录,以便用户管理和结算,可进行添加、修改、删除、查询等操作。4、 结算信息记录管理:对入住用户的入住信息情况的管理,客户付清住宿费用并注销房间。可进行添加、修改、删除、查询等操作.5、 用户管理:对系统使用人员进行管理,只有符合要求的人才能进行一些相关操作,并可进行添加、修改、删除等操作。(二)关系模式1、RoomType信息:(RoomTypeName、BedNum、PeopleNum、Price、 Toilet、AirCondition)2、 Room记录:(RoomID、Room
7、TypeName、RoomPostion、PeopleNum、BedNum、FactPeopleNum)3、 Client信息:(ClientID、ClientName、Sex 、NativePlace、IdentifyID)4、 ClientRecord信息:( ClientID、ClientName、RoomID、 InDate、CheckDate、TotalMone、Check)5、 User信息:(UserID、Username、Password、UserRole)(三)功能模块修改住宿房间系统管理房间类型管理客房信息管理客户记录查询用户管理添加住宿房间删除住宿房间添加房间类型修改房间
8、类型删除房间类型客户结算管理预定房间退订房间客房查询添加用户修改用户删除用户(四)数据库需求分析1、酒店管理系统需要提供信息的查询、保存、更新以及删除等功能,这就要求数据库能充分满足各种信息的输入输出。通过对上述系统功能的分析。针对酒店管理系统的特点,总结出如下的需求信息。l 每个房间有两个状态:空房、已入住。l 每种房间类型下有多个房间。l 每个房间有正在入住客人的信息.l 每个房间有以往所有入住客人的信息。l 一个房间入主信息指向一个顾客。l 每个顾客有自己的入住历史.2、针对上述系统功能的分析和需求总结,设计如下数据项。l 顾客信息:姓名、电话、身份证号。l 房间记录:订房时间、退房时间
9、、价格统计、入住顾客姓名、入住顾客电话.l 房间信息:类型名称、使用面积、床位、价格。l 管理人员:用户名、密码、地址、电话.l 房间状态:状态标识。二、概要设计(一)数据库概念结构设计l 通过上面的数据项,即可设计出满足需求的各种实体以及他们之间的关系,为后面的逻辑结构设计打下基础。这些实体包含各种具体信息,通过相互之间的作用形成数据的流动。实体之间的关系的ER图如下:RoomTypeRoomClient预定结算ClientRecord含有1nn1111、 用户管理ER图UserUserIDPasswordUserRoleUsername2。、顾客信息实体ER图:ClientIdentify
10、IDClientIDClientNameNativePlaceSex3、房间信息实体ER图:RoomBedNumRoomPostionRoomTypeNameFactPeopleNumPeopleNumRoomID4、顾客入住信息实体E-R图:ClientRecordRoomIDTotalMoneyClientNameInDateCheckDateClientID5、房间类型实体ER图:RoomTypeRoomTypeNameBedNumPeopleNumPeoPriceAirConditionToilet6。、整体结构E-R图:RoomTypeRoomClientClientRecord预定
11、结算ToiletBedNumRoomTypeNamePricePeopleNumAirCondition含有RoomIDBedNumRoomPostionRoomTypeNamePeopleNumFactPeopleNumRoomIDInDateTotalMoneyClientNameCheckDateClientIDIdentifyIDNativePlaceSexClientIDn1n111Check(二)数据表设计1、(RoomType表)序号列名数据类型是否允许空1RoomTypeNamenchar(20)否2BedNumsmallint否3PeopleNumsmallint否4Pric
12、emoney否5Toiletvarchar(2)否6AirConditionvarchar(2)否2、(Room表)序号列名数据类型是否允许空1RoomIDnchar(15)否2RoomTypeNamenchar(20)否3RoomPostionnchar(10)否4PeopleNumsmallint否5BedNumsmallint否6FactPeopleNumsmallint否3、(Client表)序号列名数据类型是否允许空1ClientIDnchar(16)否2ClientNamenchar(20)否3Sexnchar(2)否4NativePlacenchar(20)否5IdentifyI
13、Dnchar(20)是4、(ClientRecord表)序号列名数据类型是否允许空1ClientIDnchar(16)否2ClientNamenchar(20)否3RoomIDnchar(15)否4InDatedatetime否5CheckDatedatetime否6TotalMoneymoney是7CheckChar(2)是5、(User)序号列名数据类型是否允许空1UserIDnchar(10)否2Usernamenchar(10)否3Passwordnchar(20)否4UserRolenchar(10)否三、详细设计(一)系统详细设计目标规划在此阶段设计出具体能够运行的系统,详细列出新
14、系统的各种参数与规格.为即将用C# 编程语言对其进行编写做好准备.(二)系统详细设计任务1、数据结构的设计:对于处理过程中涉及的概念性的数据类型进行确切的定义;2、测试用例设计:测试用例包括输入数据和预期结果等内容。(三)系统物理配置方案设计1 、设计指标(1)系统吞吐量要提高系统的吞吐量,就要求使用具有大吞吐量的计算机.应该选择具有较高性能的计算机.(2)系统响应时间响应时间不超过2秒(3)系统处理方式该系统采用主机系统方式。(4)地域范围本系统采用局域网方式。(5)数据管理方式使用SQL Server2005数据管理系统2、 计算机硬件配置计算机硬件选择取决于要运行的软件系统,本系统建议最
15、低采取如下配置:内存:2GBCPU:奔三2.0GHZ硬盘:500G(四)系统输出设计输出设计的内容包括:1、 输出信息应包括系统的使用者,如客户、酒店管理人员、前台服务人员等。 2、 信息应以表格及文档形式输出。3、 输出设备:打印机、终端显示器、Pos机。4、 输出介质:输出到专用纸张及电脑屏幕上.(五)系统输入设计1、输入数据量设计需要输入客户数据,数据量不大2、数据输入设备的选择本系统选择键盘、鼠标人工输入方式。(六)界面设计1、用户登录界面设计2、超级用户登录界面3、用户管理界面设计4、用户添加界面设计5、用户修改界面6、主界面7、房间类型管理界面8、客房查询界面9、客房信息管理界面1
16、0、客户记录查询界面11、客户结算界面12、客户入住界面四、代码设计1、用户表示层(room窗体)using System;using System.Collections;using System。ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System。Data。SqlClient;using Three.DLL;using Three。Model;namespace hotelmangerpublicpartialclass
17、Room : Form public Room() InitializeComponent(); privateArrayList mylist;privatevoid Room_Load(object sender, EventArgs e) /combox2的函数 mylist = newArrayList(); mylist。Add(一楼”); mylist。Add(”二楼); mylist.Add(三楼”); bindingSource1.DataSource = mylist;/附加数据源boBox2。DataSource = this。bindingSource1;/填充combo
18、x1的函数SqlDataReader w_sda=DLL_room。DLL_AddRoom();while (w_sda。Read()) comboBox1。Items。Add(w_sda0); w_sda.Close(); privatevoid comboBox1_SelectedIndexChanged(object sender, EventArgs e) string cb1_str; cb1_str = comboBox1.SelectedItem。ToString();/填充combox3,combox4的函数SqlDataReader W_sda2 = DLL_room.DLL
19、_AddRoom2(cb1_str);while (W_sda2。Read()) comboBox3。Items。Add(W_sda22); comboBox4.Items。Add(W_sda21); comboBox3。Text = W_sda22。ToString(); comboBox4。Text = W_sda21。ToString(); W_sda2。Close(); privatevoid show_room_Click(object sender, EventArgs e) DLL_room。ShowRoom(dataGridView1); privatevoid add_roo
20、m_Click(object sender, EventArgs e) string roomid = roomnum_box.Text;string rtn = comboBox1。Text;string rp = comboBox2。Text;string pn = comboBox3。Text;string bn = comboBox4.Text;string fpn = 0”;DLL_room.AddRoom(roomid, rtn, rp, pn, bn, fpn); /查找privatevoid select_rooom_Click(object sender, EventArgs
21、 e) string str = textBox1。Text;DLL_room.SelectRoom(str, dataGridView1); /删除privatevoid delete_room_Click(object sender, EventArgs e) string str = textBox1.Text;DLL_room。DeleteRoom(str, dataGridView1); privatevoid exit_room_Click(object sender, EventArgs e) this。Close(); 2、业务逻辑层using System;using Sys
22、tem.Collections.Generic;using System.Text;using System。Windows.Forms;using Three。Model;using Three.sqlDAL;using System.Data;using System.Data.SqlClient;namespace Three。DLLpublicclassDLL_room /显示所有的房间publicstaticbool ShowRoom( DataGridView dgrid) string strr = select from Room”;D_room.ShowRoom(strr,
23、dgrid); /D_roomtype。ShowRoomEmployee(strr, dgrid);returntrue; /查找publicstaticbool SelectRoom(string str, DataGridView dgvid) string strr = select *from Room where RoomID= + str + ”;D_room.ShowRoom(strr, dgvid);returntrue; /删除publicstaticbool DeleteRoom(string str ,DataGridView dgvid) string strr = ”
24、delete from Room where RoomID=” + str + ”;D_room.ShowRoom(strr, dgvid);returntrue; /调用无参的D_addtable()publicstaticSqlDataReader DLL_AddRoom() SqlDataReader sdr = D_room。D_addtable();return sdr; /调用有参的D_addtable()publicstaticSqlDataReader DLL_AddRoom2(string slt_str) string st = slt_str;SqlDataReader
25、sdr = D_room。D_addtable(st);return sdr; /添加相应的房间信息publicstaticint AddRoom(string RoomID, string RoomTypeName, string RoomPostion, string PeopleNum, string BedNum, string FactPeopleNum) Room1 M_room = newRoom1(); M_room.RoomID = RoomID; M_room。RoomTypeName = RoomTypeName; M_room。RoomPostion = RoomPos
26、tion; M_room.PeopleNum = Convert.ToInt32(PeopleNum); M_room。BedNum = Convert。ToInt32(BedNum); M_room.FactPeopleNum = Convert。ToInt32(FactPeopleNum);returnD_room.D_ADDRoom(M_room); /增加房间实际人数publicstaticint update_factpeople(string r_roomid) returnD_room.D_addfactpeoplenum(r_roomid); /减少房间实际人数publicst
27、aticint update_jianfactpeopele(string j_roomid) returnD_room。D_jianfactpeoplenum(j_roomid); 3、model层using System;using System.Collections。Generic;using System.Text;namespace Three。Model/由于窗体中出现了Room。cs,故定义为Room1publicclassRoom1 privatestring _RoomID;publicstring RoomID get return _RoomID; set _RoomI
28、D = value; privatestring _RoomTypeName;publicstring RoomTypeName get return _RoomTypeName; set _RoomTypeName = value; privatestring _RoomPostion;publicstring RoomPostion get return _RoomPostion; set _RoomPostion = value; privateint _PeopleNum;publicint PeopleNum get return _PeopleNum; set _PeopleNum
29、 = value; privateint _BedNum;publicint BedNum get return _BedNum; set _BedNum = value; privateint _FactPeopleNum;publicint FactPeopleNum get return _FactPeopleNum; set _FactPeopleNum = value; public Room1() public Room1(string roomid, string roomtypename, string roompostion, int peopenum, int bednum
30、, int factpeoplenum) this。_RoomID = roomid;this._RoomTypeName = roomtypename;this._RoomPostion = roompostion;this。_PeopleNum = peopenum;this._BedNum = bednum;this。_FactPeopleNum = factpeoplenum; 4、数据访问层using System;using System.Collections。Generic;using System.Text;using System。Windows.Forms;using T
31、hree.Model;using Three.database;using System.Data;using System.Data.SqlClient;namespace Three.sqlDAL publicclassD_room /显示所有客房信息publicstaticbool ShowRoom(string str, DataGridView dgrid) d_Bind。BindDataGrid(str, dgrid);returntrue; /读取RoomType中的部分值无参publicstaticSqlDataReader D_addtable() string str =
32、”select * from RoomType;SqlDataReader sdr ; sdr = database。d_Bind.BindComboBox(str);return sdr; /读取RoomType中的部分值有参publicstaticSqlDataReader D_addtable(string select_str) string str = ”select * from RoomType where RoomTypeName=” + select_str + ”;SqlDataReader sdr; sdr = database。d_Bind。BindComboBox(s
33、tr);return sdr; publicstaticint D_ADDRoom(Room1 M_room) SqlParameter param = newSqlParameter newSqlParameter (”RoomID”,M_room.RoomID),newSqlParameter (”RoomTypeName,M_room。RoomTypeName),newSqlParameter (RoomPostion,M_room。RoomPostion),newSqlParameter (”PeopleNum”,M_room.PeopleNum),newSqlParameter (B
34、edNum,M_room。BedNum),newSqlParameter (FactPeopleNum”,M_room。FactPeopleNum) ;string str = ”insert intoRoom(RoomID,RoomTypeName,RoomPostion,PeopleNum,BedNum,FactPeopleNum) values(RoomID,RoomTypeName,RoomPostion,PeopleNum,BedNum,FactPeopleNum)”;int i=data。ExecuteNoQuery(str, param);return i; /添加实际人数pub
35、licstaticint D_addfactpeoplenum(string roomid) string str = ”update Room set FactPeopleNum=FactPeopleNum+1 where RoomID=” + roomid + ”;int i = data.ExecuteNoQuery(str);return i; /减少实际人数publicstaticint D_jianfactpeoplenum(string roomid) string str = ”update Room set FactPeopleNum=FactPeopleNum1 where
36、 RoomID=” + roomid + ”;int i = data。ExecuteNoQuery(str);return i; 5、公用类层(1)data。csusing System;using System.Collections.Generic;using System。Text;using System.Data.SqlClient;using System。Data;using System.Windows.Forms;using System。IO;namespace Three.database/封装数据库publicclassdataprivatestaticstring
37、_con = Data Source=。SQLEXPRESS;AttachDbFilename=F:C#宾馆管理系统整合后Solutiondatabasehotel。mdf;Integrated Security=True;Connect Timeout=30;User Instance=True”;privatestaticSqlConnection sqlcon = null;publicstaticvoid Creatcon() if (sqlcon = null) sqlcon = newSqlConnection(_con); sqlcon。Open(); elseif (sqlco
38、n。State = ConnectionState。Closed | sqlcon。State = ConnectionState。Broken) sqlcon。Close(); sqlcon。Open(); publicstaticvoid CloseConnection() sqlcon。Close(); /返回连接对象sqlconnectionpublicstaticSqlConnection GetSqlconn() return sqlcon; /执行增删改,不带参数publicstaticint ExecuteNoQuery(string strsql) int i;try Cre
39、atcon();SqlCommand sqlcomand = newSqlCommand(strsql, sqlcon); i = sqlcomand.ExecuteNonQuery(); sqlcon。Close();return i; catch return 1; /执行增删改,带参数publicstaticint ExecuteNoQuery(string strsql, paramsSqlParameter param) int i;try Creatcon();SqlCommand sqlcmd = newSqlCommand(strsql, sqlcon);foreach (Sq
40、lParameter par in param) /遍历数组将参数对象添加到操作命令中 sqlcmd。Parameters。Add(par); i = sqlcmd。ExecuteNonQuery();return i;catch return 1; publicstaticDataTable GetTable(string strsql) try Creatcon();SqlDataAdapter sqlada = newSqlDataAdapter(strsql, sqlcon);DataSet dataset = newDataSet(); sqlada.Fill(dataset, ”t