点餐系统的设计(一)

简介:

编写一个点餐服务器,能够支持顾客在浏览器上查阅菜单信息,并且可以下单点餐。
该设计分为三者模块进行设计:

  • 数据管理模块:菜单数据、订单数据…
  • 业务逻辑模块:接收浏览器的请求,进行处理。
  • 界面视图模块:界面显示。
功能描述:

顾客:查看菜品,点击下单。
老板:上传菜品,修改菜品,查看订单,修改订单。

详细设计:
数据管理模块:

基于MySQL设计数据。
数据库的基本操作

  • 数据表的设计:
    • 菜品数据:菜品ID,菜品名称,菜品单价,上传时间。
    • 订单数据:订单ID,订单桌号,菜品信息,订单状态,订单时间。

创建数据库:create database if not exists db_order_sys;
创建菜单:

create table tb_dishes(id int primary key auto_increment ,
					   name varchar(32) comment("菜品名称"),
					   price int comment("单价,单位为分"),
					   uptime datetime comment("修改时间"));						

创建订单信息表:

create table tb_order(id int primary key auto_increment ,
					 table_id int comment("订单桌号"),
					 dishes varchar(32) comment("当前订单的菜品ID")
					 status tinyint comment("订单状态"));

在这里插入图片描述
我们使用数据管理模块进行管理,向外提供接口即可。
菜品数据管理主要接口:

  • 插入菜品信息。
  • 查看单个菜品信息。
  • 查看全部菜品信息。
  • 修改菜品信息。
  • 删除菜品信息。

订单数据管理主要接口:

  • 下单操作。
  • 查询单个订单。
  • 查询全部订单。
  • 修改订单。
  • 删除订单。
业务管理模块

实现浏览器与服务器之间的网络通信,服务器对客户端的请求进行业务处理。

管理员具体操作

  • 访问页面。
  • 上传、查看、修改、删除菜品信息。
  • 查看、修改、删除订单信息。
搭建http服务器

通过第三方库httplib实现http服务器的搭建,客户端与服务器之间进行通信。
使用Restful风格的通信接口。Restful是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。我们这里使用JSON格式进行定义。
在Restful中,GET用于请求资源,POST用于新增资源,PUT用于修改资源,DELETE用于删除资源。
接口设计:

  • 获取所有菜品信息:GET /dishes
GET /dishes HTTP/1.1\r\n  //Get表示获取信息,/dishes表示获取的是菜品信息,HTTP/1.1表示HTTP版本号 \r\n结尾标志
Content-length:0\r\n //表示获取的长度信息
  • 获取单个菜品信息:GET /dish?id = 1
GET /dish?id HTTP/1.1\r\n  // dish?id用于返回指定的id信息
Content-length:0\r\n
  • 更新菜品信息:PUT /dish
PUT /dish HTTP/1.1\r\n
Content-length:正文长度\r\n
{...正文内容}
  • 删除菜品信息:DELETE /dish?id
DELETE /dish?id=1 HTTP/1.1\r\n
Content-length:0\r\n
  • 增加订单信息:POST /order HTTP/1.1
  • 查看所有订单信息:GET /order HTTP/1.1
  • 查看指定订单信息:GET /order?id = 1 HTTP/1.1
  • 修改订单信息:PUT /order?id = 1 HTTP/1.1
  • 删除订单信息:DELETE /order?id = 1 HTTP/1.1

httplib搭建http服务器的简单原理:

  • 先搭建一个Tcp服务器,等待客户端连接请求。
  • 将新连接抛到线程池中,线程进行业务处理。
    线程的处理方式:
    • 接收客户端的请求数据,并解析数据。
    • 根据解析得到的请求方法与路径,进行业务处理。
    • 组织http响应数据,发送给客户端。

在这里插入图片描述

注意:在Restful中,GET用于请求资源,POST用于新增资源,PUT用于修改资源,DELETE用于删除资源。这些方法在服务端使用时是用来更新路由信息,在客户端中使用是用来对应方法。

JSON序列化与反序列化

中午肚子饿了,到餐厅点餐。向服务员点了几个菜,厨师根据用户的需求,开始烹饪食物,食物烹饪好后,怎么将食物呈现给用户呢?这时就需要用到盛放食物的碗了用户拿到盛放食物的碗,就可以获得点的餐了这个碗就充当了数据交换的容器了。
 在这里插入图片描述
 客户端与服务器建立请求,服务器如何将客户需要的信息返回给客户端呢?这时就有了两种数据传输的方式(XML和Json),但是.XML解析比较复杂,所以采用JSON比较合适。

  • Json序列化
    Json::StyledWriterJson::FastWriter
    FastWriter序列化的数据串的阅读性较差,主要是用于传输。
    StyledWriter序列化的数据串阅读性较高,主要用于阅读。
  • Json 反序列化
    Json::Reader
#include<stdio.h>
#include<iostream>
#include<string>
#include<jsoncpp/json/json.h>  //头文件

int main()
{
    std::string name = "小明";
    std::string sex = "男";
    int age = 26;

    Json::Value value;    //Json容器对象,直接通过key,value进行赋值
    value["姓名"] = name;
    value["性别"] = sex;
    value["年龄"] = age;

    Json::StyledWriter writer; //Json序列化对象
    std::string src = writer.write(value); //将value进行序列化
    printf("%s\n",src.c_str());

	Json::Value value2;
    Json::Reader reader;  //Json反序列化的对象,将Json数据串解析成为各个数据对象
    reader.parse(src,value2);
    std::cout<<"name"<<value2["姓名"]<<std::endl;
    std::cout<<"sex"<<value2["性别"]<<std::endl;
    std::cout<<"age"<<value2["年龄"]<<std::endl;

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值