数据库系统 图书管理系统 C语言

数据库系统 图书管理系统 C语言

1. 实验环境配置

实验所需环境:Visual Studio 2022以及MySQL.

配置环境过程:

  1. 下载并安装MySQL。

  2. 下载并安装Navicat Premium使SQL可视化更方便。

  3. 将VS和MySQL进行连接,步骤如下:

    1. 打开项目属性

      image-20220419143933932
    2. C/C++—常规—附加包含目录—添加MySQL include路径

      (注意这里的路径是你安装mysql时候的路径)

      image-20220419144117372

    3. 连接器—常规—附加库目录—添加lib路径

      image-20220419144221411

    4. 链接器—输入—附加依赖项—添加libmysql.lib

      image-20220419144321451

    5. 后续在代码中添加#include "mysql.h"即可使用MySQL库。

2. mysql.h库函数解析

参考:(1条消息) C++ 连接数据库代码_Mr.禾的博客-CSDN博客_c++连接数据库代码

mysql_init

获得或初始化一个MYSQL结构。

image-20220419145951845

mysql_real_connect

连接一个MySQL服务器。

image-20220419150049100

mysql_query

执行指定为一个空结尾的字符串的SQL查询。

需要注意的是,返回0是执行成功,返回1是执行失败。

后续的每一个具体模块都是通过此函数在MySQL中执行语句,需要实现的就是创建MySQL语句字符串即可,需要注意字符串结尾不是;而是\0

image-20220419150203987

mysql_store_result

检索一个完整的结果集合给客户。

需要注意的是,本函数可能返回空值,因此在判断select是否有返回值时,需要判断返回的字符串是否为nullptr。

image-20220419150249685

mysql_query(&mysql, "set names gbk")

防止中文查询结果乱码。

mysql_query(&mysql, "SET CHARACTER SET GBK")

保证插入成功。

在实际设计中,创建符合MYSQL语法的query语句(结尾为’\0’),然后使用mysql_query函数执行该语句。

3. 具体实现

3.1 数据库连接
bool ConnectDatabase() {
	mysql_init(&mysql);
	const char host[] = "localhost";//在本地创建的数据库
	const char table[] = "library";//数据库的名称
	const char user[] = "root";//设置的登录用户名
	const char psw[] = "111111";//设置的登录密码
	const int port = 3306;//端口
    
    //使用库函数mysql_real_connect进行数据库连接
	if (!(mysql_real_connect(&mysql, host, user, psw, table, port, NULL, 0))) {
		printf("连接失败!!\n");
		return false;
	}
	else {
		printf("成功连接~\n");
		return true;
	}
}
3.2 查询语句实现(以管理员登录为例)

image-20220505234930850

SA存储在library数据库的SA表中,包含ID和pas等信息。

若能够成功的管理员登陆,即为在SA表中含有输入的ID和密码组合,那么成功登录。

bool login() {
	int choice;
	choice = 0;
	do {
		printf("请选择登录模式:1 普通用户  2 管理员 -1 退出\n");
		scanf("%d", &choice);
		if (choice == 1) {
			return false;
		}
		else if (choice == 2) {
			char pass[30];
			printf("请输入编号:");
			scanf("%s", &user);
			printf("请输入密码:");
			scanf("%s", &pass);
            //创建query语句
			strcpy(query, "select * from sa where id = ");
			strcat(query, user);
			strcat(query, " and pas = '");
			strcat(query, pass);
			strcat(query, "'");
			mysql_query(&mysql, "set names gbk");
			mysql_query(&mysql, query);
			char* str_field[32];  //定义一个字符串数组存储字段信息
			res = mysql_store_result(&mysql);
			for (int i = 0; i < 4; i++)   //在已知字段数量的情况下获取字段名 
			{
				str_field[i] = mysql_fetch_field(res)->name;	//返回一个所有字段结构的数组。
			}
			//打印获取的数据  
			column = mysql_fetch_row(res);  //在已知字段数量情况下,获取并打印下一行  
			//如果是空值,即没有这个SA,可能是账号密码输错了
            if (column==nullptr) {
				printf("请检查输入的账号密码或重新选择登录模式!!\n");
				continue;
			}
			else {
				printf("登陆成功~\n");
				return true;
			}
		}
	} while (choice != -1);
}
3.3 插入/删除语句实现
void insertbook() {
	int num;
	printf("请输入你要插入的书的个数:");
	scanf("%d", &num);
	char query[1000];
	char values[100];
	getchar();
	int i;
	for (i = 0; i < num; i++) {
		gets_s(values);
		mysql_query(&mysql, "SET CHARACTER SET GBK");
		strcpy(query, "INSERT INTO book values");
		strcat(query, values);
		if (mysql_query(&mysql, query)) {
			printf("插入成功!\n");
		}
		else {
			printf("第%d条数据插入失败,请检查。\n", i + 1);
		}
	}
}

输入的信息文件类似:

(101,'摄影','绘画、摄影、电影','华中科技大学出版社',2021,'拉兹洛·莫霍利-纳吉',49.80,1,1)
(102,'摄影','新视觉 : 从材料到建筑','重庆大学出版社',2020,'拉兹洛·莫霍利-纳吉',38.00,2,2)
(103,'摄影','森山大道','北京美术摄影出版社',2017,'森山大道',98.00,2,2)
(104,'摄影','电视摄像','上海交通大学出版社',2018,'滕方',56.00,1,1)
(105,'摄影','拍出电影感','九州出版社',2021,'屠明非',180.00,1,1)
(106,'摄影','摄影曝光','浙江摄影出版社',2020,'屠明非',48.00,1,0)
(107,'摄影','风光的超越 : 摄影的审美探索','浙江摄影出版社',2020,'戴维·沃德',55.00,3,3)
(108,'摄影','风光的内在 : 摄影师的洞察力与灵感','浙江摄影出版社',2017,'戴维·沃德',55.00,1,1)
(109,'建筑','高层建筑结构设计','武汉大学出版社',2021,'白国良',58.00,2,1)
(110,'建筑','江南传统建筑文化及其对当代建筑创作思维的启示','东南大学出版社',2020,' 陈鑫',78.00,2,2)
(111,'建筑','意大利古建筑散','清华大学出版社',2021,'陈志华',68.00,2,1)
(112,'建筑','觉筑生生 : 可持续建筑的人文之道','东南大学出版社',2021,'高云亭',68.00,4,1)
(113,'建筑','民用建筑空气调节','中国建筑工业',2021,'公绪金',49.00,11,7)
(114,'建筑','平城京奈良 : 古代的都市规划与营建','上海人民出版社',2021,'宫本长二郎',298.00,5,5)
(115,'建筑','智能建筑节能技术研究','北京工业大学出版社',2020,'姜杰',52.00,3,0)
(116,'建筑','点构与建筑','江苏凤凰美术出版社',2020,'姜妍',88.00,1,1)
(117,'建筑','建筑构造','中国建筑工业出版社',2021,'姜勇',69.00,10,7)
(118,'建筑','建筑工程拆除技术与组织','中国建筑工业出版社',2021,'李永福',48.00,2,0)
(119,'建筑','陕北窑洞建筑及其装饰中的匠作彩画研究','中国原子能出版社',2018,'李玉龙',58.00,2,1)
(120,'建筑','装配式建筑数字化管理与实践','中国建筑工业出版社',2021,'李政道',59.00,7,3)

此处也可以写成文件输入,加入文件读写头文件即可。但需要防止中文乱码,需要更改txt的编码模式,方式如下:

文件-另存问-编码模式选择ANSI

image-20220505235256291

void insertbook() {
	printf("请输入你要导入的图书所在的文件名:");
	char filename[30];
	scanf("%s", &filename);
	FILE* fp;
	fp = fopen(filename, "r");
	if (fp == NULL) {
		printf("打开文件错误!");
		return;
	}

	char values[1000];
	while (!feof(fp)) {
		fgets(values, 1000, fp);
		mysql_query(&mysql, "set names gbk");
		mysql_query(&mysql, "SET CHARACTER SET GBK");
		strcpy(query, "INSERT INTO book values");
		strcat(query, values);
		if (!mysql_query(&mysql, query)) {
			printf("插入成功!\n");
		}
		else {
			printf("插入失败,请检查。\n");
		}
	}
	fclose(fp);
}

删除与插入基本相同,在创建query字符串时更改即可,此处不多赘述。

3.4 书余量自动更新

借助数据库中的trigger

CREATE TRIGGER add_stock AFTER UPDATE ON borrow FOR EACH ROW
BEGIN
		UPDATE book 
		SET stock = stock + 1 
	WHERE
	bno = old.bno and old.return_date is null and new.return_date is not null;
END

心得

差不多就是上面这样,其实写起来也挺简单的,不需要配很久环境其实,主要任务就是创建SQL语句。

(没写UI,如果需要的话可以自己加,我不是很会555)

  • 1
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 引 言 3 1.1 问题的提出 3 1.2 任务与分析 3 2 程序主要功能 4 2.1添加功能 4 2.2删除功能 4 2.3显示功能 4 2.4查找功能 4 2.5修改功能 4 3 程序运行平台 5 4 总体设计 5 5 数据库设计说明 6 5.1 需求分析 6 5.2 数据库概念设计 7 5.3数据库物理设计 11 5.4 数据库逻辑设计 13 6 模块分析 18 6.1 系统管理模块 18 6.2图书信息模块 21 6.3 借阅信息模块 23 6.4 读者信息模块 25 7 系统测试 27 8 小组分工 34 9 参考文献 34 10 结论 34 1 引 言 1.1 问题的提出 图书管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。 编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加借书证、查询借书证、删除借书证、借书信息、借书限制等智能化管理过程。图书管理者只需略懂电脑知识就可以简易的操作该图书管理系统。 1.2任务与分析 本课题主要的目的是: 1.强化和巩固理论基础,掌握数据库编程的基本技巧; 2.要求用C/C++语言或其它语言及相应开发环境,实现一个小型完整程序的设计与开发; 3.巩固深化所学课程的知识,培养学生运用知识,分析和解决实际问题的能力。 系统概述: 1.图书管理: 每种图书都有书名、书号(ISBN)、一名或多名作者(译者)、出版社、定价和内容简介。图书信息登入、查询和维护。 2.借书证管理,包括申请、注销借书证,查询借书证持有人等。借书证记录有借阅者的姓名、所在单位、职业等。 3.凭借书证借书,每次最多能借8本书。借书期限最长为30天。 4.借还图书、资料的登记、超期处理,超期拒借等。 5.图书、资料查询,借、还图书和资料情况查询。 6.图书、资料借阅情况的统计分析,拒此作为图书图书、资料订够的依据之一。 设计要求: 1.进行需求分析,编写数据字典。 2.设计E-R图。 3.实现新进图书的数据录入。 4.实现对所有购进图书的分类查询和分类统计。 5.能够按书名、作者等分类查询现有图书的数量。 6.记录借阅者的个人资料和所借图书的书名、书号数据等。 2程序的主要功能 2.1添加功能 添加一本图书的基本信息,包括书名、书号、名作者(译者)、出版社和图书简介。 添加图书借阅的基本信息,包括书号,借书证号,借书日期,应还书日期。 2.2删除功能 删除一本图书的基本信息,删除读者的基本信息,删除图书借阅基本信息。 2.3显示功能 显示所有图书信息,包括图书代码,图书名称,作者,出版社和简介。 显示所有借阅信息,包括读者号,图书号,借书日期,应还书日期。 2.4查找功能 图书信息查找,可以更具图书代码,图书名称,作者,出版日期和出版社进行查找。 读者信息查找,可更具读者姓名,读者编号,年龄,性别和所在系进行查找。 借阅信息查询,可更具图书编号和读者编号进行查询。 2.5修改功能 对图书和读者的信息进行修改。 3 程序运行平台 VS 2008(C#) SQL Server 2005 Windows Xp (sp3) 4系统总体框架图 图4.1 系统总体框架图 5 数据库设计说明 5.1、需求分析 1.1信息需求 在数据库Library中需要设计如下所示的数据字段和数据: 图书信息---dbo.libary,包括:图书编号、图书名称、作者、出版日期、出版社和简介。 借阅登记---dbo.jy,包括:读者编号、图书编号、借书日期、应还书日期。 系统用户---dbo.manage,包括:密码、用户名。 读者----dbo.reader,包括:读者编号、读者姓名、性别、所在系、年龄。 1.2处理需求 此数据库系统应用于图书馆的图书基本信息管理、读者信息管理、图书借阅管理等主要功能。 具体功能如下: 1.2.1.基本信息管理 一、图书信息 图书信息管理部分:主要包括图书信息的添加、修改、删除和查询。此功能为图书的分类管理提供依据。 图书信息管理部分:主要包括图书基本信息的添加、修改、删除和查询。 退出系统。 二、读者信息 读者信息管理部分:主要包括读者信息的添加、修改、删除和查询。此功能为读者信息管理提供依据。 读者管理部分:主要包括读者的基本信息的添加、修改、删除和查询。 退出系统。 三、借阅信息 借阅信息管理部分:主要包括借阅信息的添加、查询。此功能为借阅信息管理提供依据。 读者管理部分:主要包括读者的基本信息的添加、和查询。 退出系统。 1.2.2图书借阅管理 图书借阅管理部分:主要包括图书借阅、和借阅查询。 1.2.3系统用户管理 用户管理部分:只有Admin系统用户有权限进入图书管理系统并对相应信息进行管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值