目录
前端界面模块:编写能够与用户进行交互的网页页面(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数据库,线程池;