宾馆管理系统报告书
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南城建学院
C#课程设计报告书
专业:信息管理与信息系统
课程设计名称:《可视化编程技术课程设计》
题目:宾馆管理系统
班级:0634081班
设计者:063408139_苏朝锴
同组人员:063408138_任建超 063408105_孔焕颖
063408106_李文艳
指导老师:张延红赵军民郭猛
完成时间:2010年1月6日
前言 (2)
一、需求分析: (3)
(一)系统主要功能: (3)
(二)关系模式 (3)
(三)功能模块 (4)
(四)数据库需求分析 (4)
二、概要设计 (5)
(一)数据库概念结构设计 (5)
1、用户管理E-R图 (6)
2.、顾客信息实体E-R图: (6)
3、房间信息实体E-R图: (6)
4、顾客入住信息实体E-R图: (7)
5、房间类型实体E-R图: (7)
6.、整体结构E-R图: (8)
(二)数据表设计 (10)
三、详细设计 (12)
(一)系统详细设计目标规划 (12)
(二)系统详细设计任务 (12)
(三)系统物理配置方案设计 (12)
(四)系统输出设计 (13)
(五)系统输入设计 (13)
(六)界面设计 (13)
1、用户登录界面设计 (13)
2、超级用户登录界面 (14)
3、用户管理界面设计 (14)
4、用户添加界面设计 (15)
5、用户修改界面 (15)
6、主界面 (16)
7、房间类型管理界面 (16)
8、客房查询界面 (17)
9、客房信息管理界面 (17)
10、客户记录查询界面 (18)
11、客户结算界面 (18)
12、客户入住界面 (18)
四、代码设计 (19)
1、用户表示层(room窗体) (19)
2、业务逻辑层 (21)
3、model层 (22)
4、数据访问层 (24)
5、公用类层 (25)
(1)data.cs (25)
(2)d_Bind.cs (29)
五、参考文献 (30)
六、心得 (30)
前言
随着计算机技术的飞速发展,信息时代的到来,信息改变了我们这个社会。
各类行业在日常经营管理各个方面也在悄悄地走向规范化和网络化。
宾馆管理的信息化程度体现在将计算机及网络与信息技术应用于经营与管理,以现代化工具代替传统手工作业。
无疑,使用网络信息化管理使宾馆管理更先进、更高效、更科学,信息交流更迅速。
宾馆管理系统是典型的信息管理系统的一部份,而且是必不可少的一部份。
其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。
对于前者要求建立起简洁且资料一致性和完整性强、资料安全性好的数据库。
而对于后者则要求应用程序功能完备,易使用等特点。
宾馆管理系统是宾馆经营管理中不可缺少的部分,它的内容对于经营的决策者和管理者来说都至关重要,所以宾馆管理系统、信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。
但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多弊端,如:效率低、保密性差,容易出现差错等,且对于查询空房间及已定房间等极为不方便。
在当今时代,这些完全可以改用计算机来代替人的手工操作。
作为计算机及网络应用的一部分,使用计算机对客房信息进行管理,具有手工管理所无法比拟的优点。
例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
这些优点能够极大地提高宾馆管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
且办事效率也是决定收入的一个关键因素。
因此,我决定选择宾馆管理系统作为本人的毕业设计,力求开发出一套界面友好,功能强大,使用简单的适用于各大、中、小规模的宾馆的管理系统。
同时也是一款完全适合宾馆或旅馆管理傻瓜式日常业务管理的软件。
一、需求分析:
(一)系统主要功能:
1、客房类型管理:提供有关客房类型状况的规范:有客房类型名、房间
面积、额定床数、额定人数、住房单价、是否有空调、电视机、电话以及单独卫生间等,并可进行添加、修改、删除、查询等操作。
2、客房信息管理:用来管理各个客房的信息和状况,并在客户入住之
前根据客户的要求提供给客户的客房的情况,可进行添加、修改、
删除、查询等操作。
3、客户入住信息管理:记录用户入住的信息,根据客户的身份证号码
来显示客户的入住记录,以便用户管理和结算,可进行添加、修改、
删除、查询等操作。
4、结算信息记录管理:对入住用户的入住信息情况的管理,客户付清
住宿费用并注销房间。
可进行添加、修改、删除、查询等操作。
5、用户管理:对系统使用人员进行管理,只有符合要求的人才能进行
一些相关操作,并可进行添加、修改、删除等操作。
(二)关系模式
1、RoomType信息:(RoomTypeName、BedNum、PeopleNum、Price、 Toilet、
AirCondition)
2、Room记录:(RoomID、RoomTypeName、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)
(三)功能模块
(四)数据库需求分析
1、酒店管理系统需要提供信息的查询、保存、更新以及删除等功能,这就要求数据库能充分满足各种信息的输入输出。
通过对上述系统功能的分析。
针对酒店管理系统的特点,总结出如下的需求信息。
●每个房间有两个状态:空房、已入住。
●每种房间类型下有多个房间。
●每个房间有正在入住客人的信息。
●每个房间有以往所有入住客人的信息。
●一个房间入主信息指向一个顾客。
●每个顾客有自己的入住历史。
2、针对上述系统功能的分析和需求总结,设计如下数据项。
●顾客信息:姓名、电话、身份证号。
●房间记录:订房时间、退房时间、价格统计、入住顾客姓名、
入住顾客电话。
●房间信息:类型名称、使用面积、床位、价格。
●管理人员:用户名、密码、地址、电话。
●房间状态:状态标识。
二、概要设计
(一)数据库概念结构设计
●通过上面的数据项,即可设计出满足需求的各种实体以及他们之间的关
系,为后面的逻辑结构设计打下基础。
这些实体包含各种具体信息,通过相互之间的作用形成数据的流动。
实体之间的关系的E-R图如下:
1、用户管理E-R图
2.、顾客信息实体E-R图:
3、房间信息实体E-R图:
4、顾客入住信息实体E-R图:
5
6.、整体结构E-R图:
(二)数据表设计
4、(ClientRecord表)
5、(User)
三、详细设计
(一)系统详细设计目标规划
在此阶段设计出具体能够运行的系统,详细列出新系统的各种参数与规格。
为即将用C# 编程语言对其进行编写做好准备。
(二)系统详细设计任务
1、数据结构的设计:
对于处理过程中涉及的概念性的数据类型进行确切的定义;
2、测试用例设计:
测试用例包括输入数据和预期结果等内容。
(三)系统物理配置方案设计
1 、设计指标
(1)系统吞吐量
要提高系统的吞吐量,就要求使用具有大吞吐量的计算机。
应该选择具有较高性能的计算机。
(2)系统响应时间
响应时间不超过2秒
(3)系统处理方式
该系统采用主机系统方式。
(4)地域范围
本系统采用局域网方式。
(5)数据管理方式
使用SQL Server2005数据管理系统
2、计算机硬件配置
计算机硬件选择取决于要运行的软件系统,本系统建议最低采取如下配置:
内存:2GB
CPU:奔三2.0GHZ
硬盘: 500G
(四)系统输出设计
输出设计的内容包括:
1、输出信息应包括系统的使用者,如客户、酒店管理人员、前台服
务人员等。
2、信息应以表格及文档形式输出。
3、输出设备:打印机、终端显示器、Pos机。
4、输出介质:输出到专用纸张及电脑屏幕上。
(五)系统输入设计
1、输入数据量设计
需要输入客户数据,数据量不大
2、数据输入设备的选择
本系统选择键盘、鼠标人工输入方式。
(六)界面设计
1、用户登录界面设计
3、用户管理界面设计
5、用户修改界面
6、主界面
7、房间类型管理界面
8、客房查询界面
9、客房信息管理界面
10、客户记录查询界面
11、客户结算界面
12、客户入住界面
四、代码设计
1、用户表示层(room窗体)
using System;
using System.Collections;
using ponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using Three.DLL;
using Three.Model;
namespace hotelmanger
{
public partial class Room : Form
{
public Room()
{
InitializeComponent();
}
private ArrayList mylist;
private void Room_Load(object sender, EventArgs e)
{
//combox2的函数
mylist = new ArrayList();
mylist.Add("一楼");
mylist.Add("二楼");
mylist.Add("三楼");
bindingSource1.DataSource = mylist;//附加数据源
boBox2.DataSource = this.bindingSource1;
//填充combox1的函数
SqlDataReader w_sda=DLL_room.DLL_AddRoom();
while (w_sda.Read())
{
comboBox1.Items.Add(w_sda[0]);
}
w_sda.Close();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
string cb1_str;
cb1_str = comboBox1.SelectedItem.ToString();
//填充combox3,combox4的函数
SqlDataReader W_sda2 = DLL_room.DLL_AddRoom2(cb1_str);
while (W_sda2.Read())
{
comboBox3.Items.Add(W_sda2[2]);
comboBox4.Items.Add(W_sda2[1]);
comboBox3.Text = W_sda2[2].ToString();
comboBox4.Text = W_sda2[1].ToString();
}
W_sda2.Close();
}
private void show_room_Click(object sender, EventArgs e)
{
DLL_room.ShowRoom(dataGridView1);
}
private void add_room_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);
}
//查找
private void select_rooom_Click(object sender, EventArgs e) {
string str = textBox1.Text;
DLL_room.SelectRoom(str, dataGridView1);
}
//删除
private void delete_room_Click(object sender, EventArgs e) {
string str = textBox1.Text;
DLL_room.DeleteRoom(str, dataGridView1);
}
private void exit_room_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
2、业务逻辑层
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using Three.Model;
using Three.sqlDAL;
using System.Data;
using System.Data.SqlClient;
namespace Three.DLL
{
public class DLL_room
{
//显示所有的房间
public static bool ShowRoom( DataGridView dgrid)
{
string strr = "select* from Room";
D_room.ShowRoom(strr, dgrid);
//D_roomtype.ShowRoomEmployee(strr, dgrid);
return true;
}
//查找
public static bool SelectRoom(string str, DataGridView dgvid)
{
string strr = "select *from Room where RoomID='" + str + "'";
D_room.ShowRoom(strr, dgvid);
return true;
}
//删除
public static bool DeleteRoom(string str ,DataGridView dgvid)
{
string strr = "delete from Room where RoomID='" + str + "'";
D_room.ShowRoom(strr, dgvid);
return true;
}
//调用无参的D_addtable()
public static SqlDataReader DLL_AddRoom()
{
SqlDataReader sdr = D_room.D_addtable();
return sdr;
}
//调用有参的D_addtable()
public static SqlDataReader DLL_AddRoom2(string slt_str)
string st = slt_str;
SqlDataReader sdr = D_room.D_addtable(st);
return sdr;
}
//添加相应的房间信息
public static int AddRoom(string RoomID, string RoomTypeName, string RoomPostion, string PeopleNum, string BedNum, string FactPeopleNum)
{
Room1 M_room = new Room1();
M_room.RoomID = RoomID;
M_room.RoomTypeName = RoomTypeName;
M_room.RoomPostion = RoomPostion;
M_room.PeopleNum = Convert.ToInt32(PeopleNum);
M_room.BedNum = Convert.ToInt32(BedNum);
M_room.FactPeopleNum = Convert.ToInt32(FactPeopleNum);
return D_room.D_ADDRoom(M_room);
}
//增加房间实际人数
public static int update_factpeople(string r_roomid)
{
return D_room.D_addfactpeoplenum(r_roomid);
}
//减少房间实际人数
public static int update_jianfactpeopele(string j_roomid)
{
return D_room.D_jianfactpeoplenum(j_roomid);
}
}
}
3、model层
using System;
using System.Collections.Generic;
using System.Text;
namespace Three.Model
{//由于窗体中出现了Room.cs,故定义为Room1
public class Room1
{
private string _RoomID;
public string RoomID
{
get { return _RoomID; }
set { _RoomID = value; }
private string _RoomTypeName;
public string RoomTypeName
{
get { return _RoomTypeName; }
set { _RoomTypeName = value; }
}
private string _RoomPostion;
public string RoomPostion
{
get { return _RoomPostion; }
set { _RoomPostion = value; }
}
private int _PeopleNum;
public int PeopleNum
{
get { return _PeopleNum; }
set { _PeopleNum = value; }
}
private int _BedNum;
public int BedNum
{
get { return _BedNum; }
set { _BedNum = value; }
}
private int _FactPeopleNum;
public int FactPeopleNum
{
get { return _FactPeopleNum; }
set { _FactPeopleNum = value; }
}
public Room1()
{
}
public Room1(string roomid, string roomtypename, string roompostion,
int peopenum, int bednum, 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 Three.Model;
using Three.database;
using System.Data;
using System.Data.SqlClient;
namespace Three.sqlDAL
{
public class D_room
{
//显示所有客房信息
public static bool ShowRoom(string str, DataGridView dgrid)
{
{
d_Bind.BindDataGrid(str, dgrid);
return true;
}
}
//读取RoomType中的部分值--无参
public static SqlDataReader D_addtable()
{
string str = "select * from RoomType";
SqlDataReader sdr ;
sdr = database.d_Bind.BindComboBox(str);
return sdr;
}
//读取RoomType中的部分值--有参
public static SqlDataReader D_addtable(string select_str)
{
string str = "select * from RoomType where RoomTypeName='" +
select_str + "'";
SqlDataReader sdr;
sdr = database.d_Bind.BindComboBox(str);
return sdr;
}
public static int D_ADDRoom(Room1 M_room)
{
SqlParameter[] param = new SqlParameter[]
{
new SqlParameter ("@RoomID",M_room.RoomID),
new SqlParameter ("@RoomTypeName",M_room.RoomTypeName),
new SqlParameter ("@RoomPostion",M_room.RoomPostion),
new SqlParameter ("@PeopleNum",M_room.PeopleNum),
new SqlParameter ("@BedNum",M_room.BedNum),
new SqlParameter ("@FactPeopleNum",M_room.FactPeopleNum)
};
string str = "insert
into[Room](RoomID,RoomTypeName,RoomPostion,PeopleNum,BedNum,Fact
PeopleNum)
values(@RoomID,@RoomTypeName,@RoomPostion,@PeopleNum,@BedNum,@Fa
ctPeopleNum)";
int i=data.ExecuteNoQuery(str, param);
return i;
}
//添加实际人数
public static int D_addfactpeoplenum(string roomid)
{
string str = "update Room set FactPeopleNum=FactPeopleNum+1 where
RoomID='" + roomid + "'";
int i = data.ExecuteNoQuery(str);
return i;
}
//减少实际人数
public static int D_jianfactpeoplenum(string roomid)
{
string str = "update Room set FactPeopleNum=FactPeopleNum-1 where
RoomID='" + roomid + "'";
int i = data.ExecuteNoQuery(str);
return i;
}
}
}
5、公用类层
(1)data.cs
using 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
{//封装数据库
public class data
{
private static string _con = @"Data
Source=.\SQLEXPRESS;AttachDbFilename=F:\C#宾馆管理系统整合后
\Solution\database\hotel.mdf;Integrated Security=True;Connect
Timeout=30;User Instance=True";
private static SqlConnection sqlcon = null;
public static void Creatcon()
{
if (sqlcon == null)
{
sqlcon = new SqlConnection(_con);
sqlcon.Open();
}
else if(sqlcon.State == ConnectionState.Closed || sqlcon.State ==
ConnectionState.Broken)
{
sqlcon.Close();
sqlcon.Open();
}
}
public static void CloseConnection()
{
sqlcon.Close();
}
//返回连接对象sqlconnection
public static SqlConnection GetSqlconn()
{
return sqlcon;
}
//执行增删改,不带参数
public static int ExecuteNoQuery(string strsql)
{
int i;
try
{
Creatcon();
SqlCommand sqlcomand = new SqlCommand(strsql, sqlcon);
i = sqlcomand.ExecuteNonQuery();
sqlcon.Close();
return i;
}
catch
{
return -1;
}
}
//执行增删改,带参数
public static int ExecuteNoQuery(string strsql, params SqlParameter[]
param)
{
int i;
try
{
Creatcon();
SqlCommand sqlcmd = new SqlCommand(strsql, sqlcon);
foreach (SqlParameter par in param) //遍历数组将参数对象添
加到操作命令中
{
sqlcmd.Parameters.Add(par);
}
i = sqlcmd.ExecuteNonQuery();
return i;
}
catch
{
return -1;
}
}
public static DataTable GetTable(string strsql)
{
try
{
Creatcon();
SqlDataAdapter sqlada = new SqlDataAdapter(strsql, sqlcon);
DataSet dataset = new DataSet();
sqlada.Fill(dataset, "temp");
sqlcon.Close();
return dataset.Tables["temp"];
}
catch
{
return null;
}
}
//带参数
public static DataTable GetTable(string strsql, params SqlParameter[] param)
{
try
{
Creatcon();
SqlDataAdapter sda = new SqlDataAdapter(strsql, sqlcon);
foreach (SqlParameter par in param)
sda.SelectCommand.Parameters.Add(par);
DataSet ds = new DataSet();
sda.Fill(ds, "temp");
sqlcon.Close();
return ds.Tables["temp"];
}
catch
{
return null;
}
}
//执行数据的查询操作
public static SqlDataReader ExeRead(string SqlCom)
{
try
{
Creatcon();
SqlCommand sqlcom = new SqlCommand(SqlCom, sqlcon);
SqlDataReader read =
sqlcom.ExecuteReader(CommandBehavior.CloseConnection);
return read;
}
catch
{
return null;
}
}
public static SqlDataReader ExeRead(string SqlCom, params SqlParameter[] param)
{
try
{
Creatcon();
SqlCommand sqlcom = new SqlCommand(SqlCom, sqlcon);
foreach (SqlParameter par in param)
{
sqlcom.Parameters.Add(par);
}
SqlDataReader read =
sqlcom.ExecuteReader(CommandBehavior.CloseConnection);
return read;
}
catch
{
return null;
}
}
}
}
(2)d_Bind.cs
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;//可引用windows中的控件
using System.Data ;
using System.Data.SqlClient ;
namespace Three.database
{
public class d_Bind
{
public static SqlDataReader BindComboBox(string str)
{
data.Creatcon();
SqlCommand cmd = new SqlCommand(str, data.GetSqlconn());
SqlDataReader sqlda = cmd.ExecuteReader();
return sqlda;
}// DataGridView 绑定
public static void BindDataGrid(string str,DataGridView dGrid)
{
data.Creatcon();
SqlDataAdapter sqlda=new SqlDataAdapter (str,data.GetSqlconn());
DataSet ds=new DataSet ();
sqlda.Fill(ds,"tab");
dGrid.DataSource=ds.Tables["tab"];
}
}
}
五、参考文献
(一)实用教程/郑阿奇主编.-北京:电子工业出版社 ,2008.1 (二)精通VisualC#2005/王石编著。
-北京:人民大学出版社,2007.2
(三)C#编程及应用程序开发教程(第2版)/刘烨,季石磊等编著.
-北京:清华大学出版社,2007.5
(四)VisualC#高级编程范例/谭桂华等编著.-北京:清华大学出版社,2004
六、心得
经过为期一周的C#课程设计,使我对C#这门语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处。
首先,在本次课程设计中,我学会了三层架构的设计,体会到了用户表示层,业务逻辑层,数据访问层各层代码的设计规则,数据访问层负责与数据库建立连接;业务逻辑层是沟通数据访问层与用户表示层的桥梁;用户表示层是用户与程序交互的接口。
其次在程序设计中比如数据访问层的代码不会设计,访问数据库的语句定义不好。
我们就借阅了图书馆的好几本书仔细推敲,编写出大量的代码。
后运行时肯定会出现大量的错误,但我都仔细找,在老师和同学的帮助下最后程序成功运行。
又如在数据库中数据添加时遇到了定义的变量类型与数据库中数据类型不一致,修改了数据库后正常运行。
此次设计我更加明白了课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,计算机系统软件已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。
因此作为二十一世纪的大学生来说掌握计算机软件的开发技术是十分重要的。
回顾起此次宾馆管理系统课程设计,至今我仍感慨颇多,在整整一星期的
日子里,可以说是苦多于甜,但是可以学到很多很多的东西,同时在巩固了以前所学过的知识的基础上,我们学到了很多在书本上所没有学到过的知识。
通过这次课程设计更使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
这次设计是我们小组四个人共同完成的,在此期间我学到了单单靠知识是不行的,我们还应注重团队协作能力。
只有分工明确,做工准确最后才能做出令人满意的程序。
这次课程设计顺利完成了,我们也都从紧张中放松下来,回顾这一周的课程设计,感慨颇多!不过我们的努力终于结出了累累硕果!我们都在最后露出了满意的笑容!
最后对给过我帮助的所有同学和各位指导老师表示最衷心的感谢!。