引言
在高等教育蓬勃发展的今天,大学生的数量在不断地增加,大部分的学生都面临着寻找兼职工作的问题。学生兼职管理系统的出现大大解决这个问题,大学生们可以在这个平台寻找合适的兼职进行社会实践活动。现在大学的课程越来越少,这就意味着学生的课余时间在不断地增多,许多大学生就会进行各种各样的社会实践活动来填充自己的课外时间,兼职就是其中的一种。但是,学校里的大学生寻找兼职都是在一些个人软件、交流平台或广告栏上寻找的,这就容易出现很大的信息和安全的漏洞。同时,这种信息漏洞和安全漏洞在社会的不断发展下就显得越来越突出。解决此问题的方法之一就是将传统的寻找兼职的方式延伸到网络,做好信息的共享和支配,通过网络开发平台来满足大学生的兼职需求。
在进入21世纪以后,在计算机技术的提升以及网络的不断扩展下,管理信息系统到达了一个新高度。与此同时,大学生的数量在不断增加,他们会越来越关注自己的就业问题。对于即将毕业的大四学生来说,通过自己的空闲时间找一份兼职工作具有非常大的积极意义。在兼职活动中可以获得收益,可以增加自己的见识和经验,还可以结识更多的朋友。不但可以锻炼个人意志力,而且对于毕业后求职找工作有很大的帮助。学生兼职管理系统的出现改变了以前的招聘模式,为学生提供了便利,他们可以在这个平台寻找合适自己的职位。同时,还能合理利用各个地方的人力、物力,使得人尽其才,物尽其用。它对于企业来说,提供了一个更高更好的选拔人才的平台,在一定程度上提高了企业的效益。同时也创造了一个新的人才市场竞争环境。
学生兼职管理系统是一个为学生与企业而开展的交流平台,企业用户能够在上面发布招聘信息,学生用户可以在上面寻找兼职,两者各得其所。学生兼职管理系统可以为学生和企业创造良好的环境,满足他们的需求。本篇文章论述的是为大学生而设计开发的学生兼职管理系统,其中学生用户可以浏览兼职和企业信息、报名兼职活动、收藏兼职信息、投递简历、查看面试通知情况等等。然而,随着兼职信息管理系统规模的扩大,越来越多的应聘职位需求,职位的信息量也就越来越多。此时,高效的兼职管理系统就显得非常重要,通过兼职管理系统管理这些信息。如果学生兼职管理系统能够有效的运行,那么就可以大大缓解这个问题,减少不必要的工作。所以,根据以上的种种叙述,学生兼职管理系统的设计与开发是大势所趋。
1系统分析
1.1系统的需求分析
开发学生兼职管理系统的主要目标是通过该系统一方面满足企业招聘员工,另一方面为大学生的兼职和就业提供良好的平台,提高个人的实践能力。
学生兼职管理系统需要满足大学生、企业和管理员这三类用户的需求。大学生用户的需求是管理个人信息、管理个人简历,选择心仪的兼职并投递个人简历,同时收藏心仪的兼职,若看到不实的兼职还可以投诉这个企业。企业用户的需求是在系统平台发布招聘内容,前提是通过企业信息认证,查看应聘各个兼职的学生简历信息,并发送简历是否通过等相关的信息通知。管理员用户的需求是管理各类用户信息,管理企业发布的招聘兼职信息,查看用户的投诉以及审核企业认证信息。
1.2系统的可行性分析
经济可行性研究就是分析开发该系统的经济情况,预估建设系统以及调试维护系统的费用,在系统设计开发完成后评估可能取得的经济收益。
技术可行性研究主要是考虑在计算机软件和硬件方面的配置能否满足系统开发的需求,以及通过已有的技术能否顺利的完成系统的开发工作。本系统使用的是Java语言,用Eclipse软件来进行系统开发,以MySQL数据库作为存储数据的数据池。这两款软件的操作、运行和调试相对来说比较容易和方便,且计算机设备的各方面配置也都符合要求,所以是切实可行的。软件:现在的开发软件和数据库软件有很多,并且大多是开源的,可以免费下载使用,故软件的开发成熟可行。硬件:目前各类笔记本电脑的组件都很先进,大多都采用Windows10系统,都配备网络驱动,也完全能满足本系统的需求。
运行可行性研究是用户能否有效使用学生兼职管理系统。本系统的用户是大学生、企业和管理员。当前社会信息的开放化、网络化已经相当普及,各类用户人员知识水平相对较高,对计算机的操作都很熟练,所以在运行上也是可行的。
1.3系统的功能分析
根据前面论述的需求分析,本系统分为大学生、企业、管理员三类用户角色。
大学生用户的功能有:创建个人简历;收藏心仪的兼职活动;报名兼职活动,投递个人简历;若发现不实兼职,可以提供相关的信息投诉该企业。
企业用户的功能有:发布兼职信息,但前提是需要填写相关的企业信息进行认证申请;认证成功后,可以发布和管理招聘信息的内容;在发布招聘信息后,可以查看投递的学生简历信息,对其发送简历是否通过以及其他相关的信息内容。
管理员用户的功能有:管理用户信息;管理招聘信息;审核企业提交的认证申请;处理用户的投诉信息。
通过上述用户的功能分析,规划出如下针对学生兼职管理系统的需求信息:
(1)游客:注册账号、查看兼职信息、查看企业信息。
(2)学生用户:处理个人账号和简历、报名兼职、收藏兼职、查看投递信息、进行投诉等。
(3)企业用户:处理企业账号信息、企业认证、处理招聘信息、反馈招聘结果等。
(4)管理员:处理企业信息、兼职信息、用户信息以及投诉信息等。
根据上面的叙述,规划整理出了以下数据内容。
(1)用户信息:用户编号,用户密码,角色。
(2)企业信息:企业编号,企业名字,电子邮件,企业的性质,营业执照,负责人,电话号码。
(3)兼职信息:兼职编号,企业编号,兼职分类,兼职名称,招聘人数,工作待遇,工作时间,所在地区,结算方式,工作性质等。
(4)简历信息:简历编号,用户编号,真实姓名,性别,年龄,身高,头像,手机号码,邮箱,求职意向等。
(5)投递情况信息:投递编号,企业编号,简历编号,职位名称,创建时间,面试时间,面试联系人等。
1.4系统开发步骤
学生兼职管理系统的设计和开发可以分为总体规划、系统开发和系统运行三个部分,本小节论述的就是这三部分中的系统开发部分。具体来说,该部分又包括三个环节,分别是系统的分析、设计以及实施。
首先,学生兼职管理系统设计开发的第一步就是做好理论准备和系统分析工作。所以本人先对大学所学的知识进行了梳理,巩固以前学过的计算机语言内容,通过回顾以前学习的计算机语言内容来不断提升自己的编程能力。并且熟悉系统开发的环境、熟悉对数据库的运用以及开发系统所使用的软件。同时查阅管理信息系统相关的书籍、电子资料、文献来完善自己的知识储备,为下一步做好铺垫工作。
其次,第二步就是对系统的设计。学生兼职管理系统是针对在校大学生、企业用户和管理员来设计开发的一款系统,所以就需要详细了解这三类用户的具体需求。本人通过搜寻各种资料和数据调查了解这三类用户的需求,从而设计出满足需求的系统功能,在系统设计的同时又对数据库进行了设计,建立了各类用户表来存储数据信息。
然后,第三步就是系统的实施开发工作。通过选择的Java编译软件进行代码的编译和运行,以及设计前端的界面和后端数据库的连接工作,通过后端的数据库来存储各类用户的数据信息。本系统所选择的是Eclipse和MySQL数据库开发软件,因为它们是管理信息系统所常用的软件并且也是本人比较熟悉的软件。
最后,在以上三步骤完成后,需要对设计开发好的管理系统进行调试和完善,通过不断地调试来保证系统运行的平稳安全。
通过以上的步骤最终来完成学生兼职管理系统的建设工作。
2系统设计
2.1概述
系统设计是运用严谨、科学规范的思想方法,同时参照前面的需求分析,从而设计出能满足用户需求的系统的设计过程。这部分主要针对系统的功能、作用、意义展开设计,在设计过程中充分考虑之前对系统的调查和可行性分析。
2.2系统的数据流图
学生兼职管理系统的数据流图,如图2-1所示。

图2-1系统数据流图
2.3系统的功能
由前一章对系统的分析,系统应具备的功能有:
(1)游客:注册账号、查看兼职信息、查看企业信息。
(2)学生用户:处理个人账号和简历、报名兼职、收藏兼职、查看投递信息、进行投诉等。
(3)企业用户:处理企业账号信息、企业认证、处理招聘信息、反馈招聘结果等。
(4)管理员:处理企业信息、兼职信息、用户信息以及投诉信息等。
由上面的功能论述得出如下总体结构2-2。
图2-2学生兼职管理系统功能模块结构图
2.4数据库设计
在管理系统的设计开发中,数据库都占据着举足轻重的重要地位,在学生兼职管理系统中也是如此,是不可缺少的一部分。数据库设计,顾名思义,就是对数据库进行逻辑设计,即在确定的环境中设计出符合要求的数据库。通过建立好的数据库,可以存储系统中的各类信息,可以满足各类用户需求。由此可见,数据库具有很高的地位,数据库的设计也同样重要。所以要根据系统用户的需求来设计数据库。
2.4.1数据库需求分析
通过上面数据库设计的分析可以看出数据库结构的设计对于整个系统来说至关重要。设计出的数据库结构要能满足系统以及用户的需要,要能对数据信息进行管理。通过整合这些数据信息,从而形成一份简洁明了的数据字典,为接下来的系统开发提供便利。
2.4.2概念设计
概念设计,就是以用户的角度来看问题,通过该角度进行概念设计,然后将它转换成逻辑模式,简化了各个阶段的任务,大大降低了设计的复杂程度。
通过E-R图方法进行数据概念设计,其可以分为三个步骤:首先设计局布的E-R图;然后将各个局部的E-R图整合成一个新的全局E-R图模式;最后优化这个全局E-R图模式,从而得到最终的概念模式。
接下来的工作就是设计各类实体。通过上述数据库设计中的各类数据信息可以规划出各个实体。
本系统有六个实体,分别是用户信息实体、角色信息实体、企业信息实体、兼职信息实体、简历信息实体以及投递情况信息实体。
各个实体的E-R图如下:
图2-3用户信息的实体ER图图2-4角色信息的实体ER图
图2-5企业信息的实体ER图
图2-6兼职信息的实体ER图
图2-7简历信息的实体ER图
图2-8投递情况实体ER图

图2-9兼职管理系统总体ER图
2.4.3数据库逻辑结构设计
在数据库概念结构设计完成后,就到了下一个环节,即数据库的逻辑结构模式的设计。
综合分析以上的数据内容,参照逻辑结构,从而对数据库表进行规划。本系统包含五张表,分别是企业信息表、简历信息表、投递信息表、兼职信息表以及用户信息表。
表1企业信息表:
字段名称数据类型字段长度说明
company_id int(11)11企业编号
name varchar(50)50企业名称
xingzhi varchar(20)11企业性质
lxr int(11)11联系人
telephone int 11联系电话
e-mail varchar(50)30电子邮件
yyzc varchar(100)100营业执照
表2简历信息表:
字段名称数据类型字段长度说明
id int(10)11简历编号
user_id int(10)11用户编号
name varchar(30)30真实姓名
sex varchar 2性别
height int(3)3身高
age int(3)3年龄
phone varchar(11)11手机号
email varchar(50)50邮箱
image varchar(50)50头像
hopejob varchar(20)20求职意向
introduction text 300个人介绍
create_time int(11)11创建时间
modify_time Int(11)11更新时间
表3投递信息表:
字段名称数据类型字段长度说明
id int(11)11投递编号
rid int(11)11简历编号
company_id int(11)11企业编号
jid int(11)11职位编号
create_time int(11)11创建时间
read int(4)4预览简历
content text 300发送内容
audition_time int(11)11面试时间
audition_linkman varchar(20)20面试联系人
audition_linkphone varchar(11)11面试电话
audition_address varchar(50)50面试地址
表4兼职信息表:
字段名称数据类型字段长度说明
id int 11兼职编号
company_id int 11企业编号
cid int 11兼职分类编号
name varchar 50兼职名称
number int 11招聘人数
salary varchar 50工作待遇
time varchar 50工作时间
city varchar 10所在地区
balance varchar 10结算方式
nature varchar 10工作性质
desc text 300兼职描述
address varchar 50工作地址
create_time int 11创建时间
modify_time int 11更新时间
表5用户信息表:
字段名称数据类型字段长度说明
user_id int 11用户编号(主键)
user_password varchar(20)11密码
role int 11角色
2.5用户界面设计
用户界面是指软件与用户之间交互的接口。本系统是学生兼职管理系统,最终的用户是学生、企业和管理员,因此本系统采用了舒适美观的界面,打开该界面后,用户即可进行注册或登录,从而形成了友好的界面交互方式。
2.5.1系统登录界面设计
用户在打开系统后看见的第一个画面就是用户登录界面。因此,在设计时应当考虑到界面的简洁、友好、实用以及美观等方面。
在登录本系统时,用户将看到以下画面,如图2-10所示。
图2-10登录界面
2.5.2系统主界面区域设计
在登录后,用户看到的就是本系统的主界面部分。运行示意图如下面的图2-11所示。
图2-11运行示意图
从运行示意图中可以看到,主菜单区位于主界面的左侧,在主菜单区里显示的就是本系统的菜单。不同的菜单有着不同的功能,有的菜单还包括一些子菜单,用户可以根据个人需求来选择需要的菜单。用户角色不同,其所操作的菜单内容也是不同的。
当用户通过菜单选择自己所要进行的操作后,系统就打开了相应的操作界面,这时用户就可以进行相关操作了。在操作处理的过程中,主菜单的部分是始终存在的,可以缩小,方便用户选择其他菜单。当用户的业务处理完毕之后,就可以选择关闭任务菜单。
3系统编码与实现
3.1开发平台的选择
在开发平台的选择上,根据本系统的需要,选择了Windows10开发平台来进行系统的设计与开发。就现在看来它的应用非常广泛,绝大多数用户使用的都是Windows10操作系统。越来越多的用户选择它作为开发平台,因为它操作简单且很安全。
3.2开发工具的选择
在开发工具的选择上,通过对现在使用比较多的几款软件的分析,比较它们的优点和缺点,以及本系统的开发需求。最终,本系统选用了Eclipse、MySQL和tomcat作为软件开发的工具。选用这三个工具有以下三方面的优点:
(1)Eclipse是一个一体化的开发软件,也是一个集成开发环境。使用Eclipse可以进行代码编写、代码分析、运行编译代码等操作。Eclipse具有很多优点,比如它是Java语言编写且免费使用的一款软件,它的安装非常简单,同时它的扩展性也很强。它不仅大大简化了系统的开发过程,而且还提高了系统工程的模块化和紧凑性。
(2)MySQL是一款开源软件,且提供免费版本。它也有很多的优点,比如它的运行速度很快且占用的内存很少,而且它对命令的反应时间非常短。一般来说,MySQL数据库的复杂度低,对于新手来说可以很快上手使用。同时它可以适应很多的平台,例如Windows系统,Linux系统,Unix系统等。
(3)Tomcat Web服务器是开源免费的,它是一种轻便、体积小的服务器。目前很多人使用这款服务器,在中小型系统中更为常见。在运行与调试JSP程序时,通常情况下都是选择它作为服务器的。
3.3系统的初始化
3.3.1创建编译环境
编译环境设置流程及主要目的如表3-1所示。
表3-1编译环境设置流程
步骤目的
添加环境变量为Java提供编译环境和运行环境
添加服务器Server使得Java类能实现
添加实用类实现各模块
运用CSS技术设置前端显示的样式
添加web.xml描述web应用的信息
3.3.2创建工作包
要完成系统开发,首先就需要创建Java的包。在Java Resource目录下src文件夹中创建所需要的package包,在包中编写系统开发的各类.java源程序。本系统共需九个包,其名称与作用如表3-2所示。
表3-2 package包
名称作用
com.park.job.controller存放处理请求控制器的java类
com.park.job.dao存放对“数据库底层”进行操作的类
com.park.job.dao.provider存放一些动态SQL语句提供的类
com.park.job.domain放置与数据库表对应的java类
com.park.job.interceptor存放判断用户权限拦截器
com.park.job.service存放用户操作接口类
com.park.job.service.impl放置对DAO接口的实现类
com.park.job.util.common放置常用的一些工具集
com.park.job.util.tag放置页面分页的类
3.3.3数据库连接框架
本系统采用的是MyBatis数据库连接框架。它有很多优点,比如它支持定制化SQL,它可以为存储过程提供支持,同时它不需要编写很多的Java数据库连接代码,也不需要手动的设置参数信息。对于信息的配置,可以通过可扩展标记语言或者注解来解决。
3.4系统登录模块
3.4.1创建“系统登录”
系统登录的界面主要由“登录”、“注册”和“游客”三个按钮构成,运行界面如图3-1所示。
图3-1系统登录
【登录】按钮实现过程为:
(1)点击登录按钮,后台发送请求,在loginForm.jsp文件中给登录按钮绑定了点击事件:若点击btn则用function构造函数来校验登录参数:$("loginName")是id选择器,获得编号为loginName的标签,再通过val()方法获得该标签的value的值。
(2)执行com.park.job.controller包下的UserController.java中的登录请求,调用业务逻辑组session判断用户是否可以登录。通过数据库中的sys_user表,查找用户名和密码是否正确。
(3)若用户信息正确,则调用getRole_ids接口获取角色信息,用if语句判断用户类型,提交表单,返回相应用户的登录界面。若用户信息不正确,则用addObject()方法设置登录失败提示信息。
【注册】按钮实现过程为:
点击注册按钮,后台发送请求,通过“${ctx}/addUserNew”语句跳转到addUserNew.jsp文件界面,填写用户名、类别和密码,点击添加按钮后跳回登陆主界面。
【添加】按钮实现过程为:
点击添加按钮,后台发送请求,在addUserNew.jsp文件中触发form.on('submit(add)')函数,信息添加成功。用xadmin.close()函数关闭当前frame标签。
【游客】按钮实现过程为:
点击游客按钮,后台发送请求,在loginForm.jsp文件中通过“${ctx}/login?loginname=youke1&password=111111”语句跳转到mainyk.jsp游客页面。
3.5管理员用户模块
3.5.1管理员登录
管理员用户登录后,即可看到系统的主界面,如图3-2所示。管理员登录以后可以对用户、简历、企业信息、招聘信息以及投递信息进行管理。
图3-2管理员界面
3.5.2用户管理
管理员可以查看用户的账号信息,可以管理账号信息包括编辑和删除操作,除此之外管理员还可以添加人员信息。人员添加包括:登录名、人员类别、密码和确认密码四个内容。如图3-3所示。
图3-3人员添加界面
【编辑】图标实现过程为:
点击编辑图标,后台发送编辑请求,在user.jsp文件中通过语句${ctx}/addUser?id=${user.id}&username=${user.username}&role_ids=${user.role_ids}跳转到addUser.jsp文件界面并对数据信息进行修改保存同步到数据库sys_user表中。
【删除】图标实现过程为:
点击删除图标后,后台发送请求,在user.jsp文件中通过语句onclick="member_del(this,'${user.id}获取删除请求,在提示已删除之前调用functionmember_del(obj,id)函数,弹出“确认要删除吗?”对话框,通过window.location.href语句发送异步删除,在UserController.jsp文件中处理删除用户请求后,通过mv.setViewName语句返回user.jsp,即删除成功。
【添加】按钮实现方法与3.4.1类似。
3.5.3简历管理
管理员可以在简历列表中查看简历,可以对简历进行编辑或删除。如图3-4所示。
图3-4简历列表界面
【编辑】、【删除】图标的实现过程同3.5.2类似。
3.5.4企业信息管理
管理员可以在企业信息列表中查看和审核企业的信息,同时也可以添加企业信息。如图3-5所示。
图3-5企业信息管理界面
管理员审核企业信息时,若信息通过,企业就可以进行后续的操作;若不通过,则企业无法进行后续的操作。
【审核】按钮实现过程如下:
当管理员点击审核按钮,后台发送请求,在main.jsp文件中,通过语句${ctx}/company/select
Company跳转到company.jsp文件中,通过sendPass('${co.companyid}','${co.id}')在数据库sys_co表中找到企业对应的id,然后通过fn:contains()函数将按钮切换成已审核。
【添加】按钮实现方法与3.4.1类似。
3.5.5招聘信息管理
管理员点击招聘信息列表,可以查看、编辑或删除招聘信息。同时对于用户的投诉举报进行查看审核。如图3-6所示。
图3-6招聘信息管理界面
【编辑】、【删除】图标的实现方法同3.5.2类似。
管理员点击查看投诉按钮可以查看投诉信息。如图3-7所示。
【投诉】按钮实现过程为:
点击投诉按钮时,后台发送点击请求,在main.jsp文件中通过${ctx}/recruit/selectRecruit
语句调转到recruit.jsp文件,通过showUpText('${recruit.complaint}语句弹出投诉文本框,查看投诉内容。
【确定】按钮实现过程为:
点击确定按钮,后台发送请求,在recruit.jsp文件中通过layer.close(index)语句关闭投诉文本框。
图3-7查看投诉界面
3.5.6投递信息管理
管理员点击投递信息列表可以对投递信息进行查看,如图3-8所示。
图3-8投递信息列表界面
投递信息列表里显示的内容是通过${ctx}/send/selectSendCompany语句跳转到sendco
mpany.jsp中,items="${requestScope.sends}"var="send"来获取数据库中sys_send表里的相关数据信息。
3.6学生用户模块
3.6.1学生登录系统
学生用户登录成功后,在学生管理菜单栏下可以查看编辑修改自己的账号信息,如图3-9所示。
图3-9学生管理界面
【编辑】图标的实现过程同3.5.2类似。
在学生管理菜单栏的二级菜单–我的收藏中可查看已收藏的兼职招聘信息。如图3-10所示。
图3-10收藏界面
3.6.2简历管理
进入主菜单界面点击简历管理菜单有两个二级菜单:我的简历和添加简历。学生可以添加个人简历,可以查看自己的简历信息,若有错误可以进行编辑操作。如图3-11所示。
图3-11简历管理界面
每个学生用户只能添加一个简历,在添加完简历后,若再添加则提示:“简历已存在!”。这个操作是通过onmouseover事件调用function cvRep()函数发送ajax请求返回alert提示信息。
【编辑】、【删除】图标的实现方法同3.5.2类似。
3.6.3招聘信息管理
学生可以查看招聘信息,收藏心仪的兼职,发送简历,对于虚假不实兼职可以进行投诉举报。如图3-12所示。
图3-12招聘信息列表界面
【收藏】按钮实现过程如下:
点击收藏按钮,后台发送请求,在mainstu.jsp文件中通过${ctx}/recruit/selectRecruitStu语句跳转到recruitstu.jsp文件,通过语句onclick="collect(this,'${recruit.id}')"将收藏信息放入数据库sys_user表collect字段中。在我的收藏中,通过mainstu.jsp文件中的${ctx}/user/byId?collect=${user_session.collect}')语句获取数据库sys_user表中的collect字段的信息内容。
【投诉】操作的实现同3.5.5实现方法类似。
3.6.4面试信息管理
学生投递简历后,企业查看简历若通过就进行面试邀约,发送面试信息给学生。若不通过则发送未通过信息。学生可通过看邮箱通知后到网站面试信息管理中查看投递结果信息。如图3-13所示。
图3-13面试信息界面
3.7企业用户模块
3.7.1企业登录系统
企业用户登录成功后,点击企业中心管理菜单–我的企业二级菜单,就可以查看、编辑、企业账号的信息,如图3-14所示。
图3-14企业中心管理界面
【编辑】图标的实现方法同3.5.2类似。
3.7.2企业信息管理
在企业信息管理菜单栏中,企业用户可以在添加企业信息栏中添加企业的认证信息。添加认证信息后,需要管理员审核通过后才能进行招聘信息发布等操作。添加企业信息界面,如图3-15所示。
图3-15企业信息管理界面
【添加】按钮实现方法同3.4.1类似。
企业在添加完成信息后,可以在企业信息列表中查看已填写的信息内容,并且能进行编辑操作。如图3-16所示。
图3-16企业信息界面
每个企业用户只能添加一个企业信息,在添加完信息后,若再添加则提示:“企业已存在!”。这个操作是通过onmouseover事件调用function cvRep()函数发送ajax请求返回alert提示信息。
【编辑】图标的实现方法同3.5.2类似。
3.7.3招聘信息管理
企业用户的招聘信息管理菜单界面由招聘信息列表、添加信息两个二级菜单构成。在招聘信息列表中,企业能修改已发布的招聘信息,能查看用户的举报内容。运行界面如图3-17所示。
图3-17招聘信息界面
【编辑】【投诉】图标的实现方法同3.5.2类似。
在选中查看按钮后,跳出应聘报名信息框。如图3-18所示。
图3-18应聘报名框
【查看】按钮实现过程如下:
点击查看按钮,后台发送请求,在maincompany.jsp文件中通过${ctx}/recruit/selectRecruitCo
mpany语句跳转到recruitcompany.jsp文件,通过showUpText('${recruit.complaint}语句来实现查看功能。
【确定】按钮实现方法同3.5.5类似。
企业用户点击学生账号框后跳出面试结果信息框,在该信息框中可查看学生简历信息并且可以发送面试通知相关的内容。如图3-19所示。
图3-19面试信息界面
【学生账号框】实现过程如下:
企业点击学生账号框,后台发送请求,在recruitcompany.jsp文件中,通过stuNameBtn+'<
a onclick="xadmin.open()弹出简历和面试内容。
【发送面试通知】按钮实现过程如下:
点击发送面试通知按钮,后台发送请求,在addSend.jsp文件中,通过onclick="sendAjax()语句实现发送。邮件发送:在SendController.java文件中通过RequestMapping注解映射请求路径send/addSendAjax,在public String addSendAjax()中通过本兼职系统指定邮箱写邮件发送通知。
点击添加信息菜单栏后可以进行添加招聘信息的操作,运行界面如图3-20所示。
图3-20添加招聘信息界面
【添加】按钮的实现方法同3.4.1类似。
3.7.4投递信息管理
投递信息管理菜单下有一个投递信息列表二级菜单。点击投递信息列表,可以看到企业面试通知的相关信息,运行界面如图3-21所示。
其实现方式与3.5.6类似。
图3-21投递信息界面
4系统运行与调试
学生兼职管理系统的设计和开发工作完成之后,下一步就是对系统进行运行与调试。
4.1系统的配置
(1)硬件配置要求:Windows10 x64位计算机
(2)软件开发配置要求:Eclipse软件、MySQL数据库
前端:jquery、layui、css3、html5
后端:tomcat8.5、spring5、spring mvc、mysql、mybatis
4.2系统的运行
在安装了Eclipse、MySQL、tomcat服务器的计算机上,打开Eclipse软件在程序目录中找到执行文件,右击Run as执行文件即可。
4.3系统的调试
在学生兼职管理系统设计与开发完成后需要进行系统调试。系统发生故障的原因有很多种。一般来说,下面的这三种情况需要进行调试:
(1)程序的调试
在出现故障后,首先应该推断故障的属性,看它属于何种故障。目前大多数的系统程序是安全稳定的,不容易出现故障。所以出现故障的原因主要是用户的操作或者是程序自身的问题。通过重新登录系统、重启tomcat或者重新启动电脑这三种方式可以解决这类问题。
(2)数据文件的调试
数据文件为管理信息系统的运行提供支持。但是,原来的数据文件在系统升级或软件版本升级后不能满足使用需求。这时就需要分析升级后的系统或软件版本,对原来的数据进行修改和调整或者将软件和系统降到最初的版本状态。
(3)代码的调试
在系统的开发中,需要通过不断地运行和测试程序,找到出错的地方,然后对代码进行修改和优化。代码的调试是每个系统开发中必不可少的一部分。
本系统是通过Chrome浏览器来进行运行和调试的,主要的调试有:
(1)首先本人使用的是tomcat8.5web服务器,在编译运行代码时,需要查看tomcat是否已经成功添加和成功启动。如图4-1所示。
图4-1服务器运行图
(2)数据文件的调试维护,在运行代码前需要查看jdk或jre包是否已经添加到当前项目中,不然程序将无法正确运行。如图4-2所示。
图4-2 Java构建路径图
(3)代码调试,就是在编写代码时不断地在web界面上运行,找出错误的地方,然后通过代码、语句的修改调整来完善系统。代码调试非常耗费精力,但也是系统开发里很重要的一部分。
结论
本文研究的题目是学生兼职管理系统的设计与开发,在文章中详细描述了系统的分析、系统的设计、系统的编码与实现三部分。通过开发本兼职系统,为大学生们提供了很大的便利,也为企业寻找人才提供了平台。在这里对该系统进行简要总结:
首先,本人针对学生兼职管理系统这个主题进行分析和研究,查阅相关的资料提升自我的知识储备量。分析系统中不同用户的需求,从而设计出系统应该具有的功能。通过需求的分析以及功能的设计来完成第一部分内容,即系统分析部分。
其次,在第一部分的分析工作完成之后,就进入系统设计的部分。本人对学生兼职管理系统的功能结构、数据库设计以及系统界面设计等内容进行了详细阐述。同时,在每部分都会使用图或表,这样可以更加生动的展现学生兼职管理系统的各部分内容。
最后,对系统的编码、实现和调试进行了阐述。通过语言描述以及图片示例来更清楚的展现学生兼职管理系统的各项功能。同时,通过系统的运行来观察它的实现情况,从而对它进行调试。经过运行与调试后,本系统的设计与开发工作就完成了。
本文论述的学生兼职管理系统可以满足大部分的用户需求。但是,没有任何系统是完美无瑕的,本系统也同样存在一些缺点:首先,随着系统的运行,用户的需求会不断变化,所以在需求分析上还是会存在不全面、不严谨的地方;此外,本系统在一些细节方面会有考虑不周到的地方,所以在运行系统时可能会出现卡顿的现象;最后,系统都是需要不断创新、优化功能,学生兼职管理系统也是如此,但是本系统功能部分还有欠缺,需要进一步设计优化。我一定会正视这些缺点,保持积极进取的心态,通过不断地学习来完善本系统。只有这样才能保证学生兼职管理系统能够稳固持久的运行下去。
致谢
经过了几个月紧张忙碌以及老师们的支持,本次的毕业设计已经接近尾声了。作为一名本科生的我,由于缺乏经验以及紧张的心情,难免会有许多考虑不周全的地方,如果没有导师和老师们的督促指导工作,我想我是很难完成这次的毕业设计工作的。
首先,我要感谢我的导师。虽然她平日里工作繁忙,事务良多,但依然抽出很多休息时间来指导、督促我的毕业设计与论文编写。在中期材料检查修改、后期设计改良精进的过程中,老师都给予我很大的帮助。其次,我要非常感谢全国十佳科技辅导员对我计算机系统编程的精心指导,帮助我解决了很多我非常棘手的问题,让我的编程水平有了很大的提高。同时我要感谢宿迁学院,给我提供了一个良好的学习平台和学习环境;还要感谢大学四年以来所有的老师,为我打下计算机专业知识的基础。最后对参加论文评阅及答辩工作的老师们表示衷心的感谢!
参考文献
[1]王诚.研究JDBC连接MySQL数据库技术[J].网络安全和信息化,2018(12).
[2]李刚.疯狂Java讲义-3版[J].北京电子工业出版社,2014(7):ISBN 978-7-121-23669-3.
[3]李洋.SSM框架在Web应用开发中的设计与实现[J].计算机技术与发展,2016,26(12).
[4]董大伟.基于WEB技术的网上兼职招聘系统的开发[J].计算机光盘软件与应用,2013(5):194.
[5]汪千强.江西渝州科技职业学院在校大学生兼职网络招聘系统的需求分析[J].大观周刊,2012(50):218-219.
[6]黄梯云,李一军,叶强.管理信息系统(第五版)[M].北京:高等教育出版社,2014:120-122.
[7]时月梅.基于Spring MVC、MyBatis实现数据分页显示处理[J].信息与电脑.2015(19).
[8]王二威,余文滔,江浚杰.某高校社团事务管理信息系统分析与设计[J].电子设计工程,2016,24(21):45-47.
[9]高磊,郭群.大学生兼职中介管理信息系统的设计与实现[J].电子商务,2015(04):89-90.
[10]杨晶晶.java程序设计[M].北京:清华大学出版社,2018.
[11]陈越.数据结构(第二版)[M].北京:高等教育出版社,2016.
[12]王珊,萨师煊.数据库系统概论(第五版)[M].北京:高等教育出版社,2014.
[13]费翔林,骆斌.操作系统教程(第五版)[M].北京:高等教育出版社,2014.
[14]齐治昌,谭庆平,宁浩.软件工程(第四版)[M].北京:高等教育出版社,2019.
[15]刘仲英.管理信息系统(第三版)[M].北京:高等教育出版社,2017.
附录
1、处理企业请求(CompanyController.java)部分代码:
/**查询用户信息*/
List<Company>companys=hrmService.findCompany(company,pageModel);
model.addAttribute("companys",companys);
model.addAttribute("pageModel",pageModel);
return"company/company";
}
/***处理/企业用户请求**/
RequestMapping(value="/company/selectCompanyC")
public String selectCompanyC(Model model,
ModelAttribute Company company){
/**查询用户信息*/
List<Company>companys=hrmService.findCompanyAll(company);
model.addAttribute("companys",companys);
return"company/companyc";
}
/***处理/游客请求**/
RequestMapping(value="/company/selectCompanyYk")
public String selectCompanyYk(Model model,Integer pageIndex,
ModelAttribute Company company){
PageModel pageModel=new PageModel();
if(pageIndex!=null){
pageModel.setPageIndex(pageIndex);
}
/**查询用户信息*/
List<Company>companys=hrmService.findCompany(company,pageModel);
model.addAttribute("companys",companys);
model.addAttribute("pageModel",pageModel);
return"company/companyyk";
}
/***处理添加请求* param Integer id要显示的企业信息id* param Model model**/
RequestMapping(value="/company/previewCompany")
public String previewCompany(
Integer id,Model model){
Company company=hrmService.findCompanyById(id);
model.addAttribute("company",company);//返回
return"company/previewCompany";
}
RequestMapping(value="/company/removeCompany")
public ModelAndView removeCompany(String ids,ModelAndView mv){
//分解id字符串
String[]idArray=ids.split(",");
for(String id:idArray){
//根据id删除企业信息
hrmService.removeCompanyById(Integer.parseInt(id));
}
//设置客户端跳转到查询请求
mv.setViewName("redirect:/company/selectCompany");
//返回ModelAndView
return mv;
}
RequestMapping(value="/company/addCompany")
public ModelAndView addCompany(
String flag,
ModelAttribute Company company,
ModelAndView mv,
HttpSession session){
if(flag.equals("1")){
mv.setViewName("company/showAddCompany");
}else{
User user=(User)session.getAttribute(HrmConstants.USER_SESSION);
company.setCompanyid(Integer.toString(user.getId()));
hrmService.addCompany(company);
mv.setViewName("redirect:/company/selectCompany");
}//返回
return mv;
}
RequestMapping(value="/company/addCompanyC")
public ModelAndView addCompanyC(
String flag,
ModelAttribute Company company,
ModelAndView mv,
HttpSession session){
if(flag.equals("1")){
mv.setViewName("company/showAddCompany");
}else{
User user=(User)session.getAttribute(HrmConstants.USER_SESSION);
company.setCompanyid(Integer.toString(user.getId()));
hrmService.addCompany(company);
mv.setViewName("redirect:/company/selectCompanyC");
}//返回
return mv;
}
RequestMapping(value="/company/updateCompany")
public ModelAndView updateCompany(
String flag,
ModelAttribute Company company,
ModelAndView mv,
HttpSession session){
if(flag.equals("1")){
Company target=hrmService.findCompanyById(company.getId());
mv.addObject("company",target);
mv.setViewName("redirect:/company/selectCompany");
}else if(flag.equals("3")){
hrmService.modifyCompany(company);
mv.setViewName("redirect:/company/selectCompanyC");
}else{
hrmService.modifyCompany(company);
mv.setViewName("redirect:/company/selectCompany");
}//返回
return mv;
}
RequestMapping(value={"/company/updateAjax"})
ResponseBody
public String updateAjax(HttpServletRequest req, RequestParam("photo")MultipartFile[]files, RequestParam("fileFileName")String fileFileName){
String path=req.getSession().getServletContext().getRealPath("/images/c/");
String filename=files[0].getOriginalFilename();//文件名
String[]strArray=filename.split("\.");
int suffixIndex=strArray.length-1;
File file=new File(System.getProperty("evan.webapp")+"/upload/"+UUID.randomUUID().toString().substring(10)+"."+strArray[suffixIndex]);
File file=new File(path+fileFileName+"."+strArray[suffixIndex]);
try{
FileUtils.copyInputStreamToFile(files[0].getInputStream(),file);
}catch(IOException e){
e.printStackTrace();
}
String namePng=UUID.randomUUID().toString().substring(10);
return"hi";
}
RequestMapping(value="/company/addRep",method=RequestMethod.POST)
ResponseBody
public String addRep(String userid){
Company company=hrmService.findByCompanyId(Integer.parseInt(userid));
System.out.println(company);
if(company==null){
return"no";
}else{
return"hi";
}}}
2、处理简历请求(CvController.java)部分代码:
/***处理/login请求**/
RequestMapping(value="/cv/selectCvStu")
public String selectCvStu(Model model,
ModelAttribute Cv cv){
List<Cv>cvs=hrmService.findCvAll(cv);
model.addAttribute("cvs",cvs);
return"cv/cvstu";
}
RequestMapping(value="/cv/previewCv")
public String previewCv(
Integer id,Model model){
Cv cv=hrmService.findCvById(id);
model.addAttribute("cv",cv);
return"cv/previewCv";//返回
}
RequestMapping(value="/cv/removeCv")
public ModelAndView removeCv(String ids,ModelAndView mv){
//分解id字符串
String[]idArray=ids.split(",");
for(String id:idArray){
//根据id删除简历
hrmService.removeCvById(Integer.parseInt(id));
}
//设置客户端跳转到查询请求
mv.setViewName("redirect:/cv/selectCv");
//返回ModelAndView
return mv;
}
RequestMapping(value="/cv/addCv")
public ModelAndView addCv(
String flag,
ModelAttribute Cv cv,
ModelAndView mv,
HttpSession session){
if(flag.equals("1")){
mv.setViewName("cv/showAddCv");
}else{
User user=(User)session.getAttribute(HrmConstants.USER_SESSION);
cv.setUser(user);
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(d);
cv.setCreate_time(s);
cv.setModify_time(s);
hrmService.addCv(cv);
mv.setViewName("redirect:/cv/selectCv");
}//返回
return mv;
}
RequestMapping(value="/cv/addCvStu")
public ModelAndView addCvStu(
String flag,
ModelAttribute Cv cv,
ModelAndView mv,
HttpSession session){
if(flag.equals("1")){
mv.setViewName("cv/showAddCv");
}else{
User user=(User)session.getAttribute(HrmConstants.USER_SESSION);
cv.setUser(user);
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(d);
cv.setCreate_time(s);
cv.setModify_time(s);
hrmService.addCv(cv);
mv.setViewName("redirect:/cv/selectCvStu");
}//返回
return mv;
}
/***根据用户简历实名,查询用户请求* param ModelAndView mv**/
RequestMapping(value="/cv/selectUserCv")
ResponseBody
public Cv selectUserCv(
String userid,
ModelAndView mv){
//根据id查询用户
Cv target=hrmService.findCvByUserid(userid);
Cv cv=hrmService.findCvByUserid(userid);
System.out.println(cv.getName());
return cv;
}
RequestMapping(value="/cv/updateCv")
public ModelAndView updateCv(
String flag,
ModelAttribute Cv cv,
ModelAndView mv,
HttpSession session){
if(flag.equals("1")){
Cv target=hrmService.findCvById(cv.getId());
mv.addObject("cv",target);
mv.setViewName("cv/showUpdateCv");
}else if(flag.equals("3")){
Date d=new Date();
//创建格式化对象
//SimpleDateFormat sdf=new SimpleDateFormat();
//给定模式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//public final String format(Date date)
String s=sdf.format(d);
cv.setModify_time(s);
hrmService.modifyCv(cv);
mv.setViewName("redirect:/cv/selectCvStu");
}else{
Date d=new Date();
//给定模式
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(d);
cv.setModify_time(s);
hrmService.modifyCv(cv);
mv.setViewName("redirect:/cv/selectCv");
}
return mv;
}
RequestMapping(value="/cv/updateImg",method=RequestMethod.POST)
ResponseBody
public String update(HttpServletRequest req,String imgBase64,String fileFileName)throws UnsupportedEncodingException{
String path=req.getSession().getServletContext().getRealPath("/images/poto/");
String data="";
String[]d=imgBase64.split("base64,");//将字符串分成数组
if(d!=null&&d.length==2){
data=d[1];
}else{
return"上传失败,数据不合法";
}
BASE64Decoder decoder=new BASE64Decoder();
try{
System.out.println("b=2");
//Base64解码
byte[]b=decoder.decodeBuffer(data);
for(int i=0;i<b.length;++i){
if(b<i><0){
b<i>+=256;
}}
OutputStream out=new FileOutputStream(path+fileFileName);
out.write(b);
out.flush();
out.close();
}catch(Exception e){
return"false";}
return"hi";}
//判断学生用户是否已经建立简历
RequestMapping(value="/cv/addRep",method=RequestMethod.POST)
ResponseBody
public String addRep(String userid){
Cv cv=hrmService.findCvByUserId(Integer.parseInt(userid));
System.out.println(cv);
if(cv==null){
return"no";
}else{
return"hi";
}}}
3、动态页面跳转(FormController.java)部分代码:
Controller
public class FormController{
RequestMapping(value="/{formName}")
public String loginForm( PathVariable String formName){
//动态跳转页面
return formName;
}}
4、处理招聘信息请求(RecruitController.java)部分代码:
/**查询用户信息*/
List<Recruit>recruits=hrmService.findRecruit(recruit,pageModel);
model.addAttribute("recruits",recruits);
model.addAttribute("pageModel",pageModel);
return"recruit/recruit";}
/***处理/游客请求**/
RequestMapping(value="/recruit/selectRecruitYk")
public String selectRecruitYk(Model model,Integer pageIndex,
ModelAttribute Recruit recruit){
PageModel pageModel=new PageModel();
if(pageIndex!=null){
pageModel.setPageIndex(pageIndex);}
/**查询用户信息*/
List<Recruit>recruits=hrmService.findRecruit(recruit,pageModel);
model.addAttribute("recruits",recruits);
model.addAttribute("pageModel",pageModel);
return"recruit/recruityk";}
/***处理/login请求**/
RequestMapping(value="/recruit/selectRecruitStu")
public String selectRecruitStu(Model model,Integer pageIndex,
ModelAttribute Recruit recruit){
PageModel pageModel=new PageModel();
if(pageIndex!=null){
pageModel.setPageIndex(pageIndex);}
/**查询用户信息*/
List<Recruit>recruits=hrmService.findRecruit(recruit,pageModel);
model.addAttribute("recruits",recruits);
model.addAttribute("pageModel",pageModel);
return"recruit/recruitstu";}
/***处理/企业查询招聘信息的请求**/
RequestMapping(value="/recruit/selectRecruitCompany")
public String selectRecruitCompany(Model model,
ModelAttribute Recruit recruit){
/**查询用户信息*/
List<Recruit>recruits=hrmService.findRecruitAll(recruit);
model.addAttribute("recruits",recruits);
return"recruit/recruitcompany";}
RequestMapping(value="/recruit/previewRecruit")
public String previewRecruit(
Integer id,Model model){
Recruit recruit=hrmService.findRecruitById(id);
model.addAttribute("recruit",recruit);
return"recruit/previewRecruit";}
RequestMapping(value="/recruit/removeRecruit")
public ModelAndView removeRecruit(String ids,ModelAndView mv){
//分解id字符串
String[]idArray=ids.split(",");
for(String id:idArray){
//根据id删除招聘信息
hrmService.removeRecruitById(Integer.parseInt(id));
}
//设置客户端跳转到查询请求
mv.setViewName("redirect:/recruit/selectRecruit");
//返回ModelAndView
return mv;}
RequestMapping(value="/recruit/addRecruit")
public ModelAndView addRecruit(
String flag,
ModelAttribute Recruit recruit,
ModelAndView mv,
HttpSession session){
if(flag.equals("1")){
mv.setViewName("recruit/showAddRecruit");
}else if(flag.equals("3")){
User user=(User)session.getAttribute(HrmConstants.USER_SESSION);
recruit.setUser(user);
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(d);
recruit.setCreatetime(s);
recruit.setCompanyid(user.getId());
recruit.setModifytime("暂未更新");
hrmService.addRecruit(recruit);
mv.setViewName("redirect:/recruit/selectRecruitCompany");
}else{
User user=(User)session.getAttribute(HrmConstants.USER_SESSION);
recruit.setUser(user);
Date d=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(d);
recruit.setCreatetime(s);
recruit.setCompanyid(user.getId());
recruit.setModifytime("暂未更新");
hrmService.addRecruit(recruit);
mv.setViewName("redirect:/recruit/selectRecruit");
}//返回
return mv;
}
RequestMapping(value="/recruit/updateRecruit")
public ModelAndView updateRecruit(
String flag,
ModelAttribute Recruit recruit,
ModelAndView mv,
HttpSession session){
if(flag.equals("1")){
Recruit target=hrmService.findRecruitById(recruit.getId());
Date d=new Date();
下载提示:
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:写文章小能手,如若转载,请注明出处:https://www.447766.cn/chachong/14760.html,