有一天老师就给我们来一到这样的题:
设计一个图书馆管理系统的数据库,要求实现:
1,读书
2,工作人员
3,图书的借阅和流通等信息的管理
(按论文的格式提交)
字数:3000字(三个星期内交)
我晕掉,虽然说老师教的那些东西在课堂上教的知识再加上上机实习,应该有一个基本的了解,可是他出的这一题真的让我毫无思路,原因可能有两点:1,对图书馆管理不熟悉 2,没写过论文.
请各位给我思路,最好能提供这方面的资料.100分送上!!!!!
12 个解决方案
#1
以前的一个老帖参考一下:
1. 图书的条码号是不是应该设为13位?是用整数形式好还是用字符串好?
2. 为了进行图书检索,可是是用书名关键字、图书简介关键字,请问是不是需要为这些字建立数据表?还是应该是用模糊查询?
如果建立相对于关键字的表,那么美条纪录的字段数就没法固定,遇到这种情况怎么处理?
3. 为了图书的检索,是不是应该对于图书信息表(保存图书的基本信息)中的条码号、图书名称、出版社、作者等等建立索引表?
4. 把读者的信息分为两部分,读者基本信息和读者附加信息,作为两个表,只有读者基本信息才会在平时的借阅、归还当中经常用到,是不是合适?
5. 如果要将一部分电子图书组织到数据库一个单独表当中以方便读者网上阅读、下载,电子图书的信息应该怎样组织?是不是应该把图书的路径写到数据表当中。
6. 若要将一部分电子文档(文本格式),组织入库,应该怎么样?也需要使用填写路径的方式吗?还是需要其他的数据关系系统,直接将问当内容写入数据表?
-----------------------------------
1.字符型.
2.建立对应的字段.
3.当然应该
4.没必要
5.建议只保存图书的路径(速度)
6.若要将文件保存到数据中,可以参考我的贴子:
http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.7376825
交流--数据库中存/取文件
1. 图书的条码号是不是应该设为13位?是用整数形式好还是用字符串好?
字符串 char(13)
2. 为了进行图书检索,可是是用书名关键字、图书简介关键字,请问是不是需要为这些字建立数据表?还是应该是用模糊查询?
是,建立关键字可以提高查询速度
如果建立相对于关键字的表,那么美条纪录的字段数就没法固定,遇到这种情况怎么处理?
这样建:
create table 关键字表 (id,文章id,关键字)
insert 关键字表(1,1,'aa')
insert 关键字表(2,1,'bb')
insert 关键字表(3,1,'cc')
3. 为了图书的检索,是不是应该对于图书信息表(保存图书的基本信息)中的条码号、图书名称、出版社、作者等等建立索引表?
你不是有图书信息表吗,直接检索图书信息表,就可以了
4. 把读者的信息分为两部分,读者基本信息和读者附加信息,作为两个表,只有读者基本信息才会在平时的借阅、归还当中经常用到,是不是合适?
如果一个读者有多个附加信息就你这样做,如果没有就合并为一个表
5. 如果要将一部分电子图书组织到数据库一个单独表当中以方便读者网上阅读、下载,电子图书的信息应该怎样组织?是不是应该把图书的路径写到数据表当中。
对,放路径,这样方便,也不影响数据库性能
6. 若要将一部分电子文档(文本格式),组织入库,应该怎么样?也需要使用填写路径的方式吗?还是需要其他的数据关系系统,直接将问当内容写入数据表?
不用写路径是最好的方式。顺便给你个写文件到库的方法:
用image类型
方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str
2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x)
insert 表名 values(2,0x)
go
3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2
go
4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
go
1. 条码用字符型去描述好些,大多数软件中都是用字符串去描述的。
2。图书馆中的书是全部要用建档的,用模糊查询就可以解决啊。
在MSSQL中的方法 select * from 书档案 where [书名] like '%书关键字%'
3。索引的定义应该是随你自己而定的,主要是看你实现的功能当中,主要以哪几种查询为主
对于查询引用比较多的时候可以考虑建立索引,如果你自己的编码中比较规范,也可以建
立聚族索引的。索引定义考虑定义多一些的,因为图书馆方面的软件中的图书档案主要是
以读取的情况比较多。
4。可以这样解决,如果你不怕麻烦的情况下。
5。你的实现方式可以,另外一种也可以把文件整个存到数据库也可以的。
6。如果将图书组织到库中,对文本型的字段可以考虑用TEXT型,其它类型可以用IMAGE类型解决啊。
谢谢楼上的指点,我觉得因为读者的数据有一部分载大多数情况下使用不到的,最频繁的操作就是借阅、归还这时候只需要一些基本数据就可以了,如果将所有的数据都放到一个表当中是不是对于检索速度有影响?
有影响啊。
但是只要你的索引建立比较合理的情况下,
也没有问题的。
你经常写在WHERE字句的字段建立索引比较好。
而且还有一点很重要的。
就是WHERE字句的字段一定要与索引建立的字段顺序一致!!!
否则SELECT就利用不到索引。
1. 图书的条码号是不是应该设为13位?是用整数形式好还是用字符串好?
2. 为了进行图书检索,可是是用书名关键字、图书简介关键字,请问是不是需要为这些字建立数据表?还是应该是用模糊查询?
如果建立相对于关键字的表,那么美条纪录的字段数就没法固定,遇到这种情况怎么处理?
3. 为了图书的检索,是不是应该对于图书信息表(保存图书的基本信息)中的条码号、图书名称、出版社、作者等等建立索引表?
4. 把读者的信息分为两部分,读者基本信息和读者附加信息,作为两个表,只有读者基本信息才会在平时的借阅、归还当中经常用到,是不是合适?
5. 如果要将一部分电子图书组织到数据库一个单独表当中以方便读者网上阅读、下载,电子图书的信息应该怎样组织?是不是应该把图书的路径写到数据表当中。
6. 若要将一部分电子文档(文本格式),组织入库,应该怎么样?也需要使用填写路径的方式吗?还是需要其他的数据关系系统,直接将问当内容写入数据表?
-----------------------------------
1.字符型.
2.建立对应的字段.
3.当然应该
4.没必要
5.建议只保存图书的路径(速度)
6.若要将文件保存到数据中,可以参考我的贴子:
http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.7376825
交流--数据库中存/取文件
1. 图书的条码号是不是应该设为13位?是用整数形式好还是用字符串好?
字符串 char(13)
2. 为了进行图书检索,可是是用书名关键字、图书简介关键字,请问是不是需要为这些字建立数据表?还是应该是用模糊查询?
是,建立关键字可以提高查询速度
如果建立相对于关键字的表,那么美条纪录的字段数就没法固定,遇到这种情况怎么处理?
这样建:
create table 关键字表 (id,文章id,关键字)
insert 关键字表(1,1,'aa')
insert 关键字表(2,1,'bb')
insert 关键字表(3,1,'cc')
3. 为了图书的检索,是不是应该对于图书信息表(保存图书的基本信息)中的条码号、图书名称、出版社、作者等等建立索引表?
你不是有图书信息表吗,直接检索图书信息表,就可以了
4. 把读者的信息分为两部分,读者基本信息和读者附加信息,作为两个表,只有读者基本信息才会在平时的借阅、归还当中经常用到,是不是合适?
如果一个读者有多个附加信息就你这样做,如果没有就合并为一个表
5. 如果要将一部分电子图书组织到数据库一个单独表当中以方便读者网上阅读、下载,电子图书的信息应该怎样组织?是不是应该把图书的路径写到数据表当中。
对,放路径,这样方便,也不影响数据库性能
6. 若要将一部分电子文档(文本格式),组织入库,应该怎么样?也需要使用填写路径的方式吗?还是需要其他的数据关系系统,直接将问当内容写入数据表?
不用写路径是最好的方式。顺便给你个写文件到库的方法:
用image类型
方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str
2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x)
insert 表名 values(2,0x)
go
3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2
go
4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
go
1. 条码用字符型去描述好些,大多数软件中都是用字符串去描述的。
2。图书馆中的书是全部要用建档的,用模糊查询就可以解决啊。
在MSSQL中的方法 select * from 书档案 where [书名] like '%书关键字%'
3。索引的定义应该是随你自己而定的,主要是看你实现的功能当中,主要以哪几种查询为主
对于查询引用比较多的时候可以考虑建立索引,如果你自己的编码中比较规范,也可以建
立聚族索引的。索引定义考虑定义多一些的,因为图书馆方面的软件中的图书档案主要是
以读取的情况比较多。
4。可以这样解决,如果你不怕麻烦的情况下。
5。你的实现方式可以,另外一种也可以把文件整个存到数据库也可以的。
6。如果将图书组织到库中,对文本型的字段可以考虑用TEXT型,其它类型可以用IMAGE类型解决啊。
谢谢楼上的指点,我觉得因为读者的数据有一部分载大多数情况下使用不到的,最频繁的操作就是借阅、归还这时候只需要一些基本数据就可以了,如果将所有的数据都放到一个表当中是不是对于检索速度有影响?
有影响啊。
但是只要你的索引建立比较合理的情况下,
也没有问题的。
你经常写在WHERE字句的字段建立索引比较好。
而且还有一点很重要的。
就是WHERE字句的字段一定要与索引建立的字段顺序一致!!!
否则SELECT就利用不到索引。
#2
一步步来,把你会做的工作先做完,有问题再来问.:)
#3
这也是学习的办法,做完你就会觉得进步不小.:)
#4
---I download a library database from Internet:
----I hope it will help with you.
use master
go
if exists (select * from dbo.sysdatabases where name = 'library')
drop database library
GO
create database library
go
use library
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[readertype]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[readertype]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[readers]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[readers]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[booktype]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[booktype]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[books]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[books]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[borrowinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[borrowinfo]
GO
CREATE TABLE [dbo].[readertype] (
[typeno] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[typename] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[booknumber] [numeric](4, 0) NULL ,
[bookdays] [numeric](4, 0) NULL ,
[userfullife] [numeric](5, 0) NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[readers] (
[readerno] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[readername] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[readersex] [char] (3) COLLATE Chinese_PRC_CI_AS NULL ,
[readertype] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[readerdep] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[address] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[readertel] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[email] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[checkdate] [datetime] NULL ,
[readermemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[booktype] (
[booktypeno] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[typename] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[keyword] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[books] (
[bookid] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookname] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[booktype] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookauthor] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookpub] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[bookpubdate] [datetime] NULL ,
[bookpages] [numeric](5, 0) NULL ,
[bookkeyword] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bookindate] [datetime] NULL ,
[putup] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bookmemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[borrowinfo] (
[borrowno] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[readerid] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[readername] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookid] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookname] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[borrowdate] [datetime] NULL ,
[returndate] [datetime] NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
----I hope it will help with you.
use master
go
if exists (select * from dbo.sysdatabases where name = 'library')
drop database library
GO
create database library
go
use library
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[readertype]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[readertype]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[readers]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[readers]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[booktype]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[booktype]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[books]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[books]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[borrowinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[borrowinfo]
GO
CREATE TABLE [dbo].[readertype] (
[typeno] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[typename] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[booknumber] [numeric](4, 0) NULL ,
[bookdays] [numeric](4, 0) NULL ,
[userfullife] [numeric](5, 0) NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[readers] (
[readerno] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[readername] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[readersex] [char] (3) COLLATE Chinese_PRC_CI_AS NULL ,
[readertype] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[readerdep] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[address] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[readertel] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[email] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[checkdate] [datetime] NULL ,
[readermemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[booktype] (
[booktypeno] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[typename] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[keyword] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[books] (
[bookid] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookname] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[booktype] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookauthor] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookpub] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[bookpubdate] [datetime] NULL ,
[bookpages] [numeric](5, 0) NULL ,
[bookkeyword] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bookindate] [datetime] NULL ,
[putup] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bookmemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[borrowinfo] (
[borrowno] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[readerid] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[readername] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookid] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookname] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[borrowdate] [datetime] NULL ,
[returndate] [datetime] NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
#5
提供给该应用程序完成功能的数据表格共有三个:图书馆藏书记录表格、学生记录表格
以及学生借阅记录。图书馆藏书记录表格中包含了图书的书号、书名、作者、出版社和借阅
状态等信息;学生记录表格中包含了学生的学号、姓名、所在班级以及是否允许借阅图书等
信息;学生的借阅记录表格包含了借阅或预约图书的书号、借阅学生的学号、预约学生的学
号以及借阅时间等信息。
整体的功能实现如图1 2 - 1所示。
图12-1 整体的功能划分
具体各功能块完成的任务如下:
1. 用户登录功能块
首先利用用户登录功能块实现对用户的分类,学生和管理员的密码不同,不同用户会进
入不同的界面,完成不同的功能。用户必须输入正确的密码才能进入下一界面,如果用户密
码输入错误,应用程序会提示错误信息。用户如果连续三次输入错误,应用程序会强迫使用
者退出并中止应用程序的运行。
2. 管理系统界面
管理人员进入的管理系统界面完成以下功能:修改图书记录、修改学生记录、修改密码
设置、生成预约图书的记录报表和生成催还图书的记录报表。
• 修改图书记录功能块。实现向图书馆藏书的数据表格中添加和删除藏书记录,或者对已
存的藏书记录进行修改。
• 修改学生记录功能块。实现向学生记录的数据表格中添加和删除学生记录,或者对已存
的学生的记录进行修改。
• 修改密码设置功能块。用来实现管理员对登录窗口密码的设置,设置时要求用户加以确
认,只有在两次输入一致时,密码设置才会生效,否则出现提示信息提示用户重新设置。
密码存放在指定的文件中。
• 生成预约图书报表功能块。用来生成被预约的图书的书名、作者以及预约学生的学号、
姓名和其他一些信息的报表。
• 生成催还图书报表功能块。用来生成逾期未还的图书的书名、作者以及相应学生的学号、
姓名和其他一些信息的报表。
3. 服务系统界面
学生进入的图书馆服务系统完成下列功能:对所有图书记录的查询、对选定图书的借阅
或预约操作、查询个人的借阅信息以及归还自己已经借阅的图书。查询图书记录功能块。实现对图书馆所有藏书记录的查询,包括该藏书的书号、书名、
作者、出版社以及现在的借阅情况等信息。可以按照书名中的关键字和作者两种方式
进行查询。
• 借阅图书功能块。完成学生对指定图书的借阅,但该图书必须是处于未被借阅的状态。
这个功能块实现对此学生是否允许借阅进行判断,执行借阅时向借阅记录中添加记录,
并修改藏书记录中该图书的借阅状态。
• 预约图书功能块。完成学生对指定图书的预约,但该图书必须是处于被借阅且未被预
约的状态。这个功能块实现对此学生是否允许预约进行判断,执行预约时向借阅记录
中修改借阅记录,并修改藏书记录中该图书的借阅状态。
• 查询个人借阅信息功能块。完成对指定学生个人借阅图书记录的查询,显示该学生借阅
的所有图书的书号、书名、作者和出版社信息,借阅每本图书的时间、应归还每本图书
的时间以及是否逾期的信息。
• 归还图书功能块。完成学生对自己借阅的指定图书的归还,执行归还操作时修改借阅
记录,并修改藏书记录中该图书的借阅状态
数据库应用程序
用户登录功能块
图书馆管理系统功能
修改图书的记录
修改学生的记录
修改密码的设置
生成预约图书报表
生成催还图书报表
图书馆服务系统功能
查询所有图书记录
借阅选定的图书
预约选定的图书
查询个人借阅信息
归还借阅过的图书
以及学生借阅记录。图书馆藏书记录表格中包含了图书的书号、书名、作者、出版社和借阅
状态等信息;学生记录表格中包含了学生的学号、姓名、所在班级以及是否允许借阅图书等
信息;学生的借阅记录表格包含了借阅或预约图书的书号、借阅学生的学号、预约学生的学
号以及借阅时间等信息。
整体的功能实现如图1 2 - 1所示。
图12-1 整体的功能划分
具体各功能块完成的任务如下:
1. 用户登录功能块
首先利用用户登录功能块实现对用户的分类,学生和管理员的密码不同,不同用户会进
入不同的界面,完成不同的功能。用户必须输入正确的密码才能进入下一界面,如果用户密
码输入错误,应用程序会提示错误信息。用户如果连续三次输入错误,应用程序会强迫使用
者退出并中止应用程序的运行。
2. 管理系统界面
管理人员进入的管理系统界面完成以下功能:修改图书记录、修改学生记录、修改密码
设置、生成预约图书的记录报表和生成催还图书的记录报表。
• 修改图书记录功能块。实现向图书馆藏书的数据表格中添加和删除藏书记录,或者对已
存的藏书记录进行修改。
• 修改学生记录功能块。实现向学生记录的数据表格中添加和删除学生记录,或者对已存
的学生的记录进行修改。
• 修改密码设置功能块。用来实现管理员对登录窗口密码的设置,设置时要求用户加以确
认,只有在两次输入一致时,密码设置才会生效,否则出现提示信息提示用户重新设置。
密码存放在指定的文件中。
• 生成预约图书报表功能块。用来生成被预约的图书的书名、作者以及预约学生的学号、
姓名和其他一些信息的报表。
• 生成催还图书报表功能块。用来生成逾期未还的图书的书名、作者以及相应学生的学号、
姓名和其他一些信息的报表。
3. 服务系统界面
学生进入的图书馆服务系统完成下列功能:对所有图书记录的查询、对选定图书的借阅
或预约操作、查询个人的借阅信息以及归还自己已经借阅的图书。查询图书记录功能块。实现对图书馆所有藏书记录的查询,包括该藏书的书号、书名、
作者、出版社以及现在的借阅情况等信息。可以按照书名中的关键字和作者两种方式
进行查询。
• 借阅图书功能块。完成学生对指定图书的借阅,但该图书必须是处于未被借阅的状态。
这个功能块实现对此学生是否允许借阅进行判断,执行借阅时向借阅记录中添加记录,
并修改藏书记录中该图书的借阅状态。
• 预约图书功能块。完成学生对指定图书的预约,但该图书必须是处于被借阅且未被预
约的状态。这个功能块实现对此学生是否允许预约进行判断,执行预约时向借阅记录
中修改借阅记录,并修改藏书记录中该图书的借阅状态。
• 查询个人借阅信息功能块。完成对指定学生个人借阅图书记录的查询,显示该学生借阅
的所有图书的书号、书名、作者和出版社信息,借阅每本图书的时间、应归还每本图书
的时间以及是否逾期的信息。
• 归还图书功能块。完成学生对自己借阅的指定图书的归还,执行归还操作时修改借阅
记录,并修改藏书记录中该图书的借阅状态
数据库应用程序
用户登录功能块
图书馆管理系统功能
修改图书的记录
修改学生的记录
修改密码的设置
生成预约图书报表
生成催还图书报表
图书馆服务系统功能
查询所有图书记录
借阅选定的图书
预约选定的图书
查询个人借阅信息
归还借阅过的图书
#6
其实市面上有很多书籍把图书管理系统作为一个简单的例子来介绍,可以买来参考。
#7
初步设计,请给点意见
create database library
go
use library
go
--学生记录
drop table student
create table student
( 学号 integer not null primary key,
姓名 varchar(20) not null,
性别 varchar(2) default('男') check(性别 in ('男','女')),
班级 varchar(20) not null)
go
--藏书记录
drop table book
create table book
( 书号 varchar(30) not null primary key,
书名 varchar(100) not null,
作者 varchar(100) not null,
出版社 varchar(100) not null,
未借数量 integer not null
)
select * from book
go
--借阅记录
drop table borrow
create table borrow
( 学号 integer not null references student(学号),
书号 varchar(30) not null references book(书号),
借阅时间 datetime default(getdate())
)
select * from borrow
go
-----------管理图书记录-------------
-------增加新书
insert into book values('1','C语言','谭浩强','清华大学出版社','4')
insert into book values('2','SQL','罗运模','高等教育出版社','5')
insert into book values('3','操作系统','曾平','清华大学出版社','4')
insert into book values('4','PASCAL语言程序设计','张长海','电子工业出版社','8')
insert into book values('5','DELPHI7组件运用实例','张海莲','电子工业出版社','4')
-------修改书的资料
--修改书号(该书应该全没被借才可以修改)
update book set 书号='5' where 书号='6'
--修改书名
update book set 书名='C程序设计' where 书名='C语言'
--修改作者
update book set 作者='赵松涛' where 书名='SQL'
--修改出版社
update book set 出版社='人民邮电出版社' where 书名='SQL'
--修改未借数量(增加或减少多少本书)
update book set 未借数量=未借数量+1 where 书名='SQL'
-----------管理学生记录-------------
-------增加新的学生记录
insert into student values(1,'灼','男','02软件2')
insert into student values(8,'虹','女','02软件2')
insert into student values(2,'燕子','女','02软件2')
insert into student values(3,'方煜','男','02软件2')
insert into student values(4,'曾宪冕','男','02软件2')
insert into student values(5,'啊全','男','02软件2')
insert into student values(6,'郭溯明','男','02软件2')
--修改学号(改学生应该没有借书)
update student set 学号=7 where 学号=8
--修改姓名
update student set 姓名='严海斌' where 学号=7
--修改性别
update student set 性别='男' where 学号=7
--修改班级
update student set 班级='02软件1班' where 学号=3
go
---------------------------------------------图书馆服务系统功能-------------------------------------------------------
--对所有图书的查阅
select * from book
--查阅个人的借阅信息
select a.学号,a.姓名,a.性别,a.班级,b.借阅时间,c.书名,c.作者,c.出版社
from student a,book c,borrow b
where a.学号=b.学号 and b.书号=c.书号
and a.学号=5
--还书
delete borrow where 学号=5 and 书号='2'
update book set 未借数量=未借数量+1 where 书号='2'
go
--查询
--根据书号
select * from book where 书号='2'
--根据书名(模糊搜索)
--根据作者
select * from book where 作者='谭浩强'select * from book where 书名 like '%语言%'
--根据出版社
select * from book where 出版社='清华大学出版社'
--根据未借数量
select * from book where 未借数量=4
--借阅选定的图书
if exists(select * from book where book.书号='6' and book.未借数量!=0)
begin
insert into borrow(学号,书号) values(1,'6')
update book set 未借数量=未借数量-1 where 书号='6'
end
create database library
go
use library
go
--学生记录
drop table student
create table student
( 学号 integer not null primary key,
姓名 varchar(20) not null,
性别 varchar(2) default('男') check(性别 in ('男','女')),
班级 varchar(20) not null)
go
--藏书记录
drop table book
create table book
( 书号 varchar(30) not null primary key,
书名 varchar(100) not null,
作者 varchar(100) not null,
出版社 varchar(100) not null,
未借数量 integer not null
)
select * from book
go
--借阅记录
drop table borrow
create table borrow
( 学号 integer not null references student(学号),
书号 varchar(30) not null references book(书号),
借阅时间 datetime default(getdate())
)
select * from borrow
go
-----------管理图书记录-------------
-------增加新书
insert into book values('1','C语言','谭浩强','清华大学出版社','4')
insert into book values('2','SQL','罗运模','高等教育出版社','5')
insert into book values('3','操作系统','曾平','清华大学出版社','4')
insert into book values('4','PASCAL语言程序设计','张长海','电子工业出版社','8')
insert into book values('5','DELPHI7组件运用实例','张海莲','电子工业出版社','4')
-------修改书的资料
--修改书号(该书应该全没被借才可以修改)
update book set 书号='5' where 书号='6'
--修改书名
update book set 书名='C程序设计' where 书名='C语言'
--修改作者
update book set 作者='赵松涛' where 书名='SQL'
--修改出版社
update book set 出版社='人民邮电出版社' where 书名='SQL'
--修改未借数量(增加或减少多少本书)
update book set 未借数量=未借数量+1 where 书名='SQL'
-----------管理学生记录-------------
-------增加新的学生记录
insert into student values(1,'灼','男','02软件2')
insert into student values(8,'虹','女','02软件2')
insert into student values(2,'燕子','女','02软件2')
insert into student values(3,'方煜','男','02软件2')
insert into student values(4,'曾宪冕','男','02软件2')
insert into student values(5,'啊全','男','02软件2')
insert into student values(6,'郭溯明','男','02软件2')
--修改学号(改学生应该没有借书)
update student set 学号=7 where 学号=8
--修改姓名
update student set 姓名='严海斌' where 学号=7
--修改性别
update student set 性别='男' where 学号=7
--修改班级
update student set 班级='02软件1班' where 学号=3
go
---------------------------------------------图书馆服务系统功能-------------------------------------------------------
--对所有图书的查阅
select * from book
--查阅个人的借阅信息
select a.学号,a.姓名,a.性别,a.班级,b.借阅时间,c.书名,c.作者,c.出版社
from student a,book c,borrow b
where a.学号=b.学号 and b.书号=c.书号
and a.学号=5
--还书
delete borrow where 学号=5 and 书号='2'
update book set 未借数量=未借数量+1 where 书号='2'
go
--查询
--根据书号
select * from book where 书号='2'
--根据书名(模糊搜索)
--根据作者
select * from book where 作者='谭浩强'select * from book where 书名 like '%语言%'
--根据出版社
select * from book where 出版社='清华大学出版社'
--根据未借数量
select * from book where 未借数量=4
--借阅选定的图书
if exists(select * from book where book.书号='6' and book.未借数量!=0)
begin
insert into borrow(学号,书号) values(1,'6')
update book set 未借数量=未借数量-1 where 书号='6'
end
#8
好东西,
我也是才学数据库一学期,
做作试试,
我也是才学数据库一学期,
做作试试,
#9
fengzheng(风筝) :
如何生成催还图书报表?
如何生成催还图书报表?
#10
我刚接触SQL Server,有我的分吗?祝大家快乐!!!
#11
哥们,够狠,把老师布置的课程设计拿来问,这也帮了我不少忙,嘿嘿,谢谢了哈!
#12
你去下一个代码看看先。 :)
#1
以前的一个老帖参考一下:
1. 图书的条码号是不是应该设为13位?是用整数形式好还是用字符串好?
2. 为了进行图书检索,可是是用书名关键字、图书简介关键字,请问是不是需要为这些字建立数据表?还是应该是用模糊查询?
如果建立相对于关键字的表,那么美条纪录的字段数就没法固定,遇到这种情况怎么处理?
3. 为了图书的检索,是不是应该对于图书信息表(保存图书的基本信息)中的条码号、图书名称、出版社、作者等等建立索引表?
4. 把读者的信息分为两部分,读者基本信息和读者附加信息,作为两个表,只有读者基本信息才会在平时的借阅、归还当中经常用到,是不是合适?
5. 如果要将一部分电子图书组织到数据库一个单独表当中以方便读者网上阅读、下载,电子图书的信息应该怎样组织?是不是应该把图书的路径写到数据表当中。
6. 若要将一部分电子文档(文本格式),组织入库,应该怎么样?也需要使用填写路径的方式吗?还是需要其他的数据关系系统,直接将问当内容写入数据表?
-----------------------------------
1.字符型.
2.建立对应的字段.
3.当然应该
4.没必要
5.建议只保存图书的路径(速度)
6.若要将文件保存到数据中,可以参考我的贴子:
http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.7376825
交流--数据库中存/取文件
1. 图书的条码号是不是应该设为13位?是用整数形式好还是用字符串好?
字符串 char(13)
2. 为了进行图书检索,可是是用书名关键字、图书简介关键字,请问是不是需要为这些字建立数据表?还是应该是用模糊查询?
是,建立关键字可以提高查询速度
如果建立相对于关键字的表,那么美条纪录的字段数就没法固定,遇到这种情况怎么处理?
这样建:
create table 关键字表 (id,文章id,关键字)
insert 关键字表(1,1,'aa')
insert 关键字表(2,1,'bb')
insert 关键字表(3,1,'cc')
3. 为了图书的检索,是不是应该对于图书信息表(保存图书的基本信息)中的条码号、图书名称、出版社、作者等等建立索引表?
你不是有图书信息表吗,直接检索图书信息表,就可以了
4. 把读者的信息分为两部分,读者基本信息和读者附加信息,作为两个表,只有读者基本信息才会在平时的借阅、归还当中经常用到,是不是合适?
如果一个读者有多个附加信息就你这样做,如果没有就合并为一个表
5. 如果要将一部分电子图书组织到数据库一个单独表当中以方便读者网上阅读、下载,电子图书的信息应该怎样组织?是不是应该把图书的路径写到数据表当中。
对,放路径,这样方便,也不影响数据库性能
6. 若要将一部分电子文档(文本格式),组织入库,应该怎么样?也需要使用填写路径的方式吗?还是需要其他的数据关系系统,直接将问当内容写入数据表?
不用写路径是最好的方式。顺便给你个写文件到库的方法:
用image类型
方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str
2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x)
insert 表名 values(2,0x)
go
3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2
go
4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
go
1. 条码用字符型去描述好些,大多数软件中都是用字符串去描述的。
2。图书馆中的书是全部要用建档的,用模糊查询就可以解决啊。
在MSSQL中的方法 select * from 书档案 where [书名] like '%书关键字%'
3。索引的定义应该是随你自己而定的,主要是看你实现的功能当中,主要以哪几种查询为主
对于查询引用比较多的时候可以考虑建立索引,如果你自己的编码中比较规范,也可以建
立聚族索引的。索引定义考虑定义多一些的,因为图书馆方面的软件中的图书档案主要是
以读取的情况比较多。
4。可以这样解决,如果你不怕麻烦的情况下。
5。你的实现方式可以,另外一种也可以把文件整个存到数据库也可以的。
6。如果将图书组织到库中,对文本型的字段可以考虑用TEXT型,其它类型可以用IMAGE类型解决啊。
谢谢楼上的指点,我觉得因为读者的数据有一部分载大多数情况下使用不到的,最频繁的操作就是借阅、归还这时候只需要一些基本数据就可以了,如果将所有的数据都放到一个表当中是不是对于检索速度有影响?
有影响啊。
但是只要你的索引建立比较合理的情况下,
也没有问题的。
你经常写在WHERE字句的字段建立索引比较好。
而且还有一点很重要的。
就是WHERE字句的字段一定要与索引建立的字段顺序一致!!!
否则SELECT就利用不到索引。
1. 图书的条码号是不是应该设为13位?是用整数形式好还是用字符串好?
2. 为了进行图书检索,可是是用书名关键字、图书简介关键字,请问是不是需要为这些字建立数据表?还是应该是用模糊查询?
如果建立相对于关键字的表,那么美条纪录的字段数就没法固定,遇到这种情况怎么处理?
3. 为了图书的检索,是不是应该对于图书信息表(保存图书的基本信息)中的条码号、图书名称、出版社、作者等等建立索引表?
4. 把读者的信息分为两部分,读者基本信息和读者附加信息,作为两个表,只有读者基本信息才会在平时的借阅、归还当中经常用到,是不是合适?
5. 如果要将一部分电子图书组织到数据库一个单独表当中以方便读者网上阅读、下载,电子图书的信息应该怎样组织?是不是应该把图书的路径写到数据表当中。
6. 若要将一部分电子文档(文本格式),组织入库,应该怎么样?也需要使用填写路径的方式吗?还是需要其他的数据关系系统,直接将问当内容写入数据表?
-----------------------------------
1.字符型.
2.建立对应的字段.
3.当然应该
4.没必要
5.建议只保存图书的路径(速度)
6.若要将文件保存到数据中,可以参考我的贴子:
http://expert.csdn.net/Expert/topic/2403/2403509.xml?temp=.7376825
交流--数据库中存/取文件
1. 图书的条码号是不是应该设为13位?是用整数形式好还是用字符串好?
字符串 char(13)
2. 为了进行图书检索,可是是用书名关键字、图书简介关键字,请问是不是需要为这些字建立数据表?还是应该是用模糊查询?
是,建立关键字可以提高查询速度
如果建立相对于关键字的表,那么美条纪录的字段数就没法固定,遇到这种情况怎么处理?
这样建:
create table 关键字表 (id,文章id,关键字)
insert 关键字表(1,1,'aa')
insert 关键字表(2,1,'bb')
insert 关键字表(3,1,'cc')
3. 为了图书的检索,是不是应该对于图书信息表(保存图书的基本信息)中的条码号、图书名称、出版社、作者等等建立索引表?
你不是有图书信息表吗,直接检索图书信息表,就可以了
4. 把读者的信息分为两部分,读者基本信息和读者附加信息,作为两个表,只有读者基本信息才会在平时的借阅、归还当中经常用到,是不是合适?
如果一个读者有多个附加信息就你这样做,如果没有就合并为一个表
5. 如果要将一部分电子图书组织到数据库一个单独表当中以方便读者网上阅读、下载,电子图书的信息应该怎样组织?是不是应该把图书的路径写到数据表当中。
对,放路径,这样方便,也不影响数据库性能
6. 若要将一部分电子文档(文本格式),组织入库,应该怎么样?也需要使用填写路径的方式吗?还是需要其他的数据关系系统,直接将问当内容写入数据表?
不用写路径是最好的方式。顺便给你个写文件到库的方法:
用image类型
方法:
1、建立过程
CREATE PROCEDURE sp_textcopy (
@srvname varchar (30),
@login varchar (30),
@password varchar (30),
@dbname varchar (30),
@tbname varchar (30),
@colname varchar (30),
@filename varchar (30),
@whereclause varchar (40),
@direction char(1))
AS
DECLARE @exec_str varchar (255)
SELECT @exec_str =
'textcopy /S ' + @srvname +
' /U ' + @login +
' /P ' + @password +
' /D ' + @dbname +
' /T ' + @tbname +
' /C ' + @colname +
' /W "' + @whereclause +
'" /F ' + @filename +
' /' + @direction
EXEC master..xp_cmdshell @exec_str
2、建表和初始化数据
create table 表名 (编号 int,image列名 image)
go
insert 表名 values(1,0x)
insert 表名 values(2,0x)
go
3、读入
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','I' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','I' --注意条件是 编号=2
go
4、读出成文件
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\图片.bmp','where 编号=1','O' --注意条件是 编号=1
sp_textcopy '你的服务器名','sa','你的密码','库名','表名','image列名','c:\bb.doc','where 编号=2','O' --注意条件是 编号=2
go
1. 条码用字符型去描述好些,大多数软件中都是用字符串去描述的。
2。图书馆中的书是全部要用建档的,用模糊查询就可以解决啊。
在MSSQL中的方法 select * from 书档案 where [书名] like '%书关键字%'
3。索引的定义应该是随你自己而定的,主要是看你实现的功能当中,主要以哪几种查询为主
对于查询引用比较多的时候可以考虑建立索引,如果你自己的编码中比较规范,也可以建
立聚族索引的。索引定义考虑定义多一些的,因为图书馆方面的软件中的图书档案主要是
以读取的情况比较多。
4。可以这样解决,如果你不怕麻烦的情况下。
5。你的实现方式可以,另外一种也可以把文件整个存到数据库也可以的。
6。如果将图书组织到库中,对文本型的字段可以考虑用TEXT型,其它类型可以用IMAGE类型解决啊。
谢谢楼上的指点,我觉得因为读者的数据有一部分载大多数情况下使用不到的,最频繁的操作就是借阅、归还这时候只需要一些基本数据就可以了,如果将所有的数据都放到一个表当中是不是对于检索速度有影响?
有影响啊。
但是只要你的索引建立比较合理的情况下,
也没有问题的。
你经常写在WHERE字句的字段建立索引比较好。
而且还有一点很重要的。
就是WHERE字句的字段一定要与索引建立的字段顺序一致!!!
否则SELECT就利用不到索引。
#2
一步步来,把你会做的工作先做完,有问题再来问.:)
#3
这也是学习的办法,做完你就会觉得进步不小.:)
#4
---I download a library database from Internet:
----I hope it will help with you.
use master
go
if exists (select * from dbo.sysdatabases where name = 'library')
drop database library
GO
create database library
go
use library
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[readertype]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[readertype]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[readers]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[readers]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[booktype]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[booktype]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[books]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[books]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[borrowinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[borrowinfo]
GO
CREATE TABLE [dbo].[readertype] (
[typeno] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[typename] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[booknumber] [numeric](4, 0) NULL ,
[bookdays] [numeric](4, 0) NULL ,
[userfullife] [numeric](5, 0) NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[readers] (
[readerno] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[readername] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[readersex] [char] (3) COLLATE Chinese_PRC_CI_AS NULL ,
[readertype] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[readerdep] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[address] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[readertel] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[email] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[checkdate] [datetime] NULL ,
[readermemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[booktype] (
[booktypeno] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[typename] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[keyword] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[books] (
[bookid] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookname] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[booktype] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookauthor] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookpub] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[bookpubdate] [datetime] NULL ,
[bookpages] [numeric](5, 0) NULL ,
[bookkeyword] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bookindate] [datetime] NULL ,
[putup] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bookmemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[borrowinfo] (
[borrowno] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[readerid] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[readername] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookid] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookname] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[borrowdate] [datetime] NULL ,
[returndate] [datetime] NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
----I hope it will help with you.
use master
go
if exists (select * from dbo.sysdatabases where name = 'library')
drop database library
GO
create database library
go
use library
go
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[readertype]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[readertype]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[readers]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[readers]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[booktype]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[booktype]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[books]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[books]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[borrowinfo]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[borrowinfo]
GO
CREATE TABLE [dbo].[readertype] (
[typeno] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[typename] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[booknumber] [numeric](4, 0) NULL ,
[bookdays] [numeric](4, 0) NULL ,
[userfullife] [numeric](5, 0) NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[readers] (
[readerno] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[readername] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[readersex] [char] (3) COLLATE Chinese_PRC_CI_AS NULL ,
[readertype] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[readerdep] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[address] [char] (40) COLLATE Chinese_PRC_CI_AS NULL ,
[readertel] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[email] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[checkdate] [datetime] NULL ,
[readermemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[booktype] (
[booktypeno] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[typename] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[keyword] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[books] (
[bookid] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookname] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[booktype] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookauthor] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookpub] [char] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[bookpubdate] [datetime] NULL ,
[bookpages] [numeric](5, 0) NULL ,
[bookkeyword] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bookindate] [datetime] NULL ,
[putup] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
[bookmemo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE TABLE [dbo].[borrowinfo] (
[borrowno] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[readerid] [char] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[readername] [char] (20) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookid] [char] (14) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[bookname] [char] (40) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[borrowdate] [datetime] NULL ,
[returndate] [datetime] NULL ,
[memo] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
#5
提供给该应用程序完成功能的数据表格共有三个:图书馆藏书记录表格、学生记录表格
以及学生借阅记录。图书馆藏书记录表格中包含了图书的书号、书名、作者、出版社和借阅
状态等信息;学生记录表格中包含了学生的学号、姓名、所在班级以及是否允许借阅图书等
信息;学生的借阅记录表格包含了借阅或预约图书的书号、借阅学生的学号、预约学生的学
号以及借阅时间等信息。
整体的功能实现如图1 2 - 1所示。
图12-1 整体的功能划分
具体各功能块完成的任务如下:
1. 用户登录功能块
首先利用用户登录功能块实现对用户的分类,学生和管理员的密码不同,不同用户会进
入不同的界面,完成不同的功能。用户必须输入正确的密码才能进入下一界面,如果用户密
码输入错误,应用程序会提示错误信息。用户如果连续三次输入错误,应用程序会强迫使用
者退出并中止应用程序的运行。
2. 管理系统界面
管理人员进入的管理系统界面完成以下功能:修改图书记录、修改学生记录、修改密码
设置、生成预约图书的记录报表和生成催还图书的记录报表。
• 修改图书记录功能块。实现向图书馆藏书的数据表格中添加和删除藏书记录,或者对已
存的藏书记录进行修改。
• 修改学生记录功能块。实现向学生记录的数据表格中添加和删除学生记录,或者对已存
的学生的记录进行修改。
• 修改密码设置功能块。用来实现管理员对登录窗口密码的设置,设置时要求用户加以确
认,只有在两次输入一致时,密码设置才会生效,否则出现提示信息提示用户重新设置。
密码存放在指定的文件中。
• 生成预约图书报表功能块。用来生成被预约的图书的书名、作者以及预约学生的学号、
姓名和其他一些信息的报表。
• 生成催还图书报表功能块。用来生成逾期未还的图书的书名、作者以及相应学生的学号、
姓名和其他一些信息的报表。
3. 服务系统界面
学生进入的图书馆服务系统完成下列功能:对所有图书记录的查询、对选定图书的借阅
或预约操作、查询个人的借阅信息以及归还自己已经借阅的图书。查询图书记录功能块。实现对图书馆所有藏书记录的查询,包括该藏书的书号、书名、
作者、出版社以及现在的借阅情况等信息。可以按照书名中的关键字和作者两种方式
进行查询。
• 借阅图书功能块。完成学生对指定图书的借阅,但该图书必须是处于未被借阅的状态。
这个功能块实现对此学生是否允许借阅进行判断,执行借阅时向借阅记录中添加记录,
并修改藏书记录中该图书的借阅状态。
• 预约图书功能块。完成学生对指定图书的预约,但该图书必须是处于被借阅且未被预
约的状态。这个功能块实现对此学生是否允许预约进行判断,执行预约时向借阅记录
中修改借阅记录,并修改藏书记录中该图书的借阅状态。
• 查询个人借阅信息功能块。完成对指定学生个人借阅图书记录的查询,显示该学生借阅
的所有图书的书号、书名、作者和出版社信息,借阅每本图书的时间、应归还每本图书
的时间以及是否逾期的信息。
• 归还图书功能块。完成学生对自己借阅的指定图书的归还,执行归还操作时修改借阅
记录,并修改藏书记录中该图书的借阅状态
数据库应用程序
用户登录功能块
图书馆管理系统功能
修改图书的记录
修改学生的记录
修改密码的设置
生成预约图书报表
生成催还图书报表
图书馆服务系统功能
查询所有图书记录
借阅选定的图书
预约选定的图书
查询个人借阅信息
归还借阅过的图书
以及学生借阅记录。图书馆藏书记录表格中包含了图书的书号、书名、作者、出版社和借阅
状态等信息;学生记录表格中包含了学生的学号、姓名、所在班级以及是否允许借阅图书等
信息;学生的借阅记录表格包含了借阅或预约图书的书号、借阅学生的学号、预约学生的学
号以及借阅时间等信息。
整体的功能实现如图1 2 - 1所示。
图12-1 整体的功能划分
具体各功能块完成的任务如下:
1. 用户登录功能块
首先利用用户登录功能块实现对用户的分类,学生和管理员的密码不同,不同用户会进
入不同的界面,完成不同的功能。用户必须输入正确的密码才能进入下一界面,如果用户密
码输入错误,应用程序会提示错误信息。用户如果连续三次输入错误,应用程序会强迫使用
者退出并中止应用程序的运行。
2. 管理系统界面
管理人员进入的管理系统界面完成以下功能:修改图书记录、修改学生记录、修改密码
设置、生成预约图书的记录报表和生成催还图书的记录报表。
• 修改图书记录功能块。实现向图书馆藏书的数据表格中添加和删除藏书记录,或者对已
存的藏书记录进行修改。
• 修改学生记录功能块。实现向学生记录的数据表格中添加和删除学生记录,或者对已存
的学生的记录进行修改。
• 修改密码设置功能块。用来实现管理员对登录窗口密码的设置,设置时要求用户加以确
认,只有在两次输入一致时,密码设置才会生效,否则出现提示信息提示用户重新设置。
密码存放在指定的文件中。
• 生成预约图书报表功能块。用来生成被预约的图书的书名、作者以及预约学生的学号、
姓名和其他一些信息的报表。
• 生成催还图书报表功能块。用来生成逾期未还的图书的书名、作者以及相应学生的学号、
姓名和其他一些信息的报表。
3. 服务系统界面
学生进入的图书馆服务系统完成下列功能:对所有图书记录的查询、对选定图书的借阅
或预约操作、查询个人的借阅信息以及归还自己已经借阅的图书。查询图书记录功能块。实现对图书馆所有藏书记录的查询,包括该藏书的书号、书名、
作者、出版社以及现在的借阅情况等信息。可以按照书名中的关键字和作者两种方式
进行查询。
• 借阅图书功能块。完成学生对指定图书的借阅,但该图书必须是处于未被借阅的状态。
这个功能块实现对此学生是否允许借阅进行判断,执行借阅时向借阅记录中添加记录,
并修改藏书记录中该图书的借阅状态。
• 预约图书功能块。完成学生对指定图书的预约,但该图书必须是处于被借阅且未被预
约的状态。这个功能块实现对此学生是否允许预约进行判断,执行预约时向借阅记录
中修改借阅记录,并修改藏书记录中该图书的借阅状态。
• 查询个人借阅信息功能块。完成对指定学生个人借阅图书记录的查询,显示该学生借阅
的所有图书的书号、书名、作者和出版社信息,借阅每本图书的时间、应归还每本图书
的时间以及是否逾期的信息。
• 归还图书功能块。完成学生对自己借阅的指定图书的归还,执行归还操作时修改借阅
记录,并修改藏书记录中该图书的借阅状态
数据库应用程序
用户登录功能块
图书馆管理系统功能
修改图书的记录
修改学生的记录
修改密码的设置
生成预约图书报表
生成催还图书报表
图书馆服务系统功能
查询所有图书记录
借阅选定的图书
预约选定的图书
查询个人借阅信息
归还借阅过的图书
#6
其实市面上有很多书籍把图书管理系统作为一个简单的例子来介绍,可以买来参考。
#7
初步设计,请给点意见
create database library
go
use library
go
--学生记录
drop table student
create table student
( 学号 integer not null primary key,
姓名 varchar(20) not null,
性别 varchar(2) default('男') check(性别 in ('男','女')),
班级 varchar(20) not null)
go
--藏书记录
drop table book
create table book
( 书号 varchar(30) not null primary key,
书名 varchar(100) not null,
作者 varchar(100) not null,
出版社 varchar(100) not null,
未借数量 integer not null
)
select * from book
go
--借阅记录
drop table borrow
create table borrow
( 学号 integer not null references student(学号),
书号 varchar(30) not null references book(书号),
借阅时间 datetime default(getdate())
)
select * from borrow
go
-----------管理图书记录-------------
-------增加新书
insert into book values('1','C语言','谭浩强','清华大学出版社','4')
insert into book values('2','SQL','罗运模','高等教育出版社','5')
insert into book values('3','操作系统','曾平','清华大学出版社','4')
insert into book values('4','PASCAL语言程序设计','张长海','电子工业出版社','8')
insert into book values('5','DELPHI7组件运用实例','张海莲','电子工业出版社','4')
-------修改书的资料
--修改书号(该书应该全没被借才可以修改)
update book set 书号='5' where 书号='6'
--修改书名
update book set 书名='C程序设计' where 书名='C语言'
--修改作者
update book set 作者='赵松涛' where 书名='SQL'
--修改出版社
update book set 出版社='人民邮电出版社' where 书名='SQL'
--修改未借数量(增加或减少多少本书)
update book set 未借数量=未借数量+1 where 书名='SQL'
-----------管理学生记录-------------
-------增加新的学生记录
insert into student values(1,'灼','男','02软件2')
insert into student values(8,'虹','女','02软件2')
insert into student values(2,'燕子','女','02软件2')
insert into student values(3,'方煜','男','02软件2')
insert into student values(4,'曾宪冕','男','02软件2')
insert into student values(5,'啊全','男','02软件2')
insert into student values(6,'郭溯明','男','02软件2')
--修改学号(改学生应该没有借书)
update student set 学号=7 where 学号=8
--修改姓名
update student set 姓名='严海斌' where 学号=7
--修改性别
update student set 性别='男' where 学号=7
--修改班级
update student set 班级='02软件1班' where 学号=3
go
---------------------------------------------图书馆服务系统功能-------------------------------------------------------
--对所有图书的查阅
select * from book
--查阅个人的借阅信息
select a.学号,a.姓名,a.性别,a.班级,b.借阅时间,c.书名,c.作者,c.出版社
from student a,book c,borrow b
where a.学号=b.学号 and b.书号=c.书号
and a.学号=5
--还书
delete borrow where 学号=5 and 书号='2'
update book set 未借数量=未借数量+1 where 书号='2'
go
--查询
--根据书号
select * from book where 书号='2'
--根据书名(模糊搜索)
--根据作者
select * from book where 作者='谭浩强'select * from book where 书名 like '%语言%'
--根据出版社
select * from book where 出版社='清华大学出版社'
--根据未借数量
select * from book where 未借数量=4
--借阅选定的图书
if exists(select * from book where book.书号='6' and book.未借数量!=0)
begin
insert into borrow(学号,书号) values(1,'6')
update book set 未借数量=未借数量-1 where 书号='6'
end
create database library
go
use library
go
--学生记录
drop table student
create table student
( 学号 integer not null primary key,
姓名 varchar(20) not null,
性别 varchar(2) default('男') check(性别 in ('男','女')),
班级 varchar(20) not null)
go
--藏书记录
drop table book
create table book
( 书号 varchar(30) not null primary key,
书名 varchar(100) not null,
作者 varchar(100) not null,
出版社 varchar(100) not null,
未借数量 integer not null
)
select * from book
go
--借阅记录
drop table borrow
create table borrow
( 学号 integer not null references student(学号),
书号 varchar(30) not null references book(书号),
借阅时间 datetime default(getdate())
)
select * from borrow
go
-----------管理图书记录-------------
-------增加新书
insert into book values('1','C语言','谭浩强','清华大学出版社','4')
insert into book values('2','SQL','罗运模','高等教育出版社','5')
insert into book values('3','操作系统','曾平','清华大学出版社','4')
insert into book values('4','PASCAL语言程序设计','张长海','电子工业出版社','8')
insert into book values('5','DELPHI7组件运用实例','张海莲','电子工业出版社','4')
-------修改书的资料
--修改书号(该书应该全没被借才可以修改)
update book set 书号='5' where 书号='6'
--修改书名
update book set 书名='C程序设计' where 书名='C语言'
--修改作者
update book set 作者='赵松涛' where 书名='SQL'
--修改出版社
update book set 出版社='人民邮电出版社' where 书名='SQL'
--修改未借数量(增加或减少多少本书)
update book set 未借数量=未借数量+1 where 书名='SQL'
-----------管理学生记录-------------
-------增加新的学生记录
insert into student values(1,'灼','男','02软件2')
insert into student values(8,'虹','女','02软件2')
insert into student values(2,'燕子','女','02软件2')
insert into student values(3,'方煜','男','02软件2')
insert into student values(4,'曾宪冕','男','02软件2')
insert into student values(5,'啊全','男','02软件2')
insert into student values(6,'郭溯明','男','02软件2')
--修改学号(改学生应该没有借书)
update student set 学号=7 where 学号=8
--修改姓名
update student set 姓名='严海斌' where 学号=7
--修改性别
update student set 性别='男' where 学号=7
--修改班级
update student set 班级='02软件1班' where 学号=3
go
---------------------------------------------图书馆服务系统功能-------------------------------------------------------
--对所有图书的查阅
select * from book
--查阅个人的借阅信息
select a.学号,a.姓名,a.性别,a.班级,b.借阅时间,c.书名,c.作者,c.出版社
from student a,book c,borrow b
where a.学号=b.学号 and b.书号=c.书号
and a.学号=5
--还书
delete borrow where 学号=5 and 书号='2'
update book set 未借数量=未借数量+1 where 书号='2'
go
--查询
--根据书号
select * from book where 书号='2'
--根据书名(模糊搜索)
--根据作者
select * from book where 作者='谭浩强'select * from book where 书名 like '%语言%'
--根据出版社
select * from book where 出版社='清华大学出版社'
--根据未借数量
select * from book where 未借数量=4
--借阅选定的图书
if exists(select * from book where book.书号='6' and book.未借数量!=0)
begin
insert into borrow(学号,书号) values(1,'6')
update book set 未借数量=未借数量-1 where 书号='6'
end
#8
好东西,
我也是才学数据库一学期,
做作试试,
我也是才学数据库一学期,
做作试试,
#9
fengzheng(风筝) :
如何生成催还图书报表?
如何生成催还图书报表?
#10
我刚接触SQL Server,有我的分吗?祝大家快乐!!!
#11
哥们,够狠,把老师布置的课程设计拿来问,这也帮了我不少忙,嘿嘿,谢谢了哈!
#12
你去下一个代码看看先。 :)