zoukankan      html  css  js  c++  java
  • 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("
    
    
    
    
    ");
        printf("	╔═══════════════════════════╗
    ");
        printf("	║            Welcome To Lemon Books System             ║
    ");
        printf("	╠═══════════════════════════╣
    ");
        printf("	║		 1 - 显示所有图书信息                   ║
    ");
        printf("	║		 2 - 添加图书信息                       ║
    ");
        printf("	║		 3 - 修改图书信息                       ║
    ");
        printf("	║		 4 - 删除图书信息                       ║
    ");
        printf("	║		 5 - 查询图书信息                       ║
    ");
        printf("	║		 6 - 退出                               ║
    ");
        printf("	╚═══════════════════════════╝
    ");
        printf("
                  ENTER YOUR CHOICE(1-6):");
    
    }
    
    void inquire()  /*询问用户是否显示主菜单*/
    {
        printf("	 显示主菜单?(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("连接数据库失败!
    ");
        }
        else
        {
            //连接数据库成功
            if (mysql_query(&mysql, "select * from db_books")) //查询数据表tb_books中的所有字段 查询成功,返回false
            {
                printf("
     查询 tb_books 失败!
    "); //连接数据库失败
            }
            else
            {
                result = mysql_store_result(&mysql); //获得结果集
                if (mysql_num_rows(result) != NULL) //获得结果集的行数,若行数不为0,则进入if
                {
                    //有记录数据时,才显示记录数据
                    printf("	 ════════════════════════════ 
    ");
                    printf("	                 显 示 所 有 图 书 信 息                  
    ");
                    printf("	 ════════════════════════════ 
    ");
                    printf("	  图书编号       图书名         作者        出版社      
    ");
                    printf("	 -------------------------------------------------------- 
    ");
    
                    while (row = mysql_fetch_row(result)) //取出结果集中的下一行数据
                    {
                        //取出结果集中记录
                        fprintf(stdout, "	     %s             %s            %s         %s   
    ", 
                            row[0], row[1], row[2], row[3]);  //输出这行记录 [相当于从文件中取出数据,所以使用了fprintf]                    
                    }
                    printf("	 ════════════════════════════ 
    ");
                }
                else
                {
                    printf("
     没有记录数据! 
    ");
                }
    
                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("
    	 不能连接数据库!
    ");
        }
        else
        {
            /*数据库连接成功,插入数据*/
            printf("	 ════════════════════════════ 
    ");
            printf("	                     添 加 图 书 信 息                    
    ");
            printf("	 ════════════════════════════ 
    ");
            if (mysql_query(&mysql, "select * from db_books"))
            {   //如果查询失败
                printf("
    	 查询 db_books 数据表失败!
    ");
            }
            else
            {
                result = mysql_store_result(&mysql); //获得结果集
                rowcount = (int)mysql_num_rows(result);  //获得行数
                row = mysql_fetch_row(result);       //获取结果集的行  
    
                printf("	 图书编号:");
                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("
    	 记录存在,按任意键继续!
    ");
                            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("	 请输入图书名:");
                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("	 请输入作者:");
                scanf("%s", author);    /*输入作者*/
                strcat(dest, "', '");
                strcat(dest, author);
    
                printf("	 请输入出版社:");
                scanf("%s", bookconcern);    /*输入出版社*/
                strcat(dest, "', '");
                strcat(dest, bookconcern);
                strcat(dest, "')");
                printf("%s",dest);
    
                if (mysql_query(&mysql, dest) != 0) //将dest插入到数据库中(db_books)
                {
                    fprintf(stderr, "	 不能插入记录!", mysql_error(&mysql));
                }
                else
                {
                    printf("	 插入成功!
    ");
                }
                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("	 不能连接数据库!
    ");
        }
        else
        {
            printf("	 请输入您想要查询的图书编号:");
            scanf("%s", id);   /*输入图书编号*/
            sql = "select * from db_books where id="; //查询条件
            strcat(dest, sql);
            strcat(dest, id);    /*将图书编号追加到sql语句后面*/
    
            if (mysql_query(&mysql, dest))
            {   //如果查询失败
                printf("
     查询 tb_book 数据表失败!
    ");
            }
            else
            {
                result = mysql_store_result(&mysql); //获得结果集
                if (mysql_num_rows(result) != NULL)
                {  //有记录的情况,只有有记录取数据才有意义
                    printf("	 ════════════════════════════ 
    ");
                    printf("	                          显示图书信息                      
    ");
                    printf("	 ════════════════════════════ 
    ");
                    printf("	图书编号       图书名         作者        出版社      
    ");
                    printf("	 -------------------------------------------------------- 
    ");
                    while ((row = mysql_fetch_row(result)))
                    {   //取出结果集中记录
                        fprintf(stdout, "	   %s             %s             %s          %s   
    ", row[0], row[1], row[2], row[3]);  //输出这行记录
                    }
                    printf("	 ════════════════════════════ 
    ");
                }
                else
                {
                    printf("	 没有发现要查询的信息!
    ");
                }
                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("	 不能连接数据库!
    ");
        }
        else
        {
            /*数据库连接成功*/
            // printf("连接成功");
            printf("	 请输入您想要修改的图书编号.");
    
            scanf("%s", id);   /*输入图书编号*/
            sql = "select * from db_books where id=";
            strcat(dest, sql);
            strcat(dest, id);    /*将图书编号追加到sql语句后面*/
    
            //printf("%s
    ",dest);
    
            /*查询该图书信息是否存在*/
            if (mysql_query(&mysql, dest))
            {   //如果查询失败
                printf("
      查询 db_books 数据表失败! 
    ");
            }
            else
            {
                result = mysql_store_result(&mysql); //获得结果集
                if (mysql_num_rows(result) != NULL)
                {
                    //有记录的情况,只有有记录取数据才有意义
                    printf("	 发现记录信息,是否显示?(y/n) ");
                    scanf("%s", ch);
                    if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判断是否要显示查找到的信息*/
                    {
                        printf("	 ════════════════════════════ 
    ");
                        printf("	               ***** 显示图书信息 *****                   
    ");
                        printf("	 ════════════════════════════ 
    ");
                        printf("	图书编号       图书名         作者        出版社      
    ");
                        printf("	 -------------------------------------------------------- 
    ");
                        while ((row = mysql_fetch_row(result)))
                        {   //取出结果集中记录
                            fprintf(stdout, "	   %s             %s             %s          %s   
    ", row[0], row[1], row[2], row[3]);  //输出这行记录
                        }
                        printf("	 ════════════════════════════ 
    ");
                    }
    
    
                    printf("	 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("	 图书名:");
                        scanf("%s", bookname);   /*输入图书名*/
    
                        strcat(dest1, bookname);
                        //  printf("%s",&bookname);
    
                        printf("	 作者:");
                        scanf("%s", author);    /*输入作者*/
                        strcat(dest1, "', author= '");
                        strcat(dest1, author);    /*追加sql语句*/
    
                        printf("	 出版社:");
                        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, "	 不能修改记录!
    ", mysql_error(&mysql));
                        }
                        else
                        {
                            printf("	 修改成功!
    ");
                        }
                    }
    
                }
                else
                {
                    printf("	 没有发现要修改的信息!
    ");
                }
            }
            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("	 不能连接数据库!
    ");
        }
        else
        {
            printf("	 请输入您想要删除的图书编号. ");
            scanf("%s", id);   /*输入图书编号*/
            sql = "select * from tb_book where id=";
            strcat(dest, sql);
            strcat(dest, id);    /*将图书编号追加到sql语句后面*/
            //printf("%s
    ",dest);
    
            /*查询该图书信息是否存在*/
            if (mysql_query(&mysql, dest))
            {   //如果查询失败
                printf("
     查询 tb_book 数据表失败! 
    ");
            }
            else
            {
                result = mysql_store_result(&mysql); //获得结果集
                if (mysql_num_rows(result) != NULL)
                {  //有记录的情况,只有有记录取数据才有意义
                    printf("	 发现记录信息,是否显示?(y/n) ");
                    scanf("%s", ch);
                    if (strcmp(ch, "Y") == 0 || strcmp(ch, "y") == 0)/*判断是否要显示查找到的信息*/
                    {
                        printf("	 ════════════════════════════ 
    ");
                        printf("	               ***** 显示图书信息 *****                   
    ");
                        printf("	 ════════════════════════════ 
    ");
                        printf("	图书编号       图书名         作者        出版社      
    ");
                        printf("	 -------------------------------------------------------- 
    ");
                        while ((row = mysql_fetch_row(result)))
                        {   //取出结果集中记录
                            fprintf(stdout, "	   %s             %s             %s          %s   
    ", row[0], row[1], row[2], row[3]);  //输出这行记录
                        }
                        printf("	 ════════════════════════════ 
    ");
                    }
    
                    printf("	 是否删除?(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, "	 不能删除记录! 
    ", mysql_error(&mysql));
                        }
                        else
                        {
                            printf("	 删除成功!
    ");
                        }
                    }
                }
                else
                {
                    printf("	 没有发现要删除的信息!
    ");
                }
            }
            mysql_free_result(result);    //释放结果集
        }
        mysql_close(&mysql);
    }

     显示效果:

    MySQL工具:MySQL Workbench

  • 相关阅读:
    剑指offer---第一个只出现一次的字符
    剑指offer---两个链表的第一个公共结点
    剑指offer---丑数
    剑指offer---旋转数组的最小数字
    剑指offer---滑动窗口的最大值
    剑指offer---重建二叉树
    剑指offer---数据流中的中位数
    剑指offer---二叉搜索树的第K个节点
    剑指offer--对称二叉树
    剑指offer---把二叉树打印成多行
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/9748856.html
Copyright © 2011-2022 走看看