树莓派3B Qt点菜系统(13)

内容

在qt平台利用tcp协议通信,实现一个后厨服务器与每桌客户端的通讯,为了调试方便,直接将1个后厨服务器与5个餐桌客户端写在一个工程里面,但是每个界面都是独立运行。
项目全部代码在此:code_server_clientx5.zip 提取码:0ooc
或者愿意用c币支持的朋友在这里:code_server_clientx5.zip
(两个资源都是一样的,百度云那个免费下载)

界面

后厨服务器端

开启状态(左)与运行状态(右),后端服务器刚打开时,点击开启服务器配置服务器端并开始接收客户端的信号。上面的状态可以看到每个客户端的情况,有没有在点菜,是不是用餐了需要结账;下面的表单是当前的订单信息,最上面的是最新的订单,包括当前已经点了多少个菜、是哪个桌点的什么菜、完成状态4个信息。
树莓派3B Qt点菜系统(13)树莓派3B Qt点菜系统(13)

餐桌客户端

未点菜状态下,点击开始点菜,向服务器发送消息,说明此客户端上线,让服务器准备好接收来自客户端的消息。
树莓派3B Qt点菜系统(13)
点餐状态:
点击开始点餐后,点餐按钮变成结账按钮。这时可以开始点菜,点击左边菜,会提示当前选的什么菜,需要顾客确定;点击确定后,次客户端向服务器发送当前点菜信息,包括餐桌号,菜名。
树莓派3B Qt点菜系统(13)

服务器与客户端

服务器端收到点菜信息后,会进行倒计时,为了方便调试以及观察运行结果,倒计时以1秒为单位,每个菜等待时间为5-10s。当有订单进行时,服务器会对当前的每个菜按顺序计时,直到当前所有订单已完成则停止计时。有订单时再次计时。每计时1s,就更新每个菜的等待时间,并将订单信息更新至列表显示;同时向服务器发出当前订单信息,包括餐桌号、菜品、等待时间。客户端收到信息后,判定餐桌号是不是与本桌一致,若是一致,则为顾客显示等待信息。如下图(因为屏幕排列不下,所以只使用了4个客户端,总共是做了5个,并且还可以扩充多个客户端),当前有3个菜在等待。左边服务器可以看到3个菜的信息,是哪桌点的什么菜,等待时间是多少。客户端以2号桌为例,点了个花鲢鱼头汤,剩余等待时间6s,并且与服务器端同步更新。
树莓派3B Qt点菜系统(13)

1、服务器

开启服务器

点击开启服务器按钮,新建一个server对象;获取套接字列表指针方便后面使用;连接server对象的信号和服务器的槽函数,当server对象发出updateserver()信号时,转至执行slotupdateserver()函数;显示当前状态为等待顾客点餐;将按钮更改为不可用。
树莓派3B Qt点菜系统(13)
信号接收:
收到信号后,对收到的字符串进行拆分,分为桌号和菜号,每个菜号对应一个菜名放在tcpserver.h里的dishname中
树莓派3B Qt点菜系统(13)
当收到的菜号不为0时,说明是点餐信息,予以处理;为0时,说明是客户端发来的第一次连接信息或结账信号,则将信息显示至状态框内。
树莓派3B Qt点菜系统(13)

倒计时处理

树莓派3B Qt点菜系统(13)

发送状态信息给客户端

发送信息以//分隔为一个一个的点菜信息,再以##分隔为桌号、菜号、剩余等待时间、完成状态4个信息,客户端收到信息后,以此规则拆分
树莓派3B Qt点菜系统(13)

2、客户端(以1号桌为例)

客户端配置

每个客户端除了tablenum以外都是一样的,几号桌就对应tablenum是几;tablenum也是作为区别信息是否为本客户端的条件。这里是1号桌,所以tablenum=1,;端口为8888,IP为127.0.0.1.
树莓派3B Qt点菜系统(13)

点击开始点菜

点击开始点菜,客户端与服务器连接
树莓派3B Qt点菜系统(13)
连接成功后
树莓派3B Qt点菜系统(13)

点菜

选择一个菜,点击确定,就开始发送点菜信息给服务器
比如点了番茄鱼按钮,将菜号更新至dishnum变量,然后显示点击信息
树莓派3B Qt点菜系统(13)
点击确定发送,发送的信息以##分隔,服务器拆分信息时按##进行拆分
树莓派3B Qt点菜系统(13)

接收服务器传来的状态信息

这里主要是对收到的信号进行拆分,首先用//拆分出每桌的信息,再在每桌的信息中用##拆分出桌号、菜名、等待时间和完成状态信息
树莓派3B Qt点菜系统(13)

3、数据库

将点餐结果写入数据库,结果如下
树莓派3B Qt点菜系统(13)

4、结果

树莓派3B Qt点菜系统(13)

5、代码

Pro里面记得加network和sql
树莓派3B Qt点菜系统(13)
项目全部代码在此:code_server_clientx5.zip 提取码:0ooc
若出现下面的问题,自行百度,设置下树莓派的时间
树莓派3B Qt点菜系统(13)

参考并感谢

QString用法详解(连接、替换、初始化与格式转换、拆分等等):https://blog.****.net/qq_40194498/article/details/79629632
Qt tcp服务器连接多个客户端的实现:https://blog.****.net/weixin_44779591/article/details/102975826
倒计时显示每个菜剩余时间这里是抠了室友的代码
树莓派3B Qt点菜系统(13)

课程作业,边学边用,如有错漏,敬请指正
--------------------------------------------------------------------------------------------诺有缸的高飞鸟202007