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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[css] rem是如何实现自适应布局的?

[css] rem是如何实现自适应布局的&#xff1f; 其大小与设置的html根大小相对 通过js获取当前页面的宽度&#xff0c;动态的调整 html{ font-size: 5px; } 来改变整个页面对应的字体大小个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; …

Centos7安装nginx教程!超简单

1.下载安装nginx yum install nginx2.安装完成默认目录在/etc/nginx 3.进入/etc/nginx/conf.d目录创建一个tomcat_mynginx.conf文件,内容为&#xff1a; server { listen 80; server_name *.tyzou.com; location / { proxy_pass http://localhost:8888; proxy_set…

[css] 使用rem的优缺点是什么?和使用百分比有什么区别?

[css] 使用rem的优缺点是什么&#xff1f;和使用百分比有什么区别&#xff1f; rem在处理小数的时候会有误差&#xff0c;百分比要按照父级的尺寸去计算&#xff0c;不灵活个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷…

二年级小学生四则运算30道题目

实现代码&#xff1a; #include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>int main(int argc, char **argv){int a[30],b[30]; int i,c,d;srand((unsigned int)time(NULL));for (i 0; i < 30; i){ a[i] rand()%101; b…

java.lang.NoSuchMethodError: org.springframework.beans.MutablePropertyValues.add

在做dubbo的时候出现java.lang.NoSuchMethodError: org.springframework.beans.MutablePropertyValues.add&#xff0c;是因为用maven的时候其他包被引入进来了;把一些重复的包exclusion就可以了&#xff01; <dependency><groupId>com.alibaba</groupId>&l…

[css] 当页面采用rem布局时,如何解决用户设置字体大小造成的页面布局错位?

[css] 当页面采用rem布局时&#xff0c;如何解决用户设置字体大小造成的页面布局错位&#xff1f; 禁止用户缩放页面个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试…

Java第一次上机实验源代码

小学生计算题&#xff1a; package 第一次上机实验_; import java.util.*; public class 小学计算题 { public static void main(String[] args){ System.out.println("请输入要出的题目的类型\n" "1、加法\n" "2、减法\n" "3、乘法\n"…

[css] 使用rem时应该注意什么?

[css] 使用rem时应该注意什么&#xff1f; 看了下 绝对单位 和 相对单位。em 是相对元素本身的 font-size 的相对单位&#xff0c;比如元素本身的 font-size 是 14px&#xff0c;那么 1.2em 1.2 * 14px 16.8px。注意&#xff0c;是相对元素本身的 font-size&#xff0c;会随…

2017 ICPC西安区域赛 A - XOR ,线段树合并线性基

题目链接&#xff1a;A - XOR 题意;给个数组&#xff0c;每次询问一个区间你可以挑任意个数的数字异或和 然后在或上k的最大值 题解&#xff1a;线性基不知道的先看这个&#xff0c;一个线性基可以log的求最大值把对应去区间的线性基求出来然后用线段树维护线性基 就可以了。还…

Java 中的List动态转Map集合

首先创建一个实体类 package com.tyzou.controller;public class Test {private String name;private String pwd;public String getName() {return name;}public void setName(String name) {this.name name;}public String getPwd() {return pwd;}public void setPwd(Strin…

[css] 使用rem布局时怎样合理设置根标签字体大小?

[css] 使用rem布局时怎样合理设置根标签字体大小&#xff1f; UI出2倍稿&#xff0c;然后用js计算当前设备和UI设计稿之间的比例关系&#xff0c;通过resize实时计算根标签字体大小&#xff0c;即可。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易…

Centos7安装SVN+HTTP

1.首先安装svn yum install subversion 2.安装httpd yum install httpd 3.安装apache的svn操作模块 yum install mod_dav_svn yum install openssl openssl-devel 4.查看svn版本 svnserve –version 5.创建svn版本库 svnadmin create /home/svn/project 6.进入svn的c…

【转】30种MySQL索引优化的方法

第一方面&#xff1a;30种mysql优化sql语句查询的方法 1.对查询进行优化&#xff0c;应尽量避免全表扫描&#xff0c;首先应考虑在 where 及 order by涉及的列上建立索引。2.应尽量避免在 where 子句中使用 !或<> 操作符&#xff0c;否则将引擎放弃使用索引而进行全表扫描…

[css] 解释下css3的flexbox(弹性盒布局模型),以及它应用场景有哪些?

[css] 解释下css3的flexbox&#xff08;弹性盒布局模型&#xff09;&#xff0c;以及它应用场景有哪些&#xff1f; 手机端中比较常用的三段式布局, 头尾固定高度 中间自适应 它可以修改父元素下所有子元素的位置 和排序方式 相对于浮动 更加强大 要注意的是指定flex之后,子元…

centos下resin4启动一会儿自动关闭处理

启动的时候用下面的方式启动就不会自动关闭了&#xff1a; ./resin.sh -conf /u02/resin4/conf/resin.xml -server app-0 startmyeclipse可以在 Optional program arguments里面填写&#xff1a;-server app-0

[css] 你有使用过vmax和vmin吗?说说你对它们的理解

[css] 你有使用过vmax和vmin吗&#xff1f;说说你对它们的理解 vmax和vmin都是相对于窗口大小的长度单位。100vmax相当于100%当前窗口长或者宽的长度&#xff0c;取其中最大值&#xff0c;vmin反之。如果css函数max()和min()普及后&#xff0c;100vmax相当于max(100vw, 100vh)个…

BZOJ 1086 [SCOI2005]王室联邦(树分块)

题意&#xff1a;中文题&#xff0c;略 思路&#xff1a;秦皇岛前就一直想学&#xff0c;后来没怎么想通&#xff0c;就算了。现在雅不是很懂&#xff0c;一直似懂非懂的&#xff0c;对于树分块的种类&#xff0c;有位聚聚已经整理好了&#xff08;传送门&#xff09;&#xff…

svn locked解决方法

方法一.直接进行cleanup&#xff1b;对较小的文件比较管用&#xff0c;文件稍大些等待时间很长或不起作用&#xff1b; 方法二.选择文件&#xff0c;右键执行release lock&#xff1b;等待时间较长&#xff1b; 方法三.手动删除锁定文件(推荐)&#xff1a; 在运行中输入cmd进入…

[包计划] node-fs-extra

node-fs-extra fs-extra 添加了未包含在 fs 模块中的文件系统方法&#xff0c;并为 fs 方法添加了 promise 支持。 const fs require(fs-extra)// Async with promises: fs.copy(/tmp/myfile, /tmp/mynewfile).then(() > console.log(success!)).catch(err > console.er…