1、数据库原理课程设计报 告 书课 题 名图书信息管理系统指导教师 日 期目 录一、前言。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。2二、概述.。.。.。.。.。.。.。.。.。.。.。.。.。.。.22。1开发目的。.。.。.。.。.。.。.。.。.。.。.。2三、需求分析.。.。.。.。.。.。.。.。.。.。.。.。.。23.1可行性分析。.。.。.。.。.。.。.。.。.。.。.。.。.。23。1。1技术可行性。.。.。.。.。.。.。.。.。.。.。.。.。.。23.1.2经济可行性。.。.。.。.。.。.。.。.。.。.。33.1.3管理可行性。.。.。.。.
2、。.。.。.。.。.33。2系统目标.。.。.。.。.。.。.。.。.。.。.。33。3系统应该具备的功能。.。.。.。.。.。.。.。.。.。.。.。33.4系统结构图.。.。.。.。.。.。.。.。.。.。.。.。.。.。.。4四、 概念设计.。.。.。.。.。.。.。.。.。.。.。.。.。.。.5五、 逻辑设计。.。.。.。.。.。.。.。.。.。.。.。.。.。.9六、 物理设计。.。.。.。.。.。.。.。.。.。.。.。.。95。1表命令。.。.。.。.。.。.。.。.。.。.。95。2表结构图.。.。.。.。.。.。.。.。.。.。13七、 代码实现.。.。.。.。.。.。.。
3、.。.。.。.。.。.。.136。1数据库连接。.。.。.。.。.。.。.。.。.。.。136。2增加一条图书记录。.。.。.。.。.。.。.。.。146。3删除一条图书记录.。.。.。.。.。.。.。.。.。.。166。4修改一条图书记录。.。.。.。.。.。.。.。.。.。176。5查询一条图书记录。.。.。.。.。.。.。.。.。.。18八、结束语.。.。.。.。.。.。.。.。.。.。.。.。.。.22前言近年来,随着我国市场经济的迅速发展和人们生活水平的不断提高,以及计算机的普及使用,图书馆藏书的数目逐渐增大,这也是挑战了图书管理方面的技术,以前的人工管理方式已经不再适应现在的环境,
4、取而代之的是先进的图书管理系统,提高了图书馆的工作效率,为想要借书和还书的人提供更好的服务.1、概述1。1 开发目的 图书信息管理工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。我们小组开发图书管理信息系统就是采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,做到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校、社会服务。2、需求分析2。1可行性分析2。1.1技术可行性 就技术力量来说,我们小组可以完成此次开发工作。开发过程中会出现许多问题,有我们预想之中的,也有一些没有在我们预想中,但我们有信心克服一切困难。我们小组各成员已经学习了MySQL,SQL,对
5、网络技术和操作系统也有系统的了解,熟悉计算机原理,能解决常见的硬件故障和硬件选择。2。1。2经济可行性 目标系统开发需求比较低,加上具有成熟的软硬件环境,所以在软硬件的支出上十分有限。而且,目标系统并不是十分的复杂,开发的周期较短,人员有限。当系统开发完实际运行后,将很大程度上提高计算机的功能,在为使用者带来便利的同时也为系统的进一步推广创造了条件。2。1。3管理可行性整个系统由于是自行开发,自行使用,所以很方便管理使用.2。2系统目标图书管理信息系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强,数据安全性好的
6、库。而对于后者则要求应用程序功能完备,易使用等特点.系统开发的总体任务是实现各种信息的系统化,规范化和自动化.2.3 系统应该具备的功能读者基本信息的输入,包括借书证编号、读者姓名、读者性别等。读者基本信息的查询、修改,包括读者借书证编号、读者姓名、读者性别等。书籍类别标准的制定、类别信息的输入,包括类别编号、类别名称。书籍类别信息的查询、修改,包括类别编号、类别名称.书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、登记日期。书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期登记日期等。借书信息的输入,包括读者借书证
7、编号、书籍编号、借书日期。借书信息的查询、修改,包括借书证编号、借书证编号、读者姓名、书籍编号、书籍名称、借书日期等.还书信息的输入,包括借书证编号、书籍编号、还书日期。 还书信息的查询和修改,包括还书读者借书证编号、读者姓名、书籍编号、书籍名称、借书日期、还书日期等.超期还书罚款输入,还书超出期限包括超出期限还书的读者借书证号,书籍编号,罚款金额.超期还书罚款查询,删除,包括读者借书证编号、读者姓名、书籍编号、书籍名称,罚款金额等.管理员管理:包括创建读者用户信息、删除读者用户信息、添加图书信息、删除图书信息。超级管理员管理:包括创建管理员用户信息、删除管理员用户信息、创建读者用户信息、删除
8、读者用户信息、添加图书信息、删除图书信息。2。4 系统结构图(根据需求分析,图书信息管理系统的结构图如下:)图书管理系统借还书子系统查询子系统管理子系统图书类管理图书管理读者管理逾期图书管理管理员管理直接查询多条件查询借 书还 书帮助子系统登录子系统3、概念设计所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。图书管理信息系统可以划分的实体有:书籍类别信息实体、读者信息实体、书籍信息实体、借阅记录信息实体,归还记录信息实体.用E-R图一一描述这些实体。类别实体图:书籍类别类别编号类别名称读者信息实体图:读者读者姓名读者性别读者种类e登记时间读者借书证编号可借书数已借书数逾期未还
9、书数管理员实体图管理员管理员姓名管理员编号管理员密码管理员权限超级管理员实体图超级管理员管理员姓名管理员编号管理员密码管理员权限书籍实体图:书籍书籍编号书籍名称书籍类别编号书籍作者出版时间收录时间是否被借出版社借阅记录息信实体图:读者借书证编号书籍类别编号借阅时间隔借阅记录信息归还记录信息实体图:归还记录信息读者借书证编号书籍类别编号归还时间隔罚款信息实体图:书籍类别编号罚款信息实体实体罚款金额读者姓名读者借书证编号书籍名称借阅时间隔总的信息实体E-R图:11n信息登记读者书籍书类别归还借阅罚款罚款信息还书信息借阅信息实体mnmnmnn1m创建1管理nnn管理m管理员超级管理员创建1mn出具罚
10、款单4、逻辑设计(1)书籍类别(类别编号,类别名)(2)读者(借书证编号,读者姓名,读者性别,读者种类,登记时期, 可借书数 ,已借书数,逾期未还书数)(3) 管理员(管理员编号,管理员姓名,管理员密码,管理员权限)(4) 超级管理员(管理员编号,管理员姓名,管理员密码,管理员权限)(5)书籍(书籍编号,书籍名称,书籍类别,书记作者,出版社名称, 出版日期,登记日期)(6)借阅(借书证编号,书籍编号,读者借书时间)(7)还书(借书证编号,书籍编号,读者还书时间)(8)罚款(借书证编号,读者姓名,借书证编号,书籍编号,读者借书 时间)5、 物理设计表命令:(1)创建数据库CREATE DATAB
11、ASE librarysystemON (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
12、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 (boo
13、kstyleno),)(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) pri
14、mary 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) r
15、eferences 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 ke
16、y (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(
17、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_in
18、dex_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)表31 book_sytle 书籍类别信息表表中列名数据类型可否为空说明bookstylenovarcharnot null(主键)种类编号bookstyleVarcharnot null种类名称表3-2system_readers读者信息表格表中
19、列名数据类型可否为空说明readeridvarcharnot null(主键)读者借书证号readernamevarcharnot null读者姓名readersexvarcharnot null读者性别readertypevarcharnot null读者种类regdatedatetimenull登记日期booktotalintnull可借书数borrowednumintnull已借书数overduenoreturnnumintnull逾期未还书数表33system_book书籍信息表表中列名数据类型可否为空说明bookidVarcharNot null(主键)书籍编号booknameVar
20、charNot null书籍名称续表33bookstyleVarcharNot null书籍类别bookauthorVarcharNot null书籍作者bookpubVarcharNull出版社名称bookpubdateDatetimeNull出版日期bookindateDatetimeNull登记日期isborrowedBitNot Null是否被借出表34borrow_record 借阅记录信息表表中列名数据类型可否为空说明readeridVarcharNot null(外主键)读者借阅证编号bookidVarcharNot null(外主键)书籍编号borrowdateDatetime
21、Not null读者借书时间表3-5return_record 借阅记录信息表表中列名数据类型可否为空说明readernameVarcharNot null(外主键)读者借阅证编号readeridVarcharNot null(外主键)书籍编号returndatedatetimeNot null读者还书时间表36reader_fee 罚款记录信息表表中列名数据类型可否为空说明readeridvarcharNot null读者借书证编号readernamevarcharNot null读者姓名bookidvarcharNot null(外主键)书籍编号booknamevarcharNot nul
22、l书籍名称bookfeeSmallmoneyNot Null罚款金额borrowdatedatetimeNot Null借阅时间表3-7system_Administrator管理员信息表表中列名数据类型可否为空说明administratoridvarcharnot null(主键)管理员编号administratornamevarcharnot null管理员姓名administratorpasswordvarcharnot null管理员密码administratorpermissionvarcharnot null管理员权限表38 system_Super_Administrator管理
23、员信息表表中列名数据类型可否为空说明superadministratoridvarcharnot null(主键)管理员编号superadministratornamevarcharnot null管理员姓名superadministratorpasswordvarcharnot null管理员密码superadministratorpermissionvarcharnot null管理员权限表结构图:6、代码实现1)数据库的连接: import java.sql.; import javax。swing。JOptionPane; public class Query public stati
24、c 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 classnot
25、found)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();/查询集
26、 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 /不存在 StringsqlString=”insert
27、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, 图 书 信 息 插 入 成 功,”成功,J
28、OptionPane。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 bo
29、olean 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。executeUpd
30、ate(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) JOpt
31、ionPane。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 s
32、tmt = 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
33、 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 load
34、ing 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();/布局方式 JSp
35、litPane 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();/ 网格布局方式 J
36、Button 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 = ”图书编号,图书名称”,”作者”,出版社,”图
37、书简介 ”,出版时间”, 类别”; 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)/查询时如果出版社不为空 s
38、qlStr+= 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+” ”;/按条件查询 i
39、f(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.s
40、etEnabled(true);/设置表格可用 jTable1。setCellSelectionEnabled(true); jTable1。setBackground(Color.pink);/设置表格背景颜色 selectionMode=jTable1。getSelectionModel();selectionMode。setSelectionMode(ListSelectionModel。SINGLE_SELEC TION); jTable1。setRowHeight(24);/设置表格高度 RowSorterDefaultTableModel sorter TableRowSorter
41、DefaultTableModel(tablemodel)= newjTable1。setRowSorter(sorter);/表格排序过滤 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();/隐藏 jPan