基于JSP和MySql的资讯网站的设计与开发

阿西可可

发布日期: 2020-08-27 10:16:34 浏览量: 613
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

摘 要

互联网时代是一个资讯爆发的时代,人们每天都能接收到各种平台推送的各式各样的资讯,这些资讯有可能是用户感兴趣的,也有可能是用户所厌恶的,如何在各种各样的资讯中最高效的获取自己需要的内容成为一个普遍的问题。本课题研究了技术发展所带来的信息爆炸情况,论证了有效筛选信息的必要性,本文主要内容是设计和实现一个资讯网站,为互联网时代的用户提供信息过滤的功能。

本文对系统的可行性和用户需求进行了详细的描述,将设计的资讯网站定位为为用户收集和过滤资讯的一个资讯平台,利用协同算法针对用户偏好抓取最新的资讯,实现资讯展示、资讯推送、资讯搜索等功能。

本文以软件工程的基本理念为指导思想,将课题的需求调研、分析与项目的设计工作进行了严格的阶段划分,同时用面向对象的分析设计思想对系统进行用例建模。系统的实现主要以Java作为开发语言,使用MySQL数据库对系统信息进行统一管理。

关键词:信息爆炸;协同算法;用户偏好;信息筛选

ABSTRACT

The Internet age is an era of information explosion. People can receive a wide range of information from various platforms every day. These information may be of interest to users, and may be disgusting to users. The most efficient way to get the content you need is the general problem. This topic studies the information explosion brought about by the development of technology and demonstrates the necessity of effectively screening information. The main content of this paper is to design and implement an information website to provide information filtering function for users in the Internet age.

This article describes the feasibility of the system and user requirements in detail. The designed information website is positioned as an information platform for users to collect and filter information. It uses collaborative algorithms to capture the latest information based on user preferences, and realizes information display and information. Push, information search and other functions.

This paper takes the basic idea of software engineering as the guiding ideology, divides the requirements research, analysis and project design work of the project into strict stages. At the same time, it uses the object-oriented analysis and design idea to model the use case of the system. The implementation of the system mainly uses Java as the development language, and uses the MySQL database to perform unified management of system information.

Keywords: information explosion; collaborative algorithm; user preference; information screening

第一章 前言

1.1 课题背景

随着科技的发展,互联网从1969年发展至今,从一开始的仅用于军事连接,到如今的家喻户晓,互联网承载着人们的信息需求、交易需求、交流需求、娱乐需求以及办公需求,而其中的信息需求占据着很大一部分。互联网的发展使得人们能够不受空间限制来进行信息交换,并且由于人们可以随时随地联入互联网,使得互联网的更新速度非常迅速,因为互联网的受众众多,加之使用成本低,整个互联网中的信息量是庞大的。现如今人们使用的智能设备每天都会收到众多的推送信息,如推送的聊天消息;推广活动;行业新闻;最新资讯等,蜂拥而来的信息给用户带来的将会是选择成本的影响,以及时间被碎片化。

资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,具有时效性和地域性。资讯不同于新闻,资讯和新闻的区别在于:资讯包括了新闻、供求、动态、技术、政策、评论、观点和学术的范畴,时效范围远宽于新闻,例如今天的新闻明天不再是新闻,但今天的资讯明天也可能作用依然。

互联网时代的用户已经不仅仅只是关注于此时此刻或者过去发生了什么事情,他们可能为了更好的自我发展,会将关注点放在那些能够提高自我的资讯上面,比如领域类的最新技术、发展历史以及他人的经验分享。互联网时代同时也是一个资讯爆发的时代,各式各样的资讯如大潮般涌向用户,例如百度每天的搜索量达到60亿次,产生数据量达到几十PB,新浪微博高峰期每秒达到百万次访问。与海量资讯蜂拥而至相矛盾的是用户获取资讯的时间始终是有限的,怎么有效的筛选有意义的讯息变成了一个相当棘手的问题。

本课题的核心内容就是利用协同算法为用户筛选出最合适的资讯,让用户在有限的时间里最大可能的接收到对自己最有价值的资讯。

1.2 课题目的与意义

互联网上有着许许多多的门户网站,如热点资讯、新浪新闻、搜狐新闻、腾讯新闻、网易新闻、央视新闻等,这些门户网站是现如今人们获取资讯的主要方式,但这些网站都有一个共同的特点,那就是页面元素过多,即使有相应的板块设置,但页面主体都是富含众多子栏目,这给用户的浏览带来极大的不便,眼花缭乱的页面元素使得用户不能专心于资讯的获取。并且页面中所包含的资讯可能是最新、最热或者是网站编辑所推送的,而不是用户可能感兴趣的资讯。

基于这些原因,国内出现了类似于今日头条这样的基于数据挖掘的推荐引擎产品,这类产品能更好的将用户感兴趣的资讯呈现给用户。今日头条的资讯来自于其他的门户网站,主要通过爬虫进行抓取,它将抓取到的资讯呈现给用户,并对用户的过往浏览情况进行分析,得出用户可能感兴趣的内容,推送给用户。

1.3 本文研究的内容

用户体验决定了一个产品的存在周期。本文将重点研究如何实现为用户推送可能感兴趣的内容。在充分论证系统可行性和用户需求的基础上利用所学的面向对象设计方法对系统进行模块设计、界面设计和数据库设计。

1.4 论文结构简介

本论文记录着对系统开发的前期的调研、设计到系统的开发、测试和总结的全过程。

  • 前言:本章主要介绍系统当前社会背景及开发目的与意义,同时对当前社会中已存在的资讯网站进行分析与阐述

  • 算法介绍:本章主要对当前社会较流行的推荐算法——协同过滤算法进行说明,分析其类型、优缺点及当前社会的应用实例

  • 系统需求:本章主要对系统进行开发的可行性进行分析,并对用户需求进行说明,结合现如今类似资讯网站对用户界面需求进行阐述,绘制数据流图,为系统设计打下基础

  • 系统设计:根据用户需求对系统进行该要设计,模块设计,绘制功能模块图,并对数据库进行设计,绘制数据库社物理模型图以及对数据库表进行说明,为系统实现提供指导

  • 系统实现与测试:对系统中的功能实现进行介绍,介绍同时展现所实现的UI界面展示。另外是对系统测试进行说明

  • 结论:对系统进行总结和自我总结。另外,论文还包括结论、参考文献及致谢三部分,最后附录了全文表索引和全文图索引及部分核心代码

第二章 算法介绍

2.1 算法背景

协同过滤算法是诞生最早,并且较为著名的推荐算法。主要功能是预测和推荐。协同过滤简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐用户感兴趣的信息,个人通过合作的机制给予信息相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选信息,回应不一定局限于特别感兴趣的,特别不感兴趣信息的纪录也相当重要。

1992年出现的Tapestry是最早应用协同过滤系统的设计,主要是解决Xerox公司在Palo Alto的研究中心资讯过载的问题。这个研究中心的员工每天会收到非常多的电子邮件却无从筛选分类,于是研究中心便发展这项实验性的邮件系统来帮助员工解决这项问题。

然后是1994年的GroupLens,这个系统主要应用在新闻的筛选上,帮助新闻的阅听者过滤其感兴趣的新闻内容,阅听者看过内容后给一个评比的分数,系统会将分数记录起来以备未来参考之用,假设前提是阅听者以前感兴趣的东西在未来也会有兴趣阅听,若阅听者不愿揭露自己的身分也可以匿名进行评分。 和Tapestry不同之处有两点,首先,Tapestry专指一个点(如一个网站内、一个系统内)的过滤机制;GroupLens则是跨点跨系统的新闻过滤机制。再来,Tapestry不会将同一笔资料的评比总和起来;GroupLens会将同一笔资料从不同使用者得到的评比加总。

随后出现的是电子商务的推荐系统,最著名的是亚马逊网络书店,顾客选择一本自己感兴趣的数据,马上会看到其他购买过该书的顾客买过的其他书籍。另外一个著名的例子是Facebook的广告,系统根据个人资料、周遭朋友感兴趣的广告等等对个人提供广告推销,也是一项协同过滤重要的里程碑,和前二者Tapestry、GroupLens不同的是在这里虽然商业气息浓厚同时还是带给使用者很大的方便。以上为三项协同过滤发展上重要的里程碑,从早期单一系统内的邮件、文件过滤,到跨系统的新闻、电影、音乐过滤,乃至于今日横行互联网的电子商务,虽然目的不太相同,但带给使用者的方便是大家都不能否定的。

2.2 算法分类及原理

协同过滤算法主要分为三类,分别是以用户为基础的协同过滤(User-based Collaborative Filtering,UBCF)、以物品为基础的协同过滤(Item-based Collaborative Filtering,IBCF)以及以模型为基础的协同过滤(Model-based Collaborative Filtering, MBCF),本节主要介绍以用户为基础的协同过滤以及以物品为基础的协同过滤。无论是UBCF还是以IBCF,其本质是通过对以往数据进行分析,找出其相似性,将相似度最大的结果推荐给用户。下面是对它们两者的详细介绍。

2.2.1 以用户为基础的协同过滤

以用户为基础的协同过滤主要是用相似统计的办法得到与用户兴趣或爱好具有相似度的其他用户。其主要步骤为:

  • 收集用户的特征数据。这种特征数据可以是网站主动提供给用户进行评定的“主动评分”,如评分功能;也可以是不需要经过用户操作,由用户的行为所产生的“被动评分”,如收藏、电子商务网站的购买等功能。无论是主动评分还是被动评分,都代表着用户对该物品的一个喜好情况及程度

  • 针对用户的最近邻搜索。以用户为基础的协同过滤是为目标用户A寻找出一组兴趣爱好相似的用户,将这些相似用户对其他物品X的评分作为目标用户对物品X的评分预测。在进行相似用户寻找时,一般根据所选取的数据选择相应的算法进行相似度计算,较常见的相似度推荐算法有皮尔森相关系数(Pearson Correlation Coefficient)、余弦相似性(Cosine-based Similarity)以及调整余弦相似性(Adjusted Cosine Similarity)

  • 产生推荐结果。通过第二部获取了最近邻集合以后,根据推荐目的的不同选择不同的推荐方式,常见的有Top-N推荐。Top-N推荐是针对单个用户进行推荐,不同的用户所产生的不同的结果,当然也有可能两个用户的相似度过高而产生相同结果。它的推荐方式是将在最近邻集合中出现频率高并且是要进行推荐的目标用户的评分项目中不存在的项,作为推荐结果

2.2.2 以物品为基础的协同过滤

以项目为基础的协同过滤是Sarwar于2001年提出的推荐算法,主要是为了解决基于用户的协同过滤算法随用户数量增长,而带来的计算时间变长的不足。其主要步骤为:

  • 收集用户的特征数据。这一步与基于用户的协同过滤算法相同

  • 针对物品的最近邻搜索。以物品为基础的协同过滤的目标为物品之间差异。通过计算用户已评分物品与未评分物品之间的差异,得出与用户已评分物品的相似性较高的物品集合,即最近邻集合。物品相似度的计算,根据不同的物品可以有不同的计算方式,简单的有电影的类别,如爱情片、惊悚片或恐怖片;音乐的风格,如流行乐、摇滚乐、古典乐等

  • 产生推荐结果。将与用户过往记录最相似并且用户未评分的物品推荐给用户

2.3 算法优缺点

以用户为基础的协同过滤及以物品为基础的协同过滤有着各自的优缺点,下面对他们进行分开讨论。

2.3.1 以用户为基础的协同过滤的优缺点

优点

以用户为基础的协同过滤算法的优点主要体现在以下几方面:能够过滤一些机器难以判别分类的信息,如艺术品、音乐等;出发点为用户特征数据,避免了因内容分析问题而导致的推荐不准确;可以为用户推荐内容毫不相关的信息,用户可以发现潜在的但尚未发掘的兴趣爱好;个性化、自动化程度高,能有效利用相似用户的回馈信息、加快个性化学习的速度。

缺点

以用户为基础的协同过滤算法也有一些缺点,如如果用户很多,计算用户相似度矩阵代价很大;冷启动问题:新用户在系统开始时推荐质量较差;不同用户之间如果物品重叠性较低的情况下,导致算法无法找到相似用户的稀松性问题等。

2.3.2 以物品为基础的协同过滤的优缺点

优点

以物品为基础的协调过滤的优点主要体现在以下几方面:用户有新行为产生时,一定会影响推荐结果的产生;利用用户的历史行为进行的推荐,用户对推荐结果比较信服;可以离线完成相似性计算,降低在线计算量,推荐效率提高。

缺点

以物品为基础的协调过滤也不可避免的有些缺点,例如如果物品过多,导致计算物品相似度矩阵复杂,计算代价很大;推荐精度较差等。

2.4 算法适用场景

在上述算法背景中,已经提到了几个应用了协同过滤算法的场景。现今用到协同推荐算法的有亚马逊和淘宝等购物网站的“猜你喜欢”、今日头条的新闻推荐等,这些网站的推荐算法中,有单独使用以用户为基础的协同过滤的,也有单独使用以物品为基础的协同过滤的,更主要的是两者结合起来共同进行推荐功能的。以物品为基础的协同过滤适用于网站用户数量大于物品数量,并且物品数量相对稳定;以用户为基础的协同过滤适用于新闻类、博客类网站。两类算法分别有着自己的优劣势,适应不同场景,结合两者或其他算法来进行推荐,用户得到的推荐结果更佳。

2.5 本章小结

本章主要是对协同过滤算法进行介绍。本章首先交代了协同过滤算法的历史背景,接着对算法的分类以及实现原理进行了阐述,然后对两类主要的协同过滤算法的优缺点进行了介绍,最后对协同过滤算法的适用场景进行了说明,为后续系统实现推荐功能提供技术指导。

第三章 系统需求

3.1 可行性分析

可行性分析是整个软件生命周期中的第一个阶段,是软件开发过程中的一个关键阶段,是项目决策和启动的重要依据。如果问题不能得到解决,那么所花费的时间及精力都将会是无谓的浪费。

基于协同算法的资讯网站的主体为Web网站,核心功能为基于协同算法而实现的资讯推送功能。本文将从经济可行性、技术可行性、社会可行性及操作可行性四个方面对本系统进行评估,对未来是否课题研究进行更好的论述。

3.1.1 经济可行性分析

门户网站经济客观。雅虎、今日头条、腾讯新闻等网站存在已有一定的年份,能够屹立不倒证明着有其经济价值,通过分析得出这些门户网站的主要盈利模式主要是通过广告推广来获得一定的利益。

开发成本低,运营成本低。网站数据获取通过爬虫自动从网络中抓取,推荐算法实现以后将会不断发挥作用,网站开发完成以后,将能不断为用户提供服务。

3.1.2 技术可行性分析

该Web系统采用Java语言进行开发,使用tomcat作为Web服务器,利用MySQL数据库对系统数据进行存储与管理。整个项目搭建基于SSM架构,核心功能算法部分基于协同过滤算法。

Java语言是有Sun公司开发的一门面向对象编程语言。它吸收了C++语言的各种优点,并且摒弃了C++里多继承、指针等复杂概念,具有功能强大和简单易用两个特性。并且由于Java具有平台独立及可移植性的特点,在开发使用方面非常便利。作为如今流行的开发语言之一,Java从1995年诞生以来,发展至今已有20多年的历史,在安全性及健壮性等方面也有非常好的优势。

Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发所成。Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,适合中小型系统及并发访问量不是过多的场合,是开发和调试JSP程序的首要选择,而本网站从未来使用角度来分析,面临的高并发场景不多,因此使用Tomcat作为网站的服务器非常合适。

MySQL是一个关系数据库管理系统,由MySQL AB公司开发,目前隶属于Oracle旗下。MySQL是最流行的关系型数据库管理系统之一,其体积小、速度快、总体拥有成本低,是一般中小型网站开发所钟爱的选择。

SSM框架由Spring、Spring-MVC、MyBatis三个开源框架整合而成,是Web开发中常用的框架组合。

Spring是一个轻量级的IoC和AOP容器框架,它是一个分层架构,由7个定义良好的模块组成,其核心容器定义了创建、配置和管理bean的方式,并且它的模块化设计对Spring-MVC及MyBatis的整合也非常方便。

MVC全名为Model View Controller,是一种当前流行的软件设计典范,它的目的是将软件开发中的视图设计与业务逻辑编写分离开来,使得软件耦合性更低、可重用性更高,在软件维护性及成本方面也有了提升。而Spring-MVC作为常见的MVC框架之一,它基于MVC的设计理念,以及同为SpringFrame下的产品,使得网站开发在便利性方面得到了极大的提升。

MyBatis前身为iBatis,为Apache的一个开源项目。MyBatis作为一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。

协同过滤算法应用广泛,普遍存在与电子商务平台以及门户类网站中。在最近邻算法实现方面,Mahout提供了良好的库,可以对其库进行改进以实现实际需求。

从上述技术的特点、成熟度及实用结果来看,实现本课题在技术上是完全可行的。

3.1.3 社会可行性分析

在这个信息爆炸的年代,人们面对的不再是资讯短缺,而是资讯过载。互联网时代的用户已经不仅仅只是关注于此时此刻或者过去发生了什么事情,他们可能为了更好的自我发展,会将关注点放在那些能够提高自我的资讯上面,比如领域类的最新技术、发展历史以及他人的经验分享。互联网时代也是一个资讯爆发的时代,各式各样的资讯如大潮般涌向用户,例如Google的每月查询量为1000亿次,百度每天的搜索量达到60亿次,产生数据量达到几十PB。与海量资讯蜂拥而至相矛盾的是用户获取资讯的时间始终是有限的,怎么有效的筛选有意义的讯息是当今社会面临的一个难题。

3.1.4 操作可行性分析

人类在科学探索路上不断追求进步,计算机技术发展至今,虽达不到百分百的普及,但网络已覆盖世界上绝大多数区域。智能手机、个人电脑的普及程度越来越好,有的人不仅仅只是拥有可以联网的设备,还可能拥有多台或配置更好的设备。网页操作对现如今的人们来说趋于成熟,用户的认知和接受程度应到了一个很高的水平,用户对于网站内容和形式以及对网站的操作不会人生地不熟。

总结以上分析,本课题Web网站的开发在上述四个可行性方面都具有实施可能,因此该系统的设计与开发具有实现的意义。

3.2 用户需求说明

为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深入理解是软件开发工作获得成功的前提条件,不论人们把设计和编码工作做得如何出色,不能真正满足用户需求的程序只会令用户失望,给开发者带来烦恼。[1]

需求是用户为了解决现有问题,所提出的改善措施或改进建议,它是用户期望的一个准确描述。实现需求的过程中,就是通过实现软件功能,使其满足用户期望,达成用户目标。以下主要从三个方面对用户的需求进行说明:

3.2.1 门户类网站访问量巨大

在这个资讯爆发的年代,人们为了解决遇到的问题,或是为了获取新的信息来满足自我发展,需要经常在网络中搜索资讯或者浏览资讯。“有问题谷歌一下”或是“有问题百度一下”是IT技术以及中国民间所流行的两句俚语,百度甚至将其作为推广宣传的标语,这足以体现资讯搜索在现今社会中的重要性。搜索是用户以主动的方式从网络中获取想要的资讯,与其相对的被动获取则是各类资讯门户网站,这些网站通过人工的方式进行资讯的发布以及展示,是用户获取资讯的主要手段之一。有些门户网站因为它们的名称朗朗上口或是因为其优质的内容,已经成了人们生活中了解社会、行业或是为了自我提高而必不可少的一部分。

据统计,搜索类网站中谷歌旗下的域名google.com独立访客(UV)月平均访问量达15亿,google.com(谷歌搜索,主要负责搜索)该域名占比67.85%,约10亿;百度旗下的baidu.com域名独立访客月平均访问量达3亿,baidu.com(百度搜索,同谷歌)该域名占比74.17%,约2亿,zhidao.baidu.com(百度知道,百度旗下的问答平台)占比31。04%,约9000万,baike.baidu.com(百度百科,百度旗下的网络百科全书平台)占比19.98%,约6000万。新闻类网站中新浪旗下的sina.com.cn域名独立访客月平均访问量达1.2亿,其新闻网站域名news.sina.com.cn占比34.02%,约4000万;腾讯旗下的qq.com域名月平均访问量达2亿,旗下新闻网站域名news.qq.com占比14.41%,约2800万。

以上这些信息体现出,现今社会人们对于资讯的获取是极度渴望的。

3.2.2 科技技术发展迅速

随着人们在科学道路上的不断发展,科技技术水平不断提升,计算机已经从最开始的占地170平方米的庞然大物,缩小到了只有巴掌大小的智能手机,可以说是经历的巨大的改变。并且,随着网络技术的发展,及互联网概念的提出,人们获取资讯的方式极为便利,成本也得到了降低。人们回到家中,遇到了问题可以用PC打开如谷歌或者百度这样的搜索网站,键入自己遇到的问题或想要获取的资讯,随后将会得到“可能是自己想要的结果”,但由于这个互联网的发展,这个“可能的结果”通常都能解决用户的问题,或是用户想要的;而对于那些专注于一个领域,或是关注社会发展的用户,在网站持续运营的情况下,可以随时访问各类门户网站,获取社会最新动态、行业最新资讯或是领域内最新的研究成果;而出行在外,随着wifi的普及,人们可以使用笔记本电脑或是平板电脑查阅资讯,即使在不满足这些情况的条件下,人们的智能手机还能使用蜂窝网络连入互联网浏览资讯。

以上信息体现出,人们获取资讯的方式多样,成本较低,不受时间地域限制。

3.2.3 推荐功能的必要性

无论是上面提到的搜索还是门户网站,都是需要用户主动去网络世界中获取,用户以该种形式获取资讯时,不能保证资讯的完整性,可能有些资讯是用户需要的关键点,但因为一些原因用户未能获取到的话,将有可能给用户带来极大的阻碍。这些原因可能是用户关键字的不准确表达造成的搜索结果不匹配;网页布局影响造成的用户没看到、时间影响造成资讯显示排序过于后面;人为对展示结果的影响等。为了解决这些潜在因素影响下,用户未能看到一些信息的问题,资讯推荐是一种有效且必要的措施,它能主动为用户推荐一些信息,消除用户主动获取时所隐含的部分劣势,弥补用户被动获取资讯的不足。

3.3 用户界面需求

3.3.1 界面设计风格

现在市面上的新闻网站有很多,这些新闻网站的内容丰富全面,是用户获取讯息的重要途径。但是这些网站在用户体验上存在不足,包含的页面元素过多,容易给用户造成选择困难;另外页面布局排版及广告等对用户浏览造成视觉影响。本课题的网站的页面设计主要借鉴今日头条的页面样式来设计,以减少页面内容来突出显示用户感兴趣的资讯信息。

3.3.2 交互设计

根据《用户体验要素》、以及《DON’T THINK》提出的思想,让用户看得舒服,看得明白,用得舒服为原则,使用户在与网站进行交互操作时,感到舒适及舒心。

  • 看得明白:能看懂文字的意思,产品的组成和结构,产品运转方式

  • 看得舒服:能知道从何看起,找到想到的东西,能看懂布局,能分清视觉化差异的意思

  • 用得舒服:敲键盘,移动鼠标,鼠标单击、双击和拖动,切换输入方式,导航的点击次数

3.3.3 界面要求

考虑大龄用户、页面元素以及对计算机尚不熟悉的人群,网页操作的学习成本应该降低,网页的复杂度也不应太高。

3.4 管理需求说明

本课题系统基于协同算法的资讯网站,整个Web系统跟资讯息息相关,从资讯的获取、资讯的展示、资讯敏感词等各方面都有管理的需求。以下将对这三个方面进行说明。

3.4.1 资讯管理

资讯数据是个非常大数据集,其标题以及内容的数据量都是非常占用内存的,一两条可能看不出来,当数据量多起来的时候,那么存储量将会非常巨大,即使这样本Web系统还采用数据库的原因是这样能够方便对资讯的管理。本课题Web系统在资讯存储方面采用了数据库进行储存,那么后台管理模块中,需要能对数据库中的资讯进行管理。其中包括数据库中资讯信息的查看、资讯的删除。网站资讯数据来源于爬虫,所以资讯管理功能中将不包括资讯信息的添加以及资讯信息的修改。

3.4.2 敏感词管理

根据相关政策,或是为了网站健康良好的发展,需要对一些词汇进行设置,在网站显示或是其它功能中禁用这些词汇,这类词汇称作敏感词汇。敏感词汇可能是一些脏话、带有政治倾向、暴力倾向、不健康色彩的词语。本课题系统中用户可以自行查找资讯,在搜索时将会对搜索的关键词进行过滤,如果出现敏感词列表中的词汇,将会对用户进行提示“当前搜索中可能包含敏感词汇,请重新搜索!”。所以为了网站的持续发展,需要对敏感词进行管理,包括敏感词的添加、敏感词的查看以及敏感词的删除。遂网站后台模块需要有能对敏感词进行管理的模块。

3.4.3 爬虫管理

本课题Web系统中的资讯来源为爬虫获取,那么将会涉及到爬虫的一些相关操作,如:爬虫的启动、爬虫的停止、爬虫抓取链接的设置。那么爬虫管理功能对后台管理来说,也是必不可少的一部分。

3.4.4 用户信息管理

本课题Web系统涉及到用户的注册与登录,用户数据采用数据库存储,所以用户信息管理也将会是后台管理中的一部分。

3.5 系统数据模型分析

为了把用户的数据要求清楚、准确地描述出来,系统分析员通常建立一个概念性的数据模型。[1]通常使用ER图来建立数据模型。

分析本课题系统得知,系统中存在的实体有用户、资讯、板块、用户喜好、用户评分、管理员以及敏感词,具体的ER图如图3.1所示:

3.6 系统数据流图

数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。它只是描绘数据在软件中流动和被处理的逻辑过程,是系统逻辑功能的图形表示。[1]其中矩形表示数据源和终点,圆角矩形或圆形表示对数据进行加工处理,双横线表示数据存储,箭头表示数据流。

分析整个系统的数据需求得到一下的数据流图:

登录模块:用户输入账号密码点击登录,网页将用户信息提交至后台,后台对用户信息进行验证,验证通过则跳转至主页并设置Session。其数据流图如图3.2所示:

注册模块:用户点击注册,在弹出的注册界面中输入相应信息,符合注册条件则注册成功,信息存入用户表中。其数据流图如图3.3所示:

后台模块:主要完成敏感词的设置以及板块的设置。管理员登录后台管理以后,对敏感词以及新闻版块进行相应的设置。其数据流图如图3.4所示:

资讯模块:主要完成新资讯的获取,通过爬虫从门户网站抓取,并将新资讯的相信信息存入数据库中;用户浏览资讯时的板块选择功能,用户浏览网站时,点击想要浏览的板块,网页将板块信息提交至后台,后台从数据库中查询出相应板块的资讯返回网页;用户查看资讯,用户点击链接,网页将会把资讯的编号信息提交至后台,后台查询出资讯详情返回至网页;资讯搜索,用户在搜索框中输入关键字进行搜索,后台对用户提交的关键字进行过滤,如果属于敏感词,则返回空列表,网页进行相应的提示,如果不属于敏感词,则查询出标题和内容中包含关键字的资讯,返回给用户。其数据流图3.5如图所示:

爬虫模块:主要负责资讯的抓取。爬虫从门户网站获取资讯数据,通过管道类存入数据库中。

3.7 本章小结

本章主要是对课题系统进行设计以前的调研及可行性分析。本章首先从经济、技术、社会和操作等方面对系统的可行性进行了评估,判断系统是否值得实现,是否有实现的可能,并对用户需求进行了说明,接着对系统的数据模块、功能模块、行为模块进行了分析与建模,绘制ER图、数据流图,作为后续系统设计与开发的指导方针。

第四章 系统概要设计

4.1 模块设计

按照模块的定义,过程、函数、子程序和宏以及面向对象中的对象、对象的属性等,都可以作为模块。本节主要是对整个Web网站的功能模块进行分析与设计,为的是使软件结构更加清晰,提高软件的可靠性、可重用性、可维护性以及可修改性。

4.1.1 模块划分

在对本课题的需求进行分析以后,整个系统的功能模块主要包括:资讯模块、用户模块以及后台模块三个模块。

  • 资讯模块:该模块的主要实现资讯获取、资讯展示、资讯推送、资讯搜索以及资讯发布等功能。该模块是整个网站的核心模块,其中资讯推送为重中之重,为整个网站的灵魂所在。整个模块主要负责为用户推送可能感兴趣的资讯、显示资讯列表以及对资讯进行展示

  • 用户模块:该模块主要是负责与用户相关的一些功能,其中包括用户注册、用户登录、以及用户的个人信息管理。资讯模块中的推送功能需要对用户的历史行为进行一个统计与分析,所以该模块在整个系统中也是不可或缺的存在

  • 后台模块:该模块主要负责网站后台的一些管理功能,如与资讯获取有关的爬虫设置;管理与资讯搜索有关的敏感词设置。该模块是客户与网站进行交互的主要模块

4.1.2 功能模块图

系统的功能模块图如图4.1所示,核心模块为资讯获取和资讯推荐部分,其中资讯推荐为整个系统中的重中之重。其中资讯获取部分主要是使用WebMagic框架实现的网络爬虫,用以从门户网站中自动获取新的资讯;资讯推荐部分主要使用协同算法。

4.2 数据库设计

4.2.1 数据库物理模型图

系统的数据库物理模型图如图4.2所示。它描述了数据库中系统所涉及到的各个表之间的关系。

4.2.2 数据库存储结构

本课题系统主要的数据库表包括:用户表、资讯表、板块表、用户喜好表、用户评分表、管理员表、敏感词表。具体的数据表结构设计如下。

用户表:负责存储用户信息,主要包括主键、用户名及密码。其表结构如表4.1所示:

属性名 存储代码 类型 长度 备注
编号 id bigint 20 主键、自增
用户名 username text 30
密码 password text 16

资讯表:负责存储资讯的详细信息,主要包括主键、标题、内容、发布时间、板块及点击数。其表结构如表4.2所示:

属性名 类型 存储代码 长度 备注
编号 bigint id 20 主键、自增
标题 text title 65,535
内容 text content 65,535
板块编号 int plateId 11
发布时间 tinytext pub_time 256
点击数 int clickNums 11

板块表:负责存储资讯的板块信息,主要包括主键、板块名。其表结构如表4.3所示:

属性名 存储代码 类型 长度 备注
编号 id int 11 主键、自增
板块名 name text 15

用户喜好表:负责存储用户所喜欢的板块信息。主要包括主键、外键用户ID、外键板块ID。其表结构如表4.4所示:

属性名 存储代码 类型 长度 备注
编号 id bigint 20 主键、自增
用户编号 userId bigint 20
评分 val float 10,2

用户评分表:负责存储用户对新闻的喜好信息。主要包括主键、外键用户ID、外键板块ID、评分。其表结构如表4.5所示:

属性名 存储代码 类型 长度 备注
编号 id bigint 20 主键、自增
用户编号 userId bigint 20
资讯编号 newsId bigint 20
评分 val float 10,2

管理员表:负责存储管理信息,主要包括主键、管理员用户名及密码。其表结构如表4.6所示:

属性名 存储代码 类型 长度 备注
编号 id bigint 20 主键、自增
用户名 username text 30
密码 password text 16

敏感词表:负责存储敏感词信息,主要包括主键、敏感词。其表结构如表4.7所示:

属性名 存储代码 类型 长度 备注
编号 id int 11 主键、自增
敏感词 word tinytext 256

4.3 本章小结

本章主要是对用户需求进行详细划分,对系统的功能模块以及数据库表进行设计。通过本章可以大致了解系统的功能模块有哪些,以及所使用到的表及其结构。

第五章 系统实现与测试

5.1 系统实现说明

系统实现就是对经过需求分析之后的设计结果进行编码与测试。本课题系统的运行及测试环境如下:

  • 操作系统:macOS Sierra 10.12.2

  • 处理器:1.6 GHz Intel Core i5

  • 运行内存:4GB

  • 机身存储:256GB

  • 编程语言:Java

  • 服务器:Tomcat 7.0

  • 浏览器:Google Chrome版本 66.0.3359.139(正式版本)(64 位)

5.2 代码结构

5.2.1 代码结构介绍

整个系统的代码结构如下图所示,其中src/main/java目录下为系统的后台代码部分,总共包括六个子包,其中action包为系统的Controller,负责映射网页请求,并将请求转发至Service包下对应的Service,对用户请求进行处理。其中主要包括处理资讯相关请求的NewsAction类、与用户相关的UserAction类以及与爬虫相关的SpiderAction类。dao包下为程序的数据访问接口文件,主要负责系统数据的持久化工作,其中包括NewsDao、UserDao、PlateDao等接口文件。entity包下为整个系统中的实体类;mapper包下为MyBatis框架下各个dao的映射文件;service包下为系统的服务类;util包下为系统中包含的工具类,其中包括爬虫及推荐算法的实现。

5.2.2 代码结构图

5.3 系统实现

5.3.1 推荐功能的实现

核心推荐功能

本系统中核心推荐功能主要是使用Mahout库中提供的方法,将数据库中记录的用户评分根据协同算法理念,通过使用皮尔森相关系数计算出与用户相关的其他用户,获取与用户关系最近的相邻用户,再通过Mahout提供的通用UBCF推荐器进行推荐。由于协同算法技术发展的成熟性,Mahout库中对协同算法中涉及到的一些计算方法都进行了封装,主要代码如下所示:

  1. // 核心算法功能
  2. public static List<RecommendedItem> recommend(User user,int neighborNum, int recommendedNum){
  3. // 创建MySQL数据源
  4. MysqlDataSource dataSource=new MysqlDataSource();
  5. dataSource.setServerName("localhost");
  6. dataSource.setUser("root");
  7. dataSource.setPassword("mysqlVip847@");
  8. dataSource.setDatabaseName("NEWS");
  9. // 推荐结果集
  10. List<RecommendedItem> recommendations = null;
  11. // 使用数据源读取数据库中的数据
  12. JDBCDataModel dataModel=new
  13. MySQLJDBCDataModel(dataSource,"PREF","userid","newsid","val", "time");
  14. // 对象赋值
  15. DataModel model=dataModel;
  16. // 获取用户相似度,使用皮尔森相关系数算法
  17. UserSimilarity similarity = new PearsonCorrelationSimilarity(model)
  18. // 根据neighborNum获取相邻用户
  19. UserNeighborhood neighborhood = new
  20. NearestNUserNeighborhood(neighborNum,similarity,model);
  21. // 构建基于用户的推荐器
  22. Recommender recommender=new GenericUserBasedRecommender(model,neighborhood,similarity);
  23. // 获取推荐结果集,recommendedNum为推荐结果的数量
  24. recommendations = recommender.recommend(user.getUserId(), recommendedNum);
  25. // 返回推荐结果集
  26. return recommendations;
  27. }

推荐功能调用

本系统中资讯列表的展示主要是通过下面的queryAllByPlateId()方法。其中plateId为板块编号,它来源于主页中侧边栏点击事件,当用户点击左边侧边栏对应板块时,index.js负责获取板块编号,通过jQuery中提供的ajax()方法,将板块编号通过post方式请求listNewsByPlateId.do发送至服务器后台,后台NewsAction中queryByPlateId()方法映射请求连接,并且通过判断plateId参数,获取相应板块的资讯信息,返回至网页浏览器。offset参数为页面控制参数,网页一次性显示30条资讯信息,下拉至底部时更新offset参数,获取下一页资讯。

  1. public List<News> queryAllByPlateId(long plateId,int offset, HttpSession httpSession) {
  2. List<News> list = null;
  3. if(plateId == -1){
  4. User user = SessionUtils.getUser(httpSession);
  5. if(user != null){
  6. list = new ArrayList();
  7. List<RecommendedItem> items =
  8. UserBasedCollaborativeRecommender.recommend(user, 5, 50);
  9. for(RecommendedItem item : items){
  10. long itemId = item.getItemID();
  11. News news = newsDao.queryById(itemId);
  12. list.add(news);
  13. }
  14. }else{
  15. list = newsDao.queryListByRand();
  16. }
  17. }else if(plateId == 0){
  18. list = newsDao.queryAll(offset, 30);
  19. }else{
  20. list = newsDao.queryAllByPlateId(plateId, offset);
  21. }
  22. return list;
  23. }

5.3.2 爬虫的实现

资讯获取处理模块

资讯的获取主要是通过实现WebMagic中PageProcessor接口下的process()方法,来对页面进行过滤和提取,主要是获取需要的资讯板块信息、资讯标题、资讯内容以及资讯的发布时间等。通过分析新浪滚动新闻发现,首次加载请求连接时,页面中只包含资讯的标题、内容和发布时间等信息,资讯的栏目信息是通过js请求异步加载的,所以处理板块请求是process方法中不可缺少的一部分。而通过分析新浪新闻资讯展示页得出了资讯展示页的布局规则,得到了爬虫中资讯信息提取相关的部分。 主要代码如下所示:

  1. // 页面处理方法
  2. public void process(Page page) {
  3. String title = ""; // 资讯标题
  4. String contents = ""; // 资讯内容
  5. String date = ""; // 资讯发布日期
  6. // 判断是否属于资讯详情页
  7. if (!page.getRequest().getUrl().startsWith("http://roll") && page.getHtml().css("div.article") != null) {
  8. // 获取资讯标题
  9. title = page.getHtml().css("h1.main-title", "text").toString();
  10. // 拼接资讯内容
  11. for (String content : page.getHtml().css("div.article p").all()) {
  12. contents += content;
  13. }
  14. // 获取资讯发布日期
  15. date = page.getHtml().css("span.date", "text").get();
  16. // 从爬虫框架中获取栏目信息
  17. Object channelText = page.getRequest().getExtra("栏目");
  18. News news = new News(title, contents, date);
  19. // 将新闻信息和板块名添加
  20. page.putField("news", news);
  21. page.putField("plateName", channelText.toString());
  22. }
  23. // 获取滚动新闻列表中的资讯详情页链接以及对应的板块名
  24. // js请求返回的数据为页面数据,将其转换成String类型进行处理
  25. String text = page.getHtml().$("body", "text").toString();
  26. if (text != null && !text.equals("") && text.startsWith("var")) {
  27. // 截取json对象字符串
  28. text = text.substring(text.indexOf("{") - 1, text.length() - 1);
  29. // 将json字符串转换为json对象,获取资讯列表
  30. JSONArray obj = JSON.parseObject(text).getJSONArray("list");
  31. // 提取资讯列表中的板块及资讯详情链接
  32. for (Object o : obj) {
  33. JSONObject o1 = JSON.parseObject(o.toString());
  34. // 获取链接
  35. String url = o1.getString("url");
  36. // 获取板块信息
  37. JSONObject channelObj = JSON.parseObject(o1.get("channel").toString());
  38. String channel = "";
  39. channel = channelObj.get("title").toString();
  40. // 生成请求
  41. Request r = new Request(url);
  42. site.setCharset("UTF-8");
  43. r.putExtra("栏目", channel);
  44. // 加入抓取列表
  45. page.addTargetRequest(r);
  46. }
  47. }
  48. }

资讯存储模块

WebMagic框架中,对于数据的存储提供了很多的实现方式,其中一种是通过实现Pipeline接口定制自己的数据存储管道。本课题系统通过爬虫获取的资讯信息通过定制的NewsDaoPipeline管道类,将资讯信息存储至数据库中。该管道类主要是调用了资讯以及板块的数据访问接口文件,将数据存入数据库。在存储之前,会对数据进行验证,如果数据已经存在,那么会对已有信息进行更新,当数据不存在于数据库中时,将直接把数据添加至数据库中。NewsDaoPipeline管道类中主要代码processe()方法如下所示:

  1. public void process(ResultItems resultItems, Task task) {
  2. // 获取域中的资讯对象
  3. News newNews = (News)resultItems.get("news");
  4. // 如果域中不存在资讯对象,返回
  5. if(newNews == null) return;
  6. // 通过SpringTools工具类获取数据访问接口
  7. newsDao = (NewsDao) SpringTools.getBean("newsDao");
  8. plateDao = (PlateDao) SpringTools.getBean("plateDao");
  9. // 查询数据库,检验资讯及板块信息是否已存在
  10. News oldNews = newsDao.queryByTitle(newNews.getTitle());
  11. String plateName = resultItems.get("plateName");
  12. Plate plate = plateDao.queryByName(plateName);
  13. long plateId = -1;
  14. // 存储板块信息
  15. if(plate == null){
  16. plate = new Plate();
  17. plate.setName(plateName);
  18. plateDao.add(plate);
  19. plate = plateDao.queryByName(plateName);
  20. }
  21. plateId = plate.getId();
  22. newNews.setPlateId(plateId);
  23. // 存储资讯信息
  24. if(oldNews != null){
  25. oldNews.setContent(oldNews.getContent() + newNews.getContent());
  26. oldNews.setDate(newNews.getDate());
  27. oldNews.setPlateId(newNews.getPlateId());
  28. newsDao.update(oldNews);
  29. }else{
  30. if(!StringUtils.isEmpty(newNews.getTitle()) && !StringUtils.isEmpty(newNews.getContent())){
  31. newsDao.add(newNews);
  32. }
  33. }
  34. }

5.4 系统测试

测试阶段的根本目标是尽可能多地发现并排除软件中潜藏的错误,最终把一个高质量的软件系统交给用户使用。[1]本节将从单元测试、集成测试对系统完成后的测试进行说明。

5.4.1 测试的目的与内容

系统测试是在系统开发时期与系统开发完成后,为保障系统运行的可行性、可靠性、稳定性和正确性,而进行的一些列测试,它旨在发现程序中潜藏的错误,并对错误进行及时的修改,完善系统。

测试内容:

  • 单元测试:在各个模块实现完成以后进行测试,确认各模块是否能够完成其对应功能

  • 集成测试:将各个模块自底向上进行集成,并对各模块组成的集成结果进行测试,确认各个集成单元是否能够完成其对应功能

  • 用户界面测试:确认系统界面是否符合用户需求,页面元素对用户是否会造成影响,页面布局有无错误,页面有无乱码情况

5.4.2 具体测试说明

系统测试是软件开发周期中非常重要的一个时期,为了确保系统能够正常使用,并且能够满足需求分析中规划的各个功能,本系统将通过白盒测试以及UI测试来确认系统功能的实现。测试的内容主要包括确认爬虫能够抓取资讯;确认抓取数据的完整性以及正确性;确认获取的资讯能够按要求存入数据去;确认资讯展示的时候能够正确显示;确认资讯搜索时能正确过滤敏感词;确认资讯能够实现按用户不同得出不同的推荐结果;确认用户登录与注册功能的实现;确认用户能够发布自己的资讯。

5.4.3 测试登录

测试登录界面

用户点击主页右侧的登录按钮,切换至登陆功能模块,结果如图5.2所示:

测试登录成功

用户于登录模块输入用户名及密码,点击登录进行身份验证,验证通过以后将会跳转至主页,并且右侧将会显示用户头像及用户名。测试结果如图5.3所示:

测试登录失败

用数据库中不存在的用户以及用户名或密码错误的账号进行测试,测试结果如图5.4所示:

5.4.4 测试爬虫数据存储

爬虫主要是在后台对新浪滚动新闻页面进行抓取,没有页面显示,下面主要是爬虫存储数据时,部分日志的截图。当抓取的资讯为数据库不存在的数据时,管道类将新数据插入数据库中,部分日志结果如图5.5插入新资讯日志所示:

当新抓取的资讯已经存在于数据库中时,管道类将会对新旧数据进行判断是否重复,然后对数据库中的数据进行更新。部分日志结果如图5.6更新资讯日志所示:

5.4.5 测试资讯相关功能

测试资讯展示

主要测试用户访问网站主页时,能否正确显示资讯列表,测试结果如图5.7所示:

测试点击全部板块按钮

测试选中主页左侧板块列表中的“全部”时,是否显示所有资讯数据。资讯显示按照发布时间降序排序,最新一条资讯应为最近一条抓取数据。测试结果如图5.8所示:

测试点击体育按钮

测试选择主页左侧板列表中的“体育”时,是否显示体育板块下的资讯数据。测试结果如图5.9所示:

测试资讯详情展示

测试用户浏览单条资讯详情,主要看资讯内容能否正确显示。测试结果如图5.10所示:

测试搜索时包含敏感词汇

测试搜索的关键字为敏感词时,能否正确过滤并对用户进行提示。测试结果如图5.11所示:

测试搜索未包含敏感词汇

测试搜索的关键字非敏感词时,能否正确显示搜索结果。测试结果如图5.12所示:

测试未登录时发布资讯

测试用户以游客身份发布资讯时,能否禁止其操作,并作出相应提示。测试结果如图5.13所示:

测试已登录时发布资讯

测试用户登录以后发布资讯时,能否进行发布。测试结果如图5.14所示:

5.4.6 测试推荐功能

测试推荐算法的实现

测试推荐功能模块能否针对某个用户的浏览记录,推荐出资讯。测试结果如图5.15所示:

游客身份推荐结果

测试以游客身份浏览网站,推荐板块能否为其显示推荐结果。测试结果如图5.16所示:

用户vip的推荐结果

测试以用户vip的身份登入系统,推荐板块能否为其显示推荐结果。测试结果如图5.17所示:

用户Wetoria的推荐结果

测试以用户Wetoria的身份登入系统,推荐板块能否为其显示推荐结果。测试结果如图5.18所示:

5.4.7 测试结论

经过一系列测试,本系统基本已经实现需求分析阶段用户提出的需求;软件方面:软件功能较为完整,用户界面简洁大方,符合人性化设计,错误发生时,能正确提示,用户体验较好。由于时间原因以及其它自身因素,就系统功能完整性而言,部分功能还未实现,没有达到预期的效果,推荐结果的精准性以及效率还不够理想。

5.5 本章小结

本章主要说明了系统功能的实现以及测试。系统功能实现对各个模块功能实现及界面进行了说明。系统测试主要是通过白盒测试对系统进行了单元测试以及集成测试,以及通过黑盒测试对整个网站功能进行测试,确保了整个系统能够良好运行,以及符合用户实际需求。

结 论

针对目前实现的资讯网站,得出了以下结论:

首先,从功能的完整性方面来说,整个Web网站能完成课题研究的核心基于协同过滤算法的推荐功能,能够根据用户的历史浏览记录及评分记录,为用户推荐资讯。但是由于个人的所学的不足,以及协同算法本身的限制,推荐结果在精确度方面还不够理想,不能保证推荐的资讯就是用户完全感兴趣的,在精确度方面,网站的建设还需要提升

然后,从用户使用体验方面来说,整个网站需要用户进行的操作不多,足够简单。因为推荐功能需要对用户的浏览行为进行记录,所以注册登录功能是网站所必需的一部分,但用户在进行注册时只需要输入少量的用户信息即可完成注册,这对一些注重隐私保护的用户来说,是极大的便利条件。在整个网站的使用方面,用户所需要做的,仅仅只是选择板块进行咨询的浏览,没有其他多余的操作,及时是评分系统,也是为了对用户喜好做出的一个反馈系统,用户在进行浏览时,也可以不用进行相关操作,只是这样将对推荐结果的精度产生些微的影响。

从网站样式方面来说,整个网站所包含的页面元素非常低,为了突出网站的核心,资讯列表占据整个页面中的绝大部份,将用户的关注点聚焦于资讯列表当中。页面两边的元素中则包括与资讯展示相关的板块列表,以及用户登录相关的操作区域,并且在用户信息展示部分下面,系统留有足够的空间对网站进行扩展,其中就已经完成了热点资讯的推荐,在今后的网站建设中还可以考虑增加多元的推荐结果展示,以及与网站发展相关的广告展示模块。

最后,在网站运营方面,所需要付出的成本较低,仅仅只是服务器的搭建、爬虫的维护以及相关的资讯信息的管理等。

本次课题的研究与开发对于我的技术来说也是有着极大的提升。此次课题研究期间不仅对过去的所学进行了巩固,并且还学到了许多新的技术。通过本次课题的研究首先我学会通过Maven进行搭建基于SSM框架的Web项目;然后在资讯获取功能的研究阶段,对Java语言环境下的WebMagic爬虫框架有了更好的认识;在系统结构方面加深了对MVC三层架构中各个层的作用的理解;学会了通过网络资源解决开发过程中不断遇到的大大小小的问题;开发过程中还实现了自己的Sublime下的日志高亮样式,来针对性的查看项目开发中所遇到的问题;此外还包括Bootstrap等开源框架的使用;以及开发过程中不断积累的单个技术点。此次课题研究过程,对我今后的学习方向提供了指导,该项目的开发让我明白了对于线程,我还只是会创建简单的线程并调用,对如何用线程实现想要的功能没有足够的头绪,这是我今后学习的方向之一。通过此次课题的研究,证明了我有独立完成项目的实力,虽然还有些欠缺,但是在今后不断成长中,我会逐一解决所遇到的问题,像是本课题系统中推荐算法的调用时机以及方式,是我需要考量的,所以今后的学习中,我会加大对代码效率的研究。

参考文献

[1] 张海藩,牟永敏.软件工程导论(第6版)[M].清华大学出版社,2013.

[2] CAY S.HORSTMANN.JAVA核心技术(卷1)—基础知识(原书第9版)[M].机械工业出版社,2014.

[3] CAY S.HORSTMANN.JAVA核心技术—高级特性(卷II)(原书第9版)[M].机械工业出版社,2014.

[4] 孙卫琴.精通Struts:基于MVC的Java Web设计与开发[M].电子工业出版社,1900.

[5] IanF.Darwin,达尔文,李新叶,等.Java经典实例[M].中国电力出版社,2016.

[6] 王先国.UML基础与建模实践教程[M].机械工业出版社,2016.

[7] 贾铁军.软件工程与实践[M].清华大学出版社,2016.

[8] 史蒂芬森,宋丽华.数据库设计解决方案入门经典[M].清华大学出版社,2010.

[9] 颜辉,王艳敏.数据库设计与应用.第3版[M].清华大学出版社,2016.

[10] 张基温,曹渠江.信息系统开发案例[M].北京:清华大学出版社,2003.

[11] Joshua Bloch. Effective Java中文版[M] .北京:机械工业出版社,2009.

[12] 福勒.企业应用架构模式[M]北京:机械工业出版社,2010.

[13] 杨云. SQL Server 2008数据库管理与开发[M]. 清华大学出版社, 2016.

[14] 陈漫红. 数据库原理与应用技术:SQL Server 2008[M]. 北京理工大学出版社, 2016.

[15] 陈锐忠,魏理豪,梁哲恒.基于UML建模的软件测试系统设计[J].电子设计工程,2016,24(21):57-59.

[16] 王丹丹,陈康.软件工程技术现状与发展趋势[J].信息与电脑(理论版),2016(6):50-51.

[17] 唐嘉,何彬彬,郝白东等.智能手环设计方案[J].电子技术与软件工程,2017(24):115-115.

[18] 黄亚辉,叶璐,张旖旎等.一种可刷卡健康手环的设计[J].物联网技术,2015,5(10):53-55.

[19] 肖辉,商建国,张帧等.以云盘为载体的个人健康档案私有云设计方法[J].中国数字医学,2016,11(12):81-83.

[20] 梁秀林.医院信息化建设下健康体检管理系统的功能评价[J].信息系统工程, 2017(5):142-142.

[21] 王彦平,张征宇,郭君.医院健康体检信息系统的应用效果[J].医药卫生:文摘版, 2016(8):00300-00300.

上传的附件 cloud_download 基于协同算法的资讯网站的设计与开发.zip ( 10.24mb, 9次下载 )
error_outline 下载需要13点积分

发送私信

26
文章数
1
评论数
最近文章
eject