ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

点餐系统项目

2021-07-14 23:01:01  阅读:263  来源: 互联网

标签:HTTP 1.1 项目 mysql 菜品 系统 int MYSQL 点餐


项目名称:点餐系统

代码链接:https://github.com/fangbaorui/Linux/tree/master/sys_order

1. 项目描述

  • 使用户可以通过访问浏览器与服务器进行交互,获取菜品信息并进行点餐,以及可以使管理员通过浏览访问服务器实现订单和菜品的管理。

2.市场调研

  • 给毕设准备的项目。

3.技术调研

  • 线程、socket、http、stl、MySQL、HTML、CSS、Vue.js、Ajax。

4.项目实现

  • 整体框架采用了不太严谨的MVC框架,将项目实现整体分为三个模块:数据管理、业务管理、前端页面。

4.1数据管理模块:

  • 基于MySQL数据库实现数据存储管理,并且封装数据库访问类,向外提供与业务分离的数据信息。

4.2业务处理模块:

  • 基于http协议使用httplib库搭建http服务器与前端交互进行菜品以及订单的数据业务处理功能。

4.3.前端界面模块:

  • 基于简单的HTML与CSS和Vue.js以及Ajax实现前端界面的静态页面展示和动态数据获取渲染功能。
    在这里插入图片描述

5.详细设计

5.1.数据管理模块

  • 数据的存储: MySQL数据库(MySQL–免费,Oracle–收费)
  • 数据库表的设计
  1. 菜品信息表:菜品ID,菜品名称,菜品单价,添加时间
  2. 订单信息表:订单ID,订单菜品,订单状态,修改时间
  • 数据管理模块代码的设计
  1. 菜品数据类:添加菜品,删除菜品,修改菜品,获取菜品(所有,单个)
  2. 订单数据类:添加订单,删除订单,修改订单(菜品,状态)
    获取订单(所有,指定id)
  • 业务控制模块:接收客户端请求,进行处理满足用户需求
  1. 搭建服务器: HTTP服务器(采用httplib库搭建)
  2. 通信接口设计:什么样的请求对应什么样的业务处理和响应
    1.静态页面请求: html页面(以及依赖的css/js文件)
    index.htmI–菜品信息的展示以及下单界面
    GET /index.html HTTP/1.1
    HTTP/1.1200 OK

    Content-Type: textml
    Content-Length:文件长度
    /index.html文件数据
    2.动态数据请求:菜品数据,订单数据
    通信接口采用restful风格接口设计:
    基于http协议,使用xml或者json格式定义正文序列化方式
    定义操作类型:新增- POST;删除- DELETE;修改- PUT;获取-GET
  • 新增菜品:
    POST /dish HTTP/1.1
    HTTP/1.1 200 OK .
    \r\n .
    HTTP/1.1 500
    {“name”:“红烧肉”, “price”: 2850} {result:false, reason:"}
  • 删除菜品:
    DELETE /dish/THTTP/1.1
    HTTP/1.1 200 OK .
    \r\n
  • 修改菜品:
    PUT /dish/0HTTP/1.1
    HTTP/1.1 200 OK
    \r\n
    {name: “蚂蚁上树”, price: 38}
  • 获取所有菜品:
    GET /dish HTTP/1.1
    HTTP/1.1 200 OK
    \r\n
    [{id:1, name:“红烧肉”,price:28},
    {id:2, name:“盐煎肉”, price:28}]
  • 获取单个菜品
    GET /dish{J
    HTTP/1.1
    HTTP/1.1200 OK
    \r\n
    {id:1, name:“红烧肉” ,price:28}

6.前端界面模块

html的编写渲染

实现: html+css+js

  • jsoncpp基本应用认识:
  1. Json:Value类: json 与外界进行数据中转的一个对象类
    重载了大量的操作符:赋值运算符
    包含了大量的类型转换函数: .
  2. Json::Reader类:实现反序列化,
    将json格式字符串转换为多个数据对象,存储在Json::Value对象中
    .parse(std::string &buf, Json::Value &val)
  3. Json::Writer类:实现序列化
    基类–子类: Json::FastWriter / Json::StyledWriter
    将Json:Value对象中的数据序列化成为json格式的字符串
    std::string write(Json::Value &val)

7.MySQL数据库的基本操作: SQL

7.1库的操作:

  • 创建数据库: create database if not exists dbname;

  • 查看数据库: show databases;

  • 选择所使用的数据库: use dbname;

  • 删除数据库: drop database dbname;

7.2表的操作:

  • 常用数据类型:
    int-整形,decimal(m, d)-浮点型,varchar(字符长度), datetime
  • 创建表:
    create table if not exists tbname(id int, name varchar(32),
    sex bit, score decimal(4, 2), birth datetime);
  • 查看所有表: show tables;
  • 查看指定表结构: desc tbname;
  • 删除指定表: drop table tbname;
  • 表中字段约束:
    primary key主键约束约束指定字段的值-非空且唯一
    unique key唯一约束约束指定字段必须唯一
    not null非空约束约束指定字段的值不能为NULL
    auto_ increment 自增属性(只能用于整形的主键字段)
    create table if not exists tbname(id int primary key auto_ increment,
    name varchar(32) not null unique, sex bit, score decimal(4, 2) , birth
    datetime);
  • 表中数据的操作:增删改查
    1.新增:
    insert tbname(id, name, sex) values(null, “张三”, 0);
    insert tbname values(null, “李四”, 1, 88.88, “2020-10-8 12:00:00”);
    2.删除:
    delete from tbname where id=2;
    3.修改:
    update tbname set score=66.78, birth=" 2020-8-621:00:00"
    where id=1;
    4.查询: .查询表中所有数据: select * from tbname;

MySQL操作:

  • 初始化操作:
    1.初始化操作句柄
    2.通过句柄连接MySQL服务器
    3.设置客户端字符集(utf8)
    4.选择使用的数据库
    5.执行语句:
    5.1增删改:执行语句–执行语句成功即可
    5.2查询:执行语句-
    5.3将查询结果获取到本地
    5.4获取结果中数据条数、列数
    5.5遍历结果集获取每一条数据的每一-列
    5.6释放本地结果集
    6.关闭句柄释放资源
    7.获取接口执行失败原因
  • 接口介绍:
    MYSQL *mysq| = NULL;
    MYSQL *mysql init(MYSQL mysq);
    MYSQL
    mysql real connect(MYSQL *mysq|, char *host, char *user,
    char *passwd, char *dbname, int port, char *sock, int flag)
    mysql:初始化完成的句柄;
    host: mysql服务器IP地址
    username:用户名;
    passwd:密码
    dbname:默认所选择使用的数据库名称
    port: mysql服务端口-0-默认3306;
    flag:客户端标志–通常置0
    返回值:成功返回句柄地址,失败返回NULL
    int mysql set character set(MYSQL *mysql, char *name);
    mysql:句柄; name: 字符集名称-utf8
    返回值:成功返回0;失败返回非0;
    int mysql select
    db(MYSQL *mysql, char *dbname)
    mysql:句柄;
    dbname:要切换的数据库名称
    返回值:成功返回0;失败返回非0;
    int mysql query(MYSQL *mysql, char *sql);
    mysql:句柄;
    sql:要执行的sql语句
    返回值:成功返回0;失败返回非0
    MYSQL
    RES *mysql store
    result(MYSQL *mysq|);
    mysql:句柄
    特殊说明: mysql
    query与mysql store_ result存在线程安全问题
    返回值:成功返回结果集的地址;失败返回NULL;
    int mysql_ num_ rows(MYSQL_ RES *res); --获取行数
    int mysql num_ fields(MYSQL_ RES *res); --获取列数
    MYSQL_ ROW mysql fetch_ row(MYSQL_ RES *res);
    MYSQL_ RES res中会记录当前获取的位置,逐条取出
    MYSQL_ ROW:就是一 个char **

8线程他

client:tcp服务器

当服务端收到一个客户端连接,则将新建连接抛入线程池,线程池中的线程负责与指定客户端进行通信(http通信)。

  1. 接收请求数据,按照http请求协议格式进行解析。
    实例化httplib:.Request对象,将解析的信息填入其中
    GET /hello HTTP/1.1
    class Request{
    Content-Length:0

    string method=GET; 1
    Connection: keep- alive
    string path=/hello; d

    version= HTTP/1.1
    body= “”
    <string, string> param
    <string, string> headers
  • 根据请求信息,在route路由表中查找针对这个请求有没有对应的处理函数
    1.如果没有则直接返回404–请求的资源不存在
    2.如果有,则使用对应函数指针执行这个处理函数(程序员自定义),传入请求信息。

  • 实例化一个httplib::Response对象, 传入函数在处理函数内部,用户实现针对请求的业务处理,在业务处理完毕之后填充Response对象。
    class Response{
    int status; 200
    string body;
    <string, string> headers

  • 线程中执行完处理函数之后,得到了一个填充完毕的Response对象根据其中的数据(响应状态码,正文数据,头部字段)组织http响应协议格式的数据,回复给客户端。

  • 等待还有没有请求需要处理(没有则关闭套接字)
    hello(req, rp…根据req业务处理; 2. 填充sp…}j
    Server
    1.接收请求,解析请求
    aet+ hi bell
    req{
    clien) 、
    srv.Get(/hi, hello)
    method=GET;
    srv.listen(0.0.0.0, 8Q)|
    path=/hi
    GET /hi HTTP/1\1

tcp服务器

  1. 据请求找处理函数,线程池
  2. 执行函数hello (req, rsp)
  3. 根据rsp组织响应
    注册路由成员函数Server.Get()/Post()/Put()/Delete()
    设置静态资源默认路径接口:设置了这个路径之后,当前端在请求静态资源的时候/index.html,就会自动的先到这个路径下查找有没有对应静态资源文件,如果有则自动读取文件数据进行回复
    Server.set_ base_ _dir(char *path)

9.渲染

  • httplib库主要是搭建http服务器或者客户端-实现http协议网络通信
    而使用库的目的就是把重心放到了业务处理上而不是服务器搭建上
    前端界面模块: html+css +js
  • html:完成页面的布局
  • CSS:样式语言–对标签容器进行样式修饰,让简单的html页面更加好看
  • js: javascript脚本语言,让页面动态渲染展示

标签:HTTP,1.1,项目,mysql,菜品,系统,int,MYSQL,点餐
来源: https://blog.csdn.net/qq_45975614/article/details/118674585

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有