1. 引言
信息技术的不断发展促进了网络信息资源向有序化方向发展 [1] ,同时,随着社会对物质、资金、知识等资源的需求增加和互联网技术的进步,P2P业务模式呈现爆炸式发展。图书是高校师生获取知识的重要来源,对师生个人和高校的发展起着及其重要的作用。但是高校图书馆的发展往往受经济条件、办学规模等多方面条件限制,图书馆的藏书量、藏书更新速度以及藏书受欢迎程度等方面亟待提升。P2P图书共享业务模式是指通过系统完成借书并于线下个人对个人交易的模式。本文在P2P图书共享业务模式基础上,基于B/S结构设计高校图书共享网站系统,整合师生自有图书资源,弥补图书馆藏书资源的局限性,并激发师生的读书热情,有助于形成人人读书,互助读书的良好风气 [2] 。
2. 系统需求及设计
2.1. 系统需求
该系统是以高校师生为目标对象,以当前比较流行的B/S为架构,即用户直接浏览指定网站获取信息,整合在校师生的自有图书资源,提高现有图书资源利用率,弥补现有图书馆图书资源的缺陷。P2P图书共享网站是整合图书供求资源并将信息提供给供求双方的服务平台。图书供给方将可供借阅的图书信息是上传至网站,其图书详细信息可通过第三方(如,豆瓣)接口获取,图书需求方可根据网站展示的所有图书信息借阅感兴趣的图书,系统自动发送请求信息邮件给图书供给方,经同意沟通后,双方可约定时间地点交易;当图书即将到期时,系统自动发送邮件提示归还日期。同时,用户可在网站图书下分享自己的阅读心得,互相学习。此外,图书展示根据用户借阅次数顺序排列,用户可在首页浏览到热门借阅图书。
整体流程图如图1所示。
2.2. 系统整体设计
图书共享网站主要分为前台界面设计、后台功能设计及数据库设计三大功能 [3] 。
前端使用现在流行的AngularJS,前端负责页面的呈现和用户交互,用户可注册、登录、上传书籍信息、借书、评价书籍等;后台使用轻便的express.js,后台处理前端用户的操作和数据信息,读取数据库数据;数据库使用非关系型数据库MangoDB。
图书共享系统共有5个基本模块组成如图2所示,分别是用户信息模块、图书信息模块、借还信息模块和管理员管理模块。
3. 系统实现
3.1. 数据库搭建
本文数据库是基于非关系型数据库MangoDB搭建,将数据保存在不同表中,采用数据标准化语言进行访问,增加系统的查询速度并提高了灵活性。结合本文的系统整体设计,现以设计效率高、冗余程度低的数据结构为原则,实现数据库主要以4个表组成 [4] :
1) 图书信息表。包含的主要字段有:图书名,作者,出版社,所属种类,摘要,ISBN号。
2) 书评信息表。包含的主要字段有:评论人,评论内容。
3) 借阅信息表。包含的主要字段有:状态,借阅时间,借书者,到期时间。
4) 用户信息表。包含的主要字段有:姓名,密码,邮箱,联系方式,所属书籍,借阅书籍。

Figure 2. System function module distribution
图2. 系统功能模块分布图
通过数据库设计,得到本文网站的E-R模型图3,本文通过mongoose库实现对数据库的访问技术,mongoose.js连接的关键代码如下:

3.2. Web后台实现
Web后台实现接收http请求,数据业务逻辑处理,数据库的存储等功能。本文以Express作为后台开发工具,Express是一个基于Node.js平台的极简、灵活的web应用开发框架。Express设置Connect中间件来响应HTTP请求,并定义了路由表用于执行不同的HTTP请求动作,通过向模板传递参数来动态渲染HTML页面 [5] 。同时,使用Mongoose连接MongoDB数据库的软件包,使MongoDB的文档数据模型变的优雅起来,方便对MongoDB文档型数据库的连接和增删改查等常规数据操作。后台系统整体架构作用图如图4所示。

Figure 4. Back-end system overall structure function diagram
图4. 后台系统整体架构作用图
Web服务器在网站系统中起着桥梁作用,它将用户Http请求的资源返回给用户,服务器在处理复杂的业务逻辑时需要读取存储在数据库中的数据。图5说明了web服务器在系统中的纽带作用。
3.3. Web前端开发
Web前端是指综合利用HTML + CSS + JavaScript各web技术知识实现客户端网页的呈现、布局、样式和交互。其中内容的呈现是利用html的标签元素,CSS实现网页的布局和样式,为了美化网页,节省开发时间,本文引入当前流行的HTML/CSS框架Bootstrap [6] 。AngularJS则实现网页的交互,其中AngularJS是用于前端开发的MVC框架,比较杰出的就是它的数据绑定功能,可以减少大量的初始代码 [7] 。
Web前端页面按主要功能模块分为首页、图书列表页、具体图书信息页、用户中心页和管理员管理书籍用户信息页和添加新书信息页。其中其主要功能网页设计如下:
1) 添加新书信息页
添加新书信息页是用户可加入自己的新书籍,以分享给其他用户,本系统中为了简便用户上传新书信息的数据量,引入豆瓣开放的图书信息API,用户可依据图书名或者ISBN号搜索书籍,搜索成功后系统自动填入书籍信息,免去了用户繁琐的填写图书信息时间,增加用户体验感。如用户在豆瓣API中找不到该图书信息,则需依据新书信息页给出的书名、类别、图书封面、出版社等要求填写,填写成功后点击“添加此书”按钮,即可成功添加新书。图6为该页的工作流程图。
2) 具体图书信息页
用户可浏览图书信息列表,查看感兴趣书籍并借阅,系统自动发送含借阅请求的邮件给书籍提供者,书籍提供者同意后,借阅过程完成。此外,在具体图书信息页,用户可看到图书的借阅状态、摘要、图书持有者(邮箱)和借阅记录等;同时用户可添加并分享自己的读书笔记,分享自己的读书心得。
3) 管理员管理书籍用户信息页
该页面只有管理员有权限访问并修改,表格形式展示所有图书信息和用户信息,便于管理员管理和维护网站信息,该页面显示图书的持有者、持有者邮箱等信息,方便管理员系统查看所有在列图书信息,同时添加图书查找功能,管理员可根据图书字段或用户名查找具体某一个信息条,方便管理员快速定位。

Figure 6. Adding a new book information page workflow
图6. 添加新书信息页工作流程图
4. 系统测试
根据系统提供的各项功能分类进行详细的测试,分别建立多个普通用户和系统管理人员用户。按照各自的职责和功能接口进行测试,包括注册、登陆、查询、录入图书信息、借阅、归还、过期未还、修改密码、修改用户信息等,其中图书信息列表页如图7所示,对其图书字段搜索、分类搜索、图书可借状态显示和修改、各在列图书点击跳转和图书分页等功能进行测试,对页面的字体大小、颜色进行调整优化,对每个图书块占据大小进行调整优化,使得页面更加美观;同时,测试该页面时也发现一些bug,如发现图书借阅状态字段没有随着图书借出修改,系统在测试时也做了相应的修改。通过对众多功能一一测试,对于其中不合理的地方进行修改和优化,使之更方便使用,系统最终达到了设计的要求。
5. 结束语
本文所设计的图书资源共享系统是基于B/S三层架构设计的网站系统,采用AngularJS和Bootstrap搭建前端页面基本框架,在用MangoDB搭建数据库和Express建立后台服务器的基础上,用AngularJS的$http、service实现前端与后台的数据对接,用Javascript中的mongooseJS库实现后台和数据库的数据对接,从而保证整个数据生命周期内的一致性,系统具有数据显示修改、数据存储、数据实时录入、数据分类等功能,是典型的多功能任务管理系统。
通过建立P2P图书共享平台,形成基于P2P平台的图书资源利用模式,能够高效整合利用高校内部图书资源,对图书馆馆藏资源进行有效补充,提高现有图书利用率。本文成功搭建的图书共享系统虽然能够满足用户群体对图书分享、借阅的基本需求,但它的功能还不够完善,需要进一步的优化和改进,如预约、续借和黑名单等功能。