数据库原理课程设计
报告书
课题名图书信息管理系统 指导教师 日期 目录 .......................................................2 3.1可行性分析.....................................................2 3.2系统目标.......................................................3 3.3系统应该具备的功能.............................................3 3.4系统结构图.....................................................4 四、概念设计.........................................................5 五、逻辑设计.........................................................9 六、物理设计.........................................................9 5.1表命令........................................................9 5.2表结构图.....................................................13 七、代码实现........................................................13 6.1数据库连接...................................................13 6.2增加一条图书记录.............................................14 6.3删除一条图书记录.............................................16 6.4修改一条图书记录.............................................17 6.5查询一条图书记录.............................................18 八、结束语..........................................................22
前言
近年来,随着我国市场经济的迅速发展和人们生活水平的不断提高,以及计算机的普及使用,图书馆藏书的数目逐渐增大,这也是挑战了图书管理方面的技术,
精心整理
以前的人工管理方式已经不再适应现在的环境,取而代之的是先进的图书管理系统,提高了图书馆的工作效率,为想要借书和还书的人提供更好的服务。
1、概述
1.1开发目的
图书信息管理工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。我们小组开发图书管理信息系统就是采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,做到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校、社会服务。 2、需求分析 2.1可行性分析 2.1.1技术可行性 就技术力量来说,我们小组可以完成此次开发工作。开发过程中会出现许多问题,有我们预想之中的,也有一些没有在我们预想中,但我们有信心克服一切困难。我们小组各成员已经学习了MySQL,SQL,对网络技术和操作系统也有系统的了解,熟悉计算机原理,能解决常见的硬件故障和硬件选择。 2.1.2经济可行性 目标系统开发需求比较低,加上具有成熟的软硬件环境,所以在软硬件的支出上十分有限。而且,目标系统并不是十分的复杂,开发的周期较短,人员有限。当系统开发完实际运行后,将很大程度上提高计算机的功能,在为使用者带来便利的同时也为系统的进一步推广创造了条件。
2.1.3管理可行性
整个系统由于是自行开发,自行使用,所以很方便管理使用。
精心整理
2.2系统目标
图书管理信息系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强,数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。系统开发的总体任务是实现各种信息的系统化,规范化和自动化。 2.3系统应该具备的功能 ①读者基本信息的输入,包括借书证编号、读者姓名、读者性别等。 ②读者基本信息的查询、修改,包括读者借书证编号、读者姓名、读者性别等。 ③书籍类别标准的制定、类别信息的输入,包括类别编号、类别名称。 ④书籍类别信息的查询、修改,包括类别编号、类别名称。 ⑤书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、登记日期。 ⑥书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期登记日期等。 ⑦借书信息的输入,包括读者借书证编号、书籍编号、借书日期。 ⑧借书信息的查询、修改,包括借书证编号、借书证编号、读者姓名、书籍编号、书籍名称、借书日期等。 ⑨还书信息的输入,包括借书证编号、书籍编号、还书日期。 ⑩还书信息的查询和修改,包括还书读者借书证编号、读者姓名、书籍编号、书籍名称、借书日期、还书日期等。
⑾超期还书罚款输入,还书超出期限包括超出期限还书的读者借书证号,书籍编号,罚款金额。
⑿超期还书罚款查询,删除,包括读者借书证编号、读者姓名、书籍编号、书籍名
精心整理
称,罚款金额等。
⒀管理员管理:包括创建读者用户信息、删除读者用户信息、添加图书信息、删除图书信息。
⒁超级管理员管理:包括创建管理员用户信息、删除管理员用户信息、创建读者用户信息、删除读者用户信息、添加图书信息、删除图书信息。 2.4系统结构图 (根据需求分析,图书信息管理系统的结构图如下:) 图书管理系3、概念设计 统 所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。图书管理信息系统可以划分的实体有:书籍类别信息实体、读者信息实体、书籍信息实帮助子系统 借还书子系查询子系统 管理子系统 登录子系统 统 体、借阅记录信息实体,归还记录信息实体。用E-R图一一描述这些实体。 ①类别实体图: 直还多借图图读管逾书接条书书书者理期 书籍类别 查 件类管管员图②读者信息实体图:询查管理理管书 询理理管理③管理员实体图 逾期未还书可借书已借书 管理员数 数 类别编号 类别名数 ④超级管理员实体图 称 超级管理员 ⑤书籍实体图:登管记理时管读理者员借 员读者 编号间权限 书 证编是否被⑥借阅记录息信实体图: 出版社 管理员收录时间 管理员 借阅记录信息 编号 权限 ⑦归还记录信息实体图: 管理员管理员读者种 读者姓 姓名密码 类e 归还记录信息⑧罚款信息实体图: 书籍名编出版时 读者性书籍管理员管 理员 号 间 别 借阅时间罚款金额 书籍名姓名 密码 ⑨总的信息实体E-R图: 书读者借隔称 书籍类别n 证编号 归还时间编号 书籍n 作4、逻辑设计 者借读者姓名还书信息 读书籍书名管理 书籍类别证编号 罚款信息实称 书籍类别编m (1)书籍类别(类别编号,类别名) 编号 体实体 号m n 归还 信息登记 书籍 m 1 精心整理 n 借阅时间书类别 读者借书隔 m 证编号 n 借阅 读者 书籍类别
(2)读者(借书证编号,读者姓名,读者性别,读者种类,登记时期, 可借书数,已借书数,逾期未还书数)
(3)管理员(管理员编号,管理员姓名,管理员密码,管理员权限) (4)超级管理员(管理员编号,管理员姓名,管理员密码,管理员权限)
(5)书籍(书籍编号,书籍名称,书籍类别,书记作者,出版社名称, 出版日期,登记日期) (6)借阅(借书证编号,书籍编号,读者借书时间) (7)还书(借书证编号,书籍编号,读者还书时间) (8)罚款(借书证编号,读者姓名,借书证编号,书籍编号,读者借书5、物理设计 表命令: (1)创建数据库 CREATEDATABASElibrarysystem ON (
NAME=librarysystem, FILENAME='d:\\librarysystem.mdf', SIZE=10, MAXSIZE=50, FILEGROWTH=5) LOGON (
NAME='library', FILENAME='e:\\librarysystem.ldf', SIZE=5MB, MAXSIZE=25MB, FILEGROWTH=5MB )
(2)书本类别表建立 createtablebook_style (
bookstylenovarchar(30)primarykey, bookstylevarchar(30) )
(3)创建书库表 精心整理
时间)
createtablesystem_books (
bookidvarchar(20)primarykey, booknamevarchar(30)Notnull, bookstylenovarchar(30)Notnull, bookauthorvarchar(30), bookpubvarchar(30), bookpubdatedatetime, bookindatedatetime, isborrowedbit,
foreignkey(bookstyleno)referencesbook_style(bookstyleno), )
(4)借书证表建立 createtablesystem_readers (
readeridvarchar(9)primarykey, readernamevarchar(9)notnull, readersexvarchar(2)notnull, readertypevarchar(10), regdatedatetime, booktotalint, borrowednumint, overduenoreturnnumint )
(5)借书记录表建立 createtableborrow_record (
bookidvarchar(20)primarykey, readeridvarchar(9), borrowdatedatetime, foreignkey(bookid)referencessystem_books(bookid), foreignkey(readerid)referencessystem_readers(readerid), )
(6)还书记录表建立 createtablereturn_record (
bookidvarchar(20)primarykey, readeridvarchar(9), returndatedatetime,
foreignkey(bookid)referencessystem_books(bookid),
foreignkey(readerid)referencessystem_readers(readerid) )
(7)罚款单表建立 createtablereader_fee (
readeridvarchar(9)notnull, 精心整理
readernamevarchar(9)notnull, bookidvarchar(20)primarykey, booknamevarchar(30)Notnull, bookfeesmallmoney, borrowdatedatetime,
foreignkey(bookid)referencessystem_books(bookid),
foreignkey(readerid)referencessystem_readers(readerid) )
(8)管理员表建立
createtablesystem_Administrator (
administratoridvarchar(9)primarykey, administratornamevarchar(9)notnull, administratorpasswordvarchar(2)notnull, administratorpermissionvarchar(10) ) (9)索引的创建 createindexbookstyle_index_styleonbook_style(bookstyle) createindexborrow_record_index_readeridonborrow_record(readerid) createindexreader_fee_index_readeridonreader_fee(readerid) createindexreturn_record_index_readeridonreturn_record(readerid) createindexsystem_books_index_booknameonsystem_books(bookname) createindexsystem_books_index_stylenoonsystem_books(bookstyleno) createindexsystem_books_index_bookauthoronsystem_books(bookauthor) 表3-1 book_sytle书籍类别信息表 表中列名 数据类型 可否为空 说明 bookstyleno varchar notnull(主键) 种类编号 bookstyle Varchar notnull 种类名称 表3-2 system_readers读者信息表格 表中列名 数据类型 可否为空 说明 readerid varchar notnull(主键) 读者借书证号 readername varchar notnull 读者姓名 readersex varchar notnull 读者性别 readertype varchar notnull 读者种类 regdate datetime null 登记日期 booktotal int null 可借书数 borrowednum int null 已借书数 overduenoreturnint null 逾期未还书数 num 表3-3 system_book书籍信息表 表中列名 数据类型 可否为空 说明 bookid Varchar Notnull(主键) 书籍编号 bookname Varchar Notnull 书籍名称 续表3-3 精心整理
Varchar Notnull 书籍类别 Varchar Notnull 书籍作者 Varchar Null 出版社名称 Datetime Null 出版日期 Datetime Null 登记日期 Bit NotNull 是否被借出 表3-4 borrow_record借阅记录信息表 表中列名 数据类型 可否为空 说明 readerid Varchar Notnull(外主键) 读者借阅证编号 bookid Varchar Notnull(外主键) 书籍编号 borrowdate Datetime Notnull 读者借书时间 表3-5 return_record借阅记录信息表 表中列名 数据类型 可否为空 说明 readername Varchar Notnull(外主键) 读者借阅证编号 readerid Varchar Notnull(外主键) 书籍编号 returndate datetime Notnull 读者还书时间 表3-6 reader_fee罚款记录信息表 表中列名 数据类型 可否为空 说明 readerid varchar Notnull 读者借书证编号 readername varchar Notnull 读者姓名 bookid varchar Notnull(外主键) 书籍编号 bookname varchar Notnull 书籍名称 bookfee Smallmoney NotNull 罚款金额 borrowdate datetime NotNull 借阅时间 表3-7system_Administrator管理员信息表 表中列名 数据类型 可否为空 说明 administratorid varchar notnull(主键) 管理员编号 administratorname varchar notnull 管理员姓名 administratorpasswvarchar notnull 管理员密码 ord administratorpermivarchar notnull 管理员权限 ssion 表3-8system_Super_Administrator管理员信息表 表中列名 数据类可否为空 说明 型 superadministratorid varchanotnull(主键) 管理员编r 号 superadministratorname varchanotnull 管理员姓r 名 superadministratorpassvarchanotnull 管理员密word r 码 superadministratorpermvarchanotnull 管理员权ission r 限 精心整理
bookstyle bookauthor bookpub bookpubdate bookindate isborrowed
表结构图:
6、代码实现
1)数据库的连接:
importjava.sql.*;
importjavax.swing.JOptionPane; publicclassQuery {
publicstaticConnectionconection=null; staticConnectiongetConnection() { //连接MySQL数据库 try{ Class.forName(\"org.gjt.mm.mysql.Driver\");//加载驱动 conection=DriverManager.getConnection System.out.println(\"数据库连接成功\"); }catch(java.lang.ClassNotFoundExceptionclassnotfound) { classnotfound.printStackTrace();//驱动未找到 } catch(java.sql.SQLExceptionsql) { sql.printStackTrace();//SQL执行时发生异常,打印栈信息 } returnconection; }
2)增加一条图书记录:
publicstaticbooleanInsert(BookaBook) {
Connectionconnect=getConnection();//得到连接 booleanres=false; try{
精心整理
精心整理Statementstmt=connect.createStatement();//查询集
Stringsql=\"select*frombookwhereBID='\"+aBook.getBID()+\"'\"; ResultSetrs=stmt.executeQuery(sql);//执行SQL命令,返回结果集
if(rs.next())//图书编号存在 {
res=false;
JOptionPane.showMessageDialog(null,\"学生信息插入失败,该学生
ID号已存在\警告\.WARNING_MESSAGE); rs.close(); stmt.close(); }else{//不存在 StringsqlString=\"insertintobook 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,\"图书信息插 入成功\成
功\.INFORMATION_MESSAGE); rs.close(); }else{ res=false; JOptionPane.showMessageDialog(null,\"图书信息插入 失败\警告\.WARNING_MESSAGE); rs.close();
} }
}catch(SQLExceptione)//捕获异常
{
res=false;
System.out.print(\"ErrorloadingMysqlDriver!\");
e.printStackTrace(); } returnres; }
3)删除一条图书记录:
publicstaticbooleandelBook(Stringbid) {
Connectionconnect=getConnection(); booleanres=false; try{ Statementstmt=connect.createStatement(); Stringsql=\"select*frombookwhereBid='\"+bid+\"'\"; ResultSetrs=stmt.executeQuery(sql); if(rs.next()) { StringsqlString=\"deletefrombookwhereBid='\"+bid+\"'\"; stmt.executeUpdate(sqlString); JOptionPane.showMessageDialog(null,\"图书信息删除成功\成功 \.INFORMATION_MESSAGE); res=true; rs.close(); stmt.close(); } else{
JOptionPane.showMessageDialog(null,\"图书信息删除失败,该图书不存在\警告\.WARNING_MESSAGE);
res=false; rs.close(); stmt.close();
精心整理
号
ID
}
}catch(SQLExceptione) {
JOptionPane.showMessageDialog(null,\"图书信息删除失败\成功
\.INFORMATION_MESSAGE); res=false;
System.out.print(\"ErrorloadingMysqlDriver!\"); e.printStackTrace(); } returnres; } 4)修改图书信息: publicstaticbooleanmodifyBook(BookoldBook) {
Connectionconnect=getConnection(); booleanflag=false; try{ Statementstmt=connect.createStatement();//查询集 StringsqlString=\"updatebookset Bname='\"+oldBook.getBname()+\"', Bauthor='\"+oldBook.getBauthor()+\"',Press='\"+oldBook.getPress()+\"', BInfo='\"+oldBook.getBinfo()+\"',BDate='\"+oldBook.getYear()+\"-\"+ oldBook.getMonth()+\"-\"+oldBook.getDay()+\"',Bclass='\"+ oldBook.getBclass()+\"' whereBID='\"+oldBook.getBID()+\"'\";stmt.executeUpdate(sqlString); JOptionPane.showMessageDialog(null,\"图书信息修改成功\成
\.INFORMATION_MESSAGE); flag=true;
}catch(SQLExceptione)//捕获错误
{ JOptionPane.showMessageDialog(null,\"图书信息修改失败\警告
\.WARNING_MESSAGE);
flag=false;
精心整理
功
System.out.print(\"ErrorloadingMysqlDriver!\"); }
returnflag; }
5)修改一条图书记录并将结果用表格显示出来: public {
javax.swing.ListSelectionModel; javax.swing.RowSorter;javax.swing.table.DefaultTableModel;
javax.swing.table.TableRowSorter; classBookInfoQueryextendsJFrame BorderLayoutborderLayout1=newBorderLayout();//布局方式 JSplitPanejSplitPane1=newJSplitPane();//分割面板 JScrollPanejScrollPane1=newJScrollPane();//滚动面板,用于放置表格 JPaneljPanel1=newJPanel();//面板 JTablejTable1=newJTable();//表格 DefaultTableModeltablemodel=null;//默认表格模型 JPaneljPanel3=newJPanel();//面板 GridLayoutgridLayout1=newGridLayout();//网格布局方式 JButtonjBexit=newJButton();//退出按钮 ListSelectionModelselectionMode=null; publicBookInfoQuery(StringbID,Stringbname,Stringbauthor,Stringpress, StringbInfo,Stringyear,Stringmonth,Stringday,Stringbclass) {getContentPane().setLayout(borderLayout1);//设置布局方式 String[]name={\"图书编号\图书名称\作者\出版社\图书简介\出版时间\类别\StringsqlStr=\"select*frombookwhereYear(BDate)>1900\"; if(bID!=null)//查询时如果编号不为空 {
sqlStr+=\"andBID='\"+bID+\"'\"; } 精心整理
e.printStackTrace();
if(bname!=null)//查询时如果图书名不为空 {
sqlStr+=\"andBnamelike'%\"+bname+\"%'\";//模糊查询 }
if(bauthor!=null)//查询时如果作者不为空 {
sqlStr+=\"andBauthorlike'%\"+bauthor+\"%'\";//模糊查询 }
if(press!=null)//查询时如果出版社不为空 {
sqlStr+=\"andPresslike'%\"+press+\"%'\";//模糊查询 }
if(bInfo!=null)//查询时如果图书信息不为空 {
sqlStr+=\"andBinfolike'%\"+bInfo+\"%'\";//模糊查询 }
if(year!=null)//出版年份不为空 {
sqlStr+=\"andYear(BDate)\"+year+\"\";//按条件查询 }
if(month!=null)//出版月份不为空 {
sqlStr+=\"andMonth(BDate)\"+month+\"\";//按条件查询 }
if(day!=null)//出版日不为空 {
sqlStr+=\"andDay(BDate)\"+day+\"\";//按条件查询 }
if(bclass!=null)//图书类别不为空 { 精心整理
sqlStr+=\"andBclasslike'%\"+bclass+\"%'\";//模糊查询 }
sqlStr+=\"orderbyBDatedesc\";//按出版日期降序排序 ToTablebdt=newToTable();
tablemodel=bdt.getTableModel(name,sqlStr); jTable1.setModel(tablemodel);
jTable1.setAutoResizeMode(JTable.AUTO_RESIZE_SUBSEQUENT_COLUMNS);
//让其它的列也跟随变动 jTable1.setEnabled(true);//设置表格可用 jTable1.setCellSelectionEnabled(true); jTable1.setBackground(Color.pink);//设置表格背景颜色
selectionMode=jTable1.getSelectionModel(); selectionMode.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable1.setRowHeight(24);//设置表格高度 RowSorter TableRowSorter VERTICAL_SCROLLBAR_ALWAYS); jBexit.setText(\"退出\"); jBexit.addActionListener(newActionListener() { publicvoidactionPerformed(ActionEventarg0) {intresult=JOptionPane.showOptionDialog(null,\"是否退出图书信息查询?\系统 \.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE, null,newString[]{\"是\否\否\"); 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、结束语 通过对图书信息管理系统的设计,我们对数据库的理论知识有了更多的认识,对需求分析的重要性、对一个系统的各部门的工作流程细节有了更深入的了解,对概念设计的步骤掌握的更加清晰,对分析过程中的原则要求有了更透彻的认识,使得我们对数据库的整体设计有了更好的把握。 课程设计中,设计一个图书馆管理系统,其中包含了对图书基本信息的管理,借阅和还书信息管理等,上包含了图书馆管理所要求的信息,能够完成一定的数据管理功能。但总之在设计当中我们学习到了许多东西,用到了很多的数据库的理论知识,增强了一定的实践能里。 系统的特色与不足,图书馆管理信息系统是日常生活中经常接触到的一个系统。 精心整理 系统除了基本功能外,增加了报表的功能。系统的不足之处就是对图书预约功能的处理还有待完善,另外就是对图书馆删除图书的相关借阅信息是否需要保存还有待考虑。 在此次图书信息管理系统设计之后,我们对数据库的了解突破了只是在书本理论的层次,已经过渡到了实践的层次,对数据库系统的整体设计都有了更深层次的理解和掌握,确实受益匪浅。这次课程设计给了我们一个很好的实践机会,锻炼了我们的意志品质和合作精神,并且真正意义上的实践加深对理论的认识,积累了经验,为以后数据库的学习深造打下了坚实的基础。 精心整理 因篇幅问题不能全部显示,请点此查看更多更全内容