版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
上一个版本的通讯录是使用链表操作数据,最后写入文件中存储,最后实现的信息管理,在了解过一段设计模式后,产生了一个想法,就是使用一个单例模式,对数据库进行操作,实现信息管理。
(这个版本是在Windows平台下使用vs编写,用的数据库是MySQL, 做的比较粗糙,也比较简单,界面什么的都没做,纯属于练手,一些细节做的不够好,但大体功能还是能实现的)
下面是程序代码:
#include <WinSock2.h>
#include <Windows.h>
#include <mysql.h>
#include <string>
#include <iostream>
using namespace std;
class Mysql
{
private:
Mysql(){}
public:
static Mysql* init_ms()
{
ms = new Mysql;
mysql = mysql_init(NULL);
if (mysql == NULL)
{
cout << "初始化失败" << endl;
return NULL;
}
con = mysql_real_connect(mysql, NULL, "root", "152610", "test", 0, NULL, 0);
if (con == NULL)
{
cout << "连接服务器失败:" << mysql_error(mysql) << endl;
return NULL;
}
cout << "连接到MySQL服务器......." << endl;
mysql_query(mysql, "set names utf8");
return ms;
}
static int mysql_exec(char *sql)
{
//char *sql = "select * from user";
int ret = mysql_query(mysql, sql);
if (ret != 0)
{
cout << "操作失败:" << mysql_error(con) << endl;
return -1;
}
MYSQL_RES *mysql_res = mysql_store_result(con);
if (mysql_res == NULL)
{
if (mysql_errno(con) == 0)
{
cout << "操作成功" << endl;
return 0;
}
cout << "mysql_store_result():" << mysql_error(con) << endl;
return -1;
}
unsigned int num = mysql_num_fields(mysql_res);
MYSQL_FIELD *fields = mysql_fetch_fields(mysql_res);
for (int i = 0; i < num; i++)
{
cout << " " << fields[i].name;
}
cout << endl;
MYSQL_ROW row;
while (row = mysql_fetch_row(mysql_res))
{
for (int i = 0; i < num; i++)
{
cout << " " << row[i];
}
cout << endl;
}
return 0;
}
private:
static Mysql *ms;
static MYSQL *mysql;
static MYSQL *con;
};
MYSQL *Mysql::mysql = NULL;
MYSQL *Mysql::con = NULL;
Mysql *Mysql::ms = NULL;
void manage()
{
char str[20];
char src[100];
while (1)
{
cout << "请输入你想进行的操作:" << endl;
cin >> str;
if (strcmp(str, "1") == 0)
{
sprintf(src, "select * from users");
Mysql::mysql_exec(src);
cout << "请输入ENTER返回主界面" << endl;
getchar();
getchar();
}
else if (strcmp(str, "2") == 0)
{
int ID;
char name[20];
char telNum[20];
char Ema[20];
cout << "请输入你想加入的内容:" << endl;
cout << "ID:" << endl;
cin >> ID;
cout << "姓名:" << endl;
cin >> name;
cout << "电话号码:" << endl;
cin >> telNum;
cout << "邮箱:" << endl;
cin >> Ema;
sprintf(src, "insert into users values(%d, '%s', '%s', '%s')", ID, name, telNum, Ema);
Mysql::mysql_exec(src);
cout << "请输入ENTER返回主界面" << endl;
getchar();
getchar();
}
else if (strcmp(str, "3") == 0)
{
int ID;
cout << "请输入你想删除人的ID:" << endl;
cin >> ID;
sprintf(src, "delete from users where ID = %d", ID);
Mysql::mysql_exec(src);
cout << "请输入ENTER返回主界面" << endl;
getchar();
getchar();
}
else if (strcmp(str, "4") == 0)
{
int ID;
cout << "请输入你想查找人的ID:" << endl;
cin >> ID;
sprintf(src, "select * from users where ID = %d", ID);
Mysql::mysql_exec(src);
cout << "请输入ENTER返回主界面" << endl;
getchar();
getchar();
}
else if (strcmp(str, "5") == 0)
{
break;
}
else
{
cout << "操作错误,请输入ENTER返回主界面" << endl;
getchar();
getchar();
continue;
}
}
// Mysql::mysql_exec(src);
}
int main()
{
Mysql *m1 = Mysql::init_ms();
manage();
return 0;
}