图书管理系统设计与实现_第1页
图书管理系统设计与实现_第2页
图书管理系统设计与实现_第3页
图书管理系统设计与实现_第4页
图书管理系统设计与实现_第5页
已阅读5页,还剩119页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、图书管理系统设计与实现【摘要】【关键字】要求4或5个package:用于软件的打包extends:使子类继承超类implements:使类实现接口break:终止程序的进行【正文】一、系统分析1、 图书管理系统功能需求分析 图书管理系统用例图如下所示2、 基础维护子模块功能需求分析基础维护子模块用例图如下所示(1) 图书信息管理子模块功能需求分析图书信息管理子模块用例图如下所示(2) 读者信息管理子模块功能需求分析读者信息管理子模块用例图如下所示3、 借阅管理子模块功能需求分析借阅管理子模块用例图如下所示4、 查询管理子模块功能需求分析查询管理子模块用例图如下所示5、 系统管理子模块功能需求分

2、析系统管理子模块用例图如下所示二、系统设计1、 结构功能图书管理系统基础维护基础维护基础维护基础维护图书信息维护读者信息维护图书借阅图书归还图书信息查询读者信息查询密码修改退出系统图书信息添加图书信息修改图书信息删除读者信息添加读者信息修改读者信息删除各个功能模块所包含子模块及主要功能:l 基础维护: l 借阅管理: l 查询管理: l 系统管理: 系统登录管理员?显示读者界面显示管理员界面退出系统ny2、系统流程图3、搭建开发环境本项目的主要开发环境:windows xp+jdk 6.0+eclipse 3.6+mysql 5.0辅助开发工具:prowerdesigner 15、navica

3、t for mysql。l jdk 6.0:l eclipse 3.6:l mysql 5.0:l prowerdesigner 15:l navicat for mysql:【任务2】搭建系统开发环境。4、规划创建系统目录l src目录:主要用于存放系统的所有源代码。源代码文件按包结构进行组织。l data(数据)包:用于存放数据库操作类。l entity(实体)包:用于存放系统的实体类,包括图书、用户等实体。l util(通用)包:用于存放系统的实用工具类,为其他包共用。l window(窗口)包:用于存放系统的图形界面窗口类。【任务3】创建系统目录三、数据库设计本系统采用mysql数据库

4、管理系统。在对系统进行需求分析、系统总体设计的基础上,设计出本系统的物理数据模型,主要包括4个表:图书信息表(book)、读者信息表(reader)、借阅信息表(borrow)和用户信息表(user)。表1 图书信息表(book)字段名数据类型(精度)空/非空pk(主键)说明idvarchar(32)no null图书编号namevarchar(100)null图书名称typevarchar(50)null图书类别authorvarchar(50)null作者translatorvarchar(50)null译者publishervarchar(1024)null出版社publish_time

5、datenull出版时间stockint(11)null库存数量pricedoublenull价格表2 读者信息表(reader)字段名数据类型(精度)空/非空pk(主键)说明idvarchar(32)no null读者编号namevarchar(50)null读者姓名typevarchar(20)null读者类别sexchar(2)null读者性别max_numint(3)null最大可借数days_numint(11)null可借天数表3 借阅信息表(borrow)字段名数据类型(精度)空/非空pk(主键)说明idint(11)no null借阅流水号book_idvarchar(50)n

6、ull图书编号reader_idvarchar(50)null读者编号borrow_datedatenull借出时间back_datedatenull到期时间is_backsmallint(1)null是否归还表4 用户信息表(user)字段名数据类型(精度)空/非空pk(主键)说明idint(11)no null用户流水号namevarchar(50)null用户名称passvarchar(50)null用户密码is_adminsmallint(1)null是否为管理员1、建立系统物理数据模型使用prowerdesigner软件创建系统物理数据模型。本系统物理数据模型如图4所示。按照下述方法

7、设计这4个表。2、根据物理数据模型生成sql语句利用设计的物理数据模型生成sql语句,便于创建数据库。【任务4】建立本系统物理数据模型,并生成相应的sql语句。(1)建立本系统物理数据模型创建步骤:1) 安装,并启动prowerdesigner软件。2) 单击filenew mode选中physical data model输入模型名称:physicaldatamodel_ts.pdm选中dbms:mysql 5.0单击“ok”3) 在palette工具中,选中table在工作区创建4个表双击其中的一个表输入表名单击columns选项卡输入字段及其类型设置主键应用确定4) 保存(2)生成相应的

8、sql语句步骤:单击“database”generate database设置保存相应的路径输入文件名为:ts.sql其余默认确定用记事本打开ts.sql文件,可以看到创建表的sql命令。3、根据生成的sql语句,创建数据表mysqll是一个服务器程序。要想建立表就需要使用管理工具,借助管理工具可以很方便地对mysql进行操作。管理工具有很多,这里介绍一个第三方的管理工具navicat for mysql。下载navicat8_mysql_cs.exe安装。它是正式版本,只能免费使用30天。navicat for mysql是客户端的管理程序,并不是mysql。要想操作必须连接mysql。【任

9、务5】根据生产的sql语句文件,创建数据表。根据生成的sql语句,创建数据表的操作步骤如下:1) 启动navicat for mysql。2) 创建连接:单击“连接”设置连接的名称:zzl_mysql(可自定) 输入mysql的设置密码单击“连接测试”按钮出现“连接成功”信息后,按“确定”。如图5所示。图5 设置与mysql 的连接3) 打开连接:右击刚刚建立的连接单击“打开连接”4) 创建数据库:右击刚刚建立的连接单击“创建数据库”输入数据库名称:ts选取字符集:gbk整理:确定注意:字符集的选取,为了中文不是乱码。5) 打开数据库:右击ts数据库单击“打开数据库”6) 根据sql语句创建表

10、文件:创建查询单击“文件”单击“载入”选择载入的文件,并打开单击“运行”按钮。4、创建实体类为了便于对数据表进行控制,应该为项目中的每一个数据库表创建一个独立的实体类。类的成员变量对应数据库表的字段(列),成员方法对应成员变量和对表的操作。这样,可以向操作类一样来操作数据库表。【任务6】在entity包中创建实体类。在这里需要创建3个实体类:l reader:6个成员变量及相应的setter和getter 方法。l borrow:6个成员变量及相应的setter和getter 方法。l book:9个成员变量及相应的setter和getter 方法(1)reader类reader类用于对数据库

11、表reader进行操作,其定义如下:package entity;public class reader private string id; / 读者编号private string name; / 读者姓名private string type; / 读者类别private string sex; / 性别private string max_num; / 最多可借数量private int days_num; / 最大可借天数/* * return the id */public string getid() return id;/* * param id * the id to set

12、 */public void setid(string id) this.id = id;/* * return the name */public string getname() return name;/* * param name * the name to set */public void setname(string name) = name;/* * return the type */public string gettype() return type;/* * param type * the type to set */public void set

13、type(string type) this.type = type;/* * return the sex */public string getsex() return sex;/* * param sex * the sex to set */public void setsex(string sex) this.sex = sex;/* * return the max_num */public string getmax_num() return max_num;/* * param max_num * the max_num to set */public void setmax_

14、num(string max_num) this.max_num = max_num;/* * return the days_num */public int getdays_num() return days_num;/* * param days_num * the days_num to set */public void setdays_num(int days_num) this.days_num = days_num;(2)book类book类用于对数据库表book进行操作,其定义如下:package entity;import java.sql.date;public clas

15、s book private string id; / 图书编号private string name; / 图书名称private string type; / 图书类型private string author; / 图书作者private string translator; / 图书译者private string publisher; / 出版社private date publish_time; / 出版时间private int stock; / 库存数量private double price; / 价格/* * return the id */public string ge

16、tid() return id;/* * param id * the id to set */public void setid(string id) this.id = id;/* * return the name */public string getname() return name;/* * param name * the name to set */public void setname(string name) = name;/* * return the type */public string gettype() return type;/* * p

17、aram type * the type to set */public void settype(string type) this.type = type;/* * return the author */public string getauthor() return author;/* * param author * the author to set */public void setauthor(string author) this.author = author;/* * return the translator */public string gettranslator(

18、) return translator;/* * param translator * the translator to set */public void settranslator(string translator) this.translator = translator;/* * return the publisher */public string getpublisher() return publisher;/* * param publisher * the publisher to set */public void setpublisher(string publis

19、her) this.publisher = publisher;/* * return the publish_time */public date getpublish_time() return publish_time;/* * param publish_time * the publish_time to set */public void setpublish_time(date publish_time) this.publish_time = publish_time;/* * return the stock */public int getstock() return st

20、ock;/* * param stock * the stock to set */public void setstock(int stock) this.stock = stock;/* * return the price */public double getprice() return price;/* * param price * the price to set */public void setprice(double price) this.price = price;(3)borrow类borrow类用于对数据库表borrow进行操作,其定义如下:package enti

21、ty;import java.sql.date;public class borrow private int id;/ 借阅流水号private int book_id;/ 图书编号private int reader_id;/ 读者编号private date borrow_date;/ 借出时间private date back_date;/ 到期时间private int is_back;/ 是否归还/* * return the id */public int getid() return id;/* * param id * the id to set */public void

22、setid(int id) this.id = id;/* * return the book_id */public int getbook_id() return book_id;/* * param book_id * the book_id to set */public void setbook_id(int book_id) this.book_id = book_id;/* * return the reader_id */public int getreader_id() return reader_id;/* * param reader_id * the reader_id

23、 to set */public void setreader_id(int reader_id) this.reader_id = reader_id;/* * return the borrow_date */public date getborrow_date() return borrow_date;/* * param borrow_date * the borrow_date to set */public void setborrow_date(date borrow_date) this.borrow_date = borrow_date;/* * return the bac

24、k_date */public date getback_date() return back_date;/* * param back_date * the back_date to set */public void setback_date(date back_date) this.back_date = back_date;/* * return the is_back */public int getis_back() return is_back;/* * param is_back * the is_back to set */public void setis_back(int

25、 is_back) this.is_back = is_back;四、公共模块设计在系统开发过程中,经常需要设计一些公共模块,用于系统中其他模块使用。本系统的公共模块主要存放在data和util包中。1、data包中的类data包主要用来存放对数据库进行操作的类。系统与数据库的交互需要通过调用data包中的相关类来实现。data包共有4个类:l changedao类:用于字符转换,即将iso8859_1转换为gbk。l basedao:对数据库的基本操作类。用于完成最基本的数据库操作,包括建立数据库的连接、执行数据库查询操作、执行数据库更新操作、关闭连接操作。l bookdao:图书数据操作类

26、。用来查询单个或多个图书信息。l readerdao:读者数据操作类。用来查询单个或多个读者信息。【任务7】在data包中创建公共类。(1)changedao类changedao类用于字符转换,将iso8859_1转换为gbk。系统经常需要从数据库表中查询数据,由于字符编码不同,需要将resultset对象中的字符数据的iso8859_1编码转换为java中输出使用的“gbk”编码。以解决输出乱码问题。package data;public class changedao public static string isotogbk(string str) try return new stri

27、ng(str.getbytes(iso8859_1), gbk); catch (exception e) e.printstacktrace();return ;(2)basedao类basedao类用于完成最基本的数据库操作,包括建立数据库的连接、执行数据库查询操作、执行数据库更新操作、关闭连接操作。在eclipse中类basedao的大纲视图如图6所示。图6 basedao类结构basedao类定义如下:package data;import java.sql.connection; /导入连接接口import java.sql.drivermanager;/导入驱动器管理类import

28、 java.sql.resultset;/导入查询结果集接口import java.sql.sqlexception;/导入sql异常接口import java.util.arraylist;/导入可变数组列表类import java.util.list;/导入列表接口import entity.book;import entity.reader;public class basedao protected static string driver = com.mysql.jdbc.driver; / 数据库驱动protected static string url = jdbc:mysql:

29、/localhost:3306/ts; / 连接位置urlprotected static string dbuser = root; / 数据库用户名protected static string dbpwd = root; / 数据库密码private static connection conn = null;/ 构造方法,用于加载驱动器、创建数据库连接private basedao() / 构造方法设置为类内可见try if (conn = null) class.forname(driver); / 加载数据库驱动conn = drivermanager.getconnection(

30、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_updatable).executeq

31、uery(sql); / 执行数据库查询 catch (sqlexception e) e.printstacktrace();return null;/ 执行数据库更新操作public static int executeupdate(string sql) try if (conn = null)new basedao();return conn.createstatement().executeupdate(new string(sql.getbytes(gbk), iso8859_1); / 执行数据库更新 catch (sqlexception e) system.out.print

32、ln(e.getmessage();return -1; catch (exception ee) system.out.println(ee.getmessage();return -1; finally / 关闭与数据库的连接public static void close() try conn.close(); catch (sqlexception e) e.printstacktrace(); finally conn = null;【关键技术解析】l 在basedao类的构造方法中,首先判断数据库是否连接,若未连接,则根据初始参数建立连接,并返回。本系统采用mysql数据库,要采用

33、与mysql相对应的初始化参数。l basedao类的构造方法是private,只能类内看见,其作用就是建立与数据库的连接。l 方法executequery(string sql)和executeupdate(string sql),都需要参数,这个参数是string类型的sql语句。根据sql语句执行查询操作或更新操作,并将执行结果返回。l 执行查询或更新操作都需要建立与数据库的连接,所以在方法executequery(string sql)和executeupdate(string sql)中,都创建了basedao类的匿名对象。l basedao类是公共类,其成员变量和成员方法都是sta

34、tic,这样可以直接使用类名访问成员变量或成员方法。(3)bookdao类bookdao类用于对图书信息数据进行数据库操作。主要包含获取图书信息的方法。图7 bookdao类结构bookdao类定义如下:package data;import java.sql.resultset;import java.util.arraylist;import java.util.list;import entity.book;public class bookdao public static book selectbook(string id) string sql = select * from bo

35、ok where id= + id + ;resultset rs = basedao.executequery(sql);book book = null;try if (rs.next() book = new book();book.setid(changedao.isotogbk(rs.getstring(id);book.settype(changedao.isotogbk(rs.getstring(type);book.setname(changedao.isotogbk(rs.getstring(name);book.setauthor(changedao.isotogbk(rs

36、.getstring(author);book.settranslator(changedao.isotogbk(rs.getstring(translator);book.setpublisher(changedao.isotogbk(rs.getstring(publisher);book.setpublish_time(rs.getdate(publish_time);book.setprice(rs.getdouble(price);book.setstock(rs.getint(stock); catch (exception e) e.printstacktrace();based

37、ao.close();return book;public static list selectbooklist(string sql) list list = new arraylist();resultset rs = basedao.executequery(sql);try while (rs.next() book book = new book();book.setid(changedao.isotogbk(rs.getstring(id);book.settype(changedao.isotogbk(rs.getstring(type);book.setname(changed

38、ao.isotogbk(rs.getstring(name);book.setauthor(changedao.isotogbk(rs.getstring(author);book.settranslator(changedao.isotogbk(rs.getstring(translator);book.setpublisher(changedao.isotogbk(rs.getstring(publisher);book.setpublish_time(rs.getdate(publish_time);book.setprice(rs.getdouble(price);book.setst

39、ock(rs.getint(stock);list.add(book); catch (exception e) e.printstacktrace();basedao.close();return list;【关键技术解析】l 该类主要定义了2个静态方法。其中方法selectbook(string id)用于根据图书编号来获取一本图书实体。而方法selectbooklist(string sql)用于获得满足sql语句的图书列表。l 这2个方法都是对数据库查询结果进行了封装,一个以单个图书实体的形式返回,一个以图书实体列表的形式返回。【新技术解析】l 集合类:在java.util包中提供了一

40、些集合类,这些集合类又称为容器。在java中数组和集合是不同的,数组的长度是固定的,集合的长度是可变的;数组用来存放基本数据类型,集合用来存放对象的引用。常用的集合有list 集合、set集合和map集合。其中list 与set实现了collection接口。(其继承关系查阅api文档)l collection接口:构成collection的单位被称为元素。collection接口通常不能直接使用,但该接口提供了添加、删除元素、管理数据的方法。collection常用方法如下表。返回类型方法功能描述boolean add(e e) 将指定对象添加到该集合中boolean isempty() 用

41、于判断当前集合是否为空,空则返回 true。 iterator iterator() 返回在此 collection 的元素上进行迭代的迭代器。 boolean remove(object o) 将指定元素从该集合中移除。 int size() 获取该集合中元素的个数。 l list集合:list集合包括list接口和list接口的所有实现类。l list接口:list接口提供了2个非常重要的方法。返回类型方法功能描述eget(int index) 返回列表中指定位置的元素。eset(int index, e element) 用指定元素替换列表中指定位置的元素。 其中e是类型变量。l lis

42、t接口的实现类:list接口常用的实现类有arraylist和linkedlist。l arraylist类:它实现了可变数组,包括null。可以根据索引位置对集合进行快速的随机访问,但向指定的索引位置插入对象或删除对象时速度较慢。l linkedlist类:它采用链表结构保存对象。向集合中插入和删除对象速度较快,但随机访问集合中的对象速度较慢。(4)readerdao类readerdao类用于对读者信息数据进行数据库操作。主要包括获取读者信息的方法。图8 readerdao类结构readerdao类定义如下:package data;import java.sql.resultset;imp

43、ort java.util.arraylist;import java.util.list;import entity.reader;public class readerdao public static reader selectreader(string id) string sql= select * from reader where id= +id+ ; resultset rs=basedao.executequery(sql); reader reader = null; try if(rs.next() reader=new reader(); reader.setid(ch

44、angedao.isotogbk(rs.getstring(id); reader.setname(changedao.isotogbk(rs.getstring(name); reader.settype(changedao.isotogbk(rs.getstring(type); reader.setsex(changedao.isotogbk(rs.getstring(sex); reader.setmax_num(changedao.isotogbk(rs.getstring(max_num); reader.setdays_num(rs.getint(days_num); catch

45、 (exception e) e.printstacktrace(); basedao.close(); return reader; public static list selectreaderlist(string sql) list list=new arraylist(); resultset rs=basedao.executequery(sql); reader reader=null; try while (rs.next() reader=new reader(); reader.setid(changedao.isotogbk(rs.getstring(id); reade

46、r.setname(changedao.isotogbk(rs.getstring(name); reader.settype(changedao.isotogbk(rs.getstring(type); reader.setsex(changedao.isotogbk(rs.getstring(sex); reader.setmax_num(changedao.isotogbk(rs.getstring(max_num); reader.setdays_num(rs.getint(days_num); list.add(reader); catch(exception e) e.prints

47、tacktrace(); basedao.close(); return list; 【关键技术解析】l 该类主要定义了2个静态方法。其中方法selectreader(string id)用于根据读者编号来获取单个读者实体。而方法selectreaderlist(string sql)用于获得满足sql语句的读者列表。l 这2个方法都对数据库查询结果进行了封装,一个以单个读者实体的形式返回,一个以读者实体列表的形式返回。2、util包中的类在 util包中定义的公共类主要是系统常量类和常用工具类。包括3个类:l constant类:系统常量类l dateutils类:日期工具类l giobal

48、var类:全局变量类【任务8】在util包中创建公共类。(1)constant类constant类主要用于系统常量的定义,这里将读者类别、读者性别和图书类别定义为常量便于理解。而在实际开发中,通常是可以通过对数据库的操作来维护和改变的。图9 constant类结构constant类定义如下:package util;public class constant public static final string book_types = new string 科技类, 文学类,杂志, 其他 ;public static final string reader_types = new string 教师, 学生, 职工 ;public static final string sex = new string 男, 女

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论