目 录
摘 要 I
Abstract II
1 引言 1
1.1选题背景及目的意义 1
1.1.1选题背景 1
1.1.2目的及意义 1
1.2研究现状 2
1.3研究主要内容及结构 3
2 相关理论和开发工具 4
2.1 数据挖掘简述 4
2.2 相关数据挖掘算法概述 4
2.2.1关联规则 4
2.2.2 聚类算法 5
2.2.3 分类算法 5
2.3 文本挖掘概述 6
2.4 开发工具 6
3 系统分析 7
3.1可行性分析 7
3.1.1 技术可行性 7
3.1.2操作可行性 7
3.1.3 经济可行性 7
3.1.4 法律可行性 8
3.2系统流程设计 8
3.2.1 用户注册 8
3.2.2 用户登录 8
3.3性能需求 9
3.4运行需求 10
4 系统设计 11
4.1系统功能设计 11
4.1.1功能概述 11
4.1.2系统功能结构 11
4.2系统用例图 12
4.3数据库设计 13
4.3.1数据库设计原则 13
4.3.2数据库概念设计 13
4.3.3数据库E-R图设计 14
4.3.4数据库表设计 17
5 系统实现 20
5.1数据的采集与预处理 20
5.1.1数据的采集 20
5.1.2数据的预处理 20
5.2用户功能模块的实现 21
5.2.1 用户注册界面 22
5.2.2用户登录界面 22
5.2.3信息修改界面 23
5.2.4添加简历界面 23
5.2.5招聘详情界面 24
5.3管理员功能模块的实现 24
5.3.1管理员登录界面 24
5.3.2下载文档管理界面 25
5.3.3岗位管理界面 25
5.3.4会员管理界面 26
5.3.5企业管理界面 26
5.3.6企业分类管理界面 26
5.4企业功能模块的实现 27
5.4.1发布招聘信息界面 27
5.4.2招聘管理界面 27
6 系统测试 29
6.1功能测试 29
6.2可用性测试 29
6.3测试步骤 30
6.4测试结果分析 30
总 结 31
致 谢 32
参考文献 33
3 系统分析
3.1可行性分析
基于B/S架构的就业双向推荐系统的设计与实现主要目标是用户的求职以及企业的招聘。在确定了目标后,我们从以下四方面对能否实现本系统目标进行可行性分析。
3.1.1 技术可行性
基于B/S架构的就业双向推荐系统的开发基于SSM框架,主要包括前端应用程序的开发以及后台数据库的建立和维护两个方面。对于应用程序的开发要求具备功能要完备、使用应简单等特点,而对于数据库的建立和维护则要求建立一个数据完整性强、数据安全性好、数据稳定性高的库。
本系统主要采用JSP和MYSQL数据库作为设计工具,学习起来非常容易并且使用便利。大学时,我就已经掌握了JSP的主要知识,也对MYSQL数据库的操作进行了系统的学习。本系统从整体上看设计起来比较容易,本系统开发的重点就是对数据库的设计和操作。在大学对软件工程,软件测试,UML统一建模语言等课程进行过系统的了解,也能够对这些课程进行开发,拥有一定的系统辨别、开发和检验能力。JSP以及MYSQL结合起来开发一套基于B/S架构的就业双向推荐系统,必定是可行并且高效的。
3.1.2操作可行性
基于B/S架构的就业双向推荐系统的注册登录界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用JSP语言开发,基于SSM框架,这些开发环境使系统更加完善。本系统具有易操作、易管理、交互性好的特点,在操作上是非常简单的。因此本系统可以进行开发。
3.1.3 经济可行性
基于B/S架构的就业双向推荐系统是基于SSM框架,采用MYSQL数据库储存数据,所要求的硬件和软件环境,市场上都很容易浏览过,程序开发主要是管理系统的开发和维护。所以程序在开发人力、财力上要求不高,而且此系统不是很复杂,开发周期短,在经济方面具有较高的可行性。
3.1.4 法律可行性
此基于B/S架构的就业双向推荐系统是自己设计的管理系统,具有很大的实际意义。开发环境软件和使用的数据库都是开源代码,因此对这个系统进行开发与普通的系统软件设计存在很大不同,没有侵权等问题,本文转载自http://www.biyezuopin.vip/onews.asp?id=14106在法律上完全具有可行性。
综上所述,基于B/S架构的就业双向推荐系统的设计与实现在技术、经济、操作和法律上都具有很高的可行性,开发此程序是很必要的。
基于B/S架构的就业双向推荐系统主要分为三个用户角色,分别是用户,企业用户和管理员,其具体功能如下:
用户:用户可以查看网站信息,主要包括首页,招聘信息,在线企业,新闻资讯,文件下载,产业布局,关于我们,注册登录,与我相关(我的简历库,添加简历,应聘记录,我的收藏夹),账户信息(账户信息,登录密码修改,信息修改)。
企业用户:企业用户登录后主要功能是招聘管理(招聘管理,发布招聘信息,岗位管理),账户管理(修改密码,账户信息,编辑信息)。
管理员:管理员登录后主要功能有网站资讯(下载文档管理,新闻资讯管理,发布新闻资讯,新闻栏目,系统公告管理,岗位管理,会员评论管理),系统用户(会员管理,企业管理,企业分类管理,后台用户管理),网站设置(网站导航管理,首页栏目管理,系统公告管理,首页轮播图管理,系统设置管理),账户管理(修改密码,账户信息,编辑信息)。
package com.daowen.uibuilder;import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.Iterator;
import java.util.List;import com.daowen.jdbc.simplecrud.Adapter;
import com.daowen.jdbc.simplecrud.BeanListHandler;
import com.daowen.jdbc.simplecrud.SimpleJdbc;
import com.daowen.jdbc.simplecrud.MybatisAdapter;
import com.daowen.ssm.simplecrud.TableMetadata;
import com.daowen.util.NameUtil;public abstract class UibuilderBase<T>{private SimpleJdbc simpleDao=null;private String lanmuclassname ="";private TableMetadata tm=null;public String getLanmuclassname() {return lanmuclassname;}public Class<T> getEntityClass() {Type type=getClass().getGenericSuperclass();if(type instanceof ParameterizedType){return (Class<T>)((ParameterizedType)type).getActualTypeArguments()[0];}return null;}public void setLanmuclassname(String lanmuclassname) {this.lanmuclassname = lanmuclassname;}private String textfieldname;private String imagefieldname;public UibuilderBase(String lanmuclassname,String textfieldname,String imagefieldname){this.lanmuclassname=lanmuclassname;this.textfieldname=textfieldname;this.imagefieldname=imagefieldname;Adapter adapter=new MybatisAdapter("applicationContext.xml", "sqlSessionFactoryBean");this.simpleDao=new SimpleJdbc(adapter);tm=TableMetadata.forClass(getEntityClass());}/*** * @param topcount* @param lanmudes* @return*/public String buildImageLanmu(String filter,int topCount,String lanmudes){List list=null;String sql="";if(topCount>0)sql=MessageFormat.format("select * from {0} {1} limit {2} ",tm.getTableName(),filter,topCount );elsesql=MessageFormat.format("select * from {0} {1} ",tm.getTableName(),filter );try {list=simpleDao.query(sql, new BeanListHandler(getEntityClass()));} catch (SQLException e) {e.printStackTrace();}return buildImageLanmu(list, lanmudes);}/*** * @param topcount* @param lanmudes* @return*/public String buildTextLanmu(String filter,int topCount,String lanmudes){String sql=MessageFormat.format("select * from {0} {1} limit {2} ",tm.getTableName(),filter,topCount );List list=null;try {list = simpleDao.query(sql, new BeanListHandler(getEntityClass()));} catch (SQLException e) {e.printStackTrace();}return buildTextLanmu(list, lanmudes);}/*** * @param list 构建数据源* @param lanmudes 栏目描述信息* @return*/public String buildImageLanmu(List list,String lanmudes ){StringBuffer sb=new StringBuffer();int i=0;sb.append(MessageFormat.format("<div class=\"{0}\">",lanmuclassname));sb.append("\r\n");//栏目标题sb.append(MessageFormat.format("<div class=\"title\"><strong>{0}</strong></div>",lanmudes));//sb.append("<div class=\"content\">");sb.append("<div class=\"image-items\">");for(Iterator iterator = list.iterator();iterator.hasNext();){Object object=iterator.next();sb.append(" <div class=\"image-item image-size\">");sb.append("\r\n");String id="";String texfieldvalue="";String imagefieldvalue="";try {id = object.getClass().getMethod("get"+NameUtil.toFirstUpper("id"), null).invoke(object, null).toString();texfieldvalue=object.getClass().getMethod("get"+NameUtil.toFirstUpper(textfieldname), null).invoke(object, null).toString();imagefieldvalue=object.getClass().getMethod("get"+NameUtil.toFirstUpper(imagefieldname), null).invoke(object, null).toString();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} sb.append(MessageFormat.format("<a href=\"{0}info.jsp?id={1}\">",tm.getTableName(),id));sb.append(MessageFormat.format("<img src=\"{0}\"/> ",imagefieldvalue));sb.append("</a>");sb.append("\r\n");sb.append(MessageFormat.format("<div class=\"text-info\"><a href=\"{0}info.jsp?id={1}\">{2}</a></div>",tm.getTableName(),id,texfieldvalue));//end image-itemsb.append("</div>");i++;}//end of images-itemssb.append("</div>");//end of contentsb.append("</div>");sb.append("\r\n");//end of lanmusb.append("</div>");return sb.toString();}/*** * @param list 构建数据源* @param lanmudes 栏目描述信息* @return*/public String buildTextLanmu(List list,String lanmudes ){StringBuffer sb=new StringBuffer();int i=0;sb.append(MessageFormat.format("<div class=\"{0}\">",lanmuclassname));sb.append("\r\n");//栏目标题sb.append(MessageFormat.format("<div class=\"title\"><strong>{0}</strong></div>",lanmudes));//sb.append("<div class=\"content\">");sb.append("<ul>");for(Iterator iterator = list.iterator();iterator.hasNext();){Object object=iterator.next();sb.append(" <li >");sb.append("\r\n");String id="";String texfieldvalue="";String imagefieldvalue="";try {id = object.getClass().getMethod("get"+NameUtil.toFirstUpper("id"), null).invoke(object, null).toString();texfieldvalue=object.getClass().getMethod("get"+NameUtil.toFirstUpper(textfieldname), null).invoke(object, null).toString();imagefieldvalue=object.getClass().getMethod("get"+NameUtil.toFirstUpper(imagefieldname), null).invoke(object, null).toString();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} sb.append(MessageFormat.format("<a href=\"{0}info.jsp?id={1}\">",tm.getTableName(),id));sb.append(MessageFormat.format("{0} ",texfieldvalue));sb.append("</a>");sb.append("\r\n");//end text-itemsb.append("</li>");i++;}//end of text-itemssb.append("</ul>");//end of contentsb.append("</div>");sb.append("\r\n");//end of lanmusb.append("</div>");return sb.toString();}}