c語言小項目-使用mysql數據庫的圖書管理系統


VS2013通過MySQL方式連接到MySQL

    MySQL官網上C++的API有兩個。一個是很成熟的mysql++,另一個是MySQL Connector/C++,近兩年才出的,模仿JDBC做的,封裝得很方便使用。這里使用的是mysql方式。

1.新建bookAdminSys工程

2.將文件夾MySQL目錄下的include添加到VC++目錄中的包含目錄中,另外將文件夾MySQL目錄下的lib添加到VC++目錄中的庫目錄中

 

 

3.添加附加依賴項,將MySQL目錄下的libmysql.lib添加到Linker(鏈接器)——Input(輸入)——Additional Dependencies(附加依賴項)中

 

4.修改工程運行平台 ,由於windows系統是64位的,故mysql也是64位的,而我們創建的工程是win32控制台程序,無法直接使用64位的libmysql.lib,所以要修改為x64

5.將MySQL目錄中的libmysql.dll,libmysql.lib拷到所建工程的根目錄下,並將libmysql.dll拷到system32和syswow64這兩個系統文件夾下

6.從官方網站http://dev.mysql.com下載到mysql安裝包並安裝,安裝完成后打開MySQL 5.6 Command Client窗口,如下圖所示:

  第1步:創建一個名為db_books的數據庫;

  第2步:創建完成數據庫之后,使用use語句來改變當前的數據庫;

  第3步:使用create table語句來創建數據表。

 

使用mysql的圖書管理系統源代碼(在VS2013上已測試通過):

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h> //包含了其它window頭文件,為mmysql.h服務,且必須聲明在mysql.h前面
#include <mysql.h> //mysql數據庫頭文件

#pragma warning( disable : 4996)

/*定義數據庫相關操作變量*/
MYSQL mysql;          //定義mysql對象
MYSQL_RES *result;    //定義結果集變量
MYSQL_ROW row;        //定義行變量
char ch[2];

void ShowAll();       //顯示所有的圖書信息
void AddBook();       //添加圖書信息
void ModifyBook();    //修改圖書信息
void DeleteBook();    //刪除圖書信息
void QueryBook();     //查詢圖書信息


//顯示菜單
void showmenu()
{
    printf("\n\n\n\n\n");
    printf("\t╔═══════════════════════════╗\n");
    printf("\t║            Welcome To Lemon Books System             ║\n");
    printf("\t╠═══════════════════════════╣\n");
    printf("\t║\t\t 1 - 顯示所有圖書信息                   ║\n");
    printf("\t║\t\t 2 - 添加圖書信息                       ║\n");
    printf("\t║\t\t 3 - 修改圖書信息                       ║\n");
    printf("\t║\t\t 4 - 刪除圖書信息                       ║\n");
    printf("\t║\t\t 5 - 查詢圖書信息                       ║\n");
    printf("\t║\t\t 6 - 退出                               ║\n");
    printf("\t╚═══════════════════════════╝\n");
    printf("\n              ENTER YOUR CHOICE(1-6):");

}

void inquire()  /*詢問用戶是否顯示主菜單*/
{
    printf("\t 顯示主菜單?(y/n):");
    scanf("%s", ch);
    if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判斷是否要顯示查找到的信息*/
    {
        showmenu();   /*顯示菜單*/
    }
    else
    {
        exit(0);
    }
}

/*顯示主菜單,連接數據庫*/
int main()
{
    int n;   //定義變量  存儲用戶輸入的編號

    showmenu();   /*顯示菜單*/

    scanf("%d", &n);/*輸入選擇功能的編號*/

    while (n)
    {
        mysql_init(&mysql);  //初始化mysql結構

        switch (n)
        {
            case 1:
                ShowAll();    /*調用顯示所有圖書數據的過程*/
                break;
            case 2:
                AddBook();   /*添加圖書信息*/
                break;
            case 3:
                ModifyBook();     /*修改圖書信息*/
                break;
            case 4:
                DeleteBook();   /*刪除圖書信息*/
                break;
            case 5:
                QueryBook();   /*查詢圖書信息*/
                break;
            case 6:
                exit(0);       /*退出*/
            default:break;
        }
        system("PAUSE");
        system("CLS");
        inquire();

        scanf("%d", &n);
    }
}

//顯示所有的圖書信息
void ShowAll()
{
    //連接數據庫
    if (!mysql_real_connect(&mysql,"localhost","root","root","db_books",0,NULL,0)) //連接數據庫成功,返回true
    {
        printf("連接數據庫失敗!\n");
    }
    else
    {
        //連接數據庫成功
        if (mysql_query(&mysql, "select * from db_books")) //查詢數據表tb_books中的所有字段 查詢成功,返回false
        {
            printf("\n 查詢 tb_books 失敗!\n"); //連接數據庫失敗
        }
        else
        {
            result = mysql_store_result(&mysql); //獲得結果集
            if (mysql_num_rows(result) != NULL) //獲得結果集的行數,若行數不為0,則進入if
            {
                //有記錄數據時,才顯示記錄數據
                printf("\t ════════════════════════════ \n");
                printf("\t                 顯 示 所 有 圖 書 信 息                  \n");
                printf("\t ════════════════════════════ \n");
                printf("\t  圖書編號       圖書名         作者        出版社      \n");
                printf("\t -------------------------------------------------------- \n");

                while (row = mysql_fetch_row(result)) //取出結果集中的下一行數據
                {
                    //取出結果集中記錄
                    fprintf(stdout, "\t     %s             %s            %s         %s   \n", \
                        row[0], row[1], row[2], row[3]);  //輸出這行記錄 [相當於從文件中取出數據,所以使用了fprintf]                    
                }
                printf("\t ════════════════════════════ \n");
            }
            else
            {
                printf("\n 沒有記錄數據! \n");
            }

            mysql_free_result(result); //釋放結果集
        }

        mysql_close(&mysql); //釋放連接
    }
}

void AddBook()    /*添加圖書信息*/
{
    int rowcount;   /*結果集中的行數*/

    char id[10];       /*編號*/
    char *bookname; //圖書名稱
    char *author; //圖書作者
    char *bookconcern;

    char *sql; //數據庫字符串
    char dest[500] = { "  " };

    /*連接數據庫*/
    if (!mysql_real_connect(&mysql, "localhost", "root", "root", "db_books", 0, NULL, 0))
    {
        printf("\n\t 不能連接數據庫!\n");
    }
    else
    {
        /*數據庫連接成功,插入數據*/
        printf("\t ════════════════════════════ \n");
        printf("\t                     添 加 圖 書 信 息                    \n");
        printf("\t ════════════════════════════ \n");
        if (mysql_query(&mysql, "select * from db_books"))
        {   //如果查詢失敗
            printf("\n\t 查詢 db_books 數據表失敗!\n");
        }
        else
        {
            result = mysql_store_result(&mysql); //獲得結果集
            rowcount = (int)mysql_num_rows(result);  //獲得行數
            row = mysql_fetch_row(result);       //獲取結果集的行  

            printf("\t 圖書編號:");
            scanf("%s", id);   /*輸入圖書編號*/

            if (mysql_num_rows(result) != NULL)
            {
                /*判斷輸入的編號是否存在*/
                do
                {   //存在相同編號
                    if (!strcmp(id, row[0])) //row[0]為每行的第一個元素,即ID,則row[1]則為bookname
                    {
                        //  printf("%s",row[0]);
                        printf("\n\t 記錄存在,按任意鍵繼續!\n");
                        getch();
                        mysql_free_result(result);   /*釋放結果集*/
                        mysql_close(&mysql);         /*釋放連接*/
                        return;
                    }
                } while (row = mysql_fetch_row(result));
            }

            //給字符指針分配內存
            bookname = (char*)malloc(50);
            author = (char*)malloc(50);
            bookconcern = (char*)malloc(50);

            //不存在相同的編號            
            printf("\t 請輸入圖書名:");
            scanf("%s", bookname);   /*輸入圖書名*/

            //將要寫入數據庫的字符串添加到dest后
            sql = "insert into db_books (ID,bookname,author,bookconcern) values (";
            strcat(dest, sql);
            strcat(dest, "'");
            strcat(dest, id);
            strcat(dest, "', '");
            strcat(dest, bookname);    /*將圖書編號追加到sql語句后面*/

            printf("\t 請輸入作者:");
            scanf("%s", author);    /*輸入作者*/
            strcat(dest, "', '");
            strcat(dest, author);

            printf("\t 請輸入出版社:");
            scanf("%s", bookconcern);    /*輸入出版社*/
            strcat(dest, "', '");
            strcat(dest, bookconcern);
            strcat(dest, "')");
            printf("%s",dest);

            if (mysql_query(&mysql, dest) != 0) //將dest插入到數據庫中(db_books)
            {
                fprintf(stderr, "\t 不能插入記錄!", mysql_error(&mysql));
            }
            else
            {
                printf("\t 插入成功!\n");
            }
            mysql_free_result(result);    //釋放結果集
        }
        mysql_close(&mysql);          //釋放連接
    }
}

void QueryBook()   /*查詢圖書信息*/
{
    char id[10];   /*結果集中的行數*/
    char *sql;
    char dest[100] = { "  " };

    if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", 0, NULL, 0))
    {
        printf("\t 不能連接數據庫!\n");
    }
    else
    {
        printf("\t 請輸入您想要查詢的圖書編號:");
        scanf("%s", id);   /*輸入圖書編號*/
        sql = "select * from db_books where id="; //查詢條件
        strcat(dest, sql);
        strcat(dest, id);    /*將圖書編號追加到sql語句后面*/

        if (mysql_query(&mysql, dest))
        {   //如果查詢失敗
            printf("\n 查詢 tb_book 數據表失敗!\n");
        }
        else
        {
            result = mysql_store_result(&mysql); //獲得結果集
            if (mysql_num_rows(result) != NULL)
            {  //有記錄的情況,只有有記錄取數據才有意義
                printf("\t ════════════════════════════ \n");
                printf("\t                          顯示圖書信息                      \n");
                printf("\t ════════════════════════════ \n");
                printf("\t圖書編號       圖書名         作者        出版社      \n");
                printf("\t -------------------------------------------------------- \n");
                while ((row = mysql_fetch_row(result)))
                {   //取出結果集中記錄
                    fprintf(stdout, "\t   %s             %s             %s          %s   \n", row[0], row[1], row[2], row[3]);  //輸出這行記錄
                }
                printf("\t ════════════════════════════ \n");
            }
            else
            {
                printf("\t 沒有發現要查詢的信息!\n");
            }
            mysql_free_result(result);    //釋放結果集
        }
        mysql_close(&mysql);          //釋放連接
    }
}

//修改圖書信息
void ModifyBook()
{
    char id[10];   /*結果集中的行數*/
    char *sql;
    char dest[500] = { "  " };
    char dest1[500] = { "  " };

    char *bookname;
    char *author;
    char *bookconcern;

    if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", 0, NULL, 0))
    {
        printf("\t 不能連接數據庫!\n");
    }
    else
    {
        /*數據庫連接成功*/
        // printf("連接成功");
        printf("\t 請輸入您想要修改的圖書編號.");

        scanf("%s", id);   /*輸入圖書編號*/
        sql = "select * from db_books where id=";
        strcat(dest, sql);
        strcat(dest, id);    /*將圖書編號追加到sql語句后面*/

        //printf("%s\n",dest);

        /*查詢該圖書信息是否存在*/
        if (mysql_query(&mysql, dest))
        {   //如果查詢失敗
            printf("\n  查詢 db_books 數據表失敗! \n");
        }
        else
        {
            result = mysql_store_result(&mysql); //獲得結果集
            if (mysql_num_rows(result) != NULL)
            {
                //有記錄的情況,只有有記錄取數據才有意義
                printf("\t 發現記錄信息,是否顯示?(y/n) ");
                scanf("%s", ch);
                if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判斷是否要顯示查找到的信息*/
                {
                    printf("\t ════════════════════════════ \n");
                    printf("\t               ***** 顯示圖書信息 *****                   \n");
                    printf("\t ════════════════════════════ \n");
                    printf("\t圖書編號       圖書名         作者        出版社      \n");
                    printf("\t -------------------------------------------------------- \n");
                    while ((row = mysql_fetch_row(result)))
                    {   //取出結果集中記錄
                        fprintf(stdout, "\t   %s             %s             %s          %s   \n", row[0], row[1], row[2], row[3]);  //輸出這行記錄
                    }
                    printf("\t ════════════════════════════ \n");
                }


                printf("\t Modify?(y/n)");
                scanf("%s", ch);
                if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)    /*判斷是否需要錄入*/
                {


                    sql = "update db_books set bookname= '";
                    strcat(dest1, sql);
                    //   printf("%s",sql);
                    bookname = (char*)malloc(20);
                    author = (char*)malloc(20);
                    bookconcern = (char*)malloc(20);

                    printf("\t 圖書名:");
                    scanf("%s", bookname);   /*輸入圖書名*/

                    strcat(dest1, bookname);
                    //  printf("%s",&bookname);

                    printf("\t 作者:");
                    scanf("%s", author);    /*輸入作者*/
                    strcat(dest1, "', author= '");
                    strcat(dest1, author);    /*追加sql語句*/

                    printf("\t 出版社:");
                    scanf("%s", bookconcern);    /*輸入出版社*/
                    strcat(dest1, "', bookconcern = '");
                    strcat(dest1, bookconcern);    /*追加sql語句*/

                    strcat(dest1, "' where id= ");
                    strcat(dest1, id);

                    //printf("%s",dest1);

                    if (mysql_query(&mysql, dest1) != 0)
                    {
                        fprintf(stderr, "\t 不能修改記錄!\n", mysql_error(&mysql));
                    }
                    else
                    {
                        printf("\t 修改成功!\n");
                    }
                }

            }
            else
            {
                printf("\t 沒有發現要修改的信息!\n");
            }
        }
        mysql_free_result(result);          //釋放結果集
    }
    mysql_close(&mysql);     //釋放連接
}

void DeleteBook()   /*刪除圖書信息*/
{
    char id[10];   /*結果集中的行數*/
    char *sql;
    char dest[100] = { "  " };
    char dest1[100] = { "  " };
    if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", 0, NULL, 0))
    {
        printf("\t 不能連接數據庫!\n");
    }
    else
    {
        printf("\t 請輸入您想要刪除的圖書編號. ");
        scanf("%s", id);   /*輸入圖書編號*/
        sql = "select * from tb_book where id=";
        strcat(dest, sql);
        strcat(dest, id);    /*將圖書編號追加到sql語句后面*/
        //printf("%s\n",dest);

        /*查詢該圖書信息是否存在*/
        if (mysql_query(&mysql, dest))
        {   //如果查詢失敗
            printf("\n 查詢 tb_book 數據表失敗! \n");
        }
        else
        {
            result = mysql_store_result(&mysql); //獲得結果集
            if (mysql_num_rows(result) != NULL)
            {  //有記錄的情況,只有有記錄取數據才有意義
                printf("\t 發現記錄信息,是否顯示?(y/n) ");
                scanf("%s", ch);
                if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判斷是否要顯示查找到的信息*/
                {
                    printf("\t ════════════════════════════ \n");
                    printf("\t               ***** 顯示圖書信息 *****                   \n");
                    printf("\t ════════════════════════════ \n");
                    printf("\t圖書編號       圖書名         作者        出版社      \n");
                    printf("\t -------------------------------------------------------- \n");
                    while ((row = mysql_fetch_row(result)))
                    {   //取出結果集中記錄
                        fprintf(stdout, "\t   %s             %s             %s          %s   \n", row[0], row[1], row[2], row[3]);  //輸出這行記錄
                    }
                    printf("\t ════════════════════════════ \n");
                }

                printf("\t 是否刪除?(y/n) ");
                scanf("%s", ch);
                if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)    /*判斷是否需要錄入*/
                {
                    sql = "delete from tb_book where ID= ";
                    printf("%s", dest1);
                    strcat(dest1, sql);
                    strcat(dest1, id);
                    // printf("%s",dest1);

                    if (mysql_query(&mysql, dest1) != 0)
                    {
                        fprintf(stderr, "\t 不能刪除記錄! \n", mysql_error(&mysql));
                    }
                    else
                    {
                        printf("\t 刪除成功!\n");
                    }
                }
            }
            else
            {
                printf("\t 沒有發現要刪除的信息!\n");
            }
        }
        mysql_free_result(result);    //釋放結果集
    }
    mysql_close(&mysql);
}

 

 顯示效果:

MySQL工具:MySQL Workbench

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM