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

原文地址:https://www.cnblogs.com/linuxAndMcu/p/9748856.html

时间: 2024-10-24 21:40:56

c语言小项目-使用mysql数据库的图书管理系统的相关文章

C语言小项目—注释转换

本次这个小项目的目的是把.c文件中的C风格的注释转换成为C++风格的注释. C注释风格:/**/ C++注释风格:// 首先我们分析一下会出现的几种状态,以及各种状态之间的转换关系: 首先我们在这里对一些状态进行了标注,我们这里已知的有4种状态, 第一种是END_STATE 第二种是C_STATE 第三种是CPP_STATE 第四种是我们平时的NULL_state. 在这里,注释转换操作的是文件,所以接下来我么采用文件操作. 首先我们要打开input.c文件,对这个文件内部的文件进行读取,然后处

python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)

''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_name -grades (多对多 关联班级表) ''' 在写小项目之前我们先复习一下小知识: 1. form表单提交数据的注意事项: 是form不是from,必须要有method和action 所有获取用户输入的表单标签要放在form表单里面,表单标签必须要有name属性 form表单必须要有su

delphi+mysql做的图书管理系统,怎么把mysql数据库也一起打包进去?我用的是delphi的Express组件。

sqlconnection,sqlquery1这些组件,我连接数据库的时候是用对象编辑器里的属性进行连接的,在sqlconnection中指定了字符集utf8,有些人做的方法是利用代码连接的数据库,如果我用代码连接mysql数据库怎么做??使用sqlconnecion连接数据库.说清楚点的话就是怎么用代码实现连接mysql数据库,并且指定字符集utf8(不这么做的话就出现乱码). 2011-05-04 11:24提问者采纳1.下载此文件http://www.justsoftwaresolutio

nagios 添加自定义监控项目监控mysql数据库死锁

nagios 添加自定义监控项目 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 系统环境:CentOS Linux release 7.2.1511 (Core) nagios 版本: 2.15 这里配合pt-dead-logger插件了,运行了这个插件,有死锁就会在test.deadlocks表写入死锁的信息 这里通过检测这个表是否增加了行数来发报警 nagios客户端自定义脚本: ###这里为了省事,直接把数据库的用户,

Pycharm中的Django项目连接mysql数据库

一.安装Pycharm和Django就不详细说了,自行百度 二.新建Django项目也不说了 三.配置Django连接到mysql 1.models.py写一个类,继承models.Model class Book(models.Model): name=models.CharField(max_length=20) price=models.IntegerField() pub_date=models.DateField() 2.修改settings.py文件 DATABASES = { 'd

Django项目连接mysql数据库

Python为3版本的 首先需要安装pymysql 然后在自己的应用里面的的__init__.py文件里面添加如下内容: import pymysql pymysql.install_as_MySQLdb() 不是项目里面的__init__.py文件里面添加!!!

C语言小项目-基于TCP协议和SOCKET编程的网络通信系统

1.1 功能结构图   网络通信系统一共由4个模块组成,分别是点对点客户端.点对点服务端.服务器中转服务端.服务器中转客户端.这4个模块是成对使用的,点对点客户端和点对点服务端一起使用,服务器中转服务端和服务器中转客户端一起使用. 功能结构体如下图所示:  1.2 编写程序 网络通信程序分为2个模块实现,点对点模块和服务器中转模块. common.h #ifndef __COMMON_H__ #define __COMMON_H__ #include "stdafx.h" #inclu

PHP+mysql+ajax搭建图书管理系统

经过这次开发还是有了很深的感悟,虽然这是一个很小的前后端结合的项目,但毕竟是自己亲手将它"生下"嘛,还是很珍惜它,而且也的确让我稍有成长. 历时:两个星期 技术:mysql+php+Ajax+Jquery+h5+css3 首先说一下为什么会做这个吧,主要还是因为觉得这个东西之前稍微接触过而且能够理解其原理,起码要是动起手来还是可以理得清思路,于是就动手干起来了. 1.首先是静态页面的布局 我的页面布局倒是很简单 关于图书展示的部分,我曾经想过要嵌入一个3d展示的网页,样式看起来倒是炫酷

【数据库】图书管理系统

分析学校的图书借阅系统,尝试模拟该借阅系统的数据库结构自行设计一个数据库.数据库所支持的功能和存储的信息需至少包含如下几个方面. 读者信息,可参考下图,只需设计其中主要属性信息即可.需要注意,每个读者可能有着不同的借阅权限,比如:本科生能借阅50本,教师能借阅100本,而且借阅时限也不同,所以,为了便于管理,将读者分为不同等级,每个等级有着不同的借阅权限.因此需要设计借阅等级信息的结构,其中应包含最大借阅量,最长借阅时限等信息. 图书信息,可参考下图,只需设计其中主要属性信息即可.与图书内容相关