项目:点餐系统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作为一个子对象,添加到Value

	std::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.html

	srv.Get("/hi", Hello);
	srv.Get(R"(/numbers/(\d+)", Numbers);
	srv.Post("/dish", Dish);

	//搭建tcp服务器,开始监听,获取新连接,接收http请求数据,进行解析,调用对应处理函数,组织响应
	srv.listen("0.0.0.0", 10000);
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C#】using

文章目录 global 修饰符using 别名结合“global 修饰符”和“using 别名”static 修饰符来源 global 修饰符 向 using 指令添加 global 修饰符意味着 using 将应用于编译中的所有文件&#xff08;通常是一个项目&#xff09;。 global using 指令被添加到 C# 10 中。 其语法为…

LiveGBS流媒体平台GB/T28181功能-视频直播流媒体平台分屏展示设备树分组树记录上次分屏播放记录

LiveGBS视频直播流媒体平台分屏展示设备树分组树记录上次分屏播放记录 1、分屏展示1.1、单屏1.2、四分屏1.3、九分屏1.4、十六分屏 2、分屏记录3、搭建GB28181视频直播平台 1、分屏展示 LiveGBS分屏页面支持&#xff0c;多画面播放&#xff0c;支持单屏、四分屏、九分屏、十六…

Java-API简析_java.net.Proxy类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131881661 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

xcode15启动IOS远程调试

1.用数据线连接IPhone到macOS 2.打开xcode15,然后点击Window->Devices and Simulators 3.选中左边的Devices可看到已连接的IPhone,然后点击Connect via network使其选中. 选择后,左边的IPhone设备的右边出现一个地球图标,表示成功通过网络连接到IPhone 现在可断开数据线的…

GoogleLeNet Inception V1

文章目录 Inception V1Inception Modulenative versionInception module with dimensionality reduction1 * 1网络的降维说明 多个Softmax的输出整体结构 GoogleLeNet主要是把深度扩充到了22层&#xff0c;能增加网络深度而不用担心训练精度和梯度消失问题。 总共是提出了4个版…

Cilium系列-4-Cilium本地路由

系列文章 Cilium 系列文章 前言 在前文中我们提到, cilium install 默认安装后, Cilium 功能启用和禁用情况如下: datapath mode: tunnel: 因为兼容性原因&#xff0c;Cilium 会默认启用 tunnel&#xff08;基于 vxlan) 的 datapatch 模式&#xff0c;也就是 overlay 网络结…

Python数据分析实战-datafram按某(些)列按值进行排序(附源码和实现效果)

实现功能 Python对datafram按某&#xff08;些&#xff09;列进行排序&#xff08;附源码和实现效果&#xff09; 实现代码 import pandas as pd# 读取数据 datapd.read_csv(E:\数据杂坛\\UCI Heart Disease Dataset.csv) dfpd.DataFrame(data) print(df.head())# # 按某列的…

【干货分享】如何恢复SOLIDWORKS 零件、装配体和工程图模板?

当我们卸载了SOLIDWORKS或者是购买了一台新笔记本电脑或是丢失了一直在使用的模板时&#xff0c;我们可以通过打开过去的零件、装配体和工程图文件来恢复 SOLIDWORKS 模板。 ▷ 零件模板 打开包含所需自定义属性的上一个部件。 保存零件的副本以避免对原始文件进行意外更改。…

React:从 npx开始

使用 npm 来创建第一个 recat 文件&#xff08; react-demo 是文件名&#xff0c;可以自定义&#xff09; npx create-react-app react-demo npx是 npm v5.2 版本新添加的命令&#xff0c;用来简化 npm 中工具包的使用 原始&#xff1a; 全局安装npm i -g create-react-app 2 …

​《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(16)-Charles其他骚操作之大结局​

1.简介 今天就说一些Charles的其他操作、以及抓包跨域的问题和常见的问题如何解决。到此Charles这一系列的文章也要和大家说再见了&#xff0c;其他什么小程序、Android7.0等等的问题可以查看宏哥的Fiddler系列文章&#xff0c;只不过是将Fiddler换成Charles而已。 2.模拟403…

Qt - macOS 安装配置

文章目录 一、关于 QT1.2 Qt的发展史1.3支持的平台1.4 Qt版本1.5 Qt 的优点1.6 成功案例 二、软件安装1、保证已 Xcode 和 Command Line Tools2、下载 QT3、下载 [qtcreator](http://download.qt.io/official_releases/qtcreator/)查看qt版本 三、创建工程Qt 常见用法 四、基础…

83%的企业曾遭受固件攻击,仅29%分配了固件防护预算

近日&#xff0c;微软发布了名为[《Security Signals》的研究报告](https://www.microsoft.com/secured- corepc/assets/downloads/SecuritySignals_ThoughtPaper.pdf)。报告显示&#xff0c; 过去两年中&#xff0c;83&#xff05;的组织至少遭受了一次固件攻击&#xff0c;而…

第五讲:MySQL中DDL表的修改与删除

1、alter&#xff1a;改变 2、table&#xff1a;表 3、truncate&#xff1a;截断&#xff0c;删节 学习渠道&#xff1a;黑马程序员

excel中的vlookup如何实现根据多个条件查找?

目录 简述问题公式思路通用公式三条件查找公式实例 简述 Excel 中根据一个条件查找非常方便&#xff0c;Excel 提供了内置函数 VLOOKUP。但是实际中往往有多种情形&#xff0c;需要根据多个条件进行查找操作&#xff0c;目前没有现成的内置函数。 本篇介绍 VLOOKPCHOOSE 组合…

利用RLHF优化大模型:提升性能与应用能力

在数据科学不断发展的过程中&#xff0c;大模型在自然语言处理、图像识别、金融预测等各个领域的应用越来越广泛。然而&#xff0c;大模型的训练和优化也面临着越来越多的挑战&#xff0c;例如数据量过大、计算资源不足、超参数调整困难等。传统的机器学习算法往往难以处理这些…

基于whisper和whisperx的语音视频和字幕对齐

环境的安装 创建py310虚拟环境,需要安装Anaconda的Python环境。 Python初学者在不同系统上安装Python的保姆级指引 Win10+Python3.9+GPU版pytorch环境搭建最简流程 Python虚拟环境的安装和使用 还需要提前安装FFmpeg用于音频操作,并添加到环境变量中。 创建一个名称为w…

Kotlin~Proxy代理模式

概念 又称委托模式&#xff0c;充当中介代理的类。 特点&#xff1a;让一个对象控制另一个对象的访问&#xff0c;让代理充当其他事物的接口。 角色介绍 抽象目标类具体目标类代理类 UML 代码实现 按实现分为静态和动态代理 interface PhoneSell {fun sell() }class Main…

4K/8K AI巡检详解:风电巡检领域主动出击的监控厂商

最近&#xff0c;“北方高温”、“厄尔尼诺大烤”等词条频上热搜的背后&#xff0c;为应对气候变化挑战&#xff0c;全球正迎来一场波澜壮阔的绿色低碳转型浪潮。 而在“碳达峰、碳中和”政策背景下&#xff0c;风电行业肩负着重要的责任与使命。根据《中国可再生能源发展报告…

【JavaEE】基于Servlet与MySQL实现一个简易网站

目录 前言 一、实现表白墙的前期准备工作 1、约定前后端交互的接口 1.1、接口一&#xff1a;页面获取当前所有的留言消息 1.2、接口二&#xff1a;提交新消息给服务器 二、前端和后端代码的实现 1、数据的永久化保存 2、小结 前言 之前小编在写前端页面的时候&#x…

SkyWalking链路追踪中span全解

基本概念 在SkyWalking链路追踪中&#xff0c;Span&#xff08;跨度&#xff09;是Trace&#xff08;追踪&#xff09;的组成部分之一。Span代表一次调用或操作的单个组件&#xff0c;可以是一个方法调用、一个HTTP请求或者其他类型的操作。 每个Span都包含了一些关键的信息&am…