1、重庆信息技术职业学院毕业设计 题目 移动借书系统 选题性质:设计报告其他 院 系 软 件 学 院 专 业 软 件 技 术 班 级 2013级02班 学 号 131007* 学生姓名 * * 指导教师 * * 教务处制 2016 届 软 件 学院毕业设计选题审批单 年级 2013级 专业 软件技术 班级 2班 学生姓名 *学 号131007* 选题移动借书系统 选题性质设计报告其他选题论证:移动借书系统是一个移动借书的手机平台,在此平台上,借书者可以查看图书馆里目前已有的图书类别和图书。我们将移动借书系统分为客户端和服务端两个大部分,客户端负责借书者的登陆、个人信息、图书的借阅查询等、以及查看管
2、内的公告和咨询QQ。服务端负责管理员的登陆、借书人员的增删改查、图书的增删改查,以及管内的信息发布。本系统采用C/S模式,用PHP+Android+MySQL数据库进行开发。指导教师初审意见:签 名:2015年 9 月 24 日毕业设计工作领导小组审批意见:签 名:2015年 9 月 25日 2016 届 软 件 学院毕业设计开题报告及进度要求 年级 2013 班级 软计技术2班 学生姓名*学 号131007* 指导教师*选题性质设计报告其他选题移动借书系统 选题的目的和意义:传统的借书方式是让用户办理借书证,然而用借书证借书需要到图书馆登记借书。而移动借书摆脱了传统的用户借书的流程,用户能在
3、网上浏览所有的书籍,并且每本书都配有简介,书籍信息更新速度快。图书馆管理员还可根据用户的选择而进行相应的配送。移动借书系统较传统的借书方式,节约了人力和物力,给用户提供了借书便利,同时减少了借书环节中错误的发生。选题研究的主要内容和技术方案:移动借书系统是一个用户通过android系统的手机端浏览页面并按照流程完成对某图书的借阅的app。我们把移动借书分为两大部分:客户端和服务端;客户端的操作主要是用户的登陆,用户信息的增删改,用户借阅图书、查找图书、续借图书、归还图书,查看馆内公告与咨询管理QQ等。服务端要完成对借书用户的增删改查,图书信息及种类的增删改查,馆内公告的发布等,这些操作会直接反
4、映在客户端。本系统所用到的技术方案是android+PHP+MySQL5.0,借助采用ThinkPHP框架快速构建服务端网站系统,服务端运行在xampps集成环境中, 数据库采用的是MySQL。 毕业设计工作时间2015年9月20日 至2015年12月15日毕业设计工作日程安排时间段工作内容9月 20日- 9月 21日确定选题9月 22日- 9月 23日开题9月 24日- 9月 30日需求分析10月 01日- 10月 05日概要设计10月 06日- 10月 17日系统数据库设计10月 18日- 12月 07日详细设计并编码12月 8日- 12月 9日测试和调试12月 10日- 12月 15日定
5、稿,上交毕业设计到指导教师处指导教师意见: 成果要求: 完整的作品(作品设计+文档说明) 签字: 2015年 9 月 27日 重庆信息技术职业学院毕业设计小组任务分配表序号姓名班级毕业设计工作任务分配1*2班系统总体分析、设计,客户端图书管理模块以及服务端的用户管理模块2*2班系统服务端的图书管理模块与服务管理模块3*2班系统客户端的用户管理和服务管理 移动借书系统 *(重庆信息技术职业学院软件学院 重庆万州 404000)摘要:移动借书系统采用的是CS结构,客户端运行在Android智能机上,通过网络访问服务端获取图书信息,浏览图书列表,向用户提供了在线订书借书的主要功能。本系统摆脱了传统的
6、图书馆借书方式,用户可以在任何地方任何时间借书,解决了借书找书难,节省了时间,同时提高了图书管理员的办事效率。本文详细介绍了移动借书系统的实现,以及本人在此系统中完成的功能模块。关键词:移动互联,android,借书系统目 录 绪论1 软件项目描述2. 目标任务概述2. 图书信息管理2. 借阅信息管理2. 读者信息管理2. 系统管理2. 软件项目背景2. 移动借书系统产生的条件2. 移动借书系统的发展趋势2. 开发日程计划3 项目总体设计4. 概要设计4. 系统结构4. 移动借书系统5. 移动借书系统设计6. 数据库类图6. 数据库E-R图7 个人工作内容概述9. 工作内容9. 本模块在系统中
7、的作用9 个人完成的软件功能及数据详细设计10. 模块代码的分析10. 主要思想10. 用户管理10. 图书管理13. 功能描述20. 服务端简易流程图20. 客户端简易流程图20. 数据库详细设计21. 用户表21. 管理员表21. 图书信息表21. 图书种类表22. 借书管理表22. 公告信息表22 结论24 致谢25 参考文献26重庆信息技术职业学院毕业设计 绪论随着互联网的发展,计算机和智能手机成为了我们的必备品,使用手机或计算机我们就能够查阅各种消息。移动借书系统就是在这样的背景下产生的。传统的借书方式下,用户需要花费大量的时间去找书,图书馆有可能没有用户需要的书籍,而且用户容易忘记
8、借书日期导致超过还书日期,借书证丢失后无法借书等问题。移动借书系统不仅避免了以上传统借书方式的问题,而且在客户端还可以查看图书信息,用户只需要在客户端登录就能够直接借书,并且通过分类查找就能够快捷地查到是否有需要的图书,在借阅书籍后就能够在客户端和服务端查看到借书记录,用户只需要在客户端查看借书记录就能够看到还书日期。本系统采用的是CS结构,使用的开发工具有eclipse、zend-eclipse、MySQL5.0、xampps。我们在eclipse中开发系统的Android客户端。用zend-eclipse 开发系统的Web服务端,用MySQL5.0来创建数据库。移动借书系统的客户端和服务端
9、又分别分为用户管理,图书管理和服务管理三个模块。在服务端,用户管理的功能有:新增用户、删除用户、用户重置密码,图书管理的功能有:新增图书、修改图书、删除图书、分类查找图书、查看借书记录,服务管理的功能有:更新公告。在客户端,用户管理的功能有:查看用户信息,修改用户信息,图书管理的功能有:查看图书、借阅图书、查看个人借书记录,服务管理的功能有:查看公告、咨询QQ。最后形成移动借书系统。 软件项目描述. 目标任务概述. 图书信息管理图书信息管理实现的功能:新书入库、书籍信息的添加、书籍信息的修改、书籍信息的删除、图书分类设置,新书入库功能是对于新进的图书进行图书资料的信息录入功能。. 借阅信息管理
10、借阅信息管理实现的功能:读者借阅信息和读者归还信息。. 读者信息管理读者信息管理实现的功能:读者信息添加、读者信息的修改以及读者信息的删除。. 系统管理系统管理实现的功能:密码的重置、馆内公告以及咨询QQ。. 软件项目背景. 移动借书系统产生的条件随着计算机技术的广泛应用和发展,我们已经步入数字化、网络化的时代,图书馆是学校的文献中心,是为全校教学和科学研究服务的学术性机构,是学校信息化的重要基地。图书馆原有的人工借书管理系统凸显出以下缺点和不足:(1) 人工登记借书信息难免出现遗漏和疏忽,造成图书馆书籍的丢失;(2) 人工登记借书信息使工作效率低下,在图书借阅人流高峰期难免造成师生多工作的不
11、满和抱怨;(3) 借阅信息由于是人工登记难免会容易让人投机取巧的修改,从而产生不必要的麻烦。为了改变传统图书借阅系统的种种缺点,同时为了提高图书馆的工作效益、服务质量和管理水平,并使图书馆管理人员从繁琐的工作中解脱出来,从而开发了本系统。. 移动借书系统的发展趋势移动图书馆是现代图书馆建设的发展趋势,而移动通信技术和移动终端在高校读者中的高普及率为移动图书馆服务带来了发展契机,同时也促进它的变化。移动图书馆将为读者提供便捷、有效的资源服务,打破了传统图书馆服务的界限,是图书馆系统发展的必然趋势。. 开发日程计划表2-1 开发日程计划阶段名称起止时间工作内容阶段产品项目开发计划9月 20日- 9
12、月23日让各个同学明确自己的职责以及了解整个项目进度的安排项目开发计划需求分析9月 24日- 9月 30日软件需求分析需求分析文档概要设计10月 1日- 10月 5日画出系统结构图,列出系统的功能模块清单概要设计文档数据库设计10月 6日- 10月 17日数据库的设计数据库设计文档编码10月 18日- 12月 7日实现系统结构图中的所有功能程序代码结项12月 8日- 12月 15日对整个项目进行总结项目开发文档 项目总体设计. 概要设计. 系统结构移动借书系统分为服务端和客户端,有用户管理、图书管理、服务管理三大模块,模块下有子模块。具体结构图如下图3.1:图 3-1 系统结构图服务端:l 用
13、户管理:实现管理员的登陆和管理员对用户的新增、修改、删除及密码重置。l 图书管理:实现管理员对图书的新增、修改、删除、查找、用户的借阅记录查询以及用户借阅状态的修改等;l 服务管理:管理员发布公告,方便用户及时了解相关信息;客户端:l 用户管理:实现对用户的个人信息查看及修改;l 图书管理:实现对图书的查询、借阅、归还以及借阅记录的查询;l 服务管理:实现对馆内公告的查看,以及咨询QQ表 3-1 服务端功能序号功能名称功能需求标识优先级1用户管理管理员的信息管理,对用户的新增、修改、删除及密码重置高2图书管理完成图书信息的更改,包括图书的新增、修改、删除,用户借阅的记录的更改高3服务管理信息的
14、公告,方便用户及时了解中表 3-2 客户端功能序号功能名称功能需求标识优先级1用户管理完成对用户的个人信息查看及修改高2图书管理完成对图书的查询、借阅、归还以及借阅记录的查询高3服务管理完成对馆内公告的查看,以及咨询管理员QQ中. 移动借书系统 管理员用例图图 3-2 管理员用例图 用户用例图图 3-3 用户用例图. 移动借书系统设计. 数据库类图图 3-4 数据库类图. 数据库E-R图 管理员E-R图如图3-5所示图 3-5 管理员E-R图 读者E-R图如图3-6所示图3-6 读者E-R图 图书与图书种类E-R图如图3-7所示图3-7 图书与图书种类E-R图 借书E-R图如图3-8所示:图
15、3-8 借书表E-R图 公告E-R图如图3-9所示:图 3-9 公告E-E图 个人工作内容概述. 工作内容本人的任务是完成对客户端图书管理功能模块的一些功能,工作内容包括:图书浏览、图书搜索、图书续借、借书记录;还要完成对服务端用户管理功能模块的一些功能,工作内容包括:新增用户、修改用户、删除用户,给用户重置登录密码。. 本模块在系统中的作用移动借书系统的模块包括服务端的用户管理,和客户端的图书管理。用户管理模块的使用者是图书管理员,管理员使用这个模块管理读者用户的信息,能够对其用户信息修改,对新的用户添加用户信息,就是给用户读者登记,提供客户端的登录账号和密码,必要时还能删除用户信息,注销用
16、户在客户端的登录账号和密码;而图书管理模块的使用者是读者用户,用户使用这个模块可选择查看分类下的图书列表,还能看某个图书的详细信息,提供了每个图书的借书功能,还能续借。所借的图书都会集中在一个借书记录里面,以便查看和确认收书。 个人完成的软件功能及数据详细设计. 模块代码的分析. 主要思想移动借书系统下的服务端用户管理模块主要思想是通过管理员点击数据库中的某个用户ID,用户ID记录了此图书的所有属性,管理员通过这个ID来对用户信息进行数据库操作,实现对用户信息的增加、修改、删除。移动借书系统下的客户端图书管理管理模块主要思想就是通过用户点击某图书分类ID,然后将ID发送到服务端,从服务端获取的
17、此分类ID下的所有图书列表,用户再点击图书列表项对应的图书ID,就能获取此图书详细信息,然后就能发出借书请求,向服务端发送图书ID请求借此图书。. 用户管理涉及到的文件:/BorrowBookServer/server/admin/Tpl/User/index.html 用户列表页面/BorrowBookServer/server/admin/Tpl/User/add.html 用户添加页面/BorrowBookServer/server/admin/Tpl/User/read.html 用户修改页面/BorrowBookServer/server/admin/Lib/Action/UserA
18、ction.class.php 处理用户信息的类运行效果如图5-1所示:图5-1 用户管理页面图在登录系统成功后会先显示系统的首页,然后去选择“用户管理”按钮,进入用户管理页面查看用户列表,操作可添加用户信息、修改用户信息、删除用户信息,重置用户的登录密码。1) 添加用户时,添加用户的页面运行效果如图5-2所示:图 5-2 添加用户的页面添加用户时,具体代码如下:public function insert() $user = D(User);if(!$user-create() $this-error($user-getError();$name = $user-name;if($user-
19、where(name=.$name.)-select() $this-error(该用户名已存在);$user-password = 12345;$user-time = date(Y-m-d H:m:s, time();$result = $user-add();if($result) $this-success(添加成功!登录密码是12345,请用户及时修改密码);else$this-error(添加失败!);2) 修改用户时,更新用户信息的界面如图5-3所示:图 5-3 更新用户的页面更新用户时,具体代码如下图:public function edit() $user = D(User)
20、;if(!$user-create() $this-error($user-getError();$result = $user-save();if(!$result) $this-error(更新失败!);else$this-success(更新成功!);3) 当删除指定用户时,具体代码如下:public function delete($id = 0) $order = M(order);$data = $order-where(uid=.$id)-select();if(count($data) 0) $this-error(删除失败!此用户有订书记录);else$user = M(us
21、er);$reslut = $user-field(name)-find($id);$borrow = M(borrow);$data = $borrow-where(reader=.$reslutname. AND statue=.已借书 OR statue=.未还书)-select();if(count($data) 0) $this-error(删除失败!此用户有记借书或者未还书记录);else$reslut = $user-delete($id);if($reslut)$this-success(删除成功!);else$this-error(删除失败!);4) 当用户重置密码,代码如下
22、:public function reset($id = 0) $user = M(user);if($user-find($id) $user-password = 12345;$result = $user-save();if($result) $this-success(重置密码成功!密码是12345);else$this-error(重置密码失败!);else$this-error($user-getError();. 图书管理图书管理涉及到的文件:/BorrowBook/src/com/cqxxxy/borrowbook/activity/BooksActivity.java 图书浏
23、览界面/BorrowBook/src/com/cqxxxy/borrowbook/activity/BookActivity.java 图书详细界面/BorrowBook/src/com/cqxxxy/borrowbook/activity/SearchActivity.java 图书搜索界面/BorrowBook/src/com/cqxxxy/borrowbook/activity/MainActivity.java 需继承的主界面/BorrowBook/src/com/cqxxxy/borrowbook/adapter/BookListAdapter.java 图书列表适配器/Borrow
24、Book/src/com/cqxxxy/borrowbook/service/SynchServer.java 服务器通信类/BorrowBook/src/com/cqxxxy/borrowbook/unit/Book.java 图书列表项类/BorrowBook/src/com/cqxxxy/borrowbook/common/PublicMethod.java 公用函数库类上面的都是在客户端的图书管理模块中需要用到的一些文件,供参考。1) 图书浏览图书浏览界面运行效果如下图5-4所示:图 5-4 图书浏览界面图书浏览的实现代码:在BooksActivity.java文件中1 首先与服务端通
25、信,获取图书的分类数据,在界面的水平菜单中显示,部分代码如下:JSONObject object = null;if(MainActivity.server != null) object = MainActivity.server.getBooksType(MainActivity.id);if(object != null) String message = object.getString(SynchServer.JSON_MESSAGE);int ret = object.getInt(SynchServer.JSON_RET);if(message.equals(SynchServe
26、r.JSON_MESSAGE_SUCCESS) & ret = MainActivity.id) JSONArray array = object.getJSONArray(SynchServer.JSON_DATA);String types = new Stringarray.length();for(int i=0; iarray.length(); i+) JSONObject ja = array.getJSONObject(i);typesi = ja.getString(tname);Message msg = new Message();msg.what = MainActiv
27、ity.RETURN_SUCCESS;msg.obj = types;handler.sendMessage(msg);else handler.sendEmptyMessage(MainActivity.RETURN_ERROR);elsehandler.sendEmptyMessage(MainActivity.RETURN_ERROR);2 再从服务端获取指定分类下的所有图书列表,具体代码如下:JSONObject object = null;if(MainActivity.server != null) object = MainActivity.server.getTypeToBoo
28、ks(MainActivity.id,typename);if(object != null) String message = object.getString(SynchServer.JSON_MESSAGE);int ret = object.getInt(SynchServer.JSON_RET);if(message.equals(SynchServer.JSON_MESSAGE_SUCCESS) & ret = MainActivity.id) JSONArray data = object.getJSONArray(SynchServer.JSON_DATA);ArrayList
29、 books = new ArrayList();Book book;JSONObject jb;for(int i=0; idata.length(); i+) jb = data.getJSONObject(i);book = new Book(-1, null, null, 0, jb.getInt(gid);book.setName(jb.getString(gname);book.setCount(jb.getInt(gcount);book.setContent(author:+jb.getString(author);books.add(book);Message msg = n
30、ew Message();msg.what = MainActivity.RETURN_SUCCESS+1;msg.obj = books;handler.sendMessage(msg);elsehandler.sendEmptyMessage(MainActivity.RETURN_ERROR);elsehandler.sendEmptyMessage(MainActivity.RETURN_ERROR);2) 图书信息图书信息界面的运行效果如下图5-5所示:图 5-5 图书信息界面图书信息的实现代码在BookActivity.java文件中通过向服务端发送图书ID参数,返回此图书的信息并
31、显示在图书信息界面,部分代码如下:JSONObject object = null;if(MainActivity.server != null) object = MainActivity.server.getBookData(MainActivity.id,book.id);if(object != null) String message = object.getString(SynchServer.JSON_MESSAGE);int ret = object.getInt(SynchServer.JSON_RET);if(message.equals(SynchServer.JSON_
32、MESSAGE_SUCCESS) & ret = MainActivity.id) JSONObject jo = object.getJSONObject(SynchServer.JSON_DATA);book.name = jo.getString(gname);book.count = jo.getInt(gcount);book.author = jo.getString(author);book.press = jo.getString(press);book.content = jo.getString(content);book.price = jo.getInt(price);
33、 object = MainActivity.server.getBorrowData(MainActivity.id, book.id);if(object != null) message = object.getString(SynchServer.JSON_MESSAGE);ret = object.getInt(SynchServer.JSON_RET);if(message.equals(SynchServer.JSON_MESSAGE_SUCCESS) & ret = MainActivity.id) jo = object.getJSONObject(SynchServer.J
34、SON_DATA);book.returntime = jo.getString(time);book.moblie = jo.getString(mobile);book.address = jo.getString(address);book.borrowcount = jo.getInt(count);handler.sendEmptyMessage(MainActivity.RETURN_SUCCESS);elsehandler.sendEmptyMessage(MainActivity.RETURN_ERROR);elsehandler.sendEmptyMessage(MainAc
35、tivity.RETURN_ERROR);elsehandler.sendEmptyMessage(MainActivity.RETURN_ERROR);3) 借书界面图书信息下面又一个借书的按钮,点击该按钮就能向服务端发出借书请求,运行效果如下图5-6所示:图 5-6 图书借书界面借书的实现代码当用户点击图书信息界面的借书按钮组件时,就会出发借书事件,借书向服务端发出借书请求,等待服务端的反馈,通过判别反馈提示用户是否借书成功,借书的代码如下:JSONObject object = null;if(MainActivity.server != null) object = MainActiv
36、ity.server.sendBorrowRequest(MainActivity.id,book.id);if(object != null) String message = object.getString(SynchServer.JSON_MESSAGE);if(message.equals(SynchServer.JSON_MESSAGE_SUCCESS)int ret = object.getInt(SynchServer.JSON_RET);if(ret = MainActivity.id) handler.sendEmptyMessage(SUCCESS_RET_OK);els
37、e if(ret = (MainActivity.id * 11)handler.sendEmptyMessage(SUCCESS_RET_NO_BORROW);else if(ret = (MainActivity.id * 22)handler.sendEmptyMessage(SUCCESS_RET_NO_CHANCE);else if(ret = (MainActivity.id * 33)handler.sendEmptyMessage(SUCCESS_RET_NO_MANY);else if(ret = (MainActivity.id * 44)handler.sendEmpty
38、Message(SUCCESS_RET_NO_BOOK);else if(ret = (MainActivity.id * 55)handler.sendEmptyMessage(SUCCESS_RET_NO_RESUME);elsehandler.sendEmptyMessage(NOSUCCESS_RET_LOST);elsehandler.sendEmptyMessage(NOSUCCESS_RET_LOST);elsehandler.sendEmptyMessage(MainActivity.RETURN_ERROR);4) 借书记录界面借书记录下是显示借书的一些信息,可看到自己借过哪
39、些书,包括正在借书的状态,运行效果如下图5-7所示:图 5-7 借书记录界面借书记录界面实现的代码JSONObject object = null;ArrayList list = new ArrayList();if(MainActivity.server != null) object = MainActivity.server.getBorrowOrder(MainActivity.id);if(object != null) String message = object.getString(SynchServer.JSON_MESSAGE);int ret = object.getI
40、nt(SynchServer.JSON_RET);if(message.equals(SynchServer.JSON_MESSAGE_SUCCESS) & ret = MainActivity.id) JSONArray array = object.getJSONArray(SynchServer.JSON_DATA);if(array != null) JSONObject jo;Borrow borrow;for(int i=0; iarray.length(); i+) jo = array.getJSONObject(i);borrow = new Borrow(jo.getLong(oid);borrow.bookname = jo.getString(bookname);borrow.borrowtime = 订书时间:+jo.getString(time);borrow.statue = jo.getString(statue);