摘 要
随着经济的发展,竞争的激烈,就业形式日趋严峻,为了在毕业后能够更好地适
应社会,很多在校大学生选择了从事兼职工作,一方面缓解了家庭的经济压力,更重要的是在一定程度上接触了社会,获取了一些工作经验,提高了自己的综合实力。大学生兼职已是大学校园里的一种普遍现象。
社会的发展和科学技术的进步,互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大人民群众的喜爱,也逐渐进入了每个学生的使用。互联网具有便利性,速度快,效率高,成本低等优点。 因此,构建符合自己要求的操作系统是非常有意义的。
本文以java为开发技术,建立了校园兼职系统,系统中的功能模块门主要是实现管理员;首页、个人中心、用户管理(管理员,商家,学生)、站点管理(轮播图,公告栏)、内容管理(职场资讯,资讯分类列表)等。经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与校园兼职系统实现的实际需求相结合,讨论了java开发的校园兼职系统的使用。
关键词:springboot技术;MYSQL;校园兼职系统
Design and Implementation of Spring Boot Campus Part time Summary
With the development of economy, fierce competition and increasingly severe forms of employment, in order to better adapt to the society after graduation, many college students choose to take part-time jobs. On the one hand, it alleviates the family's economic pressure, and more importantly, it contacts the society to a certain extent, obtains some work experience and improves their comprehensive strength. It is a common phenomenon for college students to take part-time jobs on campus.
With the development of society and the progress of science and technology, Internet technology is becoming more and more popular. The life style of network computer is gradually loved by the masses of the people, and has gradually entered the use of each student. The Internet has the advantages of convenience, high speed, high efficiency and low cost. Therefore, it is very meaningful to build an operating system that meets your own requirements.
This paper uses java as the development technology to establish the campus part-time system; Home page, personal center, user management (administrator, merchant, student), site management (carousel map, bulletin board), content management (workplace information, information classification list), etc. After careful research, careful preparation and planning, the test was successful and the system can be used normally. This paper analyzes the combination of the function adjustment and the actual requirements of the campus part-time system, and discusses the use of the campus part-time system developed by java.
Keywords: spring boot technology; MYSQL; Campus part-time system
目 录
计算机的普及和互联网时代的到来使信息的发布和传播更加方便快捷。人们可以通过计算机上的浏览器访问多个应用系统,从中获取一些可以满足学生生活需求的管理系统。网站系统有时更像是一个大型“展示平台”,人们可以选择所需的信息进行在线了解满足学生需求。
系统所要实现的功能分析,对于现在网络方便的管理,据数据调查显示,对于网上学生的数达到10亿以上,相比过去增长较快,人们通过网上登录的方式已经形成一种依赖,不管需要什么信息内容,直接上网查找,参考比较大,对校园兼职系统的类型和特点的内容信息有了详细的了解,让学生更有针对性的选择。这也给学生带来非常大的方便,学生可以不用像传统的方式进行查看信息,这样不仅耽误自己的时间,而且比对过程比较单一,所以校园兼职系统的开发不仅仅是能满足学生的需求,还能提高管理员的工作效率,减少原有不必要的工作量。
1.2 研究现状
随着网络技术的发展,越来越多的大学生选择在网上进行学习和生活。但是目前高校的校园兼职管理系统还没有建立起来,这给学生们带来了很大的不便。为了解决这些问题,我们设计开发了基于Java+MYSQL架构的校园兼职系统。该系统采用B/S三层结构模式,实现对用户信息、管理员信息管理以及各种业务功能等多方面管理,具有操作简便、界面友好、安全性高等特点。本文首先介绍了本课题背景与意义及国内外研究现状,然后对系统需求分析过程中所使用到的关键技术做了详细说明;接着从学校实际情况出发,结合校园兼职工作流程,提出了以“一站式”管理模式为基础,并通过对各模块功能分析来完成整个校园兼职系统的设计;最后对系统主要功能模块的代码实现进行描述。
校园兼职系统的建设不仅能提高工作效率,而且能够帮助广大在校大学生更好地参与社会实践活动。同时,也可以有效缓解当前高校毕业生就业难的现象,促进高等教育事业健康可持续发展。另外,它的推广对于我国电子商务领域的快速发展有着积极作用。总之,校园兼职系统是一种新型的管理信息系统,其应用前景十分广阔。相信未来,随着相关技术的不断完善和改进,校园兼职系统将会发挥出更大的优势。校园兼职系统是一个面向高校学生群体而又服务于所有在校学生的信息系统,它提供的各类信息查询、统计报表、在线咨询、电子投票等等都是为学生们量身定做的。因此,校园兼职系统的推广应用必将极大的方便学生,使他们在校园生活中更加便捷高效。同时,它的广泛应用还将给企业带来巨大经济效益和社会效益。此外,校园兼职系统在教育信息化进程中扮演着越来越重要的角色。校园兼职系统作为一种新兴事物,需要我们不断探索、不断创新,才能使之逐步完善和成熟起来,从而更好地为高校人才培养服务。本文正是基于这样的认识,针对目前高校校园兼职管理工作存在的一些问题,提出了一系列解决方案。首先对现有高校兼职管理现状做了简要分析,指出其面临着诸多问题;然后以软件工程理论为指导,按照“需求牵引开发”这一理念,构建了校园兼职管理系统的整体框架,并详细阐述了该系统各子系统功能及实现方法,最后介绍了该系统的实际使用情况。
1.3论文组成结构
根据市场调研得到的信息数据,结合国内外前沿研究,利用相关系统开发和设计方法,最终设计出校园兼职系统。
本文共有七章,如下所示。
第一章概述了校园兼职系统的研究目的和意义;精炼地总结了国内外在内的领域研究情况和未来的研究趋势,最后给出了论文的组成结构。
第二章简要概述了本文所用的开发技术和工具。
第三章简要对系统各业务流程进行需求分析、可行性分析。
第四章对校园兼职系统进行设计。
第五章对校园兼职系统进行实现,并贴出相关页面截图,语言描述出具体功能实现的操作方法。
第六章对校园兼职系统采用测试用例的方式来对一些主要功能模块测试,最后得出测试结果。
第七章总结全文并对未来的研究做出展望。
- 开发工具及相关技术介绍
- J2EE技术
人可以掌握多门外语,而一个计算机科学家精通的大多是编程语言,它不是人类的自然语言,比如C语言、Java、Perl等等。由于不同的公司开发出的“中间件”不够规范,所以Sun公司推出J2EE,用这个标准来解决弊病。它提供了良好的机制,让每个层次允许与之相对的服务器、组件运行,使得系统的搭建稳定可用、开发高效、维护方便。
-
- MVVM模式
MVVM模式是常用的开发模式,主要是在代码实现上将其分为M层、V层和C层。
视图(View)代表用户交互界面,一个 Web 应用就可能有很多的界面,在 MVVM 模式中,视图仅仅处理的只有数据采集、处理,还有用户的请求, 并不包括业务流程的处理,业务流程由模型(Model)来处理。
模型(Model)就是业务流程/状态的处理及业务规则的制定。模型处理业务流程的过程其它层是无法看见了的,它就像黑箱子,在接受视图请求的数据之后,然后返回最终的处理结果。MVVM 最主要的核心就是业务模型的设计,一个典型的应用例子就是目前流行的 EJB 模型,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但是它不能作为应用设计模型的框架。
控制器(Controller)可以理解为接收用户的请求,然后视图和模型匹配在一起,一起再完成用户请求。它有非常明显的作用在划分控制层上,可以很清晰地告诉你,它就是一个分发器,选择什么样的模型、视图,可以完成用户的什么样的请求。控制层不做所有的数据处理,比如说:用户点击一个连接,控制层接受到请求之后,并不处理业务信息,它只是向模型传递用户的信息,同时告诉模型做什么,然后选择符合需求的视图返回给用户。
B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题。
Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。
-
- Mysql数据库
Mysql 经过多次的更新,功能层面已经非常的丰富和完善了,从Mysql4版本到5版本进行了比较大的更新,在商业的实际使用中取得了很好的实际应用效果。最新版本的Mysql支持对信息的压缩,同时还能进行加密能更好的满足对信息安全性的需求。同时经过系统的多次更新,数据库自身的镜像功能也得到了很大的增强,运行的流畅度和易用性方面有了不小的进步,驱动的使用和创建也更加的高效快捷。最大的变动还是进行了空间信息的显示优化,能更加方便的在应用地图上进行坐标的标注和运算。强大的备份功能也保证了用户使用的过程会更加安心,同时支持的Office特性还支持用户的自行安装和使用。在信息的显示形式上也进行了不小的更新,增加了两个非常使用的显示区,一个是信息区,对表格和文字进行了分类处理,界面的显示更加清爽和具体。第二是仪表的信息控件,能在仪表信息区进行信息的显示,同时还能进行多个信息的比对,为用户的实际使用带来了很大的便捷。
针对本文中设计的校园兼职系统在实际的实现过程中,最终选择Mysql数据库的主要原因在于在企业的应用系统应用及开发的过程中会存在大量的数据库比较频繁的操作,而且数据的安全性要求也是非常的高。综合这些因素,最终选择安全性系数比较高的Mysql来对校园兼职系统后台数据进行存储操作。
- 系统分析
本系统将在经济、技术、操作这三个角度上进行可行性分析。
经过市场调研和分析、发现校园兼职系统在经济、技术、管理三个方面具有一定的可行性。在经济方面,由于校园兼职系统并非是新兴事物,而且已成一定规模,所以在开发方面不需支付太高的费用;同时在兼职信息系统投入使用后,可以为开发方、招聘者、兼职者等带来可观的经济效益和一定的社会效益,这在经济上是完全可行的。
3.1.2技术可行性分析
技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于Java语言,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用MySQL数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。
3.1.3操作可行性
校园兼职系统的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用Springboot框架开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。
软件的学生界面是最直接接触的对象,包括是否允许学生使用简单方便。请求的响应时间,主图像的整体质量,整体布局的质量。
校园兼职系统的设计基于现有的网络平台,可以实现学生管理及数据信息管理等功能。方便管理员有详细的了解及统计分析,随时查看信息状态。
基于Spring boot平台的校园兼职系统应用,启动后进入到网站可以兼职接单、学生咨询、兼职任务、完成评价等进行查看及相应操作,帮助解决常见问题,所有这些数据都将通过后台服务获得,这个服务根据时间进行同步最新数据信息。
系统功能设计是在系统开发和设计思想的总体任务的基础上完成的。该系统的主要任务是实现校园兼职系统管理,使学生可以通过指令完成整个校园兼职系统的操作。
前台用户功能:
用户注册登录:用户进行注册,登录。
学生:首页、个人中心、公告消息、职场资讯、兼职中心、我的收藏等相应操作;
商家:首页、个人中心、发布兼职、商家信息、消息中心、后台反馈等相应操作;
管理员:首页、个人中心、用户管理、站点管理、内容管理、职场资讯、公告栏、资讯分类列表等相应操作。
已注册用户的功能如下:
用户管理:用户注册为用户并登录校园学生兼职系统;用户对个人信息的增删改查,比如个人资料,密码修改。
学生管理:学生根据自己的需求进行注册登录,可对个人信息、密码进行增删修改。
用户管理:当点击“用户管理”这一菜单的时候,会出现管理员+学生用户+商家用户三个子菜单,可以对这三个模块进行增删改查操作;
内容管理:当点击“内容管理”这一菜单的时候,会出现兼职资讯+兼职资讯分类这两个子菜单,能够对用户在前台提交的兼职资讯进行管理,同时对前台展示的资讯信息进行增删改查操作
用户用例如图3-2所示。
图3-2 用户用例图
管理员用例图如下所示。
图3-2 管理员用例图
1.系统处理的准确性和机密性
系统软件应确保公司内部信息内容的机密性,以确保用户利益。系统软件应选择管理权限,操纵不同用户的应用程序管理权限,并且用户不得滥用该权限进行实际操作。系统软件应确保数据信息的安全性。另外,用户指定系统软件具有纵横比的可信度,数据信息的准确性,并且系统软件是可恢复的。
2.系统软件的开发和可扩展性
用户会在系统使用过程中不断对系统提出新要求,扩展系统功能,这就要求系统软件必须具有出色的可伸缩性,以考虑到用户的长期和易于使用的法规,用户会在系统使用过程中不断对系统提出新要求,扩展系统功能。
3.系统软件的便利性和可执行性
控制系统设计应个性化,用户界面应该做到清晰简单一目了然,操作简单方便,达到人机友好的目的。
4.系统软件的响应时间
系统软件响应速度是考虑系统软件特性的优缺点的关键参考。该系统要求响应速度短,升级解决方案快,数据交换和传输时间短以及后台管理网络服务器的响应速度快。由于系统软件用户的唯一性,系统软件必须立即有效地做出响应。并且,请务必在安全前提下确保高效的响应能力。
业务流程图(TFD)通过一些特定的符号描述业务的处理过程,它重点强调业务过程中每一项处理活动和具体业务部门的关系,选择部分模块进行具体描述。重点对本系统整体业务中最为主要的商品交易及订单业务进行描述,用户进入进行各种模块信息的浏览,选择想要购买的商品添加到购物车,用户到购物车进行所购商品查询并确认购买、填写订单信息,另外,管理人员进入后端管理,以执行该订单信息控制模块的相关管理方法,并在解决后向客户提供反馈机制。
系统业务流程图如下所示。
![](https://i-blog.csdnimg.cn/direct/9343942697be4e4fb30e4fe5f6a9f637.png)
图3-2系统业务流程图
本系统的架构设计主要分为可以3层,主要有Web层,业务层,Model层。其中web层还包括View层和Controller层,Model层包括元数据扩展层和数据访问层。
系统架构图如下所示。
![](https://i-blog.csdnimg.cn/direct/fbadf1ae55ca4c2b92887f70e8b06886.png)
图4-1系统架构图
通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。
![](https://i-blog.csdnimg.cn/direct/e1ec1f3db26642cf99c1c17468dcea69.png)
图4-2系统功能结构图
下面是整个校园学生兼职系统中主要的数据库表总E-R实体关系图。
系统E-R图如下所示。
![](https://i-blog.csdnimg.cn/direct/bef11261282345a3af40207110974dd5.png)
图4-3系统E-R图
数据库表是设计和实现系统的一个重要基础。以下列出了该校园兼职系统几个重要的数据库表。
background_feedback:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
background_feedback_id | int | 11 | 是 | 否 | 后台反馈ID |
title | varchar | 64 | 否 | 否 | 标题 |
feedback_time | date | 0 | 否 | 否 | 反馈时间 |
attach_pictures | varchar | 255 | 否 | 否 | 附加图片 |
feedback_content | text | 0 | 否 | 否 | 反馈内容 |
remarks | varchar | 64 | 否 | 否 | 备注 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
examine_reply | varchar | 16 | 否 | 否 | 审核回复 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 是 | 更新时间 |
message_center:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
message_center_id | int | 11 | 是 | 否 | 消息中心ID |
title | varchar | 64 | 否 | 否 | 标题 |
merchant_no | int | 11 | 否 | 否 | 商家编号 |
store_name | varchar | 64 | 否 | 否 | 店铺名称 |
recruitment_position | varchar | 64 | 否 | 否 | 招聘岗位 |
position_type | varchar | 64 | 否 | 否 | 岗位类型 |
student_code | int | 11 | 否 | 否 | 学生编码 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
major | varchar | 64 | 否 | 否 | 专业 |
send_content | varchar | 64 | 否 | 否 | 发送内容 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
examine_reply | varchar | 16 | 否 | 否 | 审核回复 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 是 | 更新时间 |
part_time_center:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
part_time_center_id | int | 11 | 是 | 否 | 兼职中心ID |
title | varchar | 64 | 否 | 否 | 标题 |
merchant_no | int | 11 | 否 | 否 | 商家编号 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
store_name | varchar | 64 | 否 | 否 | 店铺名称 |
shop_photos | varchar | 255 | 否 | 否 | 店铺照片 |
contact_number | varchar | 64 | 否 | 否 | 联系电话 |
store_address | text | 0 | 否 | 否 | 店铺地址 |
recruitment_position | varchar | 64 | 否 | 否 | 招聘岗位 |
position_type | varchar | 64 | 否 | 否 | 岗位类型 |
job_description | text | 0 | 否 | 否 | 岗位描述 |
hits | int | 11 | 是 | 否 | 点击数 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 是 | 更新时间 |
merchant_information:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
merchant_information_id | int | 11 | 是 | 否 | 商家信息ID |
merchant_no | int | 11 | 否 | 否 | 商家编号 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
store_name | varchar | 64 | 否 | 否 | 店铺名称 |
shop_photos | varchar | 255 | 否 | 否 | 店铺照片 |
contact_number | varchar | 64 | 否 | 否 | 联系电话 |
store_address | text | 0 | 否 | 否 | 店铺地址 |
details | longtext | 0 | 否 | 否 | 详情介绍 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 是 | 更新时间 |
Business:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
business_id | int | 11 | 是 | 否 | 商家ID |
merchant_no | varchar | 64 | 是 | 否 | 商家编号 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
store_name | varchar | 64 | 否 | 否 | 店铺名称 |
school | varchar | 64 | 否 | 否 | 所属学校 |
examine_state | varchar | 16 | 是 | 否 | 审核状态 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
user_id | int | 11 | 是 | 否 | 用户ID |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 是 | 更新时间 |
personal_information:
名称 | 类型 | 长度 | 不是null | 主键 | 注释 |
personal_information_id | int | 11 | 是 | 否 | 个人信息ID |
student_code | int | 11 | 否 | 否 | 学生编码 |
full_name | varchar | 64 | 否 | 否 | 姓名 |
gender | varchar | 64 | 否 | 否 | 性别 |
age | varchar | 64 | 否 | 否 | 年龄 |
native_place | varchar | 64 | 否 | 否 | 籍贯 |
photo | varchar | 255 | 否 | 否 | 照片 |
major | varchar | 64 | 否 | 否 | 专业 |
contact_number | varchar | 64 | 否 | 否 | 联系电话 |
department | varchar | 64 | 否 | 否 | 所属院系 |
recommend | int | 11 | 是 | 否 | 智能推荐 |
create_time | datetime | 0 | 是 | 否 | 创建时间 |
update_time | timestamp | 0 | 是 | 是 | 更新时间 |
当进入校园兼职系统的时候,首先映入眼帘的是系统的导航栏,下面是轮播图以及系统内容,其主界面展示如下图5-1所示。
前台首页界面图如下图所示:
![](https://i-blog.csdnimg.cn/direct/9a36afe4b2844b8b9ef7ced50398eb60.png)
图5-1前台首页界面图
登录系统主要代码如下。
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
在校园兼职系统中的前台上注册后的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到校园兼职系统的首页中;否则将会提示相应错误信息。
用户登录界面如下图所示:
![](https://i-blog.csdnimg.cn/direct/704127a07dd74c89a07b62d77839dfa2.png)
-
-
- 用户注册界面
-
主要用于用户注册,在这个页面中用户要填写用户名,密码,姓名,地址和Email等信息,并且各项信息都不能为空。用户也可以点击修改个人资料和密码。系统管理员对已注册用户的信息可进行确认,可将用户列为正式用户,也可以将其删除。一般注册了的用户默认都是正是用户,前提是管理员没有删除该账号。用户在注册成功以后,才可登录系统。
用户注册界面如下所示。
![](https://i-blog.csdnimg.cn/direct/60814f2df4ed4e3fa605f0a8cfb17c34.png)
图5-2.2用户注册界面
用户注册的关键代码如下。
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
-
-
- 公告栏界面
-
当点击导航栏上的“公告栏”的时候,就会进入对应的界面查看公告信息,
公告栏界面如下图所示:
![](https://i-blog.csdnimg.cn/direct/de10360db9424c529ddeb6174fad676c.png)
图5.2.3公告栏界面
公告栏界面代码如下:
@Transactional
public Map<String, Object> add(HttpServletRequest request) throws IOException {
service.insert(service.readBody(request.getReader()));
return success(1);
}
@Transactional
public Map<String, Object> addMap(Map<String,Object> map){
service.insert(map);
return success(1);
}
public Map<String,Object> readBody(BufferedReader reader){
BufferedReader br = null;
StringBuilder sb = new StringBuilder("");
try{
br = reader;
String str;
while ((str = br.readLine()) != null){
sb.append(str);
}
br.close();
String json = sb.toString();
return JSONObject.parseObject(json, Map.class);
}catch (IOException e){
e.printStackTrace();
}finally{
if (null != br){
try{
br.close();
}catch (IOException e){
e.printStackTrace();
}
}
}
return null;
}
public void insert(Map<String,Object> body){
StringBuffer sql = new StringBuffer("INSERT INTO ");
sql.append("`").append(table).append("`").append(" (");
for (Map.Entry<String,Object> entry:body.entrySet()){
sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
}
sql.deleteCharAt(sql.length()-1);
sql.append(") VALUES (");
for (Map.Entry<String,Object> entry:body.entrySet()){
Object value = entry.getValue();
if (value instanceof String){
sql.append("'").append(entry.getValue()).append("'").append(",");
}else {
sql.append(entry.getValue()).append(",");
}
}
sql.deleteCharAt(sql.length() - 1);
sql.append(")");
log.info("[{}] - 插入操作:{}",table,sql);
Query query = runCountSql(sql.toString());
query.executeUpdate();
}
-
-
- 兼职中心界面
-
当学生点击校园学生兼职系统中导航栏上的“兼职中心”后将会进入到该“兼职中心列表”的界面,然后选择想要看的招聘信息,点击进入到详细界面,在详细界面可以搜索店铺招聘信息+收藏+资询等操作
兼职中心界面如下图所示:
![](https://i-blog.csdnimg.cn/direct/08029596001f44b5a896cac71b6f8ff1.png)
图5-2.4兼职中心界面
兼职中心界面主要代码如下。
public Map<String, Object> getList(HttpServletRequest request) {
Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
return success(map);
}
-
-
- 兼职信息详情界面
-
当用户点击了搜索任一兼职后将会进入该款兼职信息的详情界面,可以了解到该兼职信息的店铺名称、店铺地址、商家编号、联系方式、招聘岗位、招聘对象、招聘薪资、招聘人数、招聘时间、等,同时可以对该兼职信息进行收藏+评论+点赞,兼职信息详情展示页面如图5-2.5所示。
兼职信息详情界面如下图所示:
![](https://i-blog.csdnimg.cn/direct/3e55b5b00e1d4542998fea1065cd386c.png)
图5-2.5兼职信息详情界面
5.3系统后台主要功能实现
5.3.1用户管理的实现
校园学生兼职系统中的管理人员是可以对前台注册的学生用户、商家用户进行管理的,也可以对管理员进行管控。
用户管理界面如下图:
![](https://i-blog.csdnimg.cn/direct/6ae778528e6646eebf6c5065629256cf.png)
图5-3.1用户管理界面
用户管理的逻辑代码如下。
public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
log.info("进入方法");
if (file.isEmpty()) {
return error(30000, "没有选择文件");
}
try {
//判断有没路径,没有则创建
String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";
File targetDir = new File(filePath);
if (!targetDir.exists() && !targetDir.isDirectory()) {
if (targetDir.mkdirs()) {
log.info("创建目录成功");
} else {
log.error("创建目录失败");
}
}
String fileName = file.getOriginalFilename();
File dest = new File(filePath + fileName);
log.info("文件路径:{}", dest.getPath());
log.info("文件名:{}", dest.getName());
file.transferTo(dest);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", "/api/upload/" + fileName);
return success(jsonObject);
} catch (IOException e) {
log.info("上传失败:{}", e.getMessage());
}
return error(30000, "上传失败");
}
5.3.2管理员登录界面
管理员在首页通过管理员账号登录以后,就可以进入后台管理,通过后台登录窗口进行输入用户名、密码、角色靠等信息,进行登录,
管理员登录界面如下图所示:
![](https://i-blog.csdnimg.cn/direct/1c6d7a78ca2945ec8c061583c079a81d.png)
图5-1管理员登录界面
管理员登录主要代码如下。
@RequestMapping(value = {"/sum_group", "/sum"})
public Map<String, Object> sum(HttpServletRequest request) {
Query count = service.sum(service.readQuery(request), service.readConfig(request));
return success(count.getResultList());
}
5.3.3商家功能模块
商家通过登录后台管理,进入页面可以进行首页、个人中心、学生用户管理、兼职接单管理、学生咨询管理、兼职任务管理、完成评价管理、后台反馈等功能模块,进行相对应操作,
商家功能界面如下图所示:
![](https://i-blog.csdnimg.cn/direct/f9cad4ca017b481d8efe30f41dabd7ef.png)
图5-1商家管理界面
商家管理主要代码如下。
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
- 系统测试
- 系统测试的概念
对于系统开发的实现,不管开发过程多么努力,在系统运行的时候多少都会出现一些错误信息,所以为了系统的安全性及提高系统的使用率及给学生带来更好的体验,系统在完成之前,一定要进行一遍系统的测试,再完美的程序也会有纰漏,再细心的技术开发员也会有疏忽的时候,所以对于程序的测试是必须要做的一步。通过系统测试找到系统存在的问题,并根据问题的原因进行在线解决问题,如果找不到解决问题的办法可以进行通过咨询指导老师或者通过同学帮忙,一定将问题找出,否则将会出现更多的错误。所以程序出现错误时不可避免,系统测试虽然耗时费力,但是为了确保后期系统的长期使用,必须要进行系统测试,问题解决完成后还要再一步测试,直到没有任何问题后方可进行使用。
功能性测试是指执行指定的工作流程,通过对一个系统的所有特性和功能都进行测试确保符合需求和规范。
系统功能性测试表如下表所示。
表6-1系统功能性测试表
编号 | 测试功能 | 测试内容 | 测试结果 |
1 | 用户登录 | 1.验证用户名与密码的正确性。 2.验证密码是否可见。 | 通过 |
2 | 首页展示 | 1.首页数据是否成功加载。 2.验证搜索功能的准确性。 3.验证是否可以异步加载。 4.验证导航栏按钮。 | 通过 |
3 | 个人信息修改 | 1.验证登录名是否可以正常更改。 2.验证联系方式是否可以更改。 3.验证收货地址可以正常修改。 4.验证密码是否可以修改。 | 通过 |
4 | 评论添加 | 1.验证评价数据准确性与完整性。 2.验证评价提交是否能成功展示。 | 通过 |
5 | 商家管理 | 1.验证类目新增是否可以成功。 2.验证类目删除是否可以成功。 | 通过 |
6 | 用户管理 | 1.验证用户录入功能。 2.验证用户违规清理功能。 | 通过 |
第一个测试阶段:系统软件的操作界面由几个子控制模块组成,每个子控制模块都有其相对的作用。因此,系统软件的检测必须首先进行控制模块的检测。每个控制模块必须执行明确定义的子功能。测试控制模块的目的是确保每个控制模块都可以作为一个模块运行。
第二个测试阶段:集成检测是根据设计方案的软件体系结构,按照某种对策对经过控制模块检测的各个控制模块进行组装,并在整个组成过程中进行必要的检测。
第三个测试阶段:客户将执行校园兼职系统的工程验收。系统测试后,所有控制模块均已根据设计计划组装成详细的校园兼职系统。错误的插槽已被移除,操作接口必须进一步认证成效。
系统软件可以在运行过程中执行其相关功能,可以完成查询,添加,删除,修改等功能,并且运行显示信息都正常,后端管理数据库查询也可以正常工作,数据信息确保一致性和可靠性。
至此,校园兼职系统已经结束,在开发前做了许多的准备,在本系统的设计和开发过程中阅览和学习了许多文献资料,从中我也收获了很多宝贵的方法和设计思路,对系统的开发也起到了很重要的作用,系统的开发技术选用的都是自己比较熟悉的,比如Web、ssm技术、MYSQL,这些技术都是在以前的学习中学到了,其中许多的设计思路和方法都是在以前不断地学习中摸索出来的经验,其实对于我们来说工作量还是比较大的,但是正是由于之前的积累与准备,才能顺利的完成这个项目,由此看来,积累经验跟做好准备是十分重要的事情。
当然在该系统的设计与实现的过程中也离不开老师以及同学们的帮助,正是因为他们的指导与帮助,我才能够成功的在预期内完成了这个系统。同时在这个过程当中我也收获了很多东西,此系统也有需要改进的地方,但是由于专业知识的浅薄,并不能做到十分完美,希望以后有机会可以让其真正的投入到使用之中。
参考文献
[1]董佳琳,刘聪慧,陆庆虹.基于江苏省在校大学生兼职的现状分析和权益保护调研[J].新经济,2022(07):73-77.
[2]周爱华,李艳涛,魏雨祺.北京高校大学生兼职对学业和就业影响实证研究[J].合作经济与科技,2022(14):103-105.DOI:10.13665/j.cnki.hzjjykj.2022.14.066.
[3]朱蕤洁.劳动法治教育视角下高职院校学生课外兼职的现状、问题与对策——以厦门市A校为例[J].江西电力职业技术学院学报,2022,35(02):116-118.
[4]熊艳青,牛新春.大学生兼职影响其学业成绩吗?——来自元分析的证据[J].复旦教育论坛,2022,20(01):62-70.DOI:10.13397/j.cnki.fef.2022.01.008.
[5]苏日古嘎.大学生兼职权益维护探析[J].法制博览,2022(01):149-151.
[6]周渠岸.校园兼职平台的设计与实现[J].电子技术,2021,50(10):70-71.
[7]刘颂迪. 大学生社会兼职的问题及其治理对策研究[D].云南师范大学,2021.DOI:10.27459/d.cnki.gynfc.2021.001273.
[8]Fuyuan Cheng. Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework[J]. Advances in Educational Technology and Psychology,2021,5(2).
[9]Guanhong Chen,Jiangming Xu. Design and implementation of efficient Learning platform based on SpringBoot Framework[J]. Journal of Electronics and Information Science,2020,6(1).
[10]陈嘉乐.“互联网+”校园家教兼职平台的设计[J].现代信息科技,2020,4(04):119-121.DOI:10.19850/j.cnki.2096-4706.2020.04.034.
[11]马英瑞,刘美君,李宏博.Web平台上校园兼职系统的设计与实现[J].福建电脑,2019,35(10):68-69.DOI:10.16707/j.cnki.fjpc.2019.10.022.
[12]骆汛枫,张永康,林宏濠,唐嘉浩.智能校园兼职平台的设计与应用[J].电脑知识与技术,2019,15(28):76-79.DOI:10.14004/j.cnki.ckt.2019.3555.
[13]张冬,田艳.校园兼职信息管理系统分析与设计[J].软件工程,2019,22(07):37-39.DOI:10.19644/j.cnki.issn2096-1472.2019.07.012.
[14]邹礼均,杨忠祥,向小林,李盟,李奎. 大学生安全教育与管理[M].重庆大学出版社:, 201805.261.
致谢
时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。
首先感谢我的导师,在您的细心指导下我才能快速的掌握系统的相关功能,在您的大力帮助下我才能将课本上的知识与自己的项目结合,真正的做到学以致用。感谢您经常牺牲自己的休息时间,利用其丰富的教学和项目经验对我进行指导。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。
免费领取项目源码,请关注❤点赞收藏并私信博主,谢谢-