小项目——通讯录2.0

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dxd_123456/article/details/78396714

上一个版本的通讯录是使用链表操作数据,最后写入文件中存储,最后实现的信息管理,在了解过一段设计模式后,产生了一个想法,就是使用一个单例模式,对数据库进行操作,实现信息管理。
(这个版本是在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;
}

猜你喜欢

转载自blog.csdn.net/dxd_123456/article/details/78396714