小專案——通訊錄2.0
阿新 • • 發佈:2019-01-24
上一個版本的通訊錄是使用連結串列操作資料,最後寫入檔案中儲存,最後實現的資訊管理,在瞭解過一段設計模式後,產生了一個想法,就是使用一個單例模式,對資料庫進行操作,實現資訊管理。
(這個版本是在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;
}