题目: 酒店管理和宾客端服务系统 96分
一.绪论
酒店管理和宾客端服务系统的意义是提供给酒店和消费者一个友好的界面,并能够简化用户的操作。其目的是满足一般小型旅馆的日程管理需要。其研究范围不包括web端,以及现实中调用支付宝等支付工具来进行金钱转移。目前的技术用到是使用Sqlsever做数据库存储,C#语言做winform等。
本设计的指导思想是尽量将界面变得友好,不会出现让管理与服务出错。设计比较稳固的数据库,减少冗余和提高便捷度。
主要问题是如何将这些事务有逻辑组织起来,保证数据正确。
采用研究方法是每次实现一个功能时,测试是否发生冲突。即测试与修改。
二.任务的描述
1.目标: 设计出比较稳固的数据库、功能全面,且每一个功能尽量做到具备独立性、美化界面。
2.功能描述:·宾客端:
- 不同类型消费者个人信息的更新2. 注册与登录3.休闲功能
4.增加与退订服务和商品、5.房卡充值与转出6.消费记录7.系统刷新和退出8.权限分配(不同类型的顾客有不同的权限)9.预定和取消预定10.入住(个别类型才能入住)
·管理员端:
1.宾客入住登记2.增加服务和商品 3.退房结算(房卡支付有折扣)4.宾客查询5.历史记录访问与分析6.管理员的信息更新(存储过程和触发器实现)7.增加客房。
3.运行环境: 可以在visual studio2015和SQL server2019软件上和win10的操作系统上运行。
三.任务设计
数据库结构可查看百度云资源,csdn上不好显示。
给出ER图:
四.编写代码
1.问题1
(1)问题描述:每次建立一个窗体都要设置连接字符串,窗体比较多,代码比较长,过程繁琐。
(2)解决办法:建立一个数据库的类,将连接一系列操作封装起来,即使用的时候编写sql语句即可。而封装分为两类,一种是非查询操作,返回影响的行数。对修改删除增加事务,使用事务回滚。一种是查询操作,返回SqlDataReader对象。使用非常方便。
2.问题2
(1)问题描述:窗体A打开了窗体B,但窗体B的数据更新不了,即没有收到窗体A的一些数据。
(2)解决办法:1.在窗体B的代码里设置一公有类型的数据,在生成窗体B时,即将窗体B的对象的共有类型数据赋值。这样窗体B根据这个共有数据进行更新。
3.问题3
(1)问题描述:窗体A打开了窗体B,窗体B的数据更新后应对A进行更新,但关闭窗体B时窗体A没有进行更新。
(2)解决办法:将窗体A的类设置一个静态的“更新”函数,静态函数中的 属性也都设成静态的。然后B在更新成功后进行调用A的更新函数。
4.问题4
(1)问题描述:在修改本管理员密码时,根据现实意义,应该将本次的连接断开,重新登陆。但是由主窗体产生的子窗体怎样对主窗体产生影响呢?不能建立主窗体的static 函数,因为无法使用this指针来关闭当前的主窗体。
(2)解决办法:可以添加对主窗体对象的引用或地址,即子窗体通过引用或地址可以调用主窗体的关闭函数。
5.问题5
(1)问题描述:建立主从表时,从表的数据源不是理想的部分。
(2)解决办法:可以再建两个BindingSource,然后将主表的外键和其中一个BindingSource联系起来,再对另一个BindingSource组件与之前的BindingSource连接,然后再和从表连接起来,取得想要的数据。即对BindingSource进行修改和连接。
6.问题6
(1)问题描述:在设计界面上,需要动态的产生几个button对象。当点击时需要生成另外一个窗体,但是如何对new 出的button的点击事件进行使用呢?
(2)解决办法:btn.Click += new EventHandler(btn_click);这条语句可以将所有产生的button对象的点击事件统一起来。点击事件中的Button btn = (Button)sender;这条语句确定了是哪一个button。
button的Tag属性可以进行赋值,程序中赋值成房间号,来进行对弹出窗体的更新
7.问题7
(1)问题描述:当进行插入有多条重复的(消费商品)记录时,主从表中会出现错误,显示违背了约束条件。
(2)解决办法:不能修改表的情况下,避免重复记录的产生。或者修改表结构,使得每一条记录都是唯一的。
8.问题8
(1)问题描述:怎样在数据库建立存储过程后进行调用呢?
(2)解决办法:1.SQLcommand对象在构造时的参数加一个存储过程的名字,2.将 SQLcommand对象的类型改成存储过程3.定义一个参数对象获取存储过程返回的值。像函数中的返回值那样。
9.问题9
(1)问题描述:怎样在退房结算判断超时呢?
(2)解决办法:因为在退房结算时时间时本地的时间,以及存在住房记录(Bookroom表)的入住时间(datecheckin) ,网上并没有设置一个专门的设置具体日期,时间的函数,但是可以通过字符串转换时间的函数来得到具体日期。即将入住的那天的下一天的时间字符串截取日期,再连接上“12:00:00”,再转换成datetime作为超时的标准。用当前时间与它比较,得到是否超时。
10.问题10
(1)问题描述:验证码技术是怎样做的?
(2)解决办法:首先是随机生成一段字符串,这个做起来简单。然后是建立graphic对象, 然后调用绘制字符串函数DrawString(),然后再绘制噪声线和前景噪声点,然后基本得到一个图。但是最后需要加边框,因为picturebox不会显示边框,因此再绘制四条边缘线。
11.问题11
(1)问题描述:图像怎样变成二进制存到数据库里,又怎样在程序中读取呢?
(2)解决办法:在这个技术中需要引进IO的命名空间,以及Drawing.Imaging这个命名空间。用来对流和image对象进行操作。
第二步将图片格式转成二进制。
这个memorystream流对象有一个存储的感觉,但是不能直接对图像操作。BitMap是一个专门处理图像信息的类,作用是能将改变格式的图片放在流对象里。存好后此时位置到末尾,因为要读取流对象内的信息,必须从开头读,才能得到字节类型的返回值。
第三步是存取到数据库里。数据库里有一种类型是image类型,可以存文字和图像。其格式就是二进制。直接调用insert即可。不再详细写了。
然后是读取数据库中的图像。
Select语句取到二进制类型时,调用下面这个函数
同样是用到了存储用的memorystream流对象只不过它存的是二进制类型的对象,通过字节转图片的函数转换得到图片资源。
12.问题12
(1)问题描述:怎样显示动态的时间和滚动显示信息效果?
(2)解决办法:需要一个Timer控件,它的作用比较像单片机里头的定时器,每秒执行什么操作。所以在程序加载时启动定时器,一直将当前时间赋给label,以及滚动条每秒移动3个单位。但是在这个每秒刷新时中不能进行窗体建立,尽管代码控制关闭了窗口,定时器仍然对窗体进行建立,因此对定时器的使用有一定前提。
五.感想认识
首先,我觉得本次课程设计是劳累的。因为自己在准备做课程设计是一点头绪都没有,然后我在网上看视频教程,书上寻找例子,我觉得他们做的非常好。于是我参考了他们的界面设计,使用了他们的图像资源,界面的控件使用逐渐基本明白。
六.截图
。。。很多很多大家可以看我的Bilibili,有一段视频展示,来供大家参考。
七、使用步骤
酒店管理系统已上传至百度云,里面有数据库文件,以及一些设计报告,想要看的小伙伴可以跳过去哈,链接如下
百度云链接: https://pan.baidu.com/s/1BBtOchbrXjUVNnQ4QFU0WQ?pwd=exfs.
链接: https://pan.baidu.com/s/1BBtOchbrXjUVNnQ4QFU0WQ?pwd=exfs 提取码: exfs 复制这段内容后打开百度网盘手机App,操作更方便哦
酒店管理系统与宾客管理的视频已放在B站上,想要参考界面的可以去看一下哈,记得三联哈
B站链接:https://www.bilibili.com/video/BV1ZY411L79A/.
分享原因
1.致敬开源的那些前辈、博主。
我的大二、大三遇到的问题以及学习地点都是在CSDN、B站、GitHub、Gitee。每次项目的出彩的地方都源自他们,我也不能再藏着掖着,以方便同学们应对老师布置的作业。
2. 计算机专业的同学要记录一下自己的学习经历。
3.向先进学习!