当前位置: 首页 > news >正文

票务预约系统代码3

一.数据库部分

系统接入了数据库,用于存储注册用户的信息。其中创建了Project_DB数据库和user_info表。

二.ser.h代码

1.mysql_client

class mysql_client { public: mysql_client() { db_ips = "127.0.0.1"; db_username = "root"; db_dbname = "Project_DB"; db_passwd = "00000000"; } ~mysql_client() { mysql_close(&mysql_con); } bool mysql_ConnectServer(); bool mysql_Register(const string &tel, const string &passwd,const string &name); private: MYSQL mysql_con; string db_ips; string db_username; string db_dbname; string db_passwd; };

功能

用于连接 MySQL 数据库并执行用户注册操作。

成员变量

变量类型说明
mysql_conMYSQLMySQL 连接句柄
db_ipsstring数据库服务器 IP
db_usernamestring数据库用户名
db_dbnamestring数据库名称
db_passwdstring数据库密码

成员函数

函数功能
mysql_ConnectServer()连接 MySQL 数据库
mysql_Register()执行用户注册

2.socket_con

class socket_con { public: socket_con(int fd) : c(fd) { c_ev = NULL; } void Set_ev(struct event *ev) { c_ev = ev; } ~socket_con() { event_free(c_ev); close(c); } void Recv_data(); void Send_err(); void Send_ok(); void User_Register(); void User_Login(); private: int c; struct event *c_ev; Json::Value val; //mysql_client cli; };

功能

客户端连接处理类,负责与单个客户端的通信,处理数据收发和业务逻辑。

成员变量

变量类型说明
cint客户端套接字描述符
c_evstruct event*客户端事件对象
valJson::Value存储接收/发送的 JSON 数据

成员函数

函数功能
Recv_data()接收客户端数据并处理
Send_err()发送错误响应
Send_ok()发送成功响应
User_Register()处理用户注册请求
User_Login()处理用户登录请求

新增Json::Value成员变量,用于服务端接收存储客户端发送的json数据。

其余类没有变化,不过多赘述。

三.ser.cpp类

1.MySQL 数据库操作实现

mysql_client::mysql_ConnectServer()

bool mysql_client::mysql_ConnectServer() { MYSQL *mysql = mysql_init(&mysql_con); if (mysql == NULL) { return false; } mysql = mysql_real_connect(mysql, db_ips.c_str(), db_username.c_str(), db_passwd.c_str(), db_dbname.c_str(), 3306, NULL, 0); if (mysql == NULL) { cout << "connect db server err" << endl; return false; } return true; }

功能:连接 MySQL 数据库服务器

实现步骤

步骤函数说明
1mysql_init()初始化 MySQL 句柄
2mysql_real_connect()连接到数据库

参数说明

  • db_ips.c_str()- 数据库服务器 IP
  • db_username.c_str()- 用户名
  • db_passwd.c_str()- 密码
  • db_dbname.c_str()- 数据库名
  • 3306- 端口号

mysql_client::mysql_Register()

bool mysql_client::mysql_Register(const string &tel, const string &passwd, const string &name) { // insert into user_info values(0,'13200000000','小王','123456',1); string sql = string("insert into user_info values(0,'") + tel + string("','") + name + string("','") + passwd + string("',1)"); if (mysql_query(&mysql_con, sql.c_str()) != 0) { return false; } return true; }

该函数相当于sql语句

INSERT INTO user_info VALUES(0, '手机号', '用户名', '密码', 1);

2.客户端连接处理实现

socket_con::Send_err()和socket_con::Send_ok()

void socket_con::Send_err() { Json::Value res_val; res_val["status"] = "ERR"; send(c, res_val.toStyledString().c_str(), strlen(res_val.toStyledString().c_str()), 0); } void socket_con::Send_ok() { Json::Value res_val; res_val["status"] = "OK"; send(c, res_val.toStyledString().c_str(), strlen(res_val.toStyledString().c_str()), 0); }

功能:向客户端发送错误或成功响应

发送的 JSON

{ "status" : "ERR" } { "status" : "OK" }

void socket_con::User_Register()

void socket_con::User_Register() { string tel, passwd, username; tel = val["user_tel"].asString(); passwd = val["user_passwd"].asString(); username = val["user_name"].asString(); if (tel.empty() || passwd.empty() || username.empty()) { Send_err(); } mysql_client cli; if (!cli.mysql_ConnectServer()) { Send_err(); return; } if (!cli.mysql_Register(tel, passwd, username)) { Send_err(); return; } Send_ok(); return; }

该函数实现了服务器端处理用户注册的核心逻辑,包括数据验证、数据库连接、用户信息插入和响应发送。

1.提取用户信息

从Recv_data()中已解析的JSON对象val中提取客户端发送的注册信息。

2.验证数据完整性

若任何字段为空,向客户端发送错误响应。

3.连接数据库

创建mysql_client对象并连接 MySQL 数据库

4. 执行注册操作

将用户信息插入数据库,如果插入失败(如手机号已存在),发送错误响应并返回。

5.发送成功响应。

socket_con::Recv_data()

void socket_con::Recv_data() { char buff[256] = {0}; int n = recv(c, buff, 255, 0); if (n <= 0) { cout << "client close" << endl; delete this; return; } // 测试 cout << "recv:" << buff << endl; Json::Reader Read; if (!Read.parse(buff, val)) { cout << "Recv_data:解析json失败" << endl; Send_err(); return; } int ops = val["type"].asInt(); // DL = 1, ZC,CKYY,YD,CKYD,QXYD,TC switch (ops) { case DL: User_Login(); break; case ZC: User_Register(); break; default: break; } // 解析 }

1.接受客户端数据

2.处理连接关闭

3.打印接收到的JSON数据

4.解析JSON数据

Json::Reader Read; if (!Read.parse(buff, val)) { cout << "Recv_data:解析json失败" << endl; Send_err(); return; }
  • 功能:将接收到的数据解析为 JSON 对象
  • 处理逻辑
    • 使用Json::Reader解析 JSON 数据
    • 解析失败:打印错误信息,发送错误响应,返回

5. 根据操作类型分发处理

int ops = val["type"].asInt(); // DL = 1, ZC,CKYY,YD,CKYD,QXYD,TC switch (ops) { case DL: User_Login(); break; case ZC: User_Register(); break; default: break; }
  • 功能:根据 JSON 中的type字段判断操作类型并调用相应的处理函数
  • 操作类型
    • DL (1):登录
    • ZC (2):注册
    • 其他功能暂未处理
http://www.jsqmd.com/news/461410/

相关文章:

  • 携程任我行礼品卡快速变现秘诀,这些回收渠道你知道吗? - 团团收购物卡回收
  • 基于Java springboot果蔬种植销售服务平台系统(源码+文档+运行视频+讲解视频)
  • Laravel 10.x重磅更新:12大核心特性解析
  • 市面上口碑好的不锈钢水槽拉伸成型液压机制造商推荐榜单,冷拉伸/深冲压/一次成型/单动薄板/双动拉伸/自动化生产线,不锈钢水槽拉伸成型液压机实力厂家怎么选 - 品牌推广师
  • 【OS】存储管理(内存管理)核心知识点详解
  • Pytorch1 PyTorch 官方 QuickStart 超详细笔记|
  • 智能科学与技术毕业设计易上手项目选题怎么做
  • dynamic-datasource-spring-boot-starter -动态数据源详解
  • S2b电商系统哪家好?深度测评:千匠才是行业优选
  • AI短视频培训哪家更好
  • 畅回收平台:好利来卡回收首选,75折折扣,服务贴心 - 畅回收小程序
  • React 状态管理:从 Redux Toolkit 到 Jotai、Zustand等主流库中,应该如何在项目中进行选择。
  • Python 装饰器详解:从入门到精通的完整指南
  • 江苏万融系统集成有限公司:打造安全、智能、可持续的实验室全生命周期服务 - 品牌推荐用户报道者
  • 为什么选择携程任我行礼品卡回收变现?五大优势告诉你! - 团团收购物卡回收
  • ONNX 和 TensorRT是什么
  • 【MySQL进阶 | explain执行计划】
  • The_Maya_Society
  • Postman+CLA+Jenkins接口测试
  • Java继承-多态
  • 运营批量作图工具推荐:潮际好麦商品套图如何支撑日均百款上新?
  • 好利来卡回收注意事项,畅回收平台,安全可靠 - 畅回收小程序
  • 企业级日志平台实战:ELK + Filebeat + Kafka + ZooKeeper
  • 电脑提示Component mscomm32.ocx or one of its解决办法
  • Fastadmin 解决安全提示:为了你的后台安全,请勿将后台管理入口设置为admin或admin.php问题
  • [linux] 本地部署网页(windows下载node.js, 安装pnpm)
  • 【UI自动化测试】5_TPshop项目实战 _批量运行测试用例(重点)
  • 线程池学习2
  • AI时代人人都是产品经理:团队协同:AI 时代,产品经理与算法 / 研发团队的高效协同技巧
  • 嵌入式开发之C语言入门:从基础到核心语法