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[]; 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") == || strcmp(ch, "y") == )/*判断是否要显示查找到的信息*/
{
showmenu(); /*显示菜单*/
}
else
{
exit();
}
} /*显示主菜单,连接数据库*/
int main()
{
int n; //定义变量 存储用户输入的编号 showmenu(); /*显示菜单*/ scanf("%d", &n);/*输入选择功能的编号*/ while (n)
{
mysql_init(&mysql); //初始化mysql结构 switch (n)
{
case :
ShowAll(); /*调用显示所有图书数据的过程*/
break;
case :
AddBook(); /*添加图书信息*/
break;
case :
ModifyBook(); /*修改图书信息*/
break;
case :
DeleteBook(); /*删除图书信息*/
break;
case :
QueryBook(); /*查询图书信息*/
break;
case :
exit(); /*退出*/
default:break;
}
system("PAUSE");
system("CLS");
inquire(); scanf("%d", &n);
}
} //显示所有的图书信息
void ShowAll()
{
//连接数据库
if (!mysql_real_connect(&mysql,"localhost","root","root","db_books",,NULL,)) //连接数据库成功,返回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[], row[], row[], row[]); //输出这行记录 [相当于从文件中取出数据,所以使用了fprintf]
}
printf("\t ════════════════════════════ \n");
}
else
{
printf("\n 没有记录数据! \n");
} mysql_free_result(result); //释放结果集
} mysql_close(&mysql); //释放连接
}
} void AddBook() /*添加图书信息*/
{
int rowcount; /*结果集中的行数*/ char id[]; /*编号*/
char *bookname; //图书名称
char *author; //图书作者
char *bookconcern; char *sql; //数据库字符串
char dest[] = { " " }; /*连接数据库*/
if (!mysql_real_connect(&mysql, "localhost", "root", "root", "db_books", , NULL, ))
{
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[])) //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();
author = (char*)malloc();
bookconcern = (char*)malloc(); //不存在相同的编号
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) != ) //将dest插入到数据库中(db_books)
{
fprintf(stderr, "\t 不能插入记录!", mysql_error(&mysql));
}
else
{
printf("\t 插入成功!\n");
}
mysql_free_result(result); //释放结果集
}
mysql_close(&mysql); //释放连接
}
} void QueryBook() /*查询图书信息*/
{
char id[]; /*结果集中的行数*/
char *sql;
char dest[] = { " " }; if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", , NULL, ))
{
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[], row[], row[], row[]); //输出这行记录
}
printf("\t ════════════════════════════ \n");
}
else
{
printf("\t 没有发现要查询的信息!\n");
}
mysql_free_result(result); //释放结果集
}
mysql_close(&mysql); //释放连接
}
} //修改图书信息
void ModifyBook()
{
char id[]; /*结果集中的行数*/
char *sql;
char dest[] = { " " };
char dest1[] = { " " }; char *bookname;
char *author;
char *bookconcern; if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", , NULL, ))
{
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") == || strcmp(ch, "y") == )/*判断是否要显示查找到的信息*/
{
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[], row[], row[], row[]); //输出这行记录
}
printf("\t ════════════════════════════ \n");
} printf("\t Modify?(y/n)");
scanf("%s", ch);
if (strcmp(ch, "Y") == || strcmp(ch, "y") == ) /*判断是否需要录入*/
{ sql = "update db_books set bookname= '";
strcat(dest1, sql);
// printf("%s",sql);
bookname = (char*)malloc();
author = (char*)malloc();
bookconcern = (char*)malloc(); 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) != )
{
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[]; /*结果集中的行数*/
char *sql;
char dest[] = { " " };
char dest1[] = { " " };
if (!mysql_real_connect(&mysql, "127.0.0.1", "root", "root", "db_books", , NULL, ))
{
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") == || strcmp(ch, "y") == )/*判断是否要显示查找到的信息*/
{
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[], row[], row[], row[]); //输出这行记录
}
printf("\t ════════════════════════════ \n");
} printf("\t 是否删除?(y/n) ");
scanf("%s", ch);
if (strcmp(ch, "Y") == || strcmp(ch, "y") == ) /*判断是否需要录入*/
{
sql = "delete from tb_book where ID= ";
printf("%s", dest1);
strcat(dest1, sql);
strcat(dest1, id);
// printf("%s",dest1); if (mysql_query(&mysql, dest1) != )
{
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

c语言小项目-使用mysql数据库的图书管理系统的更多相关文章
- 一个项目中mysql数据库经常死锁的问题解决记录
1.问题描述 此项目为一个物流系统,需要使用PDA对货物进行入库.备货.出货等操作,在系统开发测试过程中,经常发现死锁问题. 有这样一种业务场景:仓库对备货单上货进行扫码备货后,点击"完成& ...
- 项目--解决MySQL数据库插入中文乱码
转载自:http://blog.csdn.net/zzh920625/article/details/51226312 情景再现] 如图,在项目中使用MySQL数据库,在做插入操作时,写入英文字符没有 ...
- ASP.NET项目使用MYSQL数据库部署到IIS服务器找不到请求的.Net Framework Data Provider解决方案
使用MySQL开发过程中在自己的机器上跑项目是没有问题的,但在实际部署到服务器上的时候就发生“找不到请求的.Net Framework Data Provider解决方案”错误,在排除项目本身原因之后 ...
- idea启动项目连接mysql数据库后台报duplicate name异常
自己写的sql语句在MySQL数据库中运行是没有问题的 但是在使用idea启动项目的时候,后台在运行这行sql语句的时候居然报错了,duplicate name:重复的名字,最后自己经过思考,修改了一 ...
- 【入门】Spring-Boot项目配置Mysql数据库
前言 前面参照SpringBoot官网,自动生成了简单项目点击打开链接 配置数据库和代码遇到的问题 问题1:cannot load driver class :com.mysql.jdbc.Drive ...
- java 项目连接MySQL数据库
1.导入jar包 mysql-connector-java-5.1.35百度云链接如下: 链接:https://pan.baidu.com/s/1DPvIwU_An4MA3mU5bQa6VA 密码:5 ...
- python3开发进阶-Django框架学习前的小项目(一个简单的学员管理系统)
''' 自己独立写一个学员管理系统 表结构: 班级表: -id -grade_name 学生表: -id -student_name -grade 关联外键班级表 老师表: -id -teacher_ ...
- delphi+mysql做的图书管理系统,怎么把mysql数据库也一起打包进去?我用的是delphi的Express组件。
sqlconnection,sqlquery1这些组件,我连接数据库的时候是用对象编辑器里的属性进行连接的,在sqlconnection中指定了字符集utf8,有些人做的方法是利用代码连接的数据库,如 ...
- 使用JDBC连接了数据库的图书管理系统2.0
更新日志: 2019.3.28 数据库版本2.0 1.使用mySQL数据库 2.修改代码使用JDBC连接数据库 3.新增Manage操作类及DBUtils数据库工具类 4.完善代码(封装及方法调用) ...
随机推荐
- noip模拟赛 集合
分析:感觉像是贪心,再看数据范围这么大,肯定是贪心没错.但是要怎么贪呢?主要的思想是让每次往上加的数尽量多,肯定要先把0分裂,如果能正好一起跳到最终状态就好.举个例子:5,3,2,1,最大值比次大值大 ...
- 常用生产环境的PHP安装参数
./configure --prefix=/usr/local/php5. --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/b ...
- Linux下汇编语言学习笔记55 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- ***每天一个linux命令(5):rm 删除命令
昨天学习了创建文件和目录的命令mkdir ,今天学习一下linux中删除文件和目录的命令: rm命令.rm是常用的命令,该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所 ...
- 从零开始写STL—容器—vector
从0开始写STL-容器-vector vector又称为动态数组,那么动态体现在哪里?vector和一般的数组又有什么区别?vector中各个函数的实现原理是怎样的,我们怎样使用会更高效? 以上内容我 ...
- 百度语音识别API初探
近期想做个东西把大段对话转成文字.用语音输入法太慢,所以想到看有没有现成的API,网上一搜,基本就是百度和讯飞. 这里先看百度的 笔者使用的是Java版本号的 下载地址:http://bos.nj.b ...
- 【Record】ART:Android RunTime
资料来自url=9xdxrhR45Uj3p450JQvTUO-dmzcWswNmABVgYAaFS0AXYDi8Q2JOzvu7y33GIOAI_8Lz7JmLrl0x6DoRW8e5oa" ...
- Ext sqlserver C# 数据库备份还原代码,给大家参考下
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %& ...
- 【跟我一步一步学Struts2】——登陆样例
本篇博客通过一个简单的登陆小样例来入门,简单了解一下struts2是怎样工作的: 第一步引入Jar包: commons-fileupload-1.2.1.jar,文件上传 commons-loggin ...
- IIS网站无法启动,提示 另一个程序正在使用此文件
s还用netstat -ano命令,观察哪一个进程正在使用80端口,任务管理中勾选PID,看看是哪个程序,关掉即可