# 基于C语言和SQL SERVER数据库实现的图书管理系统
# 摘 要
本文根据《数据库应用系统设计》课程要求而做。选择图书馆管理系统设计与开发是因为觉得图书馆管理系统对我们的帮助很大,并且经常去图书馆,对图书馆的大部分功能及流程还是比较了解,而且现在有些地方可能还不够完善。这次课程设计目标是建立一个比较好的图书馆管理系统,方便学生查询,方便管理员管理,节省时间,提高效率。
**关键词**:图书馆数据库,图书馆管理系统,嵌入式SQL
# 第1章 概述
## 1.1 项目背景
随着科技的发展,尤其是计算机技术的迅猛发展,图书馆管理的问题从以往的人工管理,到现在的电脑化,系统化,是对图书馆管理方法的质的飞跃,这些技术不仅让图书馆管理变得更加方便、快捷、提高效率,对于用户来说也是有极大地帮助,系统化的图书馆让人们可以更方便的去找书,借书,还书等等一系列的功能,从而让图书馆实现了它的最大化价值。同时对于图书馆本身来说,通过系统,它可以提高图书管理的效率,也是图书馆的科学化、正规化管理的最好方法。所以,图书馆管理系统的研究开发,是一个特别值得去做的研究。
## 1.2 编写目的
根据所学的数据库系统与程序设计的知识,针对图书管理系统,进行系统的需求分析,系统设计,数据库设计,编码,测试等,完成题目要求的功能,从而达到掌握开发一个小型数据库的目的。
## 1.3 软件定义
本系统采用VC++6.0集成开发系统作为前台开发Windows窗体控制平台,采用SQL Server 2008作为后台数据库的管理程序。
## 1.4 开发环境
本系统适合运用于图书馆针对管理借阅者借阅图书。
下面简单介绍一下本系统的运行环境:
- 操作系统:Windows 7
- 数据库服务器:Microsoft SQL Server2008
- 编程工具:VC++6.0
- 绘图工具:Microsoft Visio 2010
# 第2章 需求分析
## 2.1 问题陈述
### 2.1.1 基本功能
图书管理系统,实现读者信息的借阅证号、姓名、年龄、职业等信息的管理;实现对图书信息的图书号、作者名、出版社、单价等信息点的管理,实现借阅信息的借阅证号、书号、时间等信息的管理,实现对逾期读者的管理。
### 2.1.2 数据库需要实现的功能
创建存储过程查询图书的数量;创建视图查询借阅逾期信息;创建触发器当增加、删除、修改读者信息或者图书信息时自动修改相应表的数据更新;建立数据库相关表之间的参照完整性约束。
### 2.1.3 系统需要实现的功能
能实现以下主要功能:
- 图书基本情况的录入、修改、删除等基本操作
- 实现借书功能
- 实现还书功能
- 实现对所有购进图书的分类查询和分类统计
- 能够按书名、作者等分类查询现有图书的数量
- 对超期的情况能自动给出提示信息
## 2.2 业务处理流程
![](http://www.writebug.com/myres/static/uploads/2021/10/19/48850ba7435856348b27467db631a8fa.writebug)
## 2.3 数据流图
**图书管理系统数据流图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/8f4fc77cb760515cb825070779fa276c.writebug)
**读者借书还书数据流图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/e6294e16e5e75d8d8a3ea7f1dece20e6.writebug)
**读者查询图书数据流图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/f89996d37a0b4b462553d9c8e2e8638d.writebug)
**采购员采购图书数据流图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/03f020008bab8ec911297dc59c198592.writebug)
**管理员维护图书馆数据流图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/25659801762f35060ef97190b0301a77.writebug)
## 2.4 数据字典
### 2.4.1 图书管理员
```sql
Admin_id CHAR(7)
Admin_password CHAR(8)
Admin_name NCHAR(5)
```
### 2.4.2 读者
```sql
Reader_id CHAR(7)
Reader_password CHAR(8)
Reader_name NCHAR(5)
Reader_sex NCHAR(1)
Reader_age TINYINT
Reader_Company NVARCHAR(20)
Reader_work NVARCHAR(20)
```
### 2.4.3 图书信息表
```sql
Book_id CHAR(6)
Book_name NVARCHAR(20)
Book_writer NCHAR(5)
Book_publisher NVARCHAR(20)
Book_price SMALLINT
Book_introduction NVARCHAR(100)
Book_type NVARCHAR(20)
```
### 2.4.4 借阅信息表
```sql
Reader_id CHAR(7)
Book_id CHAR(6)
Borrow_time DATE
```
### 2.4.5 图书馆采购员
```sql
Shopper_id CHAR(7)
Shopper_name NCHAR(5)
Shopper_sex NCHAR(1)
Shopper_age TINYINT
```
### 2.4.6 图书采购信息表
```sql
Shopper_id CHAR(7)
Book_id CHAR(6)
Shop_time DATE,
```
### 2.4.7 图书历史借阅表
```sql
Reader_id CHAR(7)
Book_id CHAR(6)
Borrow_time DATE
Return_time DATE
```
# 第3章 概念结构设计
## 3.1 ER模型图
### 3.1.1 实体ER图
**图书ER图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/613bd8f35e8945397bd4c21ef73c38bf.writebug)
**图书管理员ER图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/aa09a9a20f2ab438dc2a819e35a99b7c.writebug)
**图书采购员ER图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/2b7c2beba7d486026d7b34030b04d0c9.writebug)
**读者ER图**
![](http://www.writebug.com/myres/static/uploads/2021/10/19/3992991a3bb4053923478ecac24f8d48.writebug)
### 3.1.2 实体联系ER图
![](http://www.writebug.com/myres/static/uploads/2021/10/19/a7233b195d3bc1f21dbdac3590c2a5d7.writebug)
### 3.1.3 完整ER模型图
![](http://www.writebug.com/myres/static/uploads/2021/10/19/b91f9e44151c78e89879f3e7de6b725e.writebug)
# 第4章 逻辑结构设计
## 4.1 关系模式
针对图书管理信息系统的需求,通过对借书流程的分析以及对ER图的分析,设计如下面的关系模式:
- 读者信息表,包括的数据项有:(借阅证号、密码、姓名、性别、年龄、所在单位、职业)
- 图书信息表,包括的数据项有:(书号、书名、作者、出版社、价格、内容简介、图书类型、库存)
- 借书信息表,包括的数据项有:(书号、借书时间、借阅证号)
- 还书信息表,包括的数据项有:(书号、还书时间、借阅证号)
- 管理员信息表,包括的数据项有:(管理员号、密码、姓名)
- 采购员信息表,包括的数据项有:(采购员号、姓名、性别、年龄)
- 采购信息表,包括的数据项有:(采购员号、书号、采购时间)
## 4.2 规范化基本表
经过对初始关系模式的规范化处理,以下关系模式中不存在部分函数依赖和传递函数依赖,已经达到3NF。
- 读者信息表,包括的数据项有:(**借阅证号**、密码、姓名、性别、年龄、所在单位、职业)
- 图书信息表,包括的数据项有:(**书号**、书名、作者、出版社、价格、内容简介、图书类型)
- 借阅信息表,包括的数据项有:(**书号**、**借阅证号**、借书时间)
- 管理员信息表,包括的数据项有:(**管理员号**、密码、姓名)
- 采购员信息表,包括的数据项有:(**采购员号**、姓名、性别、年龄)
- 采购信息表,包括的数据项有:(**采购员号**、**书号**、采购时间)
- 借阅历史表,包括的数据项有:(**书号**、**借阅证号**、**借书时间**、还书时间)
模型中画双划线的是主码,并且借阅证号和书号是借阅关系的外码,采购员号和书号是采购关系的外码。书号、借阅证号、借书时间是借阅历史表的外码。
## 5.3 数据库关�