项目1 订餐系统

发布于:2022-12-27 ⋅ 阅读:(241) ⋅ 点赞:(0)

目录

一、项目流程:

二、所使用的技术特点:

三、第三方库&工具介绍:

数据管理模块设计:

业务处理模块:

前端界面模块:编写能够与用户进行交互的网页页面(HTML页面)

 项目总结:


一、项目流程:

1、产品需求

2、市场调研

3、需求定板(定下需求,不能随意更改)

4、概要设计& 框架设计(MVC框架)

5、详细设计(模块具体的实现细则)

       数据管理模块(Mysql数据库进行数据管理)& 业务处理模块(搭建http服务器)& 前端界面模块(HTML+CSS+JS)

二、所使用的技术特点:

        MVC框架,http,Mysql,json序列化(数据的组织形式),restful风格接口设计(网络通信接口规范),HTML+CSS+ajax

开发环境的搭建及所用技术的熟悉:

1、升级高版本的编译器 7.3.1版本(查看g++ -v)(升级sudo yum install centos-release-scl-rh centos-release-scl)(安装gcc :sudo yum install devtoolset-7-gcc devtoolset-7-gcc-c++)(加载配置文件:source /opt/rh/devtoolset-7/enable)

2、安装jsoncpp库(sudo yum -y install epel-release & sudo yum install jsoncpp-devel)

3、安装httplib库(git clone https://github.com/yhirose/cpp-httplib.git)(tar -cvzf cpp-httplib.tar.gz cpp-httplib/)(sz cpp-httplib.tar.gz)

4、安装Mysql服务器&客户端&开发包(linux下的:CentOS 7 通过 yum 安装 MariaDB - 知乎

三、第三方库&工具介绍:

    jsoncpp:三个类的了解

json::Value

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

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

httplib库:以非常简单的接口实现http服务器的搭建

    网络通信涉及到不同主机之间的通信,这种通信会被防火墙拦截

     虚拟机:浏览器访问ens33网卡的地址

          关闭防火墙:sudo systemctl stop firewalld

         停用防火墙:sudo systemctl disable firewalld

如何搭建服务器?

 基于httplib库搭建的http服务器,要专门看httplib实现流程;

线程池工作内容:

1、 逐行从套接字读取数据

2、对读取的数据以http请求格式进行解析,(请求方法,URL,查询字符串,头部字段,正文)

3、定义了两个对象 Request req ,Response rsp;

4、从前面Server对象的请求路由映射表中查找有没有对应请求的处理函数

GET /hi HTTP/1.1

如果没有,返回404;

有,调用这个函数

第三方库:MySQL:数据库---存储并管理的仓库,是一个c/s架构(便于扩展,远程访问,免费)

创建库:create database **;

查看库:show databases;

选择操作的库:use *;

查看当前使用操作的库:select database();

删除库:drop database **;

表的操作:一个库就类似于一个图书馆,一张表就是一个书架;表才是真正组织数据的,以行列模型组织的;

比如:学生信息表

sn       name         age

1        zhang          18

2         李               19

创建表:create table student(sn int,name varchar(32),age int,birthday datetime);//Mysql的数据类型

 查看库中所有表:show table;

查看表结构:desc student;

删除表:drop table student; 

表中数据的操作:

  增:insert student values(1,"张三",18,"2001-02-21 09:32:23");//一一对应,不能错位

  查:全字段查询:select * from student;

指定字段查询:select sn,name from student;

条件查询:select * from student where name="张三";

修改:update student set name="张六" where name="张三";

删除:

delete from student where name="张三";

如何实现自己的mysql客户端,完成数据库中数据的操作;(api)

1、初始化mysql:                 MYSQL *mysql_init(MYSQL *mysql);

2、连接Mysql服务器

3、设置客户端字符集  (通常使用utf8)

4.选择操作的数据库 

5、将sql发给服务器, 并执行sql语句

数据管理模块设计:

如何管理:Mysql数据库

菜品信息:对菜品修改

订单信息:对订单修改

数据库表的设计:create database db;

菜品信息表:create table tb_dish(id int primary key,name varchar(32),price int,info varchar(255),ctime datetime);//主键约束:约束指定这列数据不能为NULL,也不能数据重复,也会创建一个主键索引

alter table student add primary key (sn);auto_increment:自增属性;每次插入数据会自动加1;

订单信息表:create table tb_order(id int primary key auto_increment,dishes varchar(128),status int,ctime datetime,mtime datetime); //订单的菜品信息中,点的菜品是不定的,因此设计是存储多个菜品ID,组织为json格式的数组"[2,4]";订单状态:0-未完成 1-完成 2-撤销

数据管理模块代码的设计:封装实现自己的mysql客户端,完成对数据库中数据的操作;菜品增删改查,订单增删改查;针对每个表创建一个操作管理类,这个类实例化的对象负责指定表中数据的操作;

class TableDish{

private:

MYSQL *_mysql;

public:

bool Insert(const Json::Value &dish);//通过Json::Value对象向函数内传菜品信息

;;;

};

class TableOrder{

private:

MYSQL *_mysql;

public:

bool  SelectOne(const int order_id,Json::Value *order);//传入订单ID,输出参数返回具体订单信息

};

MYSQL *MysqlInit();//数据库初始化

void MysqlDestroy();//数据库句柄销毁接口

bool MysqlQuery(MYSQL *mysql,const std::string &sql);//sql语句执行操作

业务处理模块:

1、搭建HTTP服务器,实现与客户端浏览器的网络通信,接收客户端的请求,

      实现:基于HTTPLIB库搭建HTTP服务器

2、分析并确定请求类型,进行相应业务,返回结果;

业务请求中:

静态:

静态页面请求(餐馆首页html文件)

动态:

菜品信息:获取所有菜品信息,指定,新增,修改,删除

订单信息:获取所有订单信息,指定,新增,修改,删除

网络通信接口设计:定义受到什么数据,表示是什么请求

RESTful风格的接口设计:

基于HTTP协议;资源在HTTP正文中采用XML、JSON数据格式

GET:获取资源 POST:新增  PUT:更新,DELETE:删除

URI表示要操作的资源;

前端界面模块:编写能够与用户进行交互的网页页面(HTML页面)

因为前端知识的欠缺,无法完成独立的;(HTML+CSS+JS)找一个好看的网页模板,然后修改;

前端实现:

HTML:标签语言,一个标签类似于一个页面上的控件,或者说是一个盒子里装有指定的内容:比如一个按钮,一段超链接,一段文字。

CSS:层叠样式表,对HTML控件进行样式修饰,让HTML页面更好看

HTML+CSS做出的网页叫做静态页面,不会动态变化的固定的页面;

JS:Javascript--语言脚本,动态渲染,让页面动起来,vue.js:js是一门语言,vue.js就是一门语言库,提供接口。 思想:1、先链接vue.js库  2、在定义vue对象,3、通过选择器将标签与vue对象关联起来,使用vue对象中的数据渲染页面内容

常见操作:{{}};v-for,   v-show,    v-on:click,    v-modle,    v-bind    还有ajax:就是一个http客户端,可以独立向服务器发送请求,获取响应进行对应的处理;$.ajax

下面就是我设计后的前端页面:

 methods:
                        {
                            get_alldishes: function () {
                                $.ajax({   //http客户端
                                    url: "/dish",
                                    type: "get",
                                    context: this,//给ajax对象规定this值,为vue对象
                                    success: function (result) {
                                        this.dishes = result;
                                    }
                                });
                            }
                        }
                    });
                    app.get_alldishes();///获取数据
//从服务器获取数据信息 建立请求

 修改后:

mysql中显示: 

 

 项目总结:

开发环境:Linux

项目介绍:项目名称:点餐系统;

                 项目简介:实现餐厅管理系统服务器,支持用户通过浏览器进行菜品以及订单的操作(管理员-菜品&订单的增删改查;普通用户-下单)

项目实现:基于mvc框架将项目的实现分为三个模块

数据管理模块:基于Mysql数据库进行菜品以及订单的信息管理;

业务处理模块:搭建HTTP服务器接受客户端请求进行业务处理;

前端界面模块:基于网页模板+VUE.JS+AJAX实现前端交互页面;

项目特点:HTTP服务器搭建,RESTFUL风格接口设计,MYSQL数据库,线程池;


网站公告

今日签到

点亮在社区的每一天
去签到