C++和MySQL的连接

news/2025/3/13 7:15:21/文章来源:https://www.cnblogs.com/hongpeiyu/p/18236217

CPlusPlus-MySQL

这个项目是C++和MySQL连接的代码

image-20230702203856813

DEMO-V1

这个是C语言的版本

DEMO-V2

这个是C++的版本


找到你的数据库安装目录

image-20230701000639727

复制到你的工程里

image-20230701000710506

然后加一个查询景点信息管理员不用注册游客的预约预约成功之后要输出一个预约票显示预约人信息和预约时段取消修改预约和代预约好像也没有注册的时候身份证号码和手机号码验证嘞管理员可以设置每个时段的容量然后游客可以看自己的预约信息预约成功之后会出一个预约票显示预约忍部分信息和预约时段

连接教程

image-20240606223400429

测试链接

#include<string.h>
#include<stdlib.h>	
#include<stdio.h>	
#include<winsock2.h>	 
#include <iostream> 
#include <mysql.h>#pragma comment(lib,"libmysql")	
#define HOST "127.0.0.1"
#define USERNAME "root"		
#define PASSWORD "123456"	
#define DATABASE "hotol"int main() {/*using std::cout;*/MYSQL mysql;//int res;mysql_init(&mysql);if (mysql_real_connect(&mysql, HOST, USERNAME, PASSWORD, DATABASE, 3306, NULL, CLIENT_FOUND_ROWS)) {printf("连接成功\n");//关闭数据库mysql_close(&mysql);}
}

查询数据

/*using std::cout;*/MYSQL mysql;MYSQL_ROW row; //char** 二维数据,存放一条条记录mysql_init(&mysql);char ssql[1024];mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");   // 控制台不乱码if (mysql_real_connect(&mysql, HOST, USERNAME, PASSWORD, DATABASE, 3306, NULL, CLIENT_FOUND_ROWS)) {printf("连接成功\n");sprintf_s(ssql, "select * from BookRestaurant;");if (mysql_query(&mysql, ssql))//该语句提交成功返回0,失败放回1{printf("查询失败\n");}else{printf("查询成功\n");MYSQL_RES* result;result = mysql_store_result(&mysql);MYSQL_FIELD* field = nullptr;// mysql_fetch_field() 返回下一个表字段的类型。while (field = mysql_fetch_field(result)) {cout << field->name << "\t";}cout << endl;while (row = mysql_fetch_row(result)){std::cout << row[0] << "\t" << row[1] << "\t" << row[2] <<  std::endl;}//释放结果集mysql_free_result(result);}//关闭数据库mysql_close(&mysql);}

带参数的查询数据

#define _CRT_SECURE_NO_DEPRECATE
#include<string.h>
#include<stdlib.h>	
#include<stdio.h>	
#include<winsock2.h>	 
#include <iostream> 
#include <mysql.h>
#include <sstream>using namespace std;
#pragma comment(lib,"libmysql")	
#define HOST "127.0.0.1"
#define USERNAME "root"		
#define PASSWORD "123456"	
#define DATABASE "hotol"int main() {/*using std::cout;*/MYSQL mysql;MYSQL_ROW row; //char** 二维数据,存放一条条记录mysql_init(&mysql);char ssql[1024];mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");   // 控制台不乱码char Name[200];char Password[200];if (mysql_real_connect(&mysql, HOST, USERNAME, PASSWORD, DATABASE, 3306, NULL, CLIENT_FOUND_ROWS)) {printf("连接成功\n");cin >> Name;cin >> Password;sprintf_s(ssql, "select * from staff where  StaffName='%s' and  StaffPassword='%s';", Name, Password);if (mysql_query(&mysql, ssql))//该语句提交成功返回0,失败放回1{printf("查询失败\n");return 0;}else{printf("查询成功\n");MYSQL_RES* result;result = mysql_store_result(&mysql);std::cout << result << std::endl;while (row = mysql_fetch_row(result)){std::cout << row[0] << "----" << row[1] << "----" << row[2] << std::endl;}//释放结果集mysql_free_result(result);}//关闭数据库mysql_close(&mysql);}
}

插入数据

#include<string.h>
#include<stdlib.h>	
#include<stdio.h>	
#include<winsock2.h>	 
#include <iostream> 
#include <mysql.h>#pragma comment(lib,"libmysql")	
#define HOST "127.0.0.1"
#define USERNAME "root"		
#define PASSWORD "123456"	
#define DATABASE "hotol"int main() {/*using std::cout;*/MYSQL mysql;MYSQL_ROW row; //char** 二维数据,存放一条条记录mysql_init(&mysql);mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");   // 控制台不乱码if (mysql_real_connect(&mysql, HOST, USERNAME, PASSWORD, DATABASE, 3306, NULL, CLIENT_FOUND_ROWS)) {printf("连接成功\n");if (!(mysql_query(&mysql, "INSERT INTO `staff` (StaffName, StaffPassword)VALUES('张三','123456');"))) {printf("提交成功\n");}else {printf("提交失败\n");}//关闭数据库mysql_close(&mysql);}
}

插入变量

https://blog.csdn.net/weixin_44120785/article/details/128462954

https://www.jianshu.com/p/26e2ad15a090

#define _CRT_SECURE_NO_DEPRECATE
#include<string.h>
#include<stdlib.h>	
#include<stdio.h>	
#include<winsock2.h>	 
#include <iostream> 
#include <mysql.h>#pragma comment(lib,"libmysql")	
#define HOST "127.0.0.1"
#define USERNAME "root"		
#define PASSWORD "123456"	
#define DATABASE "hotol"int main() {/*using std::cout;*/MYSQL mysql;MYSQL_ROW row; //char** 二维数据,存放一条条记录mysql_init(&mysql);char ssql[1024];mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");   // 控制台不乱码if (mysql_real_connect(&mysql, HOST, USERNAME, PASSWORD, DATABASE, 3306, NULL, CLIENT_FOUND_ROWS)) {printf("连接成功\n");sprintf_s(ssql, "insert into `staff` (StaffName, StaffPassword) values('%s', '%s');","daming", "17777777772");if (mysql_query(&mysql, ssql))//该语句提交成功返回0,失败放回1{printf("提交失败\n");}else{printf("提交成功\n");}//关闭数据库mysql_close(&mysql);}
}
#define _CRT_SECURE_NO_DEPRECATE
#include<string.h>
#include<stdlib.h>	
#include<stdio.h>	
#include<winsock2.h>	 
#include <iostream> 
#include <mysql.h>
#include <sstream>using namespace std;
#pragma comment(lib,"libmysql")	
#define HOST "127.0.0.1"
#define USERNAME "root"		
#define PASSWORD "123456"	
#define DATABASE "hotol"int main() {/*using std::cout;*/MYSQL mysql;MYSQL_ROW row; //char** 二维数据,存放一条条记录mysql_init(&mysql);char ssql[1024];mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");   // 控制台不乱码if (mysql_real_connect(&mysql, HOST, USERNAME, PASSWORD, DATABASE, 3306, NULL, CLIENT_FOUND_ROWS)) {printf("连接成功\n");char Name[200];char Password[200];cin >> Name;cin >> Password;sprintf_s(ssql, "insert into `staff` (StaffName, StaffPassword) values('%s', '%s');",Name,Password);if (mysql_query(&mysql, ssql))//该语句提交成功返回0,失败放回1{printf("提交失败\n");}else{printf("提交成功\n");}//关闭数据库mysql_close(&mysql);}
}

查询某一个值



C++何获取当前时间

time.h


#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <sstream>
#include <ctime>
char* nowTime();

time.cpp

#include "log.h"char* nowTime() {time_t timer0;timer0 = time(NULL);char* pctime = ctime(&timer0);//printf("\n%s\n", pctime);return pctime;}

main.cpp


#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <sstream>
#include <ctime>int main()
{time_t t = time(nullptr);struct tm* now = localtime(&t);std::stringstream timeStr;// 以下依次把年月日的数据加入到字符串中timeStr << now->tm_year + 1900 << "年";timeStr << now->tm_mon + 1 << "月";timeStr << now->tm_mday << "日 ";timeStr << now->tm_hour << ":";timeStr << now->tm_min << ":";timeStr << now->tm_sec;std::cout << timeStr.str();system("pause");return 0;
}

sql操作某个值加一或减一

https://blog.csdn.net/Kotodama/article/details/84658412

update scenic set TicketRemaining=TicketRemaining-1 where id='1';

-- 这是一个SQL更新语句,用于从名为scenic的表中更新TicketRemaining列的值。
-- 具体来说,它会将id为1的记录的TicketRemaining列的值减去1。这个查询语句的目的是减少id为1的记录的门票数量。

	/*using std::cout;*/MYSQL mysql;MYSQL_ROW row;mysql_init(&mysql);char ssql[1024];char ScenicName[200];std::cout << "请输入你的景区名字" << std::endl;std::cin >> ScenicName;mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "gbk");  //控制台不乱码if (mysql_real_connect(&mysql, HOST, USERNAME, PASSWORD, DATABASE, 3306, NULL, CLIENT_FOUND_ROWS)) {printf("连接成功\n");sprintf_s(ssql, "update scenic set TicketRemaining=TicketRemaining-1 where ScenicName='%s';", \ScenicName);if (mysql_query(&mysql, ssql))//该语句提交成功返回0,失败放回1{printf("订票失败\n");}else{printf("订票成功\n");}//关闭数据库mysql_close(&mysql);}

判断 cin 输入的位数

为了判断 cin 输入的位数,可以使用 std::cin.fail()std::cin.ignore() 函数。下面是一个简单的示例代码,它将提示用户输入一个整数,如果输入的是一个非整数或者输入的位数超过了 n 位,则会提示用户重新输入:

c++复制代码#include <iostream>
#include <limits>int main() {int n = 5; // 假设最多只能输入 5 位整数int x;while (true) {std::cout << "Please enter an integer (at most " << n << " digits): ";std::cin >> x;if (std::cin.fail()) { // 输入的不是整数std::cout << "Invalid input! Please enter an integer." << std::endl;std::cin.clear(); // 清空错误标志位std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // 忽略输入缓冲区中的所有字符,直到遇到换行符为止}else {int count = 0;// 计算 x 的位数while (x != 0) {x /= 10;++count;}if (count > n) { // 输入的位数超过了 nstd::cout << "Invalid input! Please enter an integer with at most " << n << " digits." << std::endl;}else {std::cout << "You entered: " << x << std::endl;break; // 输入合法,退出循环}}}return 0;
}

在上面的代码中,当用户输入的不是整数时,我们使用 std::cin.fail() 函数来检测输入的是否合法,并使用 std::cin.clear() 函数清空 cin 对象的错误标志位,以便后续的输入可以正常进行。另外,我们使用 std::cin.ignore() 函数来忽略输入缓冲区中的所有字符,直到遇到换行符为止,这样可以避免用户输入过长的数字时,多余的字符会影响后续的输入。

如果输入的是合法的整数,我们可以使用一个循环来计算它的位数,并与设定的最大位数 n 进行比较。如果输入的位数超过了 n,则提示用户重新输入,否则输出输入的整数并退出循环。

注释风格

//
// @brief: 开源 JSON 解析库
// @copyright: Copyright 2018 Google Inc
// @license: GPL
// @birth: created by Dablelv on 2018-08-02
// @version: V1.1.1
// @revision: last revised by lvlv on 2018-09-02
//

# show  databases;
drop database   hotol;
# 数据库不存在则创建:
create database if not exists hotol;use  hotol;DROP TABLE IF EXISTS `customer`;CREATE TABLE `customer` (`Id` INT PRIMARY KEY  AUTO_INCREMENT,  `CustomerName` varchar(100) default NULL,`CustomerSex` varchar(4) default NULL,`CustomerCardID` varchar(200) default NULL,`CustomerPhone` varchar(20) default NULL,`CustomerPassword` varchar(100) default NULL,`CustomerAddress` varchar(50) default NULL,`CustomerDate` varchar(50) default NULL
)  ENGINE=InnoDB DEFAULT CHARSET=utf8;LOCK TABLES `customer` WRITE;INSERT INTO `customer`
(CustomerName,CustomerSex,CustomerPhone,CustomerPassword,CustomerAddress,CustomerDate,CustomerCardID)VALUES('哈哈','男','18212345678','12345','广东省深圳市','2023-02-12 14:12:00周五',"372426196901053539"),('小王','男','13112345678','12345','深圳大学','2023-02-10 11:06:05周六',"372425197202108623"),('小明','男','12345678911','3244','南方科技大学','2023-03-10 09:07:11周六',"370982197812030619"),
('张三','男','123','123','南山区','2023-03-12-16:00:59周五',"372425197101088619"),('小哼','女','789456','123145','宝安区前海','2023-03-16',"130124198603030914");
UNLOCK TABLES;DROP TABLE IF EXISTS `log`;
CREATE TABLE `log` (`Id` INT  PRIMARY KEY AUTO_INCREMENT,  `CheckIntime` varchar(50) default NULL,`operate` varchar(50) default NULL,
`userBookScenicTime` varchar(50) default NULL,`user` varchar(50) default NULL  -- 使用者
) ENGINE=InnoDB DEFAULT CHARSET=utf8;LOCK TABLES `log` WRITE;
INSERT INTO `log` (CheckIntime,operate,user,userBookScenicTime) VALUES
('Tue Jun 13 21:53:15 2023','login','admin',"0");
UNLOCK TABLES;DROP TABLE IF EXISTS `staff`;
CREATE TABLE `staff` (`StaffNo` INT  PRIMARY KEY AUTO_INCREMENT,`StaffName` varchar(30) default NULL,`StaffPassword` varchar(100) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;LOCK TABLES `staff` WRITE;
INSERT INTO `staff`
(StaffName,StaffPassword)VALUES ('root','root');
UNLOCK TABLES;INSERT INTO `staff` (StaffName,StaffPassword) VALUES ('23','23');DROP TABLE IF EXISTS `Scenic`;
CREATE TABLE Scenic (id INT PRIMARY KEY AUTO_INCREMENT,Opentime VARCHAR(255),TicketRemaining INT,Price INT
);INSERT INTO Scenic (Opentime, TicketRemaining, Price) VALUES ('8-10', 200, 40);
INSERT INTO Scenic (Opentime, TicketRemaining, Price) VALUES ('10-12', 351, 40);
INSERT INTO Scenic (Opentime, TicketRemaining, Price) VALUES ('12-14', 420 ,40);
INSERT INTO Scenic (Opentime, TicketRemaining, Price) VALUES ('14-16', 102, 40);
INSERT INTO Scenic (Opentime, TicketRemaining, Price) VALUES ('16-18', 52, 40);
INSERT INTO Scenic (Opentime, TicketRemaining, Price) VALUES ('18-20', 42, 40);DROP TABLE IF EXISTS `BookRestaurant`;
CREATE TABLE BookRestaurant (id INT PRIMARY KEY AUTO_INCREMENT,booker VARCHAR(255) NOT NULL,bookerPhone VARCHAR(20) NOT NULL,bookTime DATETIME NOT NULL,RestaurantName VARCHAR(255) NOT NULL,RestaurantNumberOfPeople VARCHAR(255) default 0
);INSERT INTO BookRestaurant (booker, bookerPhone, bookTime, RestaurantName)
VALUES ('李小明', '13800138000', '2022-01-01 10:00:00', 'a');INSERT INTO BookRestaurant (booker, bookerPhone, bookTime, RestaurantName)
VALUES ('王大华', '13900139000', '2022-01-02 14:00:00', 'b');INSERT INTO BookRestaurant (booker, bookerPhone, bookTime, RestaurantName)
VALUES ('赵小红', '13700137000', '2022-01-03 16:00:00', 'c');INSERT INTO BookRestaurant (booker, bookerPhone, bookTime, RestaurantName)
VALUES ('张三', '13800138000', '2022-01-01 10:00:00', 'd');INSERT INTO BookRestaurant (booker, bookerPhone, bookTime, RestaurantName)
VALUES ('李四', '13900139000', '2022-01-02 14:00:00', 'e');INSERT INTO BookRestaurant (booker, bookerPhone, bookTime, RestaurantName)
VALUES ('王五', '13700137000', '2022-01-03 16:00:00', 'f');

在 C++ 中,如果你想要限定用户输入的字符串为数字并且在特定的范围内,可以使用以下步骤:

  1. 首先,使用 std::getline() 函数从标准输入中读取用户输入的字符串。
  2. 然后可以使用 std::stoi() 函数将字符串转换为整数类型。
  3. 接下来,可以使用简单的 if 语句检查该整数是否符合所需的范围限制。如果该整数不在所需的范围内,可以提示用户输入一个新的数字。

下面是一个简单的示例程序,演示如何限制用户输入数字的范围:

c++复制代码#include <iostream>
#include <string>int main() {int min_value = 1;int max_value = 10;while (true) {std::string input;std::cout << "Enter a number between " << min_value << " and " << max_value << ": ";std::getline(std::cin, input);try {int num = std::stoi(input);if (num >= min_value && num <= max_value) {// 输入的数字在指定范围内std::cout << "You entered: " << num << std::endl;break;} else {// 输入的数字不在指定范围内std::cout << "Please enter a number between " << min_value << " and " << max_value << std::endl;}} catch (std::invalid_argument) {// 如果输入的不是数字字符串std::cout << "Please enter a valid number." << std::endl;}}return 0;
}

在此示例程序中,我们使用 std::getline() 函数从标准输入中获取字符串,并使用 std::stoi() 函数将其转换为整数类型。然后,我们使用 if 语句检查该整数是否在所需的范围内,如果不在范围内,我们提示用户重新输入。如果输入的字符串无法转换为整数,我们也会提示用户重新输入。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/721147.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gin框架下的JWT

Gin框架下的JWT 什么是JWT 我们都知道,HTTP协议是无状态的,click here,那么服务端怎么知道用户状态的呢(比如是否登录呢),这里就需要用到中间件来进行用户认证。 中间件认证有这么几种方式sessiontokentoken和session最大的区别就是token是存储在客户端的: 我们都知道,s…

实验6

实验1点击查看代码 // P286例8.17 // 对教材上的程序作了微调整,把输出学生信息单独编写成一个函数模块 // 打印不及格学生信息和所有学生信息程分别调用 #include <stdio.h> #include <string.h> #define N 10 // 运行程序输入测试时,可以把这个数组改小一些输…

[转][翻译]深入理解Win32结构化异常处理(一)

在所有的Win32操作系统提供的功能里,最常用但是描述最不全的(underdocument)恐怕就是结构化异常处理了(structured exception handling (SEH))。当你想到Win32的结构化异常处理,你会想到 _try, _finally, 和 _except这些东西,你可以从任何一本Win32的书中找到SEH的很好的…

使用python进行贝叶斯统计分析|附代码数据

原文链接:http://tecdat.cn/?p=7637 最近我们被客户要求撰写关于贝叶斯统计的研究报告,包括一些图形和统计输出。 本文讲解了使用PyMC3进行基本的贝叶斯统计分析过程. ( 点击文末“阅读原文”获取完整代码数据******** )。 # Imports import pymc3 as pm # python的概率编…

R和Python机器学习:广义线性回归glm,样条glm,梯度增强,随机森林和深度学习模型分析

原文链接:http://tecdat.cn/?p=7923 原文出处:拓端数据部落公众号使用R和Python进行分析的主要好处之一是,它们充满活力的开源生态系统中总是有新的和免费提供的服务。如今,越来越多的数据科学家能够同时在R,Python和其他平台上使用数据,这是因为供应商向R和Python引入了…

【专题】2024医药研发趋势年度回顾白皮书报告合集PDF分享(附原数据表)

原文链接:https://tecdat.cn/?p=36410 原文出处:拓端数据部落公众号 在开始编纂2024年的药物研发合集之前,我们先概览当前研发管线中的药物总数,以确立后续分析所依托的框架。鉴于本报告合集的核心内容围绕这些药物展开,对“研发管线”的明确定义显得尤为重要。 在此,我…

代码随想录算法训练营第二十九天 | 491.非递减子序列 46.全排列 47.全排列II

491.非递减子序列 题目链接 文章讲解 视频讲解 层间去重:回溯法相当于深搜,所以所以是一直递归到叶节点才开始回溯; 每次进入backtracking也就进入了搜索树的下一层,所以每进入一层需要用一个used_set来记录使用过的元素;class Solution { private:vector<int> sub;…

6.6--链表

链表的定义 C++的定义链表节点方式,如下所示: // 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 };不定义构造函数,C++默认生成一个构造函数,但是这个构造函…

6.5--链表

链表的定义 C++的定义链表节点方式,如下所示: // 单链表 struct ListNode {int val; // 节点上存储的元素ListNode *next; // 指向下一个节点的指针ListNode(int x) : val(x), next(NULL) {} // 节点的构造函数 };不定义构造函数,C++默认生成一个构造函数,但是这个构造函…

python多进程 AttributeError: Cant get attribute on module __main__ (built-in)

在学习python多进程的发现一个问题 代码在单独的py文件中可以正确执行,但在jupyter notebook中会报错在此记录一下 解决后处理