项目实现
简介
学校组织实训,制作项目用的是qt,当然还是做一个管理系统。
项目要求
老师的要求
我的实现
功能:见下面详解
主要界面:
实现细节
数据库端
一共四个表:
用户信息表
饮料信息表和设备表
日志表
数据库使用的是QSQLITE。
用户端
服务端
功能一样的模块就不再解析了
程序使用流程
这个机器是纯语音提示的,因为没办法传视频就只能用文字来显示了。
大家可以把代码下载下来实际运行听听声音。
开启服务器,服务器自动监听8888端口,连接数据库
开场动画
语音提示:欢迎使用饮料自助系统
语音提示:开始监听 数据库已连接
开启客户端,自动连接服务器
开场动画
语音提示:欢迎使用饮料自助系统
缓冲界面
语音提示:尝试连接服务器 成功和服务器建立好连接
语音提示:有一个新的连接
语音提示:服务器已经连接,请登陆系统开始购物
注册
语音提示:请注册账号进行充值再购买
语音提示:注册成功
可以看到数据库里面加了一条用户记录,这里密码是加密的,后面代码讲解的时候会细说。
用户登陆
密码登陆
语音提示:登陆成功
人脸识别登陆
因为长得丑,就打码了。
语音提示:开始检测
语音提示:登陆成功
购买
选择饮料温度和贩卖机设备,对比自己的金钱进行购买。
语音提示:购买成功
不同的设备饮料可能不同偶
语音提示:切换成功
语音提示:刷新成功
充值
语音提示:充值使我强大
语音提示:充值成功
对应的金钱增加
关闭贩卖机
语音提醒:更新成功
语音提醒:该设备没有开启
注:这里有点bug,就是客户端需要重启才能达到这个效果,因为这里客户端没有刷新设备缓存。
这里我没有改因为我比较懒。。。
还有一个最大的原因最后会说明。
服务器开始自动检测补货
首先用管理员账号登陆
语音提示:开始自动检测饮料贩卖情况
在客户端购买饮料,让饮料数量变少,小于等于2
语音提示:购买成功
语音提示:进入管理员模式
语音提示:添加成功
饮料数量增加
服务器更改饮料信息
服务器更改设备信息
服务器查看日志信息
注销
语音提示:注销成功
换肤
效果
异常使用
登陆异常
用户名或密码登陆异常
语音提示:登陆失败
用户已经在线
语音提示:该用户正处于登陆状态,无法提示登陆多次
扫脸登陆失败
感觉暴露别人照片不好,就找了张胡歌的图片
语音提示:登陆失败
服务器连接异常
一开始先打开客户端 再打开服务器,就不会自动登陆。
语音提示:有一个新的连接
购买异常
购买饮料数量为0
语音提示:购买的饮料数量有问题
购买的饮料数量大于数据库数量
语音提示:饮料数量不足
用户金钱不足
语音提示:用户余额不足
没有该商品
语音提示:暂无商品
信息修改异常
语音提示:输入饮料价格不能小于0
存在的问题
- 如果数据库很大会占很多运行内存,因为数据库缓存是把所有的信息都加载进来的。
- 客户端有直接访问数据库,用户登出是通过服务器控制的,获取饮料,设备信息是通过服务器的。因为太懒就不想改了。应该要去掉客户端的数据库模块,改成访问服务端获取数据。
- 服务器宕机,这个会导致登陆的用户没有设置退出就结束程序了。应该要在服务器保存快照,下一次服务器打开的时候恢复数据。
- 没有添加管理员的功能,我感觉不能有这个功能,不知道对不对。
- 没有动态添加人脸识别图片和商品的功能,目前只能手动添加。因为个人比较懒,而且实训的时候琐事有点多就没有添加这个功能。实现的话应该是用tcp传图片文件,还有给技术问题,如何检测图片是否符合要求?给的图片太丑,放到客户端显示就更难看了。这里吐槽一下自己的ps技术,我自己都看不下去了?
- 无法连接多个客户端,因为服务器就声明了一个通信套接字的指针,多用户的话需要动态管理服务端的通信套接字,已经一个用户的登陆表。
- 饮料的状态应该使用状态模式动态添加,但是考虑到饮料的状态比较少,就没有抽象出基类。
- 通信模块使用自己定义的格式,以后换成json或者其他的
- 扫脸登陆应该采用用户名+人脸登陆才行,不然光用人脸登陆用户一多肯定就卡。
- 还有就是前面提到的bug,看到这里应该已经清楚了,如果实现了第二点就完美解决这个问题,如果不想实现的话就每次在购买之前查询一下设备有没有开机。
如何运行
网盘链接放在下面了
或者改一下源代码里面的路径也可以
这个例子里面的程序也是debug版本的,想直接运行要添加qt环境变量,相信大家都会这里我就不写了。
如果想要试一下人脸识别登陆的,要把自己的照片放在img文件夹里面,照片名字就是用户名名字,类型是jpg。在光线良好和人脸清晰的情况下识别率很高。
源代码
客户端:
服务端也差不多
因为这只是实训的一次小白的练手,所以就不会再改了v||
我最喜欢免费,所以就免费分享了。(主要是写的太烂了)
链接挂了请联系我。
项目链接:https://pan.baidu.com/s/1_bcdoQxzDhAVMVYW1waeOw
提取码:iq7u