CPlusPlus-MySQL
这个项目是C++和MySQL连接的代码
DEMO-V1
这个是C语言的版本
DEMO-V2
这个是C++的版本
找到你的数据库安装目录
复制到你的工程里
然后加一个查询景点信息管理员不用注册游客的预约预约成功之后要输出一个预约票显示预约人信息和预约时段取消修改预约和代预约好像也没有注册的时候身份证号码和手机号码验证嘞管理员可以设置每个时段的容量然后游客可以看自己的预约信息预约成功之后会出一个预约票显示预约忍部分信息和预约时段
连接教程
测试链接
#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++ 中,如果你想要限定用户输入的字符串为数字并且在特定的范围内,可以使用以下步骤:
- 首先,使用
std::getline()
函数从标准输入中读取用户输入的字符串。 - 然后可以使用
std::stoi()
函数将字符串转换为整数类型。 - 接下来,可以使用简单的
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
语句检查该整数是否在所需的范围内,如果不在范围内,我们提示用户重新输入。如果输入的字符串无法转换为整数,我们也会提示用户重新输入。