项目:简易面试预约系统


项目场景

面试预约系统
1.目的:方便学校或者公司来和用户预约一个面试时间
2.使用技术:http协议,MySQL数据库,C++11,json数据格式
3.需要安装环境

3.1  jsoncpp  

安装jsoncpp-devel方法:
yum -y install epel-release
yum install jsoncpp-devel

3.2  mysql客户端开发环境

安装 mariadb 服务
yum install -y mariadb-server 安装 mariadb 命令行客户端
yum install -y mariadb 安装 mariadb C library
yum install -y mariadb-libs 安装 mariadb开发包
yum install -y mariadb-devel

更改配置
更改 /etc/my.cnf.d/client.cnf 文件
[client] 下加一行配置 default-character-set=utf8
更改 /etc/my.cnf.d/mysql-clients.cnf 文件
[mysql] 下加一行配置 default-character-set=utf8
更改 /etc/my.cnf.d/server.cnf配置
[mysqld] 下加配置
collation-server = utf8_general_ci
init-connect=‘SET NAMES utf8’
character-set-server = utf8
sql-mode = TRADITIONAL


项目需求

  • 能够支持用户注册
  • 能够支持用户登录
  • 能够支持用户预约时间

项目整体框架

在这里插入图片描述


项目基础实现

http模块

在这里插入图片描述

理解http服务器

采用http协议实现的服务器,http协议是一个应用层协议,在传输层使用的是tcp协议.就是一个tcp服务器,只是在应用层,完成http协议格式的请求与响应的解析以及针对请求提供服务
如何搭建http服务器:

  • 搭建tcp服务器

  • 等待客户端请求,解析请求,得到http协议格式中的各个要素(请求方法,url(path资源路径以及查询字符串),头部字段,正文)

  • 根据客户端的请求,完成业务处理后,组织http响应数据,进行响应

httplib库

httplib库的下载

我们需要去Github,下载所需的httplib库代码,如下图所示,点击code,复制,在linux终端输入命令:

git clone https://github.com/yhirose/cpp-httplib.git

在这里插入图片描述
我们借助httplib库,能够更高效更健壮的编写我们的代码.

httplib基本使用

1.实例化server对象
2.对server注册请求–业务处理路由关系(告诉服务器哪个请求对应使用哪个函数进行业务处理)
3.开始监听处理
注意:在使用httplib时,需要使用高版本gcc进行编译,否则会运行崩溃
升级高版本gcc的方法(httplib需要高版本):

	# 先获取 root 权限
	yum install centos-release-scl-rh centos-release-scl
	yum check-update
	yum install devtoolset-7-gcc  devtoolset-7-gcc-c++
	source /opt/rh/devtoolset-7/enable 
	(这个可以放到 ~/.bashrc 里,否则每次登陆和打开新终端都需要运行命令重新加载配置)

在这里插入图片描述

httplib处理流程

  1. 先提前编写不同请求对应的处理函数 void(*hander)(Request &req,Response &rsp)
  2. 实例化Server对象(对象中包含两个关键信息:请求与处理函数映射表,线程池)
  3. 程序员自己根据不同的请求以及业务处理,在Server对象中建立映射关系 Server.Get()/.Post()/.Put()/.Delete()
  4. 搭建tcp服务器开始监听
  5. 有新连接到来,则将新连接抛入到线程池进行处理
  6. 线程池中处理流程
    1.接收http请求头部,进行解析,并且根据头部中的content-length接收正文,将解析得到的各个元素填充Request对象
    2.根据请求方法+资源路径,在映射表中查找对应请求的处理函数,找到之后执行函数,传入请求信息
    3,对我们自己编写的函数根据request中的请求信息,进行业务处理,处理完成后填充Response对象
    4.处理函数执行完成后,线程根据Response对象中的数据组织http响应,发送给客户端
    5.如果是短连接则关闭套接字,处理完毕;如果是长连接,则等待下一条请求

数据库表设计

1.用户表:用户ID,用户名字,用户密码,用户邮箱----->注册+登录
2.用户信息表:个人信息+笔试信息+面试信息(面试时间,面试分数,面试建议)

目录结构设计

bin:可执行程序+配置文件
src:

ais_system.cpp 主类
database.hpp 数据库对应头文件
tools.hpp 工具类
log.hpp 日志文件
session.hpp 会话

test:测试文件

项目模块实现

注册模块

当用户第一次使用这个系统,需要注册成为系统的用户;
注册的时候需要姓名,密码,邮箱,学校,专业,年级,电话等信息。

注册请求, 用户名字,密码, 邮箱
1.插入数据库当中

  	1.1 针对注册的信息, 先插入注册信息表
    1.2 组织插入语句

开启事务------>创建保存点----->回滚(失败)---->提交事务
2.给浏览器响应一个应答, 需要是json格式

登录模块

登录模块,需要向后台提交邮箱跟密码,我们后台拿到用户提交的信息,去数据库模块里校验,查看reg_userinfo数据库是否有这个邮箱,有的话再去校验密码是否正确;错误返回false给浏览器,如果是true则进入会话模块。

1.解析提交内容
2.校验用户的邮箱密码
3.登录成功后,返回sessionid,标识当前用户

  	3.1 获取指定用户的信息
  	3.2 生成sessionid

会话模块

当这个用户存在并且登陆的时候,我们为了标识这个用户,会分配给它一个session_id,用其编号+姓名+预约时间,拼接成一个长的string,然后MD5加密这个长字符串作为我们的session_id;
同时可能有好几个用户访问这个系统,所以我们要有一个session_id的数组,这个session_id同时还是map的key,它的value是用户的其他信息,以string的形式存在一个Session的类中。

1.要根据请求头部当中的sessinid, 从all_session_,查询到对应的用户信息
2.在去查询数据库,获取用户的信息
3.组织应答

业务模块

用户登陆上来后,可以预约面试时间,点击预约,会跳转到预约面试页面,然后输入自己的笔试成绩,选择一个时间进行预约面试,最后点击提交完成

1.从header获取sessionid
2.获取正文当中那个提交的信息, 进行切割,获取到value
3.组织更新的sql语句
4.调用执行sql语句的函数
5.组织应答

代码

GiuHub: https://github.com/Hedenghui/Myproject

おすすめ

転載: blog.csdn.net/Hedenghui777/article/details/113864233