资源描述
第一章 绪论
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、显示一种日历,该日历会显示一种月份
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 = "";
}
else
展开阅读全文