《学位论文-—图书信息管理系统数据库报告.doc》由会员分享,可在线阅读,更多相关《学位论文-—图书信息管理系统数据库报告.doc(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、数据库系统原理课程设计报告题 目: 学 院: 专 业: 学生姓名: 学 号: 指导教师: 年 月 日 摘 要如今的图书馆早已不像以前通过手工记录来登记图书、读者以及借阅信息了,互联网的飞速发展实现了图书管理的信息化。在本文的开始部分介绍了图书管理信息系统的设计背景,然后阐述了图书信息管理系统的需求和总体设计方案,较具体的论述了系统的详细设计和实现过程。该系统是在Win7系统下,以关系型数据库MySql为数据库开发管理软件,Java编程技术开发的图书管理信息系统。该系统主要包括基础维护模块、借阅模块、查询管理模块、统计模块等其他功能模块。用户界面设计方面所利用的是Java编程技术。后台数据库选用
2、的则是MySql关系型数据库。关键词:图书管理;Java;数据库目 录引言11 程序开发的技术基础21.1 Java技术21.2 数据库原理32 图书管理信息系统需求分析42.1 系统目标42.2 需求概述42.3 系统功能分析42.4 系统的需求分析52.4.1设计分析52.4.2数据库需求分析53 图书管理系统的设计63.1 系统功能模块设计63.1.1系统功能模块设计63.1.2系统功能模块结构图63.2 系统数据库设计73.2.1数据流图73.2.2数据存储词条描述93.3 用户界面设计113.3.1输入设计113.3.2输出设计124 图书管理信息系统的实现124.1 开发环境的构建
3、124.2 系统工程目录124.3 公共模块134.3.1 db包134.3.2 util包154.4 功能模块的实现164.4.1登录模块相关164.4.2基础维护模块相关174.4.3借阅模块相关184.4.4查询管理模块相关204.4.5统计模块相关214.4.6系统管理模块相关215 结论23参考文献24第 25 页 共 25页 引言 21世纪后我们进入了一个高速发展的信息化时代,在各行各业中离不开信息处理,这正是计算机网络被广泛应用于管理信息系统的外部原因。计算机的好处在于它能对信息数据进行高速、安全的处理,尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。图书馆作为一种信息资源
4、的集聚地,图书、用户与借阅资料繁多,包含很多信息数据的管理,图书管理是一项非常重要的内容。随着图书数量的增加。采用传统的手工图书管理方式,管理过程繁琐而复杂,执行效率低,并且容易出错。在这种情况下,就需要开发一套图书管理系统来提高图书管理工作的效率和质量。1 程序开发的技术基础1.1 Java技术Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。它继承了 C+语言面向对象技术的核心。Java舍弃了C语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间
5、,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的性能。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对
6、对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。1.2 数据库原理数据库是数据管理的一个领域,是计算机科学技术的一个重要子科学。如今信息资源已成为各个部门、组织的一笔财富。建立一个满足各级部门信息处理要求的行之有效的信息系统就成为了一个企业、事业单位、政府部门或其他社会组织生存和发展的重要条件。因此,作为信息系统核心和基础的数据
7、库得到了越来越深远的运用。MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配各种编程语言可组成良好的开发环境。2 图书管理信息系统需求分析2.1 系统目标图书管理信息系统是典型的信息管理系统,其开发主要包括后台数据库的建立以及前端应用程序的开发两个方面。对于前者要求建立数据一致性与完整性强,数据
8、安全性好的库。对于后者则要求应用程序功能完备,容易使用等特点。系统开发的总体目标就是实现各种信息的系统化、规范化和自动化。2.2 需求概述在图书管理系统中,管理员为每个读者建立一个账户,账户内存储读者个人的详细信息,并依据读者类别的不同给每个读者发放借书卡(提供借书卡号、姓名、读者分类等信息)。读者可以凭借书卡号在图书馆进行图书查询、密码的修改以及个人信息查询等操作,不同类别的读者在借书数量、还书期限上可以有所不同。借阅图书时,由管理员录入借书卡号,系统首先验证该卡号的有效性,若有效,则显示卡号、姓名、已借数量等信息,实际借书的数量不能超出总借书数量的值。完成借书操作的同时要修改相应图书信息的
9、状态、读者信息中的借书数量、在借阅信息中添加相应的记录。归还图书时,由管理员录入借书卡号和待归还的图书编号,显示借书卡号、读者姓名、图书编号、图书名称、借书日期、应还日期等信息。完成归还操作的同时,修改相应图书信息的状态、修改读者信息中的已借数量、在借书信息中对相应的借书记录做归还标记。管理员不定期地对图书信息进行添加、修改和删除等操作。也可以对读者信息进行添加、修改、删除等操作。同时可以对图书以及借阅情况做分类统计。2.3 系统功能分析该系统主要具备以下功能:查询功能:能够列出当前系统图书目录,读者目录以及借阅信息,并能够按照需求对图书与读者进行相应的匹配查询。增加功能:能够对图书与读者信息
10、进行添加。修改功能:能够对数据库中已存在的读者与图书信息进行修改,以及对账户的密码进行修改。删除功能:能够对数据库中已存在的读者与图书信息进行删除。统计功能:能够对图书与读者信息按需求进行分类统计。2.4 系统的需求分析2.4.1设计分析此管理软件使用Java语言进行开发,可粗略的划分为前台和后台部分。前台部分主要的是人机交互的界面,遵照一定的界面设计一般原则,针对不同的用户给予差别化的用户体验。后台部分主要是底层数据间的相互传递,调用Java中封装好的不同类去实现用户的需求。2.4.2数据库需求分析为了对数据进行统一的管理与维护,以确保数据的完整性与安全性,我在这里选择的是一种关系数据库My
11、Sql,它的规模较小、体积较小、速度较快而且相对成本低,最主要是MySql提供的功能已经足够满足图书管理系信息系统软件的使用了。图2-1 ER图图书的入库需要管理员的登记,登记后的图书才能被读者进行借阅,读者的可借阅数量有限定,并且在借书时自动生成借书与还书时间。管理员也可以对读者进行管理,主要体现在对读者的增加与读者信息的更新与删除上。整个功能至少需要以下数据项:图书:图书编号、isbn号、图书名称、图书类型、作者、译者、出版社、出版日期、库存数量、价格、在馆状态读者:读者帐号、读者姓名、读者类型、性别、可借书数量、借阅时间长度借还信息:编号、书籍编号、书籍名称、借阅读者帐号、借书日期、还书
12、日期、是否归还用户:编号、帐户名、密码、是否管理员3 图书管理系统的设计3.1 系统功能模块设计3.1.1系统功能模块设计通过需要实现的功能情况,把图书管理系统软件分成6个模块来实现登录模块:这是程序的入口,用来判断登录的是读者还是管理员,以及拒绝非系统用户的登录;基础维护模块:用来实现管理员对图书以及读者的信息管理。实现图书与读者信息的增删改功能;借阅模块:管理员可通过借阅模块来实现读者的借还书需求;查询管理模块:该模块主要用来实现管理员对图书、读者以及借阅情况的查询,还能实现读者对自己信息的查询以及对自己借阅情况的查询;统计模块:用以实现管理员对图书、读者以及借阅情况的统计分析;系统管理模
13、块:用户与管理员可通过该模块来实现密码的更新修改。3.1.2系统功能模块结构图图3-1 系统功能模块结构图3.2 系统数据库设计3.2.1数据流图(1)0层数据流图图3-2 0层数据流图(2)1层数据流图读者信息管理 图3-3 1层数据流图(1) 图书信息管理图3-4 1层数据流图(2)图书借还管理图3-5 1层数据流图(3) 3.2.2数据存储词条描述经过认真的系统需求分析后,确定图书管理信息系统需要用到以下4张表:(1)图书信息表book(图书信息表)名称数据类型长度说明idint32图书编号(主键)isbnvarchar50isbn号namevarchar100图书名称typevarch
14、ar50图书类型authorvarchar50作者translatorvarchar50译者publishervarchar1024出版社publish_timedate出版日期stockint11库存数量pricedouble价格is_backsmallint1在馆状态表3-1 图书信息表(2)读者信息表reader(读者信息表)名称数据类型长度说明idvarchar50读者帐号(主键)namevarchar50读者姓名typevarchar20读者类型sexchar2性别max_numint3可借书数量days_numint11借阅时间长度表3-2 读者信息表(3)借还信息表borrow(
15、借还信息表)名称数据类型长度说明idint11编号(主键)book_idvarchar50书籍编号booknamevarchar100书籍名称reader_idvarchar50借阅读者帐号borrow_datedate0借书日期back_datedate0还书日期is_backsmallint1是否归还表3-3 借阅信息表(4)用户信息表user(用户信息表)名称数据类型长度说明idint11编号(主键)namevarchar50帐户名passvarchar50密码is_adminsmallint1是否管理员表3-4 用户信息表3.3 用户界面设计用户界面主要用于用户与系统之间的交互,一个好
16、的用户界面能使用户用户清晰的明白操作逻辑,省去不必要的繁琐重复操作,让用户以最简单的步骤就能达到需求的实现。3.3.1输入设计输入设计是用户与计算机系统管理软件进行传递交换数据信息的重要过程,本系统通过键盘的输入以及鼠标的点击来实现,具备清晰的提示,保证输入数据类型的正确性,让用户能用简单的输入就能达到目的的实现3.3.2输出设计图书管理系统用简洁统一的界面风格,让用户在第一时间就能清晰快速的获取相应的信息,同时输出的信息可以复制,以便于用户对获取到的信息进行保存以及与其他软件如Word、Excel等进行配合使用,从而达到更多的功能实现。4 图书管理信息系统的实现4.1 开发环境的构建本系统使
17、用Java数据库编程实现,所包含的数据量并不是很大,根据系统的实际情况,采用如下开发环境。操作系统: Windows 7;数据库系统: MySql 5.6.24;编程语言: JDK 1.8.0;开发工具: Eclipse Mars Release (4.5.0)。4.2 系统工程目录在开发一个实际的应用系统的时候,应该规划好系统工程的文件结构。有规划的工程文件结构便于在开发过程中进行管理,也使得开发工作的内容更加的清晰。在Eclipse开发环境下,本系统工程目录结构如下图所示图4-1 系统工程目录图src 目录: 用于存放系统的所有源代码,源代码按照包结构进行组织。db包: 存放数据库操作类。
18、entity包: 存放系统的尸体类,包括图书和读者实体类。util包: 存放系统的使用工具类,为其他包公用。windows包: 存放系统的图形界面窗口类。lib目录: 存放系统运行所需的库文件,需要加入到Eclipse 的Build Path中。4.3 公共模块系统开发过程中,经常需要设计一些公共模块供系统中其他功能模块共同调用。本系统的公共模块主要由db和util两个包来实现。4.3.1 db包db包主要用来存放数据库操作类。系统与数据库的交互最终都是通过调用db包中的相关类来实现。db包的构成如下表所示。序号类名标识实现功能1BaseDaodb.BaseDao基础数据库操作类2BookDa
19、odb.BookDao图书数据操作类3ReaderDaodb.ReaderDao读者数据操作类4BorrowDaodb.BorrowDao借阅数据操作类表4-1 db包构成(1)BaseDao类BaseDao类用于完成最基本的数据库操作,包括建立数据库连接和执行sql语句等。在该类中构造了连接数据库的方法,该方法可判断数据库是否已经建立了连接。在该类中还定义了两个方法用于根据传入的sql语句,执行数据库的Query或者Update等操作。调用其方法的外部实体不需要关心具体的数据库操作实现,代码如下。public class BaseDao protected static String dri
20、ver = com.mysql.jdbc.Driver; /数据库驱动protected static String url = jdbc:mysql:/127.0.0.1:3306/tsgl?characterEncoding=utf8;/连接urlprotected static String dbUser = root;/数据库用户名protected static String dbPwd = 1111;/数据库密码private static Connection conn = null;private BaseDao() try if (conn = null) Class.for
21、Name(driver); /加载数据库驱动conn = DriverManager.getConnection(url, dbUser, dbPwd);/建立数据库连接 elsereturn; catch (Exception ee) ee.printStackTrace();public static ResultSet executeQuery(String sql) try if (conn = null)new BaseDao();return conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_
22、UPDATABLE).executeQuery(sql);/执行数据库查询 catch (SQLException e) e.printStackTrace();return null; public static int executeUpdate(String sql) try if (conn = null)new BaseDao();return conn.createStatement().executeUpdate(sql);/执行数据库更新 catch (SQLException e) System.out.println(e.getMessage();return -1; fi
23、nally (2)BookDao类该类用于对图书信息数据进行数据库操作,主要包含了获取图书信息单个实体与实体列表的方法。(3)ReaderDao类该类用于对读者信息数据进行数据库操作,主要包含了获取读者信息单个实体与实体列表的方法。(4)BorrowDao类该类用于对借阅信息数据进行数据库操作,同样是获取借阅信息实体列表的方法。4.3.2 util包util 包主要用于存放一些使用工具类。系统所有模块中经常需要使用的一些工具类或者系统常量等在该包中定义,包含一些系统全局变量类与日期工具类。系统经常碰到一些日期数据,为了方便系统需要,该包中定义了各种日期操作的方法,方便对日期型数据操作时直接调用
24、。4.4 功能模块的实现4.4.1登录模块相关登录模块用于实现系统的登录功能,也是进入系统的入口。登录模块主要由window包下的Login类实现。当用户输入完用户名和密码后,单击“确定”按钮。“确定”按钮定义了相应的事件监听器用于响应该动作。其响应事件主要由该类中定义的btn_okActionPerformed()方法来实现。在连接数据库进行验证之前,判断是否输入了用户名。如果未输入,则系统给出提示,方法终止运行。如果用户名不为空,则程序连接数据库。在user表中查询name值是否等于输入的用户名并且pass值等于输入密码的记录。如果相应记录不存在,系统给出提示,方法再次中断。如果满足条件的
25、记录存在,则将用户名记录到全局变量的login_user中,进入系统主界面,登录成功。图4-2 系统登录界面成功登录系统后即进入系统的主界面,系统会根据登录用户的权限不同展示不同的主界面。一般用户的些许功能模块不能使用。图4-3 管理员主界面4.4.2 基础维护模块相关(1)图书维护图书维护子模块用于维护图书的相关信息,包括对图书信息的添加、修改和删除。所有的维护操作最终都是落实到数据库中book表的数据库操作。添加图书图书信息的添加功能主要由window包下的BookAdd类来实现。待用户输入完图书信息信息后,单击“保存”按钮,系统触发相应事件来执行添加操作。图书信息自动存入book表中,并
26、进行自动编号。图4-4 添加图书界面图书修改图书信息的修改功能主要由window包下的BookUpdate类来实现。选择“图书维护”菜单下的“修改”子菜单后弹出图书修改界面。程序首先获取用户输入的图书编号,然后根据编号在数据库中提取图书信息,最后将提取的图书信息显示到图形界面上供用户修改。待用户修改完相应的图书信息后,单击“保存”系统执行图书信息修改的保存操作。关键代码如下所示。private void btn_saveActionPerformed(ActionEvent e) /获取用户输入信息String id = tf_id.getText();String name = tf_nam
27、e.getText();String type = cb_type.getSelectedItem().toString();String author = tf_author.getText();String translator = tf_translator.getText();String publisher = tf_publisher.getText();String publish_time = tf_publish_time.getText();String price = tf_price.getText();String stock = tf_stock.getText()
28、;String sql = update book set name= + name + ,type= + type+ ,author= + author + ,translator= + translator+ ,publisher= + publisher + ,publish_time=+ java.sql.Date.valueOf(publish_time) + ,price=+ Double.parseDouble(price) + ,stock= + stock + where id=+ id + ; /执行数据库操作int i = BaseDao.executeUpdate(sq
29、l);if(i=1)JOptionPane.showMessageDialog(null, 修改成功);dispose();图4-5 图书修改界面图书删除图书信息的删除功能主要由window包下的BookDelete类来实现。删除图书前,首先通过输入待删除的图书编号,获取该编号的图书信息,在确认后通过点击相应的功能按键来实现图书删除功能。关键代码如下所示。private void btn_delActionPerformed(ActionEvent e) String id = tf_id.getText();/获取图书编号String sql = delete from book where
30、 id= + id + ;/删除指定编号的图书/执行数据库操作int i = BaseDao.executeUpdate(sql);if(i=1)JOptionPane.showMessageDialog(null, 删除成功);dispose();(2) 读者维护 读者维护与图书维护的相应功能实现起来类似。主要也是通过window包下的不同类来实现相应的功能。4.4.3借阅模块相关借阅模块下包含了借书与还书两个子模块。数据库中的borrow表负责存储读者借书信息,所以系统最终的实现实际是对borrow表进行数据库操作。程序通过获取用户的输入从reader表与book表中提取相应的信息,再经过
31、系统的整合加工将所得数据写入borrow中,并对reader表与book表进行更新。关键代码如下所示。private void btn_borrowActionPerformed(ActionEvent e) String book_id = tf_book_id.getText();/获取图书编号String reader_id = tf_reader_id.getText();/获取读者编号String borrow_date = lb_borrow_date.getText();/获取借出日期String back_date = lb_back_date.getText();/获取还书日
32、期/判断书籍是否可借Book book = BookDao.selectBook(book_id);String bookname = book.getName();int is_back = book.getIs_back();if (is_back != 0)/对读者能否继续借书进行判断String id = tf_reader_id.getText();Reader reader = ReaderDao.selectReader(id);int num = reader.getMax_num();if (num 0 )num=num-1;/拼sql语句String sql = inser
33、t into borrow(book_id,reader_id,borrow_date,back_date,is_back,bookname) values(+ book_id+ ,+ reader_id+ ,+ borrow_date+ ,+ back_date+ ,0,+ bookname+); /执行数据库操作int i = BaseDao.executeUpdate(sql);if(i=1)JOptionPane.showMessageDialog(null, 借书成功);String sql0 = update book set is_back=0 where id= +book_i
34、d+;BaseDao.executeUpdate(sql0);String sql2 = update reader set max_num = + num + where id = + id +; BaseDao.executeUpdate(sql2);elseJOptionPane.showMessageDialog(null, 该读者所借书籍已达上限!);elseJOptionPane.showMessageDialog(null, 该书已被借走);图4-6 借书功能界面4.4.4查询管理模块相关该模块下设计了几个模块,用于图书、读者、借阅信息与读者的自查询等几个模块。能用于管理员对相关
35、信息的查询,也使读者能对自己借阅情况与自身信息的查询。该模块通过在window包下的不同类来实现。查询时可以实现对单一分类进行查询,也能够进行多条件的复合查询。当读者用户登录时,在进行读者信息查询时系统通过调用全局变量的login_user自动对读者进行匹配,可以有效防止其他读者信息的泄露,同时也能方便进行快速准确的信息查询。图4-7 图书查询界面4.4.5 统计模块相关统计模块下设置借阅统计读者统计与图书统计三个子模块。用于管理员对图书信息以及读者借阅等信息的统计。具备分类统计的功能,具体数据与数据总量在用户界面上显示,并且用户可对统计数据进行复制,以便进行备份以及配合其他软件进行数据的再加
36、工。部分关键代码如下所示。private void btn_cxActionPerformed(ActionEvent e) String id = tf_id.getText();String author = tf_author.getText();String publisher = tf_publisher.getText();String type = tf_type.getText();String sql = select * from book where name = + id + or author = +author+or publisher = +publisher+o
37、r type = +type+;Object results = getResult(BookDao.selectBookList(sql);DefaultTableModel model=new DefaultTableModel();table.setModel(model);model.setDataVector(results, heads);String i = String.valueOf(results.length);tf_count.setText(i);4.4.6系统管理模块相关用户登录系统以后,在主界面上选择“系统管理”菜单项后可以使用系统管理模块。系统管理模块主要包括更
38、改密码和退出系统两个子模块。更改密码子模块用于实现对当前登录用户密码的修改。更改密码功能主要由window包下的UpdatePassword类来实现。图4-8 修改密码界面程序首先获取用户两次输入的密码,然后比较两次输入的密码是否一致。如果两次输入密码不一致,则系统给出提示,终止方法执行。图4-9 密码修改不成功提示如果两次输入密码一直,则执行数据库操作。更新数据库user表中当前用户的密码为新密码。数据库操作成功,同时给出“密码修改成功”提示。图4-10 密码修改成功提示关键代码如下所示。private void okButtonActionPerformed(ActionEvent e)
39、String pass1 = tf_pass1.getText();/获取第一次输入密码String pass2 = tf_pass2.getText();/获取第二次输入密码/两次输入密码不一致if (!pass1.equals(pass2) JOptionPane.showMessageDialog(this,第一次输入的密码和第二此输入的密码不一致,请重新输入!);tf_pass1.setText();tf_pass2.setText(); return;/执行数据库操作,更改密码String sql = update user set pass= + pass1 + where nam
40、e=+ GlobalVar.login_user + ;int i = BaseDao.executeUpdate(sql);if(i=1)JOptionPane.showMessageDialog(null, 密码修改成功);dispose();5 结论经过大概两周的设计和开发工作,该图书管理信息系统基本完成,实现了小型图书馆日常的基本管理系统。这次图书管理信息系统的实现也让我学习到了很多,特别是在编程开发,让我对数据库的开发以及Java编程有了很大的进步,明白了一个软件的设计实现远远不是简单的代码堆叠。以前在学习编程语言的时候总感觉编程看起来并不难,但是当把这些离散的功能组件整合在一起,用
41、来实现一个更大更完整的系统时,却发现这其中的难度不是光靠想象就能感觉得到的。当一次次的错误提示抛出,终于明白只是学习到开发语言,在程序员这条路上不过是刚从起跑线出发。在日后的学习中,我会更加的努力,学以致用,在实践中发现问题解决问题,争取更大的进步。参考文献1 彭灿华,魏士伟.J2EE项目开发与设计M.北京:中国铁道出版社,2013:5866.2 刘升华.零点起飞学JavaM.北京:清华大学出版社,2013:276303.3 徐宝民.数据库原理与应用M.北京:人民邮电出版社,2008:170180.4 刘增杰,,张少军. MYSQL 5.5从零开始学M.北京:清华大学出版社,2012:241249.5 刘新,,管磊. Java编程实战宝典M.北京:清华大学出版社,2014:681683.