资源描述
重庆信息技术职业学院
毕业设计
题目 移动借书系统
选题性质:设计□报告□其他
院 系 软 件 学 院
专 业 软 件 技 术
班 级 2013级02班
学 号 131007****
学生姓名 * *
指导教师 * *
教务处制
2016 届 软 件 学院
毕业设计选题审批单
年级 2013级 专业 软件技术 班级 2班
学生姓名
**
学 号
131007****
选题
移动借书系统
选题性质
设计□报告□其他
选题论证:
移动借书系统是一个移动借书的手机平台,在此平台上,借书者可以查看图书馆里目前已有的图书类别和图书。我们将移动借书系统分为客户端和服务端两个大部分,客户端负责借书者的登陆、个人信息、图书的借阅查询等、以及查看管内的公告和咨询QQ。服务端负责管理员的登陆、借书人员的增删改查、图书的增删改查,以及管内的信息发布。
本系统采用C/S模式,用PHP+Android+MySQL数据库进行开发。
指导教师初审意见:
签 名:
2015年 9 月 24 日
毕业设计工作领导小组审批意见:
签 名:
2015年 9 月 25日
2016 届 软 件 学院
毕业设计开题报告及进度要求
年级 2013 班级 软计技术2班
学生姓名
**
学 号
131007****
指导教师
**
选题性质
设计□报告□其他
选题
移动借书系统
选题的目的和意义:
传统的借书方式是让用户办理借书证,然而用借书证借书需要到图书馆登记借书。而移动借书摆脱了传统的用户借书的流程,用户能在网上浏览所有的书籍,并且每本书都配有简介,书籍信息更新速度快。图书馆管理员还可根据用户的选择而进行相应的配送。移动借书系统较传统的借书方式,节约了人力和物力,给用户提供了借书便利,同时减少了借书环节中错误的发生。
选题研究的主要内容和技术方案:
移动借书系统是一个用户通过android系统的手机端浏览页面并按照流程完成对某图书的借阅的app。我们把移动借书分为两大部分:客户端和服务端;客户端的操作主要是用户的登陆,用户信息的增删改,用户借阅图书、查找图书、续借图书、归还图书,查看馆内公告与咨询管理QQ等。服务端要完成对借书用户的增删改查,图书信息及种类的增删改查,馆内公告的发布等,这些操作会直接反映在客户端。
本系统所用到的技术方案是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日
定稿,上交毕业设计到指导教师处
指导教师意见:
成果要求:
完整的作品(作品设计+文档说明)
签字:
2015年 9 月 27日
重庆信息技术职业学院
毕业设计小组任务分配表
序号
姓名
班级
毕业设计工作任务分配
1
**
2班
系统总体分析、设计,客户端图书管理模块以及服务端的用户管理模块
2
**
2班
系统服务端的图书管理模块与服务管理模块
3
**
2班
系统客户端的用户管理和服务管理
移动借书系统
**
(重庆信息技术职业学院软件学院 重庆万州 404000)
摘要:移动借书系统采用的是CS结构,客户端运行在Android智能机上,通过网络访问服务端获取图书信息,浏览图书列表,向用户提供了在线订书借书的主要功能。本系统摆脱了传统的图书馆借书方式,用户可以在任何地方任何时间借书,解决了借书找书难,节省了时间,同时提高了图书管理员的办事效率。本文详细介绍了移动借书系统的实现,以及本人在此系统中完成的功能模块。
关键词:移动互联,android,借书系统
目 录
1 绪论 1
2 软件项目描述 2
2.1 目标任务概述 2
2.1.1 图书信息管理 2
2.1.2 借阅信息管理 2
2.1.3 读者信息管理 2
2.1.4 系统管理 2
2.2 软件项目背景 2
2.2.1 移动借书系统产生的条件 2
2.2.2 移动借书系统的发展趋势 2
2.2.3 开发日程计划 3
3 项目总体设计 4
3.1 概要设计 4
3.1.1 系统结构 4
3.1.2 移动借书系统 5
3.2 移动借书系统设计 6
3.2.1 数据库类图 6
3.2.2 数据库E-R图 7
4 个人工作内容概述 9
4.1 工作内容 9
4.2 本模块在系统中的作用 9
5 个人完成的软件功能及数据详细设计 10
5.1 模块代码的分析 10
5.1.1 主要思想 10
5.1.2 用户管理 10
5.1.3 图书管理 13
5.2 功能描述 20
5.2.1 服务端简易流程图 20
5.2.2 客户端简易流程图 20
5.3 数据库详细设计 21
5.3.1 用户表 21
5.3.2 管理员表 21
5.3.3 图书信息表 21
5.3.4 图书种类表 22
5.3.5 借书管理表 22
5.3.6 公告信息表 22
6 结论 24
7 致谢 25
8 参考文献 26
重庆信息技术职业学院毕业设计
1 绪论
随着互联网的发展,计算机和智能手机成为了我们的必备品,使用手机或计算机我们就能够查阅各种消息。移动借书系统就是在这样的背景下产生的。传统的借书方式下,用户需要花费大量的时间去找书,图书馆有可能没有用户需要的书籍,而且用户容易忘记借书日期导致超过还书日期,借书证丢失后无法借书等问题。移动借书系统不仅避免了以上传统借书方式的问题,而且在客户端还可以查看图书信息,用户只需要在客户端登录就能够直接借书,并且通过分类查找就能够快捷地查到是否有需要的图书,在借阅书籍后就能够在客户端和服务端查看到借书记录,用户只需要在客户端查看借书记录就能够看到还书日期。
本系统采用的是CS结构,使用的开发工具有eclipse、zend-eclipse、MySQL5.0、xampps。我们在eclipse中开发系统的Android客户端。用zend-eclipse 开发系统的Web服务端,用MySQL5.0来创建数据库。
移动借书系统的客户端和服务端又分别分为用户管理,图书管理和服务管理三个模块。在服务端,用户管理的功能有:新增用户、删除用户、用户重置密码,图书管理的功能有:新增图书、修改图书、删除图书、分类查找图书、查看借书记录,服务管理的功能有:更新公告。在客户端,用户管理的功能有:查看用户信息,修改用户信息,图书管理的功能有:查看图书、借阅图书、查看个人借书记录,服务管理的功能有:查看公告、咨询QQ。最后形成移动借书系统。
2 软件项目描述
2.1 目标任务概述
2.1.1 图书信息管理
图书信息管理实现的功能:新书入库、书籍信息的添加、书籍信息的修改、书籍信息的删除、图书分类设置,新书入库功能是对于新进的图书进行图书资料的信息录入功能。
2.1.2 借阅信息管理
借阅信息管理实现的功能:读者借阅信息和读者归还信息。
2.1.3 读者信息管理
读者信息管理实现的功能:读者信息添加、读者信息的修改以及读者信息的删除。
2.1.4 系统管理
系统管理实现的功能:密码的重置、馆内公告以及咨询QQ。
2.2 软件项目背景
2.2.1 移动借书系统产生的条件
随着计算机技术的广泛应用和发展,我们已经步入数字化、网络化的时代,图书馆是学校的文献中心,是为全校教学和科学研究服务的学术性机构,是学校信息化的重要基地。图书馆原有的人工借书管理系统凸显出以下缺点和不足:
(1) 人工登记借书信息难免出现遗漏和疏忽,造成图书馆书籍的丢失;
(2) 人工登记借书信息使工作效率低下,在图书借阅人流高峰期难免造成师生多工作的不满和抱怨;
(3) 借阅信息由于是人工登记难免会容易让人投机取巧的修改,从而产生不必要的麻烦。
为了改变传统图书借阅系统的种种缺点,同时为了提高图书馆的工作效益、服务质量和管理水平,并使图书馆管理人员从繁琐的工作中解脱出来,从而开发了本系统。
2.2.2 移动借书系统的发展趋势
移动图书馆是现代图书馆建设的发展趋势,而移动通信技术和移动终端在高校读者中的高普及率为移动图书馆服务带来了发展契机,同时也促进它的变化。移动图书馆将为读者提供便捷、有效的资源服务,打破了传统图书馆服务的界限,是图书馆系统发展的必然趋势。
2.2.3 开发日程计划
表2-1 开发日程计划
阶段名称
起止时间
工作内容
阶段产品
项目开发计划
9月 20日- 9月23日
让各个同学明确自己的职责以及了解整个项目进度的安排
《项目开发计划》
需求分析
9月 24日- 9月 30日
软件需求分析
《需求分析文档》
概要设计
10月 1日- 10月 5日
画出系统结构图,列出系统的功能模块清单
《概要设计文档》
数据库设计
10月 6日- 10月 17日
数据库的设计
《数据库设计文档》
编码
10月 18日- 12月 7日
实现系统结构图中的所有功能
程序代码
结项
12月 8日- 12月 15日
对整个项目进行总结
《项目开发文档》
3 项目总体设计
3.1 概要设计
3.1.1 系统结构
移动借书系统分为服务端和客户端,有用户管理、图书管理、服务管理三大模块,模块下有子模块。具体结构图如下图3.1:
图 3-1 系统结构图
服务端:
l 用户管理:实现管理员的登陆和管理员对用户的新增、修改、删除及密码重置。
l 图书管理:实现管理员对图书的新增、修改、删除、查找、用户的借阅记录查询以及用户借阅状态的修改等;
l 服务管理:管理员发布公告,方便用户及时了解相关信息;
客户端:
l 用户管理:实现对用户的个人信息查看及修改;
l 图书管理:实现对图书的查询、借阅、归还以及借阅记录的查询;
l 服务管理:实现对馆内公告的查看,以及咨询QQ
表 3-1 服务端功能
序号
功能名称
功能需求标识
优先级
1
用户管理
管理员的信息管理,对用户的新增、修改、删除及密码重置
高
2
图书管理
完成图书信息的更改,包括图书的新增、修改、删除,用户借阅的记录的更改
高
3
服务管理
信息的公告,方便用户及时了解
中
表 3-2 客户端功能
序号
功能名称
功能需求标识
优先级
1
用户管理
完成对用户的个人信息查看及修改
高
2
图书管理
完成对图书的查询、借阅、归还以及借阅记录的查询
高
3
服务管理
完成对馆内公告的查看,以及咨询管理员QQ
中
3.1.2 移动借书系统
Ø 管理员用例图
图 3-2 管理员用例图
Ø 用户用例图
图 3-3 用户用例图
3.2 移动借书系统设计
3.2.1 数据库类图
图 3-4 数据库类图
3.2.2 数据库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所示:
图 3-8 借书表E-R图
Ø 公告E-R图如图3-9所示:
图 3-9 公告E-E图
4 个人工作内容概述
4.1 工作内容
本人的任务是完成对客户端图书管理功能模块的一些功能,工作内容包括:图书浏览、图书搜索、图书续借、借书记录;还要完成对服务端用户管理功能模块的一些功能,工作内容包括:新增用户、修改用户、删除用户,给用户重置登录密码。
4.2 本模块在系统中的作用
移动借书系统的模块包括服务端的用户管理,和客户端的图书管理。用户管理模块的使用者是图书管理员,管理员使用这个模块管理读者用户的信息,能够对其用户信息修改,对新的用户添加用户信息,就是给用户读者登记,提供客户端的登录账号和密码,必要时还能删除用户信息,注销用户在客户端的登录账号和密码;而图书管理模块的使用者是读者用户,用户使用这个模块可选择查看分类下的图书列表,还能看某个图书的详细信息,提供了每个图书的借书功能,还能续借。所借的图书都会集中在一个借书记录里面,以便查看和确认收书。
5 个人完成的软件功能及数据详细设计
5.1 模块代码的分析
5.1.1 主要思想
移动借书系统下的服务端用户管理模块主要思想是通过管理员点击数据库中的某个用户ID,用户ID记录了此图书的所有属性,管理员通过这个ID来对用户信息进行数据库操作,实现对用户信息的增加、修改、删除。
移动借书系统下的客户端图书管理管理模块主要思想就是通过用户点击某图书分类ID,然后将ID发送到服务端,从服务端获取的此分类ID下的所有图书列表,用户再点击图书列表项对应的图书ID,就能获取此图书详细信息,然后就能发出借书请求,向服务端发送图书ID请求借此图书。
5.1.2 用户管理
涉及到的文件:
/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/UserAction.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->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');
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('user');
$reslut = $user->field('name')->find($id);
$borrow = M('borrow');
$data = $borrow
->where('reader="'.$reslut['name'].'" AND statue="'.'已借书" OR statue="'.'未还书"')
->select();
if(count($data) > 0) {
$this->error('删除失败!此用户有记借书或者未还书记录');
}else{
$reslut = $user->delete($id);
if($reslut){
$this->success('删除成功!');
}else{
$this->error('删除失败!');
}
}
}
}
4) 当用户重置密码,代码如下:
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());
}
}
5.1.3 图书管理
图书管理涉及到的文件:
/BorrowBook/src/com/cqxxxy/borrowbook/activity/BooksActivity.java 图书浏览界面
/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 图书列表适配器
/BorrowBook/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. 首先与服务端通信,获取图书的分类数据,在界面的水平菜单中显示,部分代码如下:
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(SynchServer.JSON_MESSAGE_SUCCESS) && ret == MainActivity.id) {
JSONArray array = object.getJSONArray(SynchServer.JSON_DATA);
String[] types = new String[array.length()];
for(int i=0; i<array.length(); i++) {
JSONObject ja = array.getJSONObject(i);
types[i] = ja.getString("tname");
}
Message msg = new Message();
msg.what = MainActivity.RETURN_SUCCESS;
msg.obj = types;
handler.sendMessage(msg);
}else{
handler.sendEmptyMessage(MainActivity.RETURN_ERROR);
}
}else{
handler.sendEmptyMessage(MainActivity.RETURN_ERROR);
}
2. 再从服务端获取指定分类下的所有图书列表,具体代码如下:
JSONObject object = null;
if(MainActivity.server != null) object = MainActivity.server.getTypeToBooks(
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<Book> books = new ArrayList<Book>();
Book book;
JSONObject jb;
for(int i=0; i<data.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 = new Message();
msg.what = MainActivity.RETURN_SUCCESS+1;
msg.obj = books;
handler.sendMessage(msg);
}else{
handler.sendEmptyMessage(MainActivity.RETURN_ERROR);
}
}else{
handler.sendEmptyMessage(MainActivity.RETURN_ERROR);
}
2) 图书信息
图书信息界面的运行效果如下图5-5所示:
图 5-5 图书信息界面
图书信息的实现代码
在BookActivity.java文件中
通过向服务端发送图书ID参数,返回此图书的信息并显示在图书信息界面,部分代码如下:
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_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");
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.JSON_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);
}else{
handler.sendEmptyMessage(MainActivity.RETURN_ERROR);
}
}else{
handler.sendEmptyMessage(MainActivity.RETURN_ERROR);
}
}else{
handler.sendEmptyMessage(MainActivity.RETURN_ERROR);
}
3) 借书界面
图书信息下面又一个借书的按钮,点击该按钮就能向服务端发出借书请求,运行效果如下图5-6所示:
图 5-6 图书借书界面
借书的实现代码
当用户点击图书信息界面的借书按钮组件时,就会出发借书事件,借书向服务端发出借书请求,等待服务端的反馈,通过判别反馈提示用户是否借书成功,借书的代码如下:
JSONObject object = null;
if(MainActivity.server != null) object = MainActivity.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);
}else 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.sendEmptyMessage(SUCCESS_RET_NO_BOOK);
}else if(ret == (MainActivity.id * 55)){
handler.sendEmptyMessage(SUCCESS_RET_NO_RESUME);
}else{
handler.sendEmptyMessage(NOSUCCESS_RET_LOST);
}
}else{
handler.sendEmptyMessage(NOSUCCESS_RET_LOST);
}
}else{
handler.sendEmptyMessage(MainActivity.RETURN_ERROR);
}
4) 借书记录界面
借书记录下是显示借书的一些信息,可看到自己借过哪些书,包括正在借书的状态,运行效果如下图5-7所示:
图 5-7 借书记录界面
借书记录界面实现的代码
JSONObject object = null;
ArrayList<Borrow> list = new ArrayList<Borrow>();
if(MainActivity.server != null) object = MainActivity.server.getBorrowOrder(MainActivity.id);
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 array = object.getJSONArray(SynchServer.JSON_DATA);
if(array != null) {
JSONObject jo;
Borrow borrow;
for(int i=0; i<array.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");
展开阅读全文