第1章 绪 论
-
- 1.1 课题背景和意义
全国普通高校的扩招从1999年开始,四年之后的2003年高校扩招还在继续,增长数量和种类也在扩大,大批的大学毕业生面临找工作难的问题。这一问题在大学也不例外,大量的毕业生的求职信息不能及时的被招聘单位所得知,毕业生也没有办法知道更多的招聘信息。这一问题的其它原因还有:许多招聘会都在大城市集中举行,大学生不可能到达每一个招聘会现场。另一方面,许多招聘单位需要招聘员工,但是出于一些原因的考虑,也不可能到每个招聘会现场甚至每所高校去进行招聘。所以形成这样一种现状:一方面,许多大学毕业生找不到工作;另一方面,许多招聘单位招聘不到自己需要的人才。招聘和求职已经成为当今社会一大重要问题。
因此,这就需要一种既方便学生求职,又方便企业招聘的平台,即招聘网站。大学毕业生人才信息网则完全是为了方便学生求职和企业招聘。在该网站中,学生和企业可以花最小的代价,在最短的时间内查询最多的招聘和求职信息,完成求职与招聘。因此,该网站的建设势必得到广大大学生和企业的支持。
目前,国内的几大网站都提供了就业方面的网页,国内也有专门的就业网站,但是这些网站的侧重点不是仅为毕业生服务的,而是提供了广泛的就业导航,针对性较弱。
-
- 1.3 系统总体要求
此次设计的大学毕业生人才信息网是在计算机网络上,利用数据库和先进的开发平台,配置一定的软件和硬件,开发的一个网上招聘和求职系统。该系统具有开放的体系结构、易扩充、易维护、具有良好人机交互界面的特点。它主要分为三个模块:个人简历生成与管理子系统、求职信息的发布与管理子系统、招聘信息的发布与管理子系统。其主要功能是包括:用户在线注册,生成个人简历,发布招聘信息和发布求职信息。
本文作者负责的是招聘信息的发布与管理子系统的设计。设计的主要内容是:通过网上调研了解一个人才信息网的运作过程;实现对招聘单位的基本信息进行注册和管理;实现招聘单位发布招聘信息和管理招聘信息;实现招聘单位在站内收发邮件;实现招聘单位对学生信息的查询和收藏;实现管理员对站内会员信息的管理。
-
- 1.4 开发工具介绍
本次设计的实现主要需要JSP和Dreamweaver以及Microsoft SQL Server 2000等相关技术和工具的支持。
JavaServer Pages (JSP) 技术提供了一种简单快速的方法来创建显示动态生成内容的 Web 页面。由业界处于领先地位的 Sun 公司制定了相关的 JSP 技术规范,该规范定义了如何在服务器和 JSP 页面间进行交互,还描述了页面的格式和语法。
JSP 技术的工作原理:JSP 页面使用 XML 标签和 scriptlets(一种使用 Java 语言编写的脚本代码),封装了生成页面内容的逻辑。它将各种格式的标签(HTML 或者 XML)直接传递回响应页面。通过这种方式,JSP 页面实现了页面逻辑与其设计和显示的分离。JSP 技术是 Java 系列技术的一部分。JSP 页面被编译成 servlets,并可能调用 JavaBeans 组件(beans) 或 Enterprise JavaBeans 组件(企业 beans),以便在服务器端处理[2]。
JSP 页面是 web 开发人员使用 JSP 内置标签和自定义标签,结合其他静态标签(HTML 或 XML 标签)生成的页面。JSP 页面的扩展名为 .jsp 或.jspx,web 服务器通过此扩展名通知 JSP 引擎处理该页面中的元素。通过部署描述文件 web.xml,也可使用其他扩展名和 JSP 引擎联系。通过 JSP 引擎解释 JSP 页面中的标签,生成所需内容。JSP 页面通常被编译成 Java 平台 servlet 类。因此,JSP 页面的运行需要有能支持 Java 平台 servlet 规范的 Java 虚拟机。JSP 页面实际上只是在第一次被调用的时候被编译一次。页面被编译成 Java Servlet 类 ,并驻留在服务器内存中,这样以后调用该页面时将很快[3]。
JSP的优点是:可移植性,支持多种平台,可以使用多种WEB服务器(Apache,IIS,PWS);使用JAVA脚本语言,面向对象的编程思想;JSP组件是跨平台可重用的;可伸缩性好,可由多台服务器进行集群和负载均衡、事务处理及消息处理;多种功能强大的开发工具。因此,JSP 技术在构建可升级的基于 web 的应用程序时扮演了重要角色[4]。
Dream weaver是Macromedia公司出产的一套专业级的网页编辑软件,它使用图形用户接口,能轻而易举地以所见即所得的方式编辑网页,具有即时编辑HTML源代码、制作Dynamic HTML的源代码、层叠式样式表(Cascading Style Sheet,CSS)、Layer、Timeline(时间轴)、Library(共享库)、Template(模板)、网站管理功能,它是一套脱离一般风页编辑器框架的亿秀网页管理与制作工具,能够最大限度减轻网站管理员的负荷。
Dreamweaver具有强大的网页编辑功能,它集成了完善的文字编辑窗口,方便用户编辑网页源代码,并能方便地对JavaScript进行编辑、修改等操作。同步化的网页设计与HTML源代码的查看功能,增加了用户操作的易用性、全新的版面配置设计、对象自动分类管理、与Fireworks4的充分结合、提供内置的Flash文字与按钮等功能,更加强化了Dreamweaver的实用性与可操作性[5]。
SQL Server 2000是Microsoft公司推出的大型数据库管理系统,它建立在成熟而强大的关系型基础上,可以很好的支持客户机/服务器网络模式,能够满足各种类型的企事业单位对构建网络数据库的需求。它具有易用性、可扩展性、可靠性等特点,是目前使用最为广泛、普及率最高的数据库管理系统之一[6]。
Tomcat是一个免费的开源的Serlvet容器。在Tomcat中,应用程序的部署很简单,只需将WAR放到Tomcat的webapp目录下,Tomcat会自动检测到这个文件,并将其解压。在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。Tomcat不仅仅是一个Servlet容器,它也具有传统的Web服务器的功能[7]。
第2章 系统需求分析
定义总体要求,作为用户和开发人员之间相互了解的基础;提供性能要求、初步设计和对用户影响的信息,作为开发人员进行设计和实施的基础;作为总体验证和确认的依据。
系统介绍,系统的功能性需求,系统的非功能性需求。
招聘和求职已经成为当今社会一大重要问题。大学每年都有数千毕业生走出学校,面临求职,而每年也有许多企业需要招聘大量的人才。开发此系统就是为了方便企业和个人更好的在网上进行招聘和求职活动。
-
- 2.2 系统概述
大学毕业生人才信息网主要分为三个模块:个人简历生成与管理子系统、求职信息的发布与管理子系统、招聘信息的发布与管理子系统。其主要功能是包括:用户在线注册,生成个人简历,发布招聘信息和发布求职信息。本文作者主要负责的是招聘信息的发布与管理子系统。
大学毕业生人才信息网系统的用户分为学生用户和企业用户,用户注册登陆以后,可以分别进行创建简历、发布和管理求职信息、查询企业及其招聘信息、发布和管理招聘信息、查询学生及其求职信息。系统的总体工作流程如图2.1所示:
图2.1 系统总体流程图 |
-
-
- 2.3.2 招聘信息的发布与管理系统功能需求
-
招聘信息的发布与管理子系统的系统流程图如图2.2所示,功能实现如下:
企业首先进入大学毕业生人才信息网,如果企业还不是该网站的会员,就先注册然后登陆,如果企业已是会员则直接登陆。
企业注册时,要登记自己企业的基本信息,经管理员核实无误后注册成功。基本信息中除了会员账号、密码外,其他信息都可以被其他用户查看。
企业登陆后,可以进行职位管理,即可以根据需要,新增职位信息;可以对已发布的职位信息进行修改、删除等操作。企业还可以进行人才查询,在查询人才时,可以直接在网页上根据专业、姓名等条件查询自己需要的人才,还可以收藏人才信息,同时还可以向人才发送邮件。
“企业信息记录”主要记录企业的基本信息。
“学生信息记录”主要记录学生的基本信息。
图2.2 招聘信息的发布与管理系统流程图
在招聘信息的发布与管理系统中,主要要用到以下几个表所记录的数据信息:
企业信息表(结构见附录),主要记录企业的基本信息,主要包括:企业ID、密码、企业名称、联系人、联系电话、E-mail、企业地址、所在城市、企业规模、经营性质、所属行业、企业简介;
职位表(结构见附录),主要记录企业发布的招聘信息,主要包括:职位名称、企业名称、工作地点、招聘人数、招聘要求、发布日期、截止日期、月薪;
收藏夹表(结构见附录),主要记录企业收藏的人才信息,主要包括:学生ID、姓名、性别、年龄、专业、学历、企业ID;
信件表(结构见附录),主要记录学生和企业发送的站内信件信息,主要包括:收信人、发信人、标题、发信时间、内容、编号,企业可以从中收到学生发给自己的站内信件。
-
-
- 2.3.4 系统的准确性和及时性
-
系统处理的准确性和及时性是系统的必要性能。在系统设计和开发过程中,要充分考虑系统当前和将来可能承受的工作量,使系统的处理能力和响应时间能够满足用户对信息处理的需求。
系统的查询功能对于整个系统的功能和性能完成举足轻重。企业和学生都希望从该网站上查询到自己需要的信息,其查询结果的准确性在很大程度上决定了招聘和求职活动的成败。
-
- 2.4 系统的非功能性需求
对用户友好,且对鼠标键盘提供支持,保持一致性,设计完整的对话过程,提供简单的操作过程和错误处理机制。
操作系统:Windows NT/2000/XP/2003/98/95
数据库管理系统:SQL Server
硬件要求:CPU P3, 64M以上 RAM
第3章 系统方案设计
-
- 3.1 系统总体设计
根据需求分析,大学毕业生招聘信息的发布与管理系统可以分解为前端网页和后台数据库两大部分。采用的数据库是Microsoft SQL Server 2000,建立JOB.MDF数据库文件。网页的制作采用JSP技术,以Dreamweaver为开发工具,并使用先进的数据库连接池技术JDBC对数据库进行访问。
-
- 3.2 系统模块
根据系统的功能,可以将系统划分如图3.1所示。
图3.1 模块划分图
对于图3.1中的各个功能模块具体描述如下:
基本信息管理:企业注册登陆后,即可以对自己的注册信息进行修改。
招聘信息管理:企业登陆以后,即可发布、修改、删除自己的招聘信息。
邮件管理:企业登陆以后,即可向自己感兴趣的人才发送招聘信件,同时还可以收取其他人发给自己的信件,或者回复,或者删除。
人才信息管理:企业登陆以后,即可根据自己的要求查询人才信息,对于感兴趣的人才,还可以将其收藏到人才收藏夹中,当然,企业也可以把收藏夹中的任意一条人才信息删除掉。
以上所有功能都是对会员企业即已注册的会员而言,对于还没有注册的企业,他们就不能享有这些权限,他们只能查看基本的学生求职信息和网站中公布的消息。
-
- 3.3 系统方案论证
数据库Microsoft SQL Server 2000提供了各种各样的特性来管理数据,它是真正的客户机/服务器体系结构,它提供图形化用户界面,使系统管理和数据库管理更加直观、简单,为JSP提供了专门的连接数据库的ODBC-JDBC驱动程序[8]。
JSP的优点是可移植性,支持多种平台,可以使用多种WEB服务器(Apache,IIS,PWS),JSP组件是跨平台可重用的,可伸缩性好。JSP 技术由于使用可重用的组件和标签取代了对页面本身脚本语言的严重依赖,JSP 技术大大加快了开发的速度,减少了系统开发的工作量 [9]。
Tomcat服务器支持全部JSP以及Servel规范,是免费的Web服务器,它不仅提供了静态的HTML网页,它也可以运行程序来响应用户的请求,并将动态产生的结果传回到用户的浏览器。因此将Tomcat当作Web服务器是很好的选择。
此次开发的大学毕业生招聘信息的发布与管理系统具有企业注册、登陆、管理基本信息、管理招聘信息、管理邮件、管理人才信息和管理员管理会员信息等功能。其中除了管理邮件以外的其他功能与目前社会上的其它招聘网站都是大相径庭。管理邮件功能的特别之处在于,在本系统中,企业和人才之间发送的都是站内邮件,而并没有使用邮件服务器,这就大大减小了系统的运行负担,同时还加快了系统的响应时间。另外,这还大大方便了用户。因为在其它招聘网站中,用户虽然可以在本站中发送E-mail,但是收取E-mail时就得到其它E-mail网站去读取。在本网站中,用户在站内就可以完成发送和收取E-mail动作。
另外,本系统对用户友好,且对鼠标键盘提供支持,保持一致性,设计了完整的对话过程,提供了简单的操作过程和错误处理机制。所有用户都可以在提示下轻松的完成所有的操作过程。
与传统的招聘方式相比,本系统在扩大了企业招聘信息的发布范围,增大了企业选择人才的机会的同时,还缩短了企业招聘的周期,简化了企业招聘的过程,更是减少了企业在招聘中的开销。它是方便企业进行招聘的良好平台。
另外,系统运行所需要的硬件条件在今天是很容易得到满足的。作为其开发和运行的软件工具也是再普遍不过了的。因此,此系统在经济上是完全可行的。
因此,从以上的分析可以看出,数据库采用Microsoft SQL Server 2000,网页设计采用JSP技术,以Tomcat为Web服务器,采用B/S体系结构设计本系统,无论是在功能上、技术上还是在经济上都是不错的设计方案。
第4章 系统实现
-
- 4.1 概论
本系统从功能设计上大概可以分为以下几个模块:企业注册登陆、管理基本信息、管理招聘信息、管理邮件、管理人才信息、管理员管理会员信息和首页等。
-
- 4.2 首页的设计
在系统的首页中,企业可以看到部分求职招聘信息和站内消息。首页包括登陆窗口、信息窗口等。实现的方法是,利用JSP技术,以Dreamweaver为开发工具进行网页设计。设计好的部分界面效果如图4.1所示。
图4.1 首页效果图
其中,“企业招聘”和“人才求职”所显示的信息是直接从数据库中读取的。读取的方法是利用JDBC-ODBC桥访问SQL数据库[10],从JOB数据库的“职位”表的最后一条记录开始,连续向前读出十条记录显示在网页上。JDBC驱动程序是:
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
显示企业招聘信息的关键代码如下:
try{ //相应JDBC驱动程序的连接串
conn=DriverManager.getConnection("jdbc:odbc:job");
stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,//指定ResultSet对象是可滚动的
//指定ResultSet对象不能修改数据库
ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery("SELECT*FROM 职位");//数据查询
//设置输出的表格边框宽度为0,即在网页上不显示表格
out.print("<TABLE BORDER='0'>");
//使用ResultSet的absolute()方法直接定位到最后一条记录上
rs.absolute(-1);
//从最后一条记录开始,连续输出十条记录
for(int i=1;i<=10;i++){
//在显示的记录上添加超连接
out.print("<TR><TD><a href='view1.jsp?id="+rs.getString("职位名
称")+"'>"+rs.getString("职位名称")+"</a></TD>");
out.print("<TD>"+rs.getString("企业名称")+"</TD></TR>");
if(!rs.previous()) break; }
out.print("</TABLE>"); } ……%>
用户如果对某条信息比较感兴趣,只要单击该条记录的超连接就可以查看详细信息。实现显示人才求职信息的代码与上面的相似。
-
- 4.3 企业注册登陆的实现
由于在本系统中考虑到会员与非会员之间权限不同的问题,企业要在本系统中完成招聘活动,就必须注册为会员并登陆。
新到的非会员企业进入首页以后,选择“新用户注册”,即进入了注册界面。注册界面如图4.2所示。企业将自己的注册信息一一填写在该页面中,为了防止企业在填写注册信息时漏填信息,特编写了check()函数,函数代码如下:
<SCRIPT language=javascript>
<!--
function datacheck(){
if(frmRegist.qiyeid.value==""){
window.alert("请输入会员帐号");
document.frmRegist.elements(0).focus();
return;}
…//其余的代码类似
frmRegist.submit();
} --> </SCRIPT>
图4.2 注册界面
注册实现方法是,利用request.getParameter(“”)方法把企业填入注册界面的信息一一读取下来,并把值一一赋给定义好的自变量(如:qiyeid1,qiyepassword1,qiyename1等)。然后通过下面的程序把这些值写入JOB数据库的“企业注册”表里。实现注册的关键代码如下:
<%
//定义一系列自变量
try{ //相应JDBC驱动程序的连接串
conn = DriverManager.getConnection("jdbc:odbc:job");
//结果集类型和结果集并发性为默认值
stmt=conn.createStatement();
//检测企业注册的会员号是否已存在
rs=stmt.executeQuery("SELECT * FROM 企业注册 where 会员ID ='"+qiyeid1+"'");
while(rs.next()){ count++; }
if(count>0){
//如果企业注册的会员号已存在,则转如企业注册失败界面,并提示企业
response.sendRedirect("zhuceshibai1.htm"); }
//实现注册,注册信息写入数据库
pst = conn.prepareStatement("INSERT INTO 企业注册(会员ID, 密码, 企业名称, 联系人, 联系电话, [E-mail], 企业地址, 所在城市, 企业规模, 经营性质, 所属行业, 企业简介)"+ "VALUES('"+qiyeid1+"','"+qiyepassword1+"','"+qiyename1+"','"+lianxiren1+"','"+lianxiphone1+"','"+qiyeyouxiang1+"','"+qiyeaddress1+"','"+qiyechengshi1+"','"+qiyeguimo1+"','"+qiyexingzhi1+"','"+qiyehangye1+"','"+qiyejianjie1+"')");
pst.executeUpdate();
//提示企业注册成功
response.sendRedirect("zhuceok1.htm"); }
…… %>
会员企业进入首页后,在登陆窗口中填写好用户名和密码,选择“单位/企业”,然后登陆。实现的方法是利用request.getParameter(“”)方法把企业填入登陆框的用户名和密码读取下来,并把值赋给定义好的自变量myuserid和myuserpass,然后到JOB数据库的“企业注册”表中查询是否存在用户名和密码与企业输入的相同的记录,如果有(即rs.next()值为真)的话,则登陆成功,否则登陆失败。实现登陆的关键代码如下:
<% //提示企业要选择登陆类型,否则登陆失败
if(type.equals("选择登陆类型")) {
response.sendRedirect("denglushibai1.htm");}
if(type.equals("单位/企业")) {
try{ …
//获得企业从界面中输入的用户名和密码
myuserid=request.getParameter("userid");
myuserpass=request.getParameter("userpassword");
if(myuserid==null)
myuserid="";
//SQL查询语句
mySQL = "SELECT * FROM 企业注册where 会员ID ='"+myuserid+"'";
mySQL = mySQL + "and 密码 ='"+myuserpass+"'";
try{ //相应JDBC驱动程序的连接串
conn=DriverManager.getConnection("jdbc:odbc:job");
//结果集类型和结果集并发性为默认值
stmt=conn.createStatement();
rs=stmt.executeQuery(mySQL);//数据查询
// rs.next()方法是移动到结果集的下一行,如果结果集没有下//一行返回false,否则返回true
while(rs.next()) {
count++;}
//登陆成功,进入企业信息管理,同时将企业用户名保存在//session对象中
if(count>0) {
session.setAttribute("name1",myuserid);
response.sendRedirect("qiyeguanli.jsp"); }
//登陆失败,提示用户名或密码不正确
else response.sendRedirect("denglushibai2.htm"); }
-
- 4.4 管理基本信息的实现
企业登陆以后,即进入了企业信息管理控制台。当企业需要修改自己的注册信息的时候,可以选择“修改注册信息”。企业即进入修改注册信息的界面,界面如图4.3所示。
在这个页面里,利用JDBC-ODBC桥访问SQL数据库,从JOB数据库的“企业注册”表里,利用SQL语句SELECT * FROM 企业注册where 会员ID ='"+myuserid+"'把该企业旧的信息记录全部读出来显示在界面里。其中从表中读出数据的语句是rs.getString(),另外myuserid的值等于企业登陆是保存在session对象中的值,实现的语句是myuserid=(String)session.getAttribute("name1") 。
图4.3 修改注册信息界面
企业可以根据需要修改界面中的某一些信息,实现修改注册信息的方法是利用request.getParameter(“”)方法把修改注册信息界面的信息一一读取下来,并把值一一赋给定义好的自变量(如:qiyepassword2,qiyename1等),然后利用JDBC-ODBC桥连接SQL数据库,更新“企业注册”表中会员ID等于str的这条记录。其中str=(String)session.getAttribute("name1")。更新时,要首先检测用户输入的旧密码是否与原来的密码一致,只有当密码一致的时候,才能执行修改,否则修改失败。实现的关键代码如下:
<% ……
try{ //相应JDBC驱动程序的连接串
conn = DriverManager.getConnection("jdbc:odbc:job");
//得到当前事务设定的值
defaultCommit=conn.getAutoCommit();
//将自动事务设置为false
conn.setAutoCommit(false);
stmt=conn.createStatement();
//检测输入的旧密码是否正确,若不正确,修改失败
rs=stmt.executeQuery("SELECT*FROM 企业注册 where 会员ID ='"+str+"'and 密码='"+qiyepassword2+"'" );
if(!rs.next()){
response.sendRedirect("xiugaishibai.htm");}
//数据操作,更新“企业注册”表中的记录
stmt.executeUpdate("UPDATE 企业注册 SET 密码='"+qiyepassword3+"',企业名称='"+qiyename1+"',联系人='"+lianxiren1+"',联系电话='"+lianxiphone1+"',[E-mail]='"+qiyeyouxiang1+"',企业地址='"+qiyeaddress1+"',所在城市='"+qiyechengshi1+"',企业规模='"+qiyeguimo1+"',经营性质='"+qiyexingzhi1+"',所属行业='"+qiyehangye1+"',企业简介='"+qiyejianjie1+"'WHERE 会员ID='"+str+"'");
conn.commit();
response.sendRedirect("xiugaiok1.htm");}
catch(Exception e){ //如果发生异常,实现回滚
conn.rollback();
e.printStackTrace(); } %>
-
- 4.5管理招聘信息的实现
企业进入信息管理控制台后,可以发布、修改、删除招聘信息。
企业根据页面提示填写招聘信息(职位名称、企业名称、工作地点、招聘人数、招聘要求、发布日期、截止日期),其中职位名称为下拉菜单,规范了企业填写的职位名称。填写的招聘信息通过企业点击“发布”而保存到数据库中。页面如图4.4所示。
图4.4 发布招聘信息界面
实现的方法是利用request.getParameter(“”)方法把发布招聘信息界面的信息一一读取下来,并把值一一赋给定义好的自变量(如: zhiweiname1,qiyename1,gongzuodidian1等),然后利用JDBC-ODBC桥连接SQL数据库,把数据插入到“职位”表中。关键代码如下:
try{ …
//检测企业是否以自己的名义发布招聘信息
rs=stmt.executeQuery("SELECT * FROM企业注册where 企业名称 ='"+qiyename1+"'");
// rs.next()方法是移动到结果集的下一行,如果结果集没有下
//一行返回false,否则返回true
while(rs.next()){ count++; }
// rs.next()方法返回了false,企业没有以自己的名义发布招聘信息,所//以不能发布招聘信息
if(count==0){
response.sendRedirect("fabushibai1.htm"); }
// rs.next()方法返回了true,将数据插入到数据库,企业成功发布招聘信//息
pst = conn.prepareStatement("INSERT INTO 职位(职位名称,企业名称,工作地点,招聘人数,招聘要求,发布日期,截止日期)"+"VALUES (?,?,?,?,?,?,?)");
pst.setString(1, zhiweiname1);
…//其余代码类似
pst.executeUpdate();
response.sendRedirect("fabuok1.htm");}
catch(SQLException e){
System.out.println(e.getMessage());}
企业修改招聘信息时,首先进入如图4.5所示的界面。在该页面中,利用JDBC-ODBC桥访问SQL数据库,从JOB数据库的“职位”表中读出所有企业名称为该企业名称的记录,并把这些记录显示在页面中。在每一条记录后面都设置一个单选按钮,设置单选按钮的程序是:
<input name="zhiweiname" type="radio" value="<%=zhiweiname[i]%>">。
当企业选择修改某条招聘信息时,则从JOB数据库的“职位”表中根据招聘职位和企业名称读出该条招聘信息的详细信息显示在网页中,由企业决定修改其中的某些信息。读出某条招聘信息记录的SQL语句是
String str=(String)session.getAttribute("name2")
String zhiweiname = request.getParameter("zhiweiname")
SELECT*FROM 职位 WHERE 职位名称='"+zhiweiname+"'and 企业名称='"+str+"'
图4.5 修改招聘信息界面
实现企业修改招聘信息的方法是,利用request.getParameter(“”)方法把企业修改后的招聘信息从页面中一一读取下来,并把值一一赋给定义好的自变量(如: zhiwei1,qiyename1,didian1等),然后利用JDBC-ODBC桥连接SQL数据库,更新“职位”表中职位名称等于zhiwei1企业名称等于str的这条记录,其中str=(String)session.getAttribute("name2")。实现修改功能的关键代码为:
//SQL语句
mySQL="UPDATE 职位 SET 职位名称='"+zhiwei1+"',企业名称='"+qiyename1+"',工作地点='"+didian1+"',招聘人数='"+renshu1+"',招聘要求='"+yaoqiu1+"',发布日期='"+faburiqi1+"',截止日期='"+jiezhiriqi1+"'WHERE 职位名称='"+zhiwei1+"'";
mySQL=mySQL+"and 企业名称='"+str+"'";
try{ …
try{//相应JDBC驱动程序的连接串
conn = DriverManager.getConnection("jdbc:odbc:job");
//得到当前事务设定的值
defaultCommit=conn.getAutoCommit();
//将自动事务设置为false
conn.setAutoCommit(false);
stmt=conn.createStatement();
stmt.executeUpdate(mySQL); //数据操作,更新“职位”表中的记录
conn.commit();
response.sendRedirect("xiugaizhaopinok1.htm");}
catch(Exception e){
conn.rollback();//如果发生异常,实现回滚
e.printStackTrace();}
企业删除招聘信息时,首先进入如图4.6所示的界面。在该页面中,利用JDBC-ODBC桥访问SQL数据库,从JOB数据库的“职位”表中读出所有企业名称为该企业名称的记录,并把这些记录显示在页面中。在每一条记录后面都设置一个复选按钮,设置复选按钮的程序是:
<input type="checkbox" name="inputs<%=i%>" value="<%=zhiweiname[i]%>">
企业可以选中其中一条或多条记录,将其删除。
图4.6删除招聘信息界面
实现删除招聘信息功能的方法是,当企业选中某些记录并确定删除时,后台程序通过企业的操作,得到这几条记录的关键信息职位名称,实现这一功能的语句是:
for(int i=0;i<100;i++){
if(request.getParameter("inputs"+i)!= null){
zhiweiname[cnt] = request.getParameter("inputs"+i);
cnt++;}}
得到这一信息后,就可以根据职位名称和企业名称从JOB数据库的“职位”表中删除这些招聘记录。其中企业名称是通过str=(String)session.getAttribute("name2")得到的。实现删除功能的关键代码为:
//实现SQL语句
for(int xx=0;xx<cnt;xx++){
mySQL[xx] = "DELETE FROM 职位 WHERE 职位名称='"+zhiweiname[xx]+"'";
mySQL[xx] = mySQL[xx] + "and 企业名称='"+str+"'";}
try{ //相应JDBC驱动程序的连接串
conn=DriverManager.getConnection("jdbc:odbc:job");
defaultCommit=conn.getAutoCommit();//得到当前事务设定的值
conn.setAutoCommit(false); //将自动事务设置为false
stmt=conn.createStatement();
for(int yy=0;yy<cnt;yy++){
stmt.executeUpdate(mySQL[yy]);//执行SQL语句,删除记录 }
conn.commit();
response.sendRedirect("shanchu.jsp");}
-
- 4.6 管理邮件的实现
在这一部分中,企业发送站内邮件、收取回复邮件和删除邮件。
企业在管理控制台中选择“发邮件”,即进入如图4.7所示的界面,在次页面中已经把发信人即企业的邮箱从数据库中读取了出来,企业只需填写邮件的内容即可。读取发信人邮箱的方法是利用JDBC-ODBC桥访问SQL数据库,从JOB数据库的“企业注册”表中查询该企业的记录,然后把企业的E-mail地址显示在发信人栏了。实现查询的方法是:SELECT*FROM 企业注册 WHERE 会员ID='"+str+"'
str=(String)session.getAttribute("name1")
发信人邮箱=rs.getString(“E-mail”)
图4.7 发送信件界面
实现发送邮件的方法是,利用request.getParameter(“”)方法把页面上企业填入信息读取下来,再把值赋给自变量(如:shouname1,faname1等),然后利用JDBC-ODBC桥连接SQL数据库,把这些值插入到JOB数据库的“信件”表里。关键代码是:
try{ //相应JDBC驱动程序的连接串
conn = DriverManager.getConnection("jdbc:odbc:job");
stmt=conn.createStatement();
//执行SQL语句,将数据插入到信件表
pst = conn.prepareStatement("INSERT INTO 信件(收信人, 发信人, 标题, 发信时间, 内容)"+"VALUES ('"+shouname1+"',
'"+faname1+"','"+title1+"','"+shijian1+"','"+mailtext1+"')");
pst.executeUpdate();
response.sendRedirect("mailbox.jsp");}
邮件发送后,自动回到我的信箱界面。
企业在我的信箱界面(图4.8)里,可以看都所有发给自己的邮件。此界面是利用JDBC-ODBC桥访问SQL数据库,把JOB数据库中的“信件”表里的所有收信人信箱为该企业信箱的邮件读取出来显示在页面里,并在每一条记录的标题上增加超连接,在其后面增加“回复”和“删除”键。在标题上增加超连接的方法是:
<tdalign="center">
<a href="readmail.jsp?id=<%=bianhao[i]%>"><%=title[i]%></a>
</td>
在每条记录后面增加“回复”和“删除”键的方法是:
<td align="center">
<a href="remail.jsp?id=<%= bianhao [i]%>">回复</a></td>
<td align="center">
<a href="delmail.jsp?id=<%= bianhao [i]%>">删除</a></td>
企业可以查看邮件内容,回复或删除邮件。
图4.8 我的信箱界面
企业只要单击某个邮件的标题,即可读取该邮件的全部内容。实现的方法是,当企业单击某个邮件的标题时,程序则利用request.getParameter("")方法获得邮件编号,这时,由于编码方式的问题,通过request.getParameter("")方法获得的值是乱码,这还需要下面的程序转换编码格式,使其转换为正常形式[11]:
byte b[]=bianhao.getBytes("ISO-8859-1");
bianhao =new String(b);
然后利用JDBC-ODBC桥访问SQL数据库,根据收信人和编号从JOB数据库的“信件”表里读出相应的记录,并显示在网页里。从数据库中查询一条邮件的关键代码如下:
<% ……
try{ …
mySQL = "SELECT*FROM 企业注册 WHERE 会员ID='"+str+"'";
rs=stmt.executeQuery(mySQL);//根据用户名查询企业邮箱
if(rs.next()){
shouname=rs.getString(6); }//获得企业邮箱
mySQL = "SELECT*FROM 信件 where 收信人 ='"+shouname+"'";
mySQL = mySQL+ "and 编号 ='"+ bianhao +"'";
rs=stmt.executeQuery(mySQL);//根据收信人和内容查询邮件
if(rs.next()){ %>
从数据库中查询到了某条邮件记录以后,即可以将其输出到网页上,方法如下:
<p align="left"><br>
收信人: <%out.print(rs.getString(1));%> </p>
<p align="left">发信人: <%out.print(rs.getString(2));%> </p>
<p align="left">标 题: <%out.print(rs.getString(3));%> </p>
<p align="left">发信时间: <%out.print(rs.getString(4));%></p>
<p align="center">正 文:<br>
<textarearows="14"name="mailtext"cols="44"><%=rs.getString(5)%>
</textarea></p>
回复邮件的实现和发送邮件大体上是一样的,不同的是要先从数据库中以收信人信箱和邮件内容为条件把收信人信箱和发信人信箱读取出来,分别显示在发信界面的发信人和收信人栏里。
删除邮件的实现方法是,当企业在某个邮件后面单击删除时,程序则利用request.getParameter("")方法获得邮件编号,这时,由于编码方式的问题,通过request.getParameter("")方法获得的值是乱码,这还需要下面的程序转换编码格式,使其转换为正常形式:
byte b[]=bianhao.getBytes("ISO-8859-1");
bianhao =new String(b);
然后利用JDBC-ODBC桥连接SQL数据库,从JOB数据库中的“信件”表里以收信人信箱和邮件编号为条件把该邮件删除,实现的关键代码如下:
try{ //相应JDBC驱动程序的连接串
…
mySQL = "DELETE FROM 信件 WHERE 收信人 ='"+shouname+"'";
mySQL = mySQL + "and 编号 ='"+ bianhao +"'";
stmt.executeUpdate(mySQL);// 根据收信人和内容删除该条邮件记录
conn.commit();
response.sendRedirect("mailbox.jsp");}
-
- 4.7 管理人才信息的实现
在这一部分里,企业可以查询人才信息,对于企业感兴趣的人才,企业可以将其收藏到自己的收藏夹里,企业也可以对自己的收藏夹进行管理。
企业可以根据人才的姓名、专业等条件查询人才信息,也可以查询所有的人才信息。实现的关键代码如下:
if(name1==null&&zhuanye1==null)//当企业没有设定查询条件时,查询所有人//才信息
mySQL = "SELECT * from 学生信息 ";
else if(zhuanye1==null)//当企业输入了人才姓名时,则按照姓名进行模糊查//询
mySQL = "SELECT * from 学生信息 where 姓名 like '%"+name1+"%'";
else//按照专业查询人才信息
mySQL = "SELECT * from 学生信息 where 专业='"+zhuanye1+"'";
try{//相应JDBC驱动程序的连接串
…
rs=stmt.executeQuery(mySQL);//执行查询
while(rs.next())//当查询到有记录后,读出要在网页上显示的数据
{ id[count] =rs.getString("用户名");
name[count] = rs.getString("姓名");
sex[count] = rs.getString("性别");
birth[count] = rs.getString("年龄");
zhuanye[count] = rs.getString("专业");
xueli[count] = rs.getString("学历");
count++;}%>
在显示查询结果的时候,在人才姓名上都设置一个超连接,实现的代码是:
<td height="27"><a href="view3.jsp?id=<%=id[i]%>"><%=name[i]%></a></td>
在其后面都增加了一个“放入收藏夹”按钮,实现的代码是:
<td align="center"><a href="zhuangru.jsp?id=<%=id[i]%>">放入收藏夹</a></td>
当点击某个姓名时,就显示该人才的详细信息。实现的方法和4.6.2节中实现查看邮件内容的方法相同。
企业在查询到人才信息以后,可以把自己感兴趣的人才信息收藏到收藏夹中,实现收藏人才信息的方法是,当企业单击某条人才信息的姓名时,程序则利用request.getParameter("")方法获得人才的用户名,这时,由于编码方式的问题,通过request.getParameter("")方法获得的值是乱码,这还需要下面的程序转换编码格式,使其转换为正常形式:
byte b[]=str.getBytes("ISO-8859-1");
str =new String(b);
然后利用JDBC-ODBC桥访问SQL数据库,根据用户名(str)从JOB数据库的“学生信息”表里查询相应的学生信息记录,并将该条记录的详细数据再插入到JOB数据库的“收藏夹”表里。关键代码如下:
try{ conn=DriverManager.getConnection("jdbc:odbc:job");
stmt=conn.createStatement();
rs=stmt.executeQuery("SELECT*FROM 学生信息 where 用户名='"+str+"'");//查询学生记录
if(rs.next()){//读出学生的详细信息
id1 =rs.getString("用户名");
…}
//检测企业是否已经收藏过该人才信息
rs=stmt.executeQuery("SELECT*FROM 收藏夹 where 用户名='"+id1+"'");
while(rs.next()){
count++;}
if(count>0){//如果企业已经收藏了该人才信息,则不能再收藏
response.sendRedirect("zhuangrushibai.htm");
}
//将人才信息装入收藏夹
pst = conn.prepareStatement("INSERT INTO 收藏夹(用户名,姓名,性别,
年龄,专业,学历,企业ID)"+"VALUES ('"+id1+"', '"+name1+"','"+sex1+"',
'"+birth1+"','"+zhuanye1+"','"+xueli1+"','"+qiyeid1+"')");
pst.executeUpdate();
response.sendRedirect("chaxun.jsp");}
企业打开自己的收藏夹的界面如图4.9所示。企业可以在这里查看某个人才的详细信息,或者删除该人才信息。
图4.9 收藏夹界面
当企业要查看某个人才的详细信息时,只需点击该人才的姓名即可。在姓名上设置超连接的方法是:
<td align="center">
<a href="view4.jsp?id=<%=id[i]%>"><%=name[i]%></a></td>
查看人才的详细信息的实现与4.6.2节中实现查看邮件内容的方法相同。
当企业要删除某个人才信息时,只需点击对应的“删除”即可。在姓名后设置“删除”按钮的方法是:
<td align="center">
<a href="dele.jsp?id=<%=id[i]%>">删除</a></td>
实现的方法和4.6.2中的实现删除邮件的方法相同。
-
- 4.8 管理员管理会员信息的实现
管理员从管理员登陆窗口登陆以后,即进入了如图4.10所示的界面。在次界面里,管理员可以查看学生会员和企业会员的详细信息,也可以删除某个会员,使其在本系统中不再享有会员的权限。设置管理员主要是为了防止学生和企业填写虚假的基本信息,或发布不真的求职和招聘信息。
其中,查看会员详细信息的实现方法与4.6.2节中实现查看邮件内容的方法相同。删除会员的实现方法和4.6.2中的实现删除邮件的方法相同。
第5章 系统的测试
-
- 5.1 测试的目的
通过在一定软件和硬件条件下运行本系统,发现和消除系统存在的错误和缺陷,避免系统可能出现的错误和缺陷,同时证明本系统的功能和性能与需求分析说明书符合。
-
- 5.2 测试的环境
操作系统:Windows XP SP2
CPU: XP2000+
内存: GEIL 256M DDR400
Web服务器:Tomcat
浏览器:IE6.0
数据库管理系统:SQL Server 2000
-
- 5.3 测试的内容
对大学毕业生招聘信息的发布与管理系统的测试内容主要是:对企业注册登陆功能的测试、对管理基本信息功能的测试、对管理招聘信息功能的测试、对管理邮件功能的测试、对管理人才信息功能的测试、对管理员管理会员信息功能的测试。
测试输入数据一(如表5.1所示)
会员帐号 | 密码 | 企业名称 | 联系人 | 联系电话 | | 企业地址 | 所在城市 | 企业规模 | 经营性质 | 所属行业 | 企业简介 |
aaa | aaa | a企业 | 曾 | 123456 | a@163.com | 大学 | 某市 | 很小 | 非盈利 | 服务 | 某市虹润电子有限公司是中国最全面的带插头电源线生产商;中国最大的线束生产商。 |
表5.1测试数据一
预期结果为注册成功。
测试输入数据二(如表5.2所示)
会员帐号 | 密码 | 企业名称 | 联系人 | 联系电话 | | 企业地址 | 所在城市 | 企业规模 | 经营性质 | 所属行业 | 企业简介 |
1 | 1 | a | 曾 | 1 | a@a.com | 大学 | 某市 | 很小 | 非盈利 | 服务 | 某市虹润电子有限公司是中国最全面的带插头电源线生产商;中国最大的线束生产商。现已经和国内知名家电生产商建立了合资生产平台,如:长虹、海尔、康佳......某市虹润电子有限公司是四川长虹电器股份有限公司与深圳市得润电子股份有限公司…… |
表5.2测试数据二
预期结果为注册成功。
进入企业注册页面后,输入测试数据一,单击“注册提交”,结果为注册成功,返回登陆界面,输入用户名“aaa”密码“aaa”,登陆成功,进入企业管理控制台界面。
重新进入企业注册页面,输入测试数据二,单击“注册提交”,结果为注册失败。
原因分析:存储企业注册信息的“企业注册”表的企业简介这一列规定的长度为200字符,当输入的企业简介信息超过200字符时,执行插入数据库的操作就会失败。
方案改进:在企业注册页面的企业简介这一栏后面注明字符数不能超过200。
输入用户名“aaa”密码“aaa”,登陆成功,进入企业管理控制台界面。选择“修改注册信息”,页面上显示的信息如表5.1所示。将密码改为“123”,企业简介改为“无”,提交修改。结果为修改成功,在数据库中,该条记录变为 “aaa、123、a企业、曾、123456、a@163.com、大学、某市、很小、非盈利、服务、无”。重新返回首页,输入用户名“aaa”密码“123”,登陆成功。
测试输入数据如表5.3所示,预期结果为发布成功。
职位名称 | 企业名称 | 工作地点 | 招聘人数 | 招聘要求 | 发布日期 | 截止日期 |
网络管理 | a企业 | 某市 | 1 | 本科应届毕业生 | 2006-5-20 | 2006-5-26 |
表5.3 测试数据三
进入企业管理控制台界面后,点击“发布招聘信息”,输入以上数据,发布成功。然后再选择修改招聘信息,进入的界面如图5.1所示。
图5.1 修改招聘信息
将招聘人数改为“20”,在相应的数据库的“职位”表里,该条记录变为“ 网络管理、a企业、某市、20、本科应届毕业生、2006-5-20、2006-5-26”。修改成功。
在企业管理控制台界面里,点击“删除招聘信息”,删除成功。在相应的数据库的“职位”表里,该条记录被删除。
测试输入数据如表5.4所示,预期结果为发送成功。
收信人 | 发信人 | 标 题 | 发信时间 | 正 文 |
waguqi@163.com | a@163.com | 招聘 | 2006-6-27 | 招聘 |
表5.4 测试数据四
进入企业管理控制台界面后,点击“发邮件”,输入以上数据,发送成功。在相应的数据库的“信件”表里,也有该条记录。如图5.2所示。
图5.2 信件表记录
在查询人才界面里,按照人才姓名“赵平”,专业“信息管理”查询,结果如图5.3所示。
图5.3 查询人才
点击“放入收藏夹”,提示信息为已经收藏了该人才。
原因分析:企业这时还没有收藏该人才,但是信息为已经收藏了该人才。原因是,原来的检测企业是否收藏过该人才的SQL语句是:
SELECT*FROM 收藏夹 where 用户名='"+id1+"'
结果就成了只要有企业收藏过一个人才信息,以后所有的企业都不能再收藏该人才。应该把SQL语句改为:
SELECT*FROM 收藏夹 where 用户名='"+id1+"' and 企业ID ='"+qiyeid1+"'
意思是同一个企业只能收藏同一个人才信息一次。
在我的收藏夹界面里,点击“删除”,数据库的“收藏夹”表里的对应的记录被删除,证明删除成功。
进入管理员管理界面,界面如图5.4所示。
图5.4 管理员管理界面
点击a企业后面的“删除”,对应的数据库的“企业注册”表里的有关a企业的记录被删除,证明删除成功。
-
- 5.4 测试总结
通过几组测试数据,分别对系统的注册、登陆、发布和管理招聘信息、邮件管理、查询、收藏人才信息、管理会员等功能进行了测试。从测试的结果来看,系统的响应时间均在3秒以内,各个操作执行的结果准确,界面友好,操作简单,有较完整的错误处理机制,实现了任务书提到的全部要求。