资源描述
第一章 绪论
1.1 选题背景
伴随中国经济腾飞,人民生活水平不停进步,旅游已经成为当今大家生活、娱乐、休闲一个专题。旅游行业日趋火爆,同时加速了宾馆行业整体发展。
宾馆行业充满了猛烈市场竞争,在改革开放一来,中国宾馆行业快速发展,成为含有一定规模第三产业,充满了宽广市场前景和拥有良好发展趋势。
在未使用计算机软件对宾馆客房采取传统管理方法时,通常使用手工处理账务,存在去多现金流失漏洞,且人工查房不能立即、正确取得房间是否处于空闲或被预定状态信息。相反,如借助计算机系统,可是结账既正确又快速,并能在第一时间得悉房间状态信息。
所以,要想使宾馆工作质量和效率提升,采取优异计算机网络和通信技术改变酒店业务模式,实现酒店业务管理自动化已经成为一个肯定。
1.2研究现实状况
国外酒店管理系统最早是于70年代初发展起来,到了80年代,国外酒店管理系统,如EECO(Electronic Engineering CO.)、HIS(Hotel Information System)、CLS、Lodgistix等,整个模式已基础定型,技术较成熟,功效也较齐全。现在,国外酒店正向个性化方向发展,酒店按其经营方法可分为商务型酒店、长住型酒店、度假型酒店等等;按其经营形式可分为独立经营饭店、集团经营饭店等。而且产生了一大批国际级联号饭店,如希尔顿(Hilton Hotels Corp)、谢拉顿(Sheraton Corp)、假日(Holiday Corp)、凯悦(Hyatt Hotel Corp)等集团企业世界饭店。中国宾馆计算机管理系统于上世纪80年代初起步,到了80年代中后期,伴随国外宾馆计算机系统和优异管理技术大规模引进,深入促进了中国宾馆管理技术发展。中国宾馆管理系统正是在充足吸收国外管理系统精华,结合中国实际情况下逐步发展成熟,到90年代早期形成了多个较成熟软件系统,同时产生了很多专职从事宾馆计算机管理系统企业。到了90年代中期,伴随计算机在饭店中普及应用,和计算机技术不停发展,宾馆计算机系统发展到了一个新时期,新系统平台、新软件功效、新系统特点及发展方向不停涌现。
中国最早宾馆管理软件仅简单利用于前台接待、排房、结帐、查询等基础服务,发展至今,较为成熟宾馆管理系统已含有前台管理、餐饮娱乐管理、用户管理、财务管理、物业管理等多项管理功效。总而言之中国宾馆管理软件功效发展有以下几大趋势:
(1). 软件产品集成化
(2). 操作界面人性化
(3). 重视用户关系管理
(4). 从数据处理型向决议型发展
(5). 系统开放化
(6). 增值产品/服务功效增加
(7). 支持电子商务
(8). 宾馆集团型管理软件
1.3项目意义
伴随世界经济全球化进程加紧,在这个信息“爆炸”电子商务时代,掌握了信息技术主动权,便率先拥有了商机。因为互联网含有开放性、国际性等特点,使得旅游宾馆经营范围扩展到全球,同时电子商务又扩大了宾馆业竞争领域,使企业从常规广告竞争,促销手段,产品设计等领域竞争扩大到无形虚拟竞争空间。
宾馆管理系统是酒店对本身管理不可缺乏一部分,利用该计算机系统能够对酒店规模、制度、政策深入拓展、优化提供便利,还能够提升工作效率和经济效益,使得管理更有条理、愈加科学、规范。能够预见,宾馆管理系统实现将在很大程度上改善宾馆管理运行机制,提升宾馆办公效率,为高质量宾馆服务提供确保。而且正确、快速、统一信息处理对宾馆决议、业务发展和社会信誉肯定有着主动意义。
第二章 需求分析
2.1功效需求分析
具体功效具体描述以下
1.客房类型管理
2.客房管理
3.客房查询
4.用户入住
5.用户结算
6.用户管理
7.系统帮助
8.退出系统
2.2数据流需求分析:
登陆信息 返回信息
用 户
登 录
操 作
数据库
错误信息 寻求信息
2-2-1数据库需求分析——数据流图
第三章 概要设计
3.1系统功效概述图
登陆
用户类型管理
客 户 查 询
客 户 入 住
客 户 结 算
系 统 帮 助
客 房 管 理
用 户 管 理
退 出 系 统
3.2 Client信息E-R图:
Client
ClientID
NativePlace
ClientName
Sex
3.3 ClientBookIn信息E-R图
ClientBookIn
BookInDate
RoomID
CheckDate
TotalMoney
ClientID
Remark
3.4管理员用户E-R图
UserID
User
UserPassword
UserSort
Remark
3.5客房信息E-R图
Room
RoomID
RoomPostion
PeopleNum
FactPeopleNum
BedNum
RoomTypeName
Remark
3.6客房类型信息E-R图
RoomType
Area
Price
AirCondition
Phone
BedNum
RoomTypeName
Toilet
Television
PeopleNum
第四章 数据库表建立和实现
Client表建立:
ClientBookIn表建立:
Room表建立:
RoomType表建立:
User表建立:
第五章 具体设计
5.1用户登录功效
建立一个窗口,从公共控件中添加label,button控件到窗口,编辑按钮程序,插入图片;连接数据库User表对管理员输入信息进行验证,判定是否能够通
过;调用getNumber()函数随机生成验证码,确保安全性。相关验证码,每次调用getNumber()函数全部会生成一个新验证码,应该把验证码保留到Session中需要比较时再拿出来,注意验证码不分大小写。
相关运行截图以下:
5-1-1 登陆界面
5-1-2 登录验证
5-1-3 登陆犯错
5-1-4 登陆成功
5.2 客房类型管理功效
建立一个窗口,从公共控件中添加label,button,textbox,GirdView等控件到窗口,编辑按钮程序,插入图片;GirdView需要配置数据源,对数据库中内容进行显示
对客房类型信息进行编辑,包含类型(一般,贫民,豪华) 客房面积(30,60,90) 额定床数(1,2,3,4) 额定人数(1,2,3,4) 价钱(50,500) 电视(有,无)电话(有,无) 空调(有,无) 卫生间(有,无)这些属性,对客房类型进行增删改查功效操作。
相关GirdView控件事件说明
被单击时发生。它们分别在网格控件处理分页操作之前和以后激发。RowCancelingEdit 在一个处于编辑模式行Cancel按钮被单击,不过在该行退出编辑模式之前发生。RowCommand单击一个按钮时发生。RowCreated创建一行时发生。 RowDataBound一个数据行绑定到数据时发生。RowDeleting, RowDeleted 这两个事件全部是在一行Delete按钮被单击时发生。它们分别在该网格控件删除该行之前和以后激发。RowEditing 当一行Edit按钮被单击时,不过在该控件进入编辑模式之前发生。RowUpdating,RowUpdated 这两个事件全部是在一行Update按钮被单击时发生。它们分别在该网格控件更新该行之前和以后激发。SelectedIndexChanging, SelectedIndexChanged这两个事件全部是在一行Select按钮被单击时发生。它们分别在该网格控件处理选择操作之前和以后激发。 Sorting, Sorted这两个事件全部是在对一个列进行排序超链接被单击时发生。它们分别在网格控件处理排序操作之前和以后激发
相关运行截图以下:
5-2-1 客房类型管理界面
5-2-2 客房类型管理添加功效界面
5.3 客房管理功效
建立一个窗口,从公共控件中添加label,button,textbox,GirdView等控件到窗口,编辑按钮程序,插入图片;GirdView需要配置数据源,对数据库中内容进行显示
对客房信息进行编辑,包含房间号码 客房面积(30,60,90) 额定人数(1,2,3,4) 房间楼层(一楼,二楼,三楼 ) 额定床数这些属性,对客房进行增删改查等功效操作。
相关ListBox控件
首先来说控件属性,
(1)Items:使用此属性获取列表控件项属性。此属性可用于确定列表控件中选定项。添加items时既能够设计时静态添加,也能够在代码中动态添加。假如不想显示设计时添加items,能够在代码中添加this.listBox1.Items.Clear();只显示在代码中添加选项。(2)SelectedItems:获取包含ListBox中目前选定项集合。(3)SelectioModes:获取或设置在ListBox中选择项所用方法。一共有 四个值可选;默认为:SelectionMode.One,只能选中一个;属性值为none时不能选择;当属性MultiExtended 时,按下 Shift 键同时单击鼠标或同时Shift 键和箭头键之一(向上键、向下键、向左键和向右键),会将选定内容以前一选定项扩展到目前项。按 Ctrl 键同时单击鼠标将选择或撤消选择列表中某项;当该属性设置为MultiSimple 时,鼠标单击或按空格键将选择或撤消选择列表中某项。
接下来说一哈数据绑定,通常数据全部是可变,所以说就需要数据绑定。数据绑定有多个,一个就是绑定从数据库中获取DataTable或是DataSet;另外一个就是自定义一个类,绑定自定义类中数据。c#中数据绑定和ASP.NET中数据绑定还有一点区分,ASP.NET中绑定数据后还要调用一个DataBind方法,而在c#中就不需要。而DisplayMember获取或设置要显示属性。
相关运行截图以下
5-3-1 客房类型管理添加功效界面
5.4客房查询和用户入住功效
建立一个窗口,从公共控件中添加label,button,textbox,listbox,GirdView等控件到窗口,编辑按钮程序,插入图片;GirdView需要配置数据源,对数据库中内容进行显示输入查询条件,包含属性有房间号码 房间类型 房间楼底 额定床数 额定人数 实际人数 其它条件,和数据库数据进行比对,查找该客房信息。数据库提供房间信息,依据住户需求,判定用户是否入住;若选择入住,则进行登记,跳转到用户入住界面。
用户入住功效实现和客房查询基础相同,用户入住是对住户基础信息进行统计。将用户基础信息包含身份账号,姓名,性别,籍贯,和入住时间,相关入住时间这里要添加一个日历控件
是一个传统单月份日历,用户能够使用该日历查看和选择日期。
Calendar控件提供功效:
1、显示一个日历,该日历会显示30天份
2、许可用户选择日期、周、日。
3、许可用户选择一定范围内日期。
4、许可用户移到下一月或上一月。
5、已编程方法控件选定日期显示。
相关运行截图以下
5-4-1 客房查询界面
5-4-2 用户入住界面
5.5 用户查询和用户结算功效
建立一个窗口,从公共控件中添加label,button,textbox,listbox,GirdView等控件到窗口,编辑按钮程序,插入图片;GirdView需要配置数据源,输入身份证号和姓名,从数据库中查找用户;点击结账按钮,确定用户是否结账,入已经结账则显示确定信息;若在住人选择结账,即跳转到用户结算界面 ,输入应收金额,确定是否对住户打折,这里面包含VIP等节假日原因不便多说,点击结账按钮确定用户结账
相关运行截图以下
5-5-1 用户查询界面
5-5-2 已经结账用户界面
5-5-3 需要结账用户界面
5-5-4 用户结算界面
5-5-5 已结算用户界面
5-6 用户管理功效
建立一个窗口,从公共控件中添加label,button,textbox,listbox,GirdView等控件到窗口,编辑按钮程序,插入图片;GirdView需要配置数据源,编辑新用户信息,添加新管理员,进行保留,新建立用户将添加到数据库中,能够使用新用户进行登录
相关运行截图以下
5-6-1 用户管理功效界面
小 结
时间很快就过去了,这两个星期不敢说自己有多大进步,取得了多少知识,但起码是了解了项目开发部分过程。虽说上过数据库上过管理信息系统等相关课程,不过没有亲身经历过相关设计工作细节。这次实习证实提供了一个很好机会。 经过这次课程设计发觉这其中需要很多知识我们没有接触过,去图书馆查资料时候发觉我们前边所学到仅仅是皮毛,还有很多需要我们掌握东西我们根本不知道。同时也发觉有很多已经学过东西我们没有了解到位,不能灵活利用于实际,不能很好用来处理问题,这就需要我们不停大量实践,经过不停自学,不停地发觉问题,思索问题,进而处理问题。在这个过程中我们将深刻了解所学知识,同时也能够学到不少很实用东西。 从多种文档阅读到开始需求分析、概念结构设计、逻辑结构设计、物理结构设计。亲身体验了一回系统设计开发过程。很多东西书上写很清楚,貌似看着也很简单,思绪很清楚。但真正需要自己想措施去设计一个系统时候才发觉其中难度。常常做到后面忽然就发觉自己一开始设计有问题,然后又回去翻工,在多种反复中不停完善自己想法。 我想有这么问题不止我一个,事后想想是一开始着手做时候下手过于轻快,或说是根本不了解自己要做这个系统是给谁用。因为没有事先做过仔细用户调查,不知道整个业务步骤,也不知道用户需要什么功效就忙着开发,这是作为设计开发人员需要尤其警惕避免,不然会给以后工作带来很大麻烦,甚至可能会需要全盘推倒重来。所以以后课程设计要尤其注意这一块设计。 根据要求,我们做是宾馆管理。说实话,我对这个是一无所知,么一个步骤。盲目开始设计下场我已经尝过了,结果就是出来一个四不像设计方案,没有什么实际用处。没有前期调查,仅从指导书上那几条要求着手是不够。 在需求分析过程中,我经过上网查资料,去图书馆查阅相关资料,结合我们生活经验,依据可行性研究结果和用户要求,分析现有情况及问题,因为忘记了部分C#语言规范使得在调试过程中部分错误没有发觉,经过这次课程设计,我对调试掌握得愈加熟练了,意识到了程序语言规范性和我们在编程时要有严谨态度,同时在写程序时如有一定量注释,既增加了程序可读性,也能够使自己在读程序时更轻易。 我们学习并应用了SQL语言,对数据库创建、修改、删除方法有了一定了解,经过导入表和删除表、更改表学会了对于表部分操作,为了建立一个关系数据库信息管理系统,必需得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护和系统评价通常过程,为毕业设计打下基础。 很多事情不是想象中那么简单,它包含到多种实体、属性、数据步骤、数据处理等等。很多时候感觉后面设计根本无法继续,感觉像是被前面做多种图限制了。在做关系模型转换时候碰到有些实体即能够认为是实体又能够作为属性,为了避免冗余,尽可能根据属性处理了。 物理结构设计基础没有碰到问题,这一块和安全性、完整性不觉就会在物理结构设计中添加部分安全设置:主键约束、check约束、default定义等。最终才做索引部分,对部分比较常常使用搜索列,外键上建立索引,这么能够显著加紧检索速度,最终别忘记关键安全性设置,限制用户访问权限,新建用户并和数据库用户做对应映射。 不管做什么,我们全部要相信自己,不能畏惧,不能怕碰到困难,什么全部需要去尝试,有些你开始认为极难事在你尝试以后你可能会发觉原来她并没有你以前认为那样,自己也是能够。假如没有自信,没有目标,没有信心就不可能把事情做好,当其它人全部在迷茫时候,自己一定要坚信目标,大学毕业出去即面临找工作,从学习这个专业,到以后从事这方面工作全部需要不停地去学习去实践,这次实践能够给我们敲一个警钟,我们面临毕业,面临择业,需要这些实践经验,在困难面前要勇于尝试,这是这次课程设计给我最大感想! 以上基础是这次实习体会了,设计进行很艰苦,编码很不轻易,才发觉做一个项目最关键不在于怎样实现,而是实现之前需求分析和模块设计。创新极难,有些流行系统其实现并不难,难在于对市场分析和正确定位。设计,是一个任重道远过程。
但在做课程设计过程中也碰到很多问题,一开始时其中最大问题是不知道用哪种编译工具,以后选择了Microsoft Visual Studio,在编写程序时,编写程序起来也有点困难,不过也越来越顺利了。经过调试后最终把自已想到实现功效一步步实现了,经过这次课程设计使我收获了好多,熟悉了C#利用,还复习了数据库相关语句编写。
此次课程设计让我感受颇多:做一个数据库其实是一件很有趣事情。想到自己能够创建一个小型数据库系统,有点学习后满足感。数据库建立并非难事,难点在于数据库连接和编程语言选择。C#功效很强大,这也是我以后需要学习课程,于是我毅然选择了它。再就是建立数据库系统步骤,我经验就是要先总体计划,再局部整理。先做好总界面,再经过该界面部署一步一步实现其功效!
同时我体会到:熟练编程能力,对知识利用强烈渴望及其创新和团体合作精神设做好一个大型数据库基础。所以经过此次课程设计我显著感觉到本身不足,并期望以后能愈加用心地利用所学知识和学习新知识。
参考文件
[1] C#程序设计教程 电力出版社
[2] .施平安 清华大学出版社,
[3] 杨文龙,软件工程,电子工业出版社,1997
[4] 数据库系统概论 高等教育出版社
附 录
C#语言代码以下:
1.登陆
namespace __HotelManage
{
public partial class login : Form
{
MainForm mf = new MainForm();
authcode authcode = new authcode();
conndata con = new conndata();
public login()
{
InitializeComponent();
}
private void login_Load(object sender, EventArgs e)
{
authcode.CodeImage(pictureBox1);
}
private void btn_exit_Click(object sender, EventArgs e)
{
this.Close();
}
private void btn_enter_Click(object sender, EventArgs e)
{
string check = con.check(this.textBox1.Text.Trim(), this.textBox2.Text.Trim());
if (this.textBox1.Text.Trim() == "" || this.textBox2.Text.Trim() == "" || this.textBox3.Text.Trim() == "")
{
authcode.message_box("登Ì?陆?信?息¡é不?完ª¨º整? !ê?");
authcode.CodeImage(pictureBox1);
}
else if (check == "user")
{
authcode.message_box("用®?户¡ì名?有®D误¨®!ê? ");
textBox1.Text = "";
textBox1.Focus();
}
else if (check == "password")
{
authcode.message_box("密¨¹码?有®D误¨® !ê? ");
}
else if (textBox3.Text.Trim().ToLower() != authcode.ww.ToLower())
{
authcode.message_box("验¨¦证¡è码?有®D误¨®!ê? ");
authcode.CodeImage(pictureBox1);
}
else if (check == "past")
{
authcode.message_box("成¨¦功|登Ì?陆?!ê? ");
authcode.CodeImage(pictureBox1);
mf.power = con.u_sort.Trim();
mf.Show();
this.Hide();
}
else if (check == "error")
{
authcode.message_box("服¤t务?器¡Â连¢?接¨®时º¡À出?错䨪!ê?");
}
else
{
authcode.message_box("未¡ä知a错䨪误¨®!ê? ");
}
}
}
}
2.用户入住:
namespace __HotelManage
{
public partial class client_live : Form
{
authcode m = new authcode();
live_pay live = new live_pay();
public string room_id;
public client_live()
{
InitializeComponent();
}
private void btm_exit_Click(object sender, EventArgs e)
{
this.Close();
}
private void client_live_Load(object sender, EventArgs e)
{
if (room_id != null )
{
roomid.Text = room_id.Trim();
}
this.bookdate.Text = DateTime.Now.ToString();
}
private void btn_clear_Click(object sender, EventArgs e)
{
clear_all();
}
private void btn_ok_Click(object sender, EventArgs e)
{
if (this.roomid.Text == "" || this.userid.Text == "" ||
this.username.Text == "" || this.sex.Text == "" ||
this.NativePlace.Text == "" || this.bookdate.Text == "")
{
m.message_box("信?息¡é不?完ª¨º整?!ê?");
return;
}
string live_message = live.live(
userid.Text.Trim(),
roomid.Text.Trim(),
bookdate.Text.Trim(),
remark.Text.Trim(),
username.Text.Trim(),
sex.Text.Trim(),
NativePlace.Text.Trim()
);
if (live_message == "error")
{
m.message_box("房¤?间?不?存ä?在¨²!ê? ");
this.roomid.Text = "";
}
else if (live_message == "ok")
{
m.message_box("顾?客¨ª已°?入¨?住Á?!ê? ");
clear_all();
}
else
{ m.message_box("系¦Ì统ª3故¨º障?!ê? "); }
}
public void clear_all()
{
this.roomid.Text = "";
this.userid.Text = "";
this.username.Text = "";
this.sex.Text = "";
this.NativePlace.Text = "";
this.bookdate.Text = "";
this.remark.Text = "";
}
}
}
3.用户结算
namespace __HotelManage
{
public partial class client_pay : Form
{
public string pay_userid;
public string pay_username;
public string pay_roomnum;
public string pay_date;
live_pay livepay = new live_pay();
authcode m = new authcode();
public client_pay()
{
InitializeComponent();
}
private void btn_exit_Click(object sender, EventArgs e)
{
this.Close();
}
private void client_pay_Load(object sender, EventArgs e)
{
if (roomnum.Text.Trim() == "" && username.Text.Trim() == "" && userid.Text.Trim() == "")
{
this.roomnum.Text = pay_roomnum;
this.userid.Text = pay_userid;
this.username.Text = pay_username;
}
}
private void btn_clear_Click(object sender, EventArgs e)
{
this.roomnum.Text = "";
this.userid.Text = "";
this.username.Text = "";
}
private void btn_find_Click(object sender, EventArgs e)
{
if (roomnum.Text!= "" && userid.Text != "")
{
string str = livepay.find(roomnum.Text.Trim(), userid.Text.Trim());
if (str == "no")
{
m.message_box("用®?户¡ì不?存ä?在¨²!ê? ");
}
else
{
username.Text = str;
}
}
else { m.message_box("请?输º?入¨?房¤?间?号?和¨ª身¦¨ª份¤Y证¡è号?!ê? "); }
}
private void sum_Click(object sender, EventArgs e)
{
if (userid.Text != "" && username.Text != "" && roomnum.Text != "")
{
mny.Text = livepay.sum(roomnum.Text.Trim(), userid.Text.Trim());
factmny.Text = mny.Text;
}
else { m.message_box("请?确¨¡¤认¨?用®?户¡ì是º?否¤?存ä?在¨²!ê? "); }
}
private void btn_pay_Click(object sender, EventArgs e)
{
if (userid.Text != "" && username.Text != "" && factmny.Text != "")
{
string over = livepay.pay(userid.Text.Trim(), roomnum.Text.Trim(), factmny.Text.Trim());
if (over.Trim() == "ok")
{
m.message_box("结¨¢账?已°?成¨¦功| !ê? ");
this.roomnum.Text = "";
this.userid.Text = "";
this.username.Text = "";
this.mny.Text = "";
this.factmny.Text = "";
this.discount.Text = "";
}
展开阅读全文