> # ♻️ 资源
> **大小:** 65.3MB
> **文档链接:**[**https://www.yuque.com/sxbn/ks/100010535**](https://www.yuque.com/sxbn/ks/100010535)
> **➡️ 资源下载:**[**https://download.csdn.net/download/s1t16/87400361**](https://download.csdn.net/download/s1t16/87400361)
> **注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!**
> ![qrcode_for_gh_d52056803b9a_344.jpg](https://cdn.nlark.com/yuque/0/2023/jpeg/2469055/1692147256036-49ec7e0c-5434-4963-b805-47e7295c9cbc.jpeg#averageHue=%23a3a3a3&clientId=u8fb96484-770e-4&from=paste&height=140&id=u237e511a&originHeight=344&originWidth=344&originalType=binary&ratio=1.25&rotation=0&showTitle=false&size=8270&status=done&style=none&taskId=ud96bf5f7-fe85-4848-b9c2-82251181297&title=&width=140.1999969482422)
# C/S 架构的外卖平台
### 引言
本次作业中,我在 Qt 框架下实现了一个 C/S 架构的外卖平台软件,客户端使用到 Qt::Widgets 和 Qt::Network 模块,服务器使用到 Qt::Sql 和 Qt::Network 模块。系统的应用情景是:一个服务器实例服务多个客户端实例,客户端使用了 GUI 界面,支持用户注册、登录;商家管理产品、处理订单;不同优惠级别的订餐者查看产品、支付订单;以及系统管理员查看销售额日志。
### 功能介绍
1. 用户注册、登录
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717882957-a01ccde1-90de-49cd-83e1-8cb43a860270.png#averageHue=%23efeeee&id=qyXQQ&originHeight=581&originWidth=956&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
2. 商家添加产品
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717883143-63405848-85f7-49c6-a977-a8aeac9634ba.png#averageHue=%23e8e4e1&id=faBAB&originHeight=583&originWidth=956&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
3. 商家查看和修改产品
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717883301-43de2a9e-bd27-4e6d-9467-e16a1365b665.png#averageHue=%23e7e5e2&id=rOhqf&originHeight=579&originWidth=955&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
4. 商家查看和处理订单
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717883445-7a920ffa-cca7-4be0-b145-7fa2c76f76ba.png#averageHue=%23e5e2df&id=FwJLk&originHeight=581&originWidth=957&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
5. 订餐者查看和添加购物车
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717883629-6ba55ead-af31-42aa-aa8a-5b32d292a3a8.png#averageHue=%23e4ddda&id=qTmTE&originHeight=583&originWidth=958&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717883841-8d536acb-0a8f-4029-95fa-bd2dd7429823.png#averageHue=%23e4dedb&id=bjVkn&originHeight=580&originWidth=959&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
6. 订餐者查看和结算订单
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717883995-2847601c-54ba-4470-8ddd-21d3c76562b8.png#averageHue=%23e5ded7&id=NZkzt&originHeight=583&originWidth=957&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717884204-83f4e728-bfea-45f0-9029-d8a25f1427ef.png#averageHue=%23e5e0dd&id=miF0G&originHeight=581&originWidth=956&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
7. 订餐者优惠等级的变化
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717884369-ecd794e4-061a-40ae-85fe-562f0e6e1c70.png#averageHue=%23e1dbd7&id=SKqc3&originHeight=582&originWidth=960&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
8. 管理员查询销售日志
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717884516-9de7ceae-1cec-4011-ae73-d8b99d6bcb63.png#averageHue=%23f6f5f5&id=BMEx8&originHeight=613&originWidth=1116&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
### 系统分析与设计
- 概述和类图
1. 客户端的行为控制集成在 MainWidget 类中,分为网络通信和 GUI 窗体展示两个部分;
2. 和服务器基本的交互模式是:在按钮控件点击行为的回调里,向服务器发送对应的任务 id 和当前界面表达的信息,收到服务器合法的回复后,刷新当前界面,跳转到对应的数据展示界面;
3. GUI 方面,使用建造者模式为不同用户构建不同的功能菜单,客户端的数据视图分为用户信息视图 UserForm(用户登录和注册)、产品信息视图 ProductForm 和订单信息视图 OrderForm,所有信息视图维护一个具体类的全部信息,得到提交请求的时候,收集对应的信息进行序列化并发送;
4. 考虑产品和订单具有相似的展示需求,即展示所有和编辑单个,产品信息和订单信息以子窗口行的形式罗列在带滚动条控件 QScrollArea 的 ViewWidget 类中,通过直接在列表里选中、修改对应的子窗口行来进行单项编辑。特别地,对于产品列表,通过弹出新的产品信息子窗口进行添加;对于订单列表,添加行为发生在产品列表中,订单列表(即用户的购物车、商家的订单)只维护修改状态和提交修改请求的行为。
5. 服务器单例 FoodServer 通过持有的 QTcpServer 变量处理连接请求,为每一个客户端的接入创建一个 QTcpSocket;
6. 对于 QTcpSocket 每一次接到的流数据,构造一个 ServerNetService 进行处理;
7. ServerNetService 读取流数据开头的任务 id 区分客户端请求,通过 DbHandlerFactory 获得 User、Product、Order 对应的 DbHandler 执行数据库的增删查改;
8. DbHandler 的抽象基类封装了 QSqlQuery 提供的基于执行 SQLite 语句的数据库操作和对应调试结果打印操作;通过具体 DbHandler 中的众多 static 方法执行数据库返回值的解析任务,将解析结果标记上通信协议指定的任务 id,通过 QTcpSocket 返回给客户端。
**客户端类图**
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717884628-24ce22e4-b87c-4437-8188-91565d2b610b.png#averageHue=%23f9f9ef&id=H7IQU&originHeight=2135&originWidth=1865&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
**服务器类图**
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717884765-00933bab-3374-43ef-a81b-91609fd31ffc.png#averageHue=%23f9f8ed&id=fdqyd&originHeight=1820&originWidth=1844&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
### 实现方案
#### 四个典型的设计模式
- 服务器
1. 单例模式
```cpp
// 实现
class FoodServer : public QObject {
Q_OBJECT
public:
~FoodServer();
static FoodServer &getInstance();
FoodServer(const FoodServer &) = delete;
FoodServer &operator=(const FoodServer &) = delete;
private:
FoodServer();
QTcpServer *server;
};
// 使用
auto &server = FoodServer::getInstance();
```
- FoodServer 的监听行为在构造函数里初始化,通过 QCoreApplication::exec() 的循环机制,在下面的代码中插入实例化语句,即可做到维护一个全局的 FoodServer 实例。
```cpp
QCoreApplication a(argc, argv);
// insert getInstance here
return a.exec();
```
2. 简单工厂模式
- 简单工厂模式应用在 DataBaseHandler 上,具体 DataBaseHandler 的处理数据的静态方法通过简单工厂方法,获得对应具体 DataBaseHandler 的数据库操作行为。类图如下:
![](https://cdn.nlark.com/yuque/0/2024/png/2469055/1712717884931-e81ee144-5566-4ec3-9f7e-9a25286b4eff.png#averageHue=%23f3f2df&id=D2yfM&originHeight=702&originWidth=1087&originalType=binary&ratio=1&rotation=0&showTit
没有合适的资源?快使用搜索试试~ 我知道了~
基于Qt5(C++)外卖交易平台【100010535】
共84个文件
h:18个
png:17个
cpp:17个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 5 下载量 16 浏览量
2023-01-28
10:44:23
上传
评论 3
收藏 65.36MB ZIP 举报
温馨提示
详情介绍:https://www.yuque.com/sxbn/ks/100010535 本次作业中,我在 Qt 框架下实现了一个 C/S 架构的外卖平台软件,客户端使用到 Qt::Widgets 和 Qt::Network 模块,服务器使用到 Qt::Sql 和 Qt::Network 模块。系统的应用情景是:一个服务器实例服务多个客户端实例,客户端使用了 GUI 界面,支持用户注册、登录;商家管理产品、处理订单;不同优惠级别的订餐者查看产品、支付订单;以及系统管理员查看销售额日志。
资源推荐
资源详情
资源评论
收起资源包目录
100010535-基于Qt5(C++)外卖交易平台.zip (84个子文件)
takeawayplatform_designpattern
FoodClient
default_people.png 17KB
todoform.h 1KB
CMakeLists.txt 837B
food.ico 1.03MB
productform.ui 14KB
user.cpp 321B
todoform.ui 5KB
mainwidget.cpp 20KB
viewwidget.h 599B
orderform.h 809B
productform.h 778B
userform.h 435B
user.h 1KB
image.qrc 135B
userform.cpp 2KB
FoodClient.pro 1011B
mainwidget.h 3KB
productform.cpp 3KB
main.cpp 224B
config.h 749B
viewwidget.ui 6KB
orderform.cpp 3KB
product.h 1KB
order.cpp 759B
userform.ui 12KB
orderform.ui 15KB
product.cpp 438B
order.h 2KB
viewwidget.cpp 1KB
todoform.cpp 2KB
default_food.jpg 15KB
Food.pro 75B
LICENSE 1KB
uml
strategy.puml 912B
server.png 208KB
builder.png 31KB
db.png 58KB
client.png 297KB
client.puml 7KB
db.puml 2KB
builder.puml 1KB
strategy.png 26KB
server.puml 6KB
img
uo1.png 283KB
vip.png 279KB
so2.png 271KB
login.png 41KB
todo.png 15KB
admin.png 17KB
up.png 271KB
testcase
蛋炒饭.jpg 29KB
烧烤.jpg 47KB
米饭.jpg 63KB
龙虾.jpg 38KB
水饺.jpg 49KB
面条.jpg 34KB
up2.png 240KB
so3.png 133KB
uap.png 268KB
sp1.png 167KB
report
how-to-run.txt 556B
report.pdf 2.59MB
FoodServer.exe 18.11MB
FoodClient.exe 18.08MB
food.db 116KB
demo.mp4 47.29MB
FoodServer
db.h 6KB
foodserver.cpp 1KB
CMakeLists.txt 750B
discount.h 477B
db.cpp 7KB
user.cpp 321B
user.h 1KB
foodserver.h 394B
main.cpp 194B
config.h 659B
product.h 1KB
order.cpp 759B
net.cpp 10KB
product.cpp 438B
FoodServer.pro 771B
net.h 3KB
order.h 2KB
README.md 16KB
共 84 条
- 1
资源评论
- qq_533110032024-06-02超级好的资源,很值得参考学习,对我启发很大,支持!
- qq_523726342024-03-06资源有一定的参考价值,与资源描述一致,很实用,能够借鉴的部分挺多的,值得下载。
- mujinsen2023-03-02超级好的资源,很值得参考学习,对我启发很大,支持!
- m0_690693552023-06-20资源使用价值高,内容详实,给了我很多新想法,感谢大佬分享~
- liu9707012023-08-23内容与描述一致,超赞的资源,值得借鉴的内容很多,支持!
神仙别闹
- 粉丝: 3678
- 资源: 7461
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功