数据库原理课程设计
报 告 书
课 题 名 图书信息管理系统
指导教师
日 期
目 录
一、前言..............................................................2
二、概述..............................................................2
2.1开发目的.......................................................2
三、需求分析..........................................................2
3.3系统应该具备的功能.............................................3
3.4系统结构图.....................................................4
4、概念设计.........................................................5
5、逻辑设计.........................................................9
6、物理设计.........................................................9
5.1表命令........................................................9
5.2表结构图.....................................................13
7、代码实现........................................................13
6.1数据库连接...................................................13
6.2增加一条图书记录.............................................14
6.3删除一条图书记录.............................................16
6.4修改一条图书记录.............................................17
6.5查询一条图书记录.............................................18
八、结束语..........................................................22
前言
近年来,随着我国市场经济的迅速发展和人们生活水平的不断提高,以及计算机的普及使用,图书馆藏书的数目逐渐增大,这也是挑战了图书管理方面的技术,以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的图书管理系统,提高了图书馆的工作效率,为想要借书和还书的人提供更好的服务。
1、概述
1.1 开发目的
就技术力量来说,我们小组可以完成此次开发工作。开发过程中会出现许多问题,有我们预想之中的,也有一些没有在我们预想中,但我们有信心克服一切困难。我们小组各成员已经学习了MySQL,SQL,对网络技术和操作系统也有系统的了解,熟悉计算机原理,能解决常见的硬件故障和硬件选择。
整个系统由于是自行开发,自行使用,所以很方便管理使用。
图书管理信息系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强,数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。系统开发的总体任务是实现各种信息的系统化,规范化和自动化。
2.3 系统应该具备的功能
①读者基本信息的输入,包括借书证编号、读者姓名、读者性别等。
②读者基本信息的查询、修改,包括读者借书证编号、读者姓名、读者性别等。
③书籍类别标准的制定、类别信息的输入,包括类别编号、类别名称。
④书籍类别信息的查询、修改,包括类别编号、类别名称。
⑤书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、登记日期。
⑥书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期登记日期等。
⑦借书信息的输入,包括读者借书证编号、书籍编号、借书日期。
⑧借书信息的查询、修改,包括借书证编号、借书证编号、读者姓名、书籍编号、书籍名称、借书日期等。
⑨还书信息的输入,包括借书证编号、书籍编号、还书日期。
⑩还书信息的查询和修改,包括还书读者借书证编号、读者姓名、书籍编号、书籍名称、借书日期、还书日期等。
⑾超期还书罚款输入,还书超出期限包括超出期限还书的读者借书证号,书籍编号,罚款金额。
⑿超期还书罚款查询,删除,包括读者借书证编号、读者姓名、书籍编号、书籍名称,罚款金额等。
⒀管理员管理:包括创建读者用户信息、删除读者用户信息、添加图书信息、删除图书信息。
⒁超级管理员管理:包括创建管理员用户信息、删除管理员用户信息、创建读者用户信息、删除读者用户信息、添加图书信息、删除图书信息。
2.4 系统结构图
(根据需求分析,图书信息管理系统的结构图如下:)
3、概念设计
所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。图书管理信息系统可以划分的实体有:书籍类别信息实体、读者信息实体、书籍信息实体、借阅记录信息实体,归还记录信息实体。用E-R图一一描述这些实体。
①类别实体图:
②读者信息实体图:
③管理员实体图
④超级管理员实体图
⑤书籍实体图:
⑥借阅记录息信实体图:
⑦归还记录信息实体图:
⑧罚款信息实体图:
⑨总的信息实体E-R图:
4、逻辑设计
(1)书籍类别(类别编号,类别名)
(2)读者(借书证编号,读者姓名,读者性别,读者种类,登记时期, 可借书数 ,已借书数,逾期未还书数)
(3) 管理员(管理员编号,管理员姓名,管理员密码,管理员权限)
(4) 超级管理员(管理员编号,管理员姓名,管理员密码,管理员权限)
(5)书籍(书籍编号,书籍名称,书籍类别,书记作者,出版社名称, 出版日期,登记日期)
(6)借阅(借书证编号,书籍编号,读者借书时间)
(7)还书(借书证编号,书籍编号,读者还书时间)
(8)罚款(借书证编号,读者姓名,借书证编号,书籍编号,读者借书 时间)
5、 物理设计
表命令:
(1)创建数据库
CREATE DATABASE librarysystem
ON
(
NAME = librarysystem,
FILENAME = 'd:\librarysystem.mdf',
SIZE = 10,
MAXSIZE = 50,
FILEGROWTH = 5 )
LOG ON
(
NAME = 'library',
FILENAME = 'e:\librarysystem.ldf',
SIZE = 5MB,
MAXSIZE = 25MB,
FILEGROWTH = 5MB
)
(2)书本类别表建立
create table book_style
(
bookstyleno varchar(30) primary key,
bookstyle varchar(30)
)
(3)创建书库表
create table system_books
(
bookid varchar(20) primary key,
bookname varchar(30) Not null,
bookstyleno varchar(30) Not null,
bookauthor varchar(30),
bookpub varchar(30) ,
bookpubdate datetime,
bookindate datetime ,
isborrowed bit,
foreign key (bookstyleno) references book_style (bookstyleno),
)
(4)借书证表建立
create table system_readers
(
readerid varchar(9)primary key,
readername varchar(9)not null ,
readersex varchar(2) not null,
readertype varchar(10),
regdate datetime,
booktotal int,
borrowednum int,
overduenoreturnnum int
)
(5)借书记录表建立
create table borrow_record
(
bookid varchar(20) primary key,
readerid varchar(9),
borrowdate datetime,
foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid),
)
(6)还书记录表建立
create table return_record
(
bookid varchar(20) primary key,
readerid varchar(9),
returndate datetime,
foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid)
)
(7)罚款单表建立
create table reader_fee
(
readerid varchar(9)not null,
readername varchar(9)not null ,
bookid varchar(20) primary key,
bookname varchar(30) Not null,
bookfee smallmoney,
borrowdate datetime,
foreign key (bookid) references system_books(bookid),
foreign key (readerid) references system_readers(readerid)
)
(8) 管理员表建立
create table system_Administrator
(
administratorid varchar(9)primary key,
administratorname varchar(9)not null ,
administratorpassword varchar(2) not null,
administratorpermission varchar(10)
)
(9) 索引的创建
create index bookstyle_index_style on book_style(bookstyle)
create index borrow_record_index_readerid on borrow_record(readerid)
create index reader_fee_index_readerid on reader_fee (readerid)
create index return_record_index_readerid on return_record(readerid)
create index system_books_index_bookname on system_books(bookname)
create index system_books_index_styleno on system_books(bookstyleno)
create index system_books_index_bookauthor on system_books(bookauthor)
表3-1 book_sytle 书籍类别信息表
表中列名 | 数据类型 | 可否为空 | 说明 |
bookstyleno | varchar | not null(主键) | 种类编号 |
bookstyle | Varchar | not null | 种类名称 |
表3-2 system_readers读者信息表格
表中列名 | 数据类型 | 可否为空 | 说明 |
readerid | varchar | not null(主键) | 读者借书证号 |
readername | varchar | not null | 读者姓名 |
readersex | varchar | not null | 读者性别 |
readertype | varchar | not null | 读者种类 |
regdate | datetime | null | 登记日期 |
booktotal | int | null | 可借书数 |
borrowednum | int | null | 已借书数 |
overduenoreturnnum | int | null | 逾期未还书数 |
表3-3 system_book书籍信息表
表中列名 | 数据类型 | 可否为空 | 说明 |
bookid | Varchar | Not null(主键) | 书籍编号 |
bookname | Varchar | Not null | 书籍名称 |
续表3-3
bookstyle | Varchar | Not null | 书籍类别 |
bookauthor | Varchar | Not null | 书籍作者 |
bookpub | Varchar | Null | 出版社名称 |
bookpubdate | Datetime | Null | 出版日期 |
bookindate | Datetime | Null | 登记日期 |
isborrowed | Bit | Not Null | 是否被借出 |
表3-4 borrow_record 借阅记录信息表
表中列名 | 数据类型 | 可否为空 | 说明 |
readerid | Varchar | Not null(外主键) | 读者借阅证编号 |
bookid | Varchar | Not null(外主键) | 书籍编号 |
borrowdate | Datetime | Not null | 读者借书时间 |
表3-5 return_record 借阅记录信息表
表中列名 | 数据类型 | 可否为空 | 说明 |
readername | Varchar | Not null(外主键) | 读者借阅证编号 |
readerid | Varchar | Not null(外主键) | 书籍编号 |
returndate | datetime | Not null | 读者还书时间 |
表3-6 reader_fee 罚款记录信息表
表中列名 | 数据类型 | 可否为空 | 说明 |
readerid | varchar | Not null | 读者借书证编号 |
readername | varchar | Not null | 读者姓名 |
bookid | varchar | Not null(外主键) | 书籍编号 |
bookname | varchar | Not null | 书籍名称 |
bookfee | Smallmoney | Not Null | 罚款金额 |
borrowdate | datetime | Not Null | 借阅时间 |
表3-7system_Administrator管理员信息表
表中列名 | 数据类型 | 可否为空 | 说明 |
administratorid | varchar | not null(主键) | 管理员编号 |
administratorname | varchar | not null | 管理员姓名 |
administratorpassword | varchar | not null | 管理员密码 |
administratorpermission | varchar | not null | 管理员权限 |
表3-8 system_Super_Administrator管理员信息表
表中列名 | 数据类型 | 可否为空 | 说明 |
superadministratorid | varchar | not null(主键) | 管理员编号 |
superadministratorname | varchar | not null | 管理员姓名 |
superadministratorpassword | varchar | not null | 管理员密码 |
superadministratorpermission | varchar | not null | 管理员权限 |
表结构图:
6、代码实现
1)数据库的连接:
import java.sql.*;
import javax.swing.JOptionPane;
public class Query
{
public static Connection conection = null;
static Connection getConnection()
{ //连接 MySQL 数据库
try{
Class.forName("org.gjt.mm.mysql.Driver");//加载驱动
conection = DriverManager.getConnection
(//连接字符串 "jdbc:mysql://localhost:3306/book","root","123");
System.out.println("数据库连接成功");
}catch(java.lang.ClassNotFoundException classnotfound)
{
classnotfound.printStackTrace();//驱动未找到
}
catch(java.sql.SQLException sql)
{
sql.printStackTrace();//SQL 执行时发生异常,打印栈信息
}
return conection;
}
2)增加一条图书记录:
public static boolean Insert(Book aBook)
{
Connection connect=getConnection();//得到连接
boolean res=false;
try {
Statement stmt = connect.createStatement();//查询集
String sql = "select * from book where BID='"+aBook.getBID()+"'";
ResultSet rs=stmt.executeQuery(sql);//执行 SQL 命令,返回结果集
if (rs.next())//图书编号存在
{ res=false;
JOptionPane.showMessageDialog(null,"学生信息插入失败,该 学生 ID 号已存在","警告",JOptionPane.WARNING_MESSAGE);
rs.close();
stmt.close();
} else{ //不存在
String sqlString="insert into book values('"+aBook.getBID()+"','"+aBook.getBname()+"','"+
aBook.getBauthor()+"','"+aBook.getPress()+"','"+
aBook.getBinfo()+"','"+aBook.getYear()+"-"+
aBook.getMonth()+"-"+aBook.getDay()+"','"+ aBook.getBclass()+"')";
res =stmt.execute(sqlString);
res=true;
if(res)
{
JOptionPane.showMessageDialog(null," 图 书 信 息 插 入 成 功","成功",JOptionPane.INFORMATION_MESSAGE); rs.close();
} else{
res=false;
JOptionPane.showMessageDialog(null,"图书信息插入 失败", "警告",JOptionPane.WARNING_MESSAGE); rs.close();
}
}
}catch (SQLException e) //捕获异常
{
res=false;
System.out.print("Error loading Mysql Driver!"); e.printStackTrace();
}
return res;
}
3)删除一条图书记录:
public static boolean delBook(String bid)
{
Connection connect=getConnection();
boolean res=false;
try {
Statement stmt = connect.createStatement();
String sql = "select * from book where Bid='"+bid+"'";
ResultSet rs=stmt.executeQuery(sql);
if (rs.next())
{
String sqlString="delete from book where Bid='"+bid+"'"; stmt.executeUpdate(sqlString);
JOptionPane.showMessageDialog(null,"图书信息删除成功", "成功 ",JOptionPane.INFORMATION_MESSAGE);
res=true;
rs.close();
stmt.close();
}
else{
JOptionPane.showMessageDialog(null,"图书信息删除失败,该 图书 ID 号不存在","警告",JOptionPane.WARNING_MESSAGE);
res=false;
rs.close();
stmt.close();
}
}catch (SQLException e)
{
JOptionPane.showMessageDialog(null,"图书信息删除失败", "成功 ",JOptionPane.INFORMATION_MESSAGE);
res=false;
System.out.print("Error loading Mysql Driver!");
e.printStackTrace();
}
return res;
}
4)修改图书信息:
public static boolean modifyBook(Book oldBook)
{ Connection connect=getConnection();
boolean flag=false;
try {
Statement stmt = connect.createStatement(); //查询集
String sqlString="update book set Bname='"+oldBook.getBname()+"',
Bauthor='"+oldBook.getBauthor() +"', Press='"+oldBook.getPress()+"',
BInfo='"+oldBook.getBinfo()+"',BDate='"+oldBook.getYear()+"-"+
oldBook.getMonth()+"-"+oldBook.getDay()+"',Bclass='"+
oldBook.getBclass()+"'
where BID='"+oldBook.getBID()+"'"; stmt.executeUpdate(sqlString);
JOptionPane.showMessageDialog(null,"图书信息修改成功", "成功 ",JOptionPane.INFORMATION_MESSAGE);
flag=true;
}catch (SQLException e) //捕获错误
{ JOptionPane.showMessageDialog(null,"图书信息修改失败", "警告 ",JOptionPane.WARNING_MESSAGE);
flag=false;
System.out.print("Error loading Mysql Driver!");
e.printStackTrace();
}
return flag;
}
5)修改一条图书记录并将结果用表格显示出来:
public
{ javax.swing.ListSelectionModel;
javax.swing.RowSorter; javax.swing.table.DefaultTableModel; javax.swing.table.TableRowSorter;
class BookInfoQuery extends JFrame
BorderLayout borderLayout1 = new BorderLayout();//布局方式
JSplitPane jSplitPane1 = new JSplitPane();//分割面板
JScrollPane jScrollPane1 = new JScrollPane();//滚动面板,用于放置表格
JPanel jPanel1 = new JPanel();//面板
JTable jTable1 = new JTable();//表格
DefaultTableModel tablemodel = null;//默认表格模型
JPanel jPanel3 = new JPanel();//面板
GridLayout gridLayout1 = new GridLayout();// 网格布局方式
JButton jBexit = new JButton();//退出按钮
ListSelectionModel selectionMode=null;
public BookInfoQuery(String bID,String bname,String bauthor, String press,
String bInfo,String year,String month,String day,String bclass)
{ getContentPane().setLayout(borderLayout1);//设置布局方式
String[] name = {"图书编号","图书名称","作者","出版社","图书简介 ","出版时间", "类别"};
String sqlStr = "select * from book where Year(BDate)>1900";
if(bID!=null)//查询时如果编号不为空
{
sqlStr+=" and BID='"+bID+"'";
}
if(bname!=null)//查询时如果图书名不为空
{
sqlStr+=" and Bname like '%"+bname+"%'";//模糊查询
}
if(bauthor!=null)//查询时如果作者不为空
{
sqlStr+=" and Bauthor like'%"+bauthor+"%'";//模糊查询
}
if(press!=null)//查询时如果出版社不为空
{
sqlStr+=" and Press like '%"+press+"%'";//模糊查询
}
if(bInfo!=null)//查询时如果图书信息不为空
{
sqlStr+=" and Binfo like '%"+bInfo+"%'";//模糊查询
}
if(year!=null)//出版年份不为空
{
sqlStr+=" and Year(BDate)"+year+" ";//按条件查询
}
if(month!=null)//出版月份不为空
{
sqlStr+=" and Month(BDate)"+month+" ";//按条件查询
}
if(day!=null)//出版日不为空
{
sqlStr+=" and Day(BDate)"+day+" ";//按条件查询
}
if(bclass!=null)// 图书类别不为空
{
sqlStr+=" and Bclass like '%"+bclass+"%'";//模糊查询
}
sqlStr+=" order by BDate desc";//按出版日期降序排序
ToTable bdt = new ToTable();
tablemodel = bdt.getTableModel(name,sqlStr);
jTable1.setModel(tablemodel); jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMN S);
//让其它的列也跟随变动
jTable1.setEnabled(true);//设置表格可用
jTable1.setCellSelectionEnabled(true);
jTable1.setBackground(Color.pink);//设置表格背景颜色 selectionMode=jTable1.getSelectionModel();
selectionMode.setSelectionMode(ListSelectionModel.SINGLE_SELEC TION); jTable1.setRowHeight(24);//设置表格高度
RowSorter
//表格排序过滤
jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.
HORIZONTAL_SCROLLBAR_ALWAYS);
jScrollPane1.setVerticalScrollBarPolicy(JScrollPane. VERTICAL_SCROLLBAR_ALWAYS);
jBexit.setText("退出");
jBexit.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent arg0)
{ int result = JOptionPane.showOptionDialog(null,"是否退 出图书信息查询?","系统 提示", JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE, null,new String[] {"是","否"},"否");
if (result == JOptionPane.YES_OPTION)
{
dispose();//隐藏
}
}
}
jPanel1.add(jBexit);
jScrollPane1.getViewport().add(jTable1);//将表格添加至滚动面板中 jSplitPane1.add(jPanel1, JSplitPane.BOTTOM);
jSplitPane1.resetToPreferredSizes();
jSplitPane1.add(jScrollPane1, JSplitPane.TOP);
this.getContentPane().add(jSplitPane1, java.awt.BorderLayout.CENTER); this.getContentPane().add(jPanel1, java.awt.BorderLayout.SOUTH); this.add(jSplitPane1);
setSize(800,640);
setVisible(true);
setTitle("按复合条件进行查询"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
7、结束语
通过对图书信息管理系统的设计,我们对数据库的理论知识有了更多的认识,对需求分析的重要性、对一个系统的各部门的工作流程细节有了更深入的了解,对概念设计的步骤掌握的更加清晰,对分析过程中的原则要求有了更透彻的认识,使得我们对数据库的整体设计有了更好的把握。
课程设计中,设计一个图书馆管理系统,其中包含了对图书基本信息的管理,借阅和还书信息管理等,上包含了图书馆管理所要求的信息,能够完成一定的数据管理功能。但总之在设计当中我们学习到了许多东西,用到了很多的数据库的理论知识,增强了一定的实践能里。
系统的特色与不足,图书馆管理信息系统是日常生活中经常接触到的一个系统。系统除了基本功能外,增加了报表的功能。系统的不足之处就是对图书预约功能的处理还有待完善,另外就是对图书馆删除图书的相关借阅信息是否需要保存还有待考虑。
在此次图书信息管理系统设计之后,我们对数据库的了解突破了只是在书本理论的层次,已经过渡到了实践的层次,对数据库系统的整体设计都有了更深层次的理解和掌握,确实受益匪浅。这次课程设计给了我们一个很好的实践机会,锻炼了我们的意志品质和合作精神,并且真正意义上的实践加深对理论的认识,积累了经验,为以后数据库的学习深造打下了坚实的基础。
本文来源:https://www.2haoxitong.net/k/doc/7aec1e969fc3d5bbfd0a79563c1ec5da51e2d66b.html
文档为doc格式