1. 程式人生 > >小專案——通訊錄2.0

小專案——通訊錄2.0

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