项目:点餐系统1

项目简介:实现一个http点餐系统服务器,能够支持用户在浏览器访问服务器获取餐馆首页,进行菜品以及订单管理。

具体模型如下:

 用户分类:

        管理员:进行订单以及菜品管理(菜品&订单的增删改查)

        用户:选择菜品和下单功能

 一、产品开发流程

1.产品需求

2.市场调研

3.需求定版

4.技术调研

5.概要设计&框架设计

采用MVC框架:

M-model:数据管理模块-将数据与业务分类,这个模块专门进行数据的管理

C-controller:业务处理模块-接收用户请求,调用模型与视图完成用户的请求

V-view:前端界面模块-与用户交互的界面

6.详细设计每个模块具体实现

数据管理模块:

1.管理什么数据

菜品信息:菜品ID,菜品价格,菜品名称,描述信息,添加时间&最后一次修改时间

订单信息:订单ID,菜品ID,订单状态(已完成&未完成),订单创建时间,订单完成时间

2.如何管理

使用MySQL数据库进行数据管理(MySQL数据库是一个C/S模式)

实现自己的MySQL客户端,访问服务器对指定的数据进行指定的操作

业务处理模块:接收请求,完成请求

1.搭建网络通信服务器,接收客户端请求

搭建HTTP服务器,供用户通过浏览器能够访问服务器进行对应的请求操作

2.进行业务处理

订单业务:新增订单,删除订单(不能提供),修改订单(修改状态),获取订单信息

菜品业务:新增菜品,删除菜品,修改菜品,修改价格,获取菜品信息

前端界面模块:展示与交互

编写前端html页面,能够展示菜品&订单,并且进行用户交互(html+css+js)

技术特点:mvc框架,http服务器搭建,MySQL数据库,json序列化,restful风格接口设计

html+css+js+ajax

json序列化:数据的组织格式

restful风格接口设计:一种网络通信接口规范

 二、开发环境的搭建

1. 升级高版本的编译器
sudo yum install centos-release-scl-rh centos-release-scl
sudo yum install devtoolset-7-gcc devtoolset-7-gcc-c++
source /opt/rh/devtoolset-7/enable
echo "source /opt/rh/devtoolset-7/enable">>~/.bashrc
2. 安装jsoncpp库
sudo yum -y install epel-release
sudo yum install jsoncpp-devel
3.安装httplib库
git clone https://github.com/yhirose/cpp-httplib.git
4. 安装Mysql服务器&客户端&开发包
https://zhuanlan.zhihu.com/p/49046496

三、第三方库&工具使用介绍

1.json

是一种简单的数据交换格式,简单说就是一种数据组织格式,将多个数据对象组织成为指定格式的字符串。里面有各种数据类型:对象,数组,字符串,数字

对象:{};

数组:[];

字符串:""

数字:直接使用

{

        "姓名":”张三“,

        ”年龄”:18,

        “成绩”:[12,21,12,23]

}

value: pair<"姓名",  ”张三“>,type = stringValue

value: pair<"年龄",  18>,type = intValue

value: pair<"成绩",  vector<float>>,type = arryValue        append()

jsoncpp:三个类(了解)

*json::Value 

中间数据存储类,要对哪个数据进行序列化,就要把那些数据放到Value实例化对象中

在对json格式字符串反序列化的时候,会将解析后的各个数据对象放到一个Value实例化对象中

*json::Writer

这是一个基类,实际上是使用FastWriter   StyledWriter类

这个类是对json::Writer对象中的数据进行序列化,组成一个json格式的字符串

std::string writer(Json::Value &val);

*json::Reader

这个类是进行反序列化的,将json格式的字符串进行反序列化,将解析后的数据放到Value实例化对象中

bool parse (std::sting &str,Json::Value &val);

代码实现:

#include<iostream>
#include<string>
#include<jsoncpp/json/json.h>void Serialize() {const char* name = "张三";int age = 1;float score[] = { 11,11,11 };json::Value val;val["姓名"] = name;val["年龄"] = age;val["成绩"].append(score[0]);val["成绩"].append(score[1]);val["成绩"].append(score[2]);json::Value root;//这是定义一个新的Value对象root.append(val);//将val作为一个子对象,添加到Valuestd::string str = writer.writer(root);std::cout << str << std::endl;
}void UnSerialize() {std::string str - R"({"姓名":"李四","年龄":1,"成绩":[1,1,1]})";json::Reader reader;json::Value val;bool ret = reader.parse(str, val);if (ret == false) {std::cout << "error\n";return;}std::cout << val["姓名"].asString() << std::endl;std::cout << val["年龄"].asInt() << std::endl;if (val["成绩"].isArray()) {//严谨判断成绩是否是数组int sz = val["成绩"].size();for (int i = 0; i < sz; i++) {std::cout << val["成绩"][i].asFlaot() << std::endl;}}
}int main() {Serialize();UnSerialize();return 0;
}

2.httplib

#include"httplib.h"void Hello(const httplib::Request& req, httplib::Response& rsp) {rsp.body = "hello";rsp.status = 200;return;
}void Numbers(const httplib::Request& req, httplib::Response& rsp) {std::string num = req.matches[1];rsp.body = num;rsp.status = 200;
}void Dish(const httplib::Request& req, httplib::Response& rsp) {rsp.body = req.body;rsp.status = 200;
}
int main() {httplib::Server srv;//当客户端请求的是一个静态的实体文件资源的时候,就会直接读取文件数据进行响应srv.set_mount_point("/", "./wwwroot");//设置静态资源根目录/index.html->./wwwroot/index.htmlsrv.Get("/hi", Hello);srv.Get(R"(/numbers/(\d+)", Numbers);srv.Post("/dish", Dish);//搭建tcp服务器,开始监听,获取新连接,接收http请求数据,进行解析,调用对应处理函数,组织响应srv.listen("0.0.0.0", 10000);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/10398.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32MP157驱动开发——按键驱动(异步通知)

文章目录 “异步通知 ”机制&#xff1a;信号的宏定义&#xff1a;信号注册 APP执行过程驱动编程做的事应用编程做的事异步通知方式的按键驱动程序(stm32mp157)button_test.cgpio_key_drv.cMakefile修改设备树文件编译测试 “异步通知 ”机制&#xff1a; 信号的宏定义&#x…

protobuf安装教程

protobuf安装 一&#xff0c;Windows下安装下载protobuf配置环境变量检查是否安装成功 二&#xff0c;Linux下安装下载protobuf安装protobuf检查是否安装成功 一&#xff0c;Windows下安装 下载protobuf 下载地址 本次下载以v21.11为例&#xff0c;根据自己需求下载即可。 配…

2023年深圳杯数学建模 D题 基于机理的致伤工具推断

致伤工具的推断一直是法医工作中的热点和难点。由于作用位置、作用方式的不同&#xff0c;相同的致伤工具在人体组织上会形成不同的损伤形态&#xff0c;不同的致伤工具也可能形成相同的损伤形态。致伤工具品种繁多、形态各异&#xff0c;但大致可分为两类&#xff1a;锐器&…

【12】STM32·HAL库开发-STM32时钟系统 | F1/F4/F7时钟树 | 配置系统时钟

目录 1.认识时钟树&#xff08;掌握&#xff09;1.1什么是时钟&#xff1f;1.2认识时钟树&#xff08;F1&#xff09;1.2.1STM32F103时钟树简图1.2.2STM32CubeMX时钟树&#xff08;F103&#xff09; 1.3认识时钟树&#xff08;F4&#xff09;1.3.1F407时钟树1.3.2F429时钟树1.3…

FFmpeg AVFilter的原理(三)- filter是如何被驱动的

首先上官方filter的链接&#xff1a;https://ffmpeg.org/ffmpeg-filters.html 关于filter命令行&#xff1a;FFmpeg-4.0 的filter机制的架构与实现.之一 Filter原理 1、下面是一个avfilter的graph 上图是ffmpeg中doc/examples中filtering_video.c案例的示意图。 特别注意上面蓝…

HPC集群调度系统和计算系统

什么是计算云&#xff1f; 所谓的计算云指的是为计算业务优化的类云基础架构&#xff0c;它强调用云的方式解决计算问题&#xff0c;而不是将“计算”搬到现有的公有云或者容器云上。 目前公有云或者容器云&#xff08;例如k8s&#xff09;上的HPC解决方案本质上都是将现有的H…

Linux CentOS监控系统的运行情况工具 - top/htop/glances/sar/nmon

在CentOS系统中&#xff0c;您可以使用以下工具来监控系统的运行情况&#xff1a; 1. top&#xff1a; top 是一个命令行工具&#xff0c;用于实时监控系统的进程、CPU、内存和负载情况。您可以使用以下命令来启动 top&#xff1a; top 输出 2. htop&#xff1a; htop 是一…

【MySQL】数据库基础

今天我们来讲一讲使用MySQL必备的基础知识 目录 一、MySQL的登录选项 二、什么是数据库 三、一些主流数据库 四、 服务器&#xff0c;数据库&#xff0c;表关系 五、mysql的架构 5.1 存储引擎 5.1.1 查看存储引擎 5.1.2 不同存储引擎的对比 六、SQL语言的分类 一、MyS…

IDEA live templates

surround 在SQL的xml里 可以修改变量 官方文档 CDATA not null <if test"$SELECTION$ ! null and $SELECTION$ ! "> and $VAR1$ #{$SELECTION$} </if>not null like mysql <if test"$SELECTION$ ! null and $SELECTION$ ! "> and…

spring-websocket在SpringBoot(包含SpringSecurity)项目中的导入

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f96d;本文内容&#xff1a;spring-websocket在SpringBoot(包含SpringSecurity…

MySQL的变量、流程控制与游标

目录 1.变量的分类 1.系统变量的分类 1.1.二者关系 2.查看系统变量 3.修改系统变量的值 4.用户变量 4.1会话用户变量 1.变量声明与赋值 2.变量使用 4.2.局部变量 1.使用declare 声明 2.局部变量声明格式 3.局部变量赋值 4.变量使用 5.定义条件与处…

微信小程序客服系统-对接消息推送-对接模板订阅消息-嵌入webview客服链接

想要给自己的小程序增加客服系统功能 小程序客服对接导自己的系统等需求&#xff0c;可以参照我开发的客服系统&#xff0c;实现私有化部署搭建对接的微信小程序 小程序消息推送对接 首先登录小程序后台在小程序后台>开发管理>开发设置>服务器域名部分&#xff0c;配置…

Sentinel限流中间件

目录 介绍 Sentinel 的特征 Sentinel 的组成 实战使用 简单实例 配置本地控制台 使用可视化ui配置简单流控 配置异步任务限流 使用注解定义限流资源 SpringCloud整合Sentinel 简单整合 并发线程流控 关联模式 整合openFeign使用 介绍 随着微服务的流行&#xff0…

Ansible自动化运维工具

Ansible自动化运维工具 一、ansible介绍二、ansible环境安装部署三、ansible命令行模块1、command模块2、shell模块3、cron模块4、user模块5、group模块6、copy模块7、file模块8、hostname模块9、ping模块10、yum模块11、service/systemd模块12、script模块13、mount模块14、ar…

list源码分析,基于c++ 和vs2019,cpp20标准

list源码分析,基于c 和vs2019&#xff0c;cpp20标准。结构确实如图&#xff0c;双向环形链表。

python读取json文件

import json# 文件路径(同目录文件名即可,不同目录需要绝对路径) path 1.json# 读取JSON文件 with open(path, r, encodingutf-8) as file:data json.load(file)#data为字典 print(data) print(type(data))

网络安全工程师证书有什么用?什么是网络安全工程师?你想知道的都在这里

随着互联网的发展和大数据时代的到来&#xff0c;网络已经日渐深入到我们生活、工作中的方方面面&#xff0c;社会信息化和信息网络化&#xff0c;突破了应用信息在时间和空间上的障碍&#xff0c;使信息的价值不断提高。但是&#xff0c;与此同时&#xff0c;网页篡改、计算机…

【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程

【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程 文章目录 【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程前言确定版本对应关系源码编译安装tiny-cuda-nn总结 前言 本人windows11下使用【Instant Neural Surface Reconstruction】算法时需要…

小城市当程序员好不好?

在职业发展中&#xff0c;小城市和大城市都有各自的机会和挑战。在大城市&#xff0c;C#的应用比例可能相对较低&#xff0c;学习C可能有一定的难度&#xff0c;而学习Java最好有人指导。在小城市&#xff0c;机会相对较少&#xff0c;跳槽的选择也有限。然而&#xff0c;小城市…

Ansible 自动化运维工具

目录 一、概述 1.ansible 简介 2.ansible 特性 3.ansible 架构 二、ansible 环境安装部署 1.管理端安装 ansible&#xff08;192.168.88.10&#xff09; 2. ansible 工作目录 3. 配置主机清单 4.配置密钥对验证 三、ansible 命令行模块 1.command 模块 2.shell 模块…