C++如何写一个控制台登陆窗口的代码,同时密码和用户名需要和本地的数据库中的用户表进行校验
时间: 2023-11-27 13:51:27 浏览: 35
实现控制台登陆窗口需要使用Windows API函数和C++的标准库。以下是一个简单的实现过程:
1. 引入头文件
```cpp
#include <iostream>
#include <string>
#include <Windows.h>
#include <mysql.h> // MySQL数据库相关头文件,需要自行安装MySQL C++ Connector
```
2. 定义数据库连接
```cpp
MYSQL* conn;
conn = mysql_init(NULL);
mysql_real_connect(conn, "localhost", "root", "password", "database_name", 0, NULL, 0);
```
3. 定义用户输入的用户名和密码
```cpp
std::string username;
std::string password;
```
4. 绘制登陆窗口
```cpp
HWND hwnd = GetConsoleWindow();
HDC hdc = GetWindowDC(hwnd);
RECT rect;
GetWindowRect(hwnd, &rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
int x = (GetSystemMetrics(SM_CXSCREEN) - width) / 2;
int y = (GetSystemMetrics(SM_CYSCREEN) - height) / 2;
SetWindowPos(hwnd, HWND_TOP, x, y, width, height, SWP_SHOWWINDOW);
system("cls");
std::cout << "Username: ";
std::getline(std::cin, username);
std::cout << "Password: ";
std::getline(std::cin, password);
```
5. 查询数据库并校验用户名和密码
```cpp
std::string query = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'";
const char* q = query.c_str();
mysql_query(conn, q);
MYSQL_RES* res = mysql_store_result(conn);
int num_fields = mysql_num_fields(res);
MYSQL_ROW row;
if (mysql_num_rows(res) == 0) {
std::cout << "Invalid username or password" << std::endl;
} else {
std::cout << "Login successful!" << std::endl;
}
```
6. 关闭数据库连接和释放资源
```cpp
mysql_free_result(res);
mysql_close(conn);
```
完整代码:
```cpp
#include <iostream>
#include <string>
#include <Windows.h>
#include <mysql.h>
int main() {
MYSQL* conn;
conn = mysql_init(NULL);
mysql_real_connect(conn, "localhost", "root", "password", "database_name", 0, NULL, 0);
std::string username;
std::string password;
HWND hwnd = GetConsoleWindow();
HDC hdc = GetWindowDC(hwnd);
RECT rect;
GetWindowRect(hwnd, &rect);
int width = rect.right - rect.left;
int height = rect.bottom - rect.top;
int x = (GetSystemMetrics(SM_CXSCREEN) - width) / 2;
int y = (GetSystemMetrics(SM_CYSCREEN) - height) / 2;
SetWindowPos(hwnd, HWND_TOP, x, y, width, height, SWP_SHOWWINDOW);
system("cls");
std::cout << "Username: ";
std::getline(std::cin, username);
std::cout << "Password: ";
std::getline(std::cin, password);
std::string query = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'";
const char* q = query.c_str();
mysql_query(conn, q);
MYSQL_RES* res = mysql_store_result(conn);
int num_fields = mysql_num_fields(res);
MYSQL_ROW row;
if (mysql_num_rows(res) == 0) {
std::cout << "Invalid username or password" << std::endl;
} else {
std::cout << "Login successful!" << std::endl;
}
mysql_free_result(res);
mysql_close(conn);
return 0;
}
```
需要注意的是,这只是一个简单的示例代码,实际使用时需要考虑安全性和用户体验等问题。