基于Java web的大学生就业信息管理系统的设计与实现
分类: Java springboot MySQL 专栏: java springboot Mysql 标签: 基于Java web的大学生就业信息管理系统的设计与实现
2023-01-05 14:35:36 1167浏览
本 科 毕 业 设 计 报 告
题 目: 基于Java Web的大学生就业
信息管理系统的设计与实现
学 院: 计算机与人工智能学院
专业班级:
学 号:
姓 名:
指导教师: 职称: 副教授
20xx年06月06日
基于Java Web的大学生就业信息管理系统的设计与实现
摘 要
随着高校招生规模扩大,高校毕业生逐渐增加,有关毕业生、用人单位等信息量也成倍增长,造成毕业生就业存在一定的盲目性。因此,开发设计一个功能较为全面,简单易操作的毕业生就业信息管理系统。可以为毕业生提供一个良好的信息化平台,解决高校就业信息的系统化管理,方便学生找到合适的工作,提高院校管理毕业生就业信息的效率。
大学生就业信息管理系统的整体结构框架是依照软件工程的基本原则进行开发,系统以Eclipse平台作为开发环境,采用Spring boot框架技术,选择MySQL关系型数据库,实现后台数据的存储与管理,前端开发技术利用Web应用开发中的组件Freemarker,运用B/S架构实现数据交互来完成系统开发。
大学生就业信息管理系统主要为毕业生提供方便,在一定程度上解决学校对毕业生就业情况的了解,在本系统中由系统管理员和辅导员对就业信息进行发布,毕业生通过系统查看到招聘信息,毕业生可以搜索与自己专业相关的岗位或通过就业城市进行选择等。管理员和辅导员可以查看到已就业的信息,通过饼状图或柱状图显示。经过系统测试,本系统运行稳定、扩展性强,可以应对各大高校的人才管理需求,具有一定的实用价值。
关键词:大学生就业信息管理系统;MySQL数据库;Spring boot
Design and Implementation of College Students Employment Information Management System Based on JAVA Web
Abstract
With the expansion of college enrollment scale and the gradual increase of college graduates, the information about graduates and employers also grows exponentially, resulting in a certain degree of blindness in the employment of graduates. Therefore, it’s necessary to develop and design a more comprehensive function, simple and easy to operate the graduate employment information management system. It can provide a good information platform for graduates, solve the systematic management of college employment information, facilitate students to find suitable jobs, and improve the efficiency of employment information.
The overall structure and framework of the college students' employment information management system is developed in accordance with the basic principles of software engineering. The system takes the Eclipse platform as the development environment, adopts the Spring Boot framework technology, and chooses the MySQL relational database to realize the storage and management of background data. Front-end development technology utilizes Freemarker, a component in Web application development, and uses B/S architecture to realize data interaction to complete system development.
College students' employment information management system provides convenient, mainly for the graduates to a certain extent, solve the school understanding of graduate employment situation, in this system by the system administrator and counselors to release of employment information, graduates see the recruitment information through the system, graduates can search related to my major jobs or through employment selection of cities, etc. Administrators and counselors can view the employment information, which is displayed in a pie chart or bar chart. After the system test, the system runs stably, the expansibility is strong, can respond to the talent management needs of universities, has a certain practical value.
Key words: College students employment information management system; MySQL database; Spring boot
目 录
1 绪论
大学生就业信息管理系统是各大高校统计就业信息的重要工具之一。随着高校招收人数逐年增长以及教育制度的改革,毕业生人数在不断增加,而工作岗位所需人才数目基本保持不变,所以毕业生面临就业难等问题。因此,开发和设计一套大学生就业信息管理系统,促进学生就业和高校对学生的培养,解决当前大学生就业工作管理的不足。因此建立一个功能相当完善的、界面友好、可操作性强的就业管理系统,对用人单位在网上发布招聘信息,管理毕业生的基本情况,学生的就业条件和意向,建立毕业生和用人单位的联系,在网上设计一个虚拟的人才市场,构建了一个就业工作全过程化的信息管理系统。
大学生就业信息管理系统是典型的数据管理系统,在开发过程中主要包括数据库的搭建和日常维护以及页面设计等方面。
1.1 系统研究的背景和意义
本次设计开发中采用网页编程工具、JSP技术以及数据库等相关技术,在网上设计一个虚拟的招聘信息平台,企业(在本系统中管理员/辅导员均充当企业用户)可以在网上发布招聘信息,学生可发布自己的就业条件及意愿,建立毕业生和用人单位的联系。该系统能够为用户提供充足有效的信息和快捷的查询手段,本软件就是基于这样背景下开发设计的。
近年来,由于全国各大院校的逐年扩招,导致毕业人数剧增,因此就业就变成毕业生最为严峻的问题,每个合格的大学毕业生都都将就业途径视为命脉,“毕业生就业信息管理”平台正是提供这种途径的有效方式之一,具有极度的实用性和应用价值。
1.2 系统的目标
本文主要对大学生就业管理进行详细的研究,通过浏览其他相关设计和分析最终实现了本系统。本系统最突出的优势是可以以饼状图或者柱状图显示就业情况(包括考研、就业、自主创业和待业),建立了企业和学校以及毕业生之间的桥梁,使学生通过简单地方式查看招聘信息以及选择心仪的单位和就业城市。
此文章的重点是通过数据库和页面直接进行传送数据,实现数据交互,给毕业生提供简单快捷的求职方式,确定好系统所需的结构(B/S结构),构思并分析该系统的核心工作,设计相关的数据库,绘制E-R图并进行了数据库概念模型向逻辑模型的转换,将系统划分为功能不同的子模块,在此基础上,实现系统的主要功能,并对主要功能进行详细设计,最后以不同的测试方式对系统进行测试,保证系统的流畅性和正常运行。
1.3 研究内容及相关要求
(1)研究内容
① 设计学生基本情况登记表、学院专业信息表、辅导员基本信息表、就业信息登记表、招聘信息基本表等;
② 实现毕业生就业信息提交和单位招聘信息的发布以及公告信息的发布等;
③ 研究基于Java Web的大学生就业信息管理的设计与实现以及系统具备的基本功能。
(2)相关要求
① 相关技术要求:系统设计采用Spring boot框架技术等,要求学生能够以严谨的科学态度来研究,能运用所学的理论,同时结合先进的实现技术来完成此课题的设计。
② 功能要求:每个大学毕业生可以登录本系统查看个人基本信息和招聘信息及公告信息等,管理员可以管理所有学生和辅导员并做相应的编辑等操作,管理员可以查看到学校的就业统计图可以根据学院查看各学院你的就业情况等,辅导员可以通过本系统了解学生的就业情况以及就业统计图。
1.4 文章结构
本文共有六个章节,具体内容有以下几点:
第一章从国内外对大学生就业信息管理系统的研究和设计,研究其中的背景和意义,分析了该系统具有的功能模块以及相关的意义,同时结合国内外发展状况及发展历史,对本文进行展开讨论。
第二章对本系统所用到的相关技术以及开发环境做了详细介绍。
第三章分析系统的需求分析,在此基础上,首先对系统的可行性研究进行了分析,其中包含操作可行性、技术可行性以及运行可行性;其次对系统所具备的基本功能进行了详细描述;最后以用例图的形式对系统的需求进行分析。
第四章系统的总体设计,主要包括总体设计概述、系统总体功能的划分以及数据库的相关设计,详细阐述了这个系统的功能、根据需求分析设计相关所需的实体以及各实体之间的关系模型。
第五章阐述了系统的详细设计与实现,详细介绍了系统的组织结构以及在开发过程中的配置问题,对系统前后台的设计作出详细的说明和分析,并在此基础上给出主要功能的运行实现图,并对实现图是如何实现的进行详细的分析阐述。
第六章对系统进行各种测试以及结论做了详细的说明,并对此设计做了总结和对未来的展望。
2 相关技术以及项目环境介绍
2.1 Spring boot框架技术介绍
Spring boot是一种简化的Spring框架,其目的是为了简化Spring web开发设计,与原来的相比较,如今的技术产生了巨大变化,提高了其开发效率,减少了其中不必要的环境配置。Spring boot具有以下几个特点:
(1) 可自动配置环境Spring boot的自动环境配置就是系统程序安装某种程序时会自动配置环境;
(2)不需要独立的配置XML,打开自动生成;
(3)拥有很多自动配置功能,减轻开发过程中繁重的任务等。
2.2 Spring MVC技术介绍
Spring MVC是Spring的其中一部分,其分离了模型对象和控制器对应用程序的处理工作。其工作原理可简要描述为:
前端用户发出请求,控制层接收到请求而不做处理,将其传输给解析器进行相关的操作;
请求到达处理器的映射,主要通过mapping进行相关的映射;
通过拦截处理进行相关的拦截后操作,最终进行视图的渲染操作。其工作原理如图2-1所示。
图2.1 spring MVC处理流程图
2.3 前端开发技术介绍
在介绍前端开发技术之前,首先简单的介绍Freemarker技术,Freemarker是一种模板引擎技术,使用纯Java语言编写,被生成HTML页面,尤其在MVC中使用最为广泛,但Freemarker并不是Web应用开发的框架,而是作为Web应用开发框架的一个组件。
在使用Spring boot框架开发项目时,在src/main/resources文件夹下,通常会包含两种不同类型显示页面的文件,分别是templates和static,通常情况下,Spring boot默许将静态页面存放在static文件夹中,而动态页面都会寄存在templates文件中。在动态页面中会引用Thymeleaf组件,从而起到项目中controller层对页面的重定位问题。
2.4 MySQL关系型数据库介绍
MySQL是一种关系型数据库,所谓的关系型数据库简单地说就是一张二维表格,一个关系型数据库由一个或多个数据表(二维表)组成。在关系型数据库中,其最大的特点就是事务一致性。关系型数据库有很多优点,其中容易理解,使用简单,容易日常维护,并且支持SQL语句。但也存在不可避免的缺点,在维护中读写性能较差,具有固定的表结构。
2.5运行环境分析介绍
为了使系统良好的运行,以及方便开发和后期的调试,系统需要一个稳定的开发环境才能使工作顺利进行。本系统选用Eclipse作为系统的开发平台,选用MySQL5.5.19系统数据库。使用Java、HTML、Javascript为开发语言。选用亿图图示作为系统原型设计软件。系统开发环境配置如表2.1所示,客户端要求如表2.2所示。
表2.1 系统开发环境配置
名称 | 软件名称 |
系统开发平台 | Eclipse |
数据库 | MySQL5.5.19 |
开发语言 | Java、HTML、Javascript |
原型设计软件 | 亿图图示 |
表2.2 客户端需求表
名称 | 要求 |
处理器 | 4G及以上 |
操作系统 | Win10 |
浏览器版本 | 谷歌浏览器 |
3 系统需求分析
3.1系统可行性研究分析
3.1.1 操作可行性
本系统以统计就业情况和发布招聘信息为主要目的,本着以页面美观、简洁直观、使用方便为目的,无论是哪种用户操作系统都简洁明了,在操作上基本没有太多困难。
3.1.2 技术可行性
基于Java Web的大学生就业管理系统主要有前端、后台以及网络所实现的。在开发本项目所运用的框架为Spring boot框架,用Eclipse开发工具开发项目,系统登录及操作界面运用谷歌浏览器显示,在本项目中所用到的数据库为MySQL,操作系统是Win10系统。所以在技术上是可行的。
3.1.3运行可行性
伴随着互联网的高速发展,互联网几乎遍及各个领域,从而导致很多应用APP的产生,所以开发一个简单的Web系统技术已经非常成熟,项目完成本地开发之后,部署在服务器端,通过完成测试,这一系列工作完成后,确保安全可行的,就可以在外网上可以访问网站系统。
3.2系统具备的基本功能
大学生就业管理系统主要包括系统界面和数据库的连接,实现数据的传输,系统的界面设计美观、功能完备、易于操作等特点。数据库的设计有一定的完整性、安全性等。
(1)毕业生就业信息管理系统操作界面
前端操作作为用户与数据库的连接,操作简洁,主要目的是让用户体验该系统的主要用途,前端操作主要针对不同用户对系统的操作,对于每种用户都可以查看公告信息、招聘信息,在招聘信息栏中,可以看见已发布的招聘信息,毕业生也可以根据自己所需职位、理想的企业类型、公司规模的大小以及工作地点来检索发布的招聘信息。公告信息栏用户可以查看公告信息以及根据标题搜索想看的公告细信息。中心概况栏目里面可以了解自己所在学校的发展历史以及现任领导干部等情况。
(2)毕业生子系统系统界面及功能
毕业生根据学号和密码登录系统进入学生登录页面,在系统中毕业生可以查看个人基本信息是否有误,最重要的功能是毕业生提交就业信息,反馈自己的就业情况,在提交就业信息模块中,学生根据自己的情况提交就业信息,主要包括就业、考研、自主创业和待业等类型,若选择就业须填写详细的就业信息,包括公司名称、单位类型、所属行业、公司地址、公司联系人及电话、就业城市、应聘岗位以及月薪等基本情况的说明,最后上传就业协议图片,点击提交后,辅导员可以查看提交的就业信息并作相应的处理操作。若选择考研需要填写报考学校及专业并上传考研成绩单。若选择自主创业则需要填写创业地点及项目名称等信息。
(3)管理员子系统界面及功能
管理员子系统主要包括管理学生信息、管理辅导员信息、管理学院信息、管理专业信息、班级信息、管理招聘信息、管理公告信息、就业统计总图、就业统计柱状图、修改密码和退出登录等功能。在所罗列的基本功能上有相应的增删改查等操作。
(4)辅导员子系统界面及功能
辅导员子系统主要包括管理学生信息,这里所管理的学生只包括辅导员所在学院的学生信息、待审核就业信息、审核通过信息、审核不通过信息、管理招聘信息、就业统计总图、就业统计柱状图、修改密码以及退出登录等操作。在审核就业信息过程中,给予审核通过或不通过的原因和说明。
3.3 系统需求分析
3.3.1系统需求分析
毕业生就业管理系统主要有以下几类用户:第一类是管理员用户,第二类是辅导员用户,第三类是毕业生用户。
管理员是系统体系用户权限最高的用户,他可以管理所有学生信息、管理所有辅导员信息、发布公告信息等功能,对整个系统进行管理和维护。
辅导员在本系统中所承担的主要职责是对本学院学生提交的就业信息进行审核和处理操作,也可以发布招聘信息等。
学生用户在系统中可以查看个人基本信息和提交就业信息等操作。
3.3.2系统的用例分析
用例分析是一个信息系统需求与设计之间的桥梁,而用例图的设计就是为开发者把用户提出的产品需求转化为系统需求而提供方便。
通过对系统各子功能模块进行分析,其次确定系统的参与者,最终创建了该系统的用例图。其中用例图是参与者所能观察到的系统功能的模型图,它所呈现了一些参与者、一些用例以及他们之间的关系。
在该系统中,设置一个系统管理员的角色,主要负责对辅导员以及学生基本信息的管理,但也可以在前台登录管理员账号,并实现辅导员用户可以实现的各种操作,即管理员也可以是辅导员的角色。
毕业生就业信息管理系统中不同角色的用例图如图3.1、3.2和3.3所示,其中清晰、直观的反映出不同参与者与不同用例之间的联系。
图3.1 系统管理员用户用例图
图3.2 系统学生用户用例图
图3.3 系统辅导员用户用例图
时序图的主要构成有:角色、对象、生命线、控制焦点、消息、自关联消息以及组合片段,时序图主要描述的是关于系统在参与者的动作下,内部多个对象之间的动态协作。本次设计的系统用户时序图和系统管理员管理学生时序图如图3.4和3.5所示。
图3.4 辅导员用户时序图
图3.5 管理员管理学生时序图
4 总体设计
4.1 总体设计概述
总体设计最主要的目标是解决系统是如何实现的问题,也叫概要设计。设计的目标主要实现需求分析所完成的功能。
在总体设计中,使用模块化的实现,把复杂问题简单化,分解成小模块易于解决。每个小模块完成一个特定的子功能模块。将这些划分的模块组合成一个整体。完成相应的功能模块,来解决相应的要求。
4.2 系统功能结构划分
通过对系统的需求分析,整个系统整体可由以下三个部分组成:毕业生子系统、管理员子系统、辅导员子系统。系统功能结构图如图4.1所示。
图4.1 系统总结构图
系统各功能模块的详细描述见表4.1所示,其中描述了每个功能结构里子模块具体要实现的功能点。
表4.1 系统功能结构图的描述
模块名称 | 模块子功能描述 |
辅导员管理学生信息 | 1.根据名字或者学号或学院搜索学生信息 2.查看学生详情 3.导出学生信息 4.导出就业信息(就业、考研、自主创业、待业) |
辅导员待审核就业信息 | 1.根据学号、名字搜索学生 2.审核学生提交的就业信息 |
审核通过信息 | 1.根据名字或者学号搜索学生 2.根据专业或者班级搜索学生 3.对学生提交的就业信息进行审核操作 |
管理招聘信息 | 1.根据标题搜索招聘信息 2.添加招聘信息 |
就业统计总图 | 1.查看就业统计图(以饼状图显示) 2.根据学院、毕业年份对就业情况进行查看 |
就业统计柱状图 | 1.根据学院搜索就业情况统计 2.根据就业城市或者企业类型进行查看就业统计 |
管理员管理学生信息 | 1.根据名字或者学号搜索学生 2.清空学生基本信息表 3.添加学生 4.导出学生基本信息 5.查看学生详情 6.对学生密码进行初始化 7.编辑学生信息 8.删除学生 |
管理员管理学院信息 | 1.搜索学院 2.添加学院 3.编辑学院信息 4.删除学院信息 |
表4.1 系统功能结构图的描述 续表
模块名称 | 模块子功能描述 |
管理辅导员信息 | 1.搜索辅导员 2.添加辅导员 3.对辅导员密码进行初始化 4.编辑辅导员信息 5.删除辅导员信息 |
管理员管理专业信息 | 1.搜索专业 2.添加专业 3.编辑专业信息 4.删除专业信息 |
班级信息 | 1.根据学院搜索班级 2.添加班级信息 3.编辑班级信息 4.删除班级信息 |
管理员管理公告信息 | 1.根据标题搜索公告信息 2.添加公告 3.查看公告详情 4.编辑公告 5.删除公告 |
学生用户登录系统 | 1.个人基本信息 2.提交就业信息 3.修改密码 4.退出登录 |
管理员管理公告信息 | 1.根据标题搜索公告信息 2.添加公告 3.查看公告详情 4.编辑公告 5.删除公告 |
在总体设计阶段需要确定每个模块的功能。
4.3 数据库设计
根据数据结构和系统需求分析,设计出满足本次开发系统中所需求的各类实体以及各实体之间的关系。在此设计中所参与到的实体有管理员实体、毕业生实体、公告信息实体、就业情况实体和辅导员等实体。
4.3.1数据库概念结构设计
实体所具有的特性称之为实体属性。每个实体可以有一个或多个属性来描述。系统开发过程中涉及到的各实体属性经过分析如下:
(1)招聘信息
招聘信息实体中含有工作地址、公司名称、企业类型、企业地址、所属行业、发布职位、标题、内容、招聘人数、企业邮箱、招聘负责人电话、招聘负责人称呼、面试时间、面试地点、面试说明、薪资待遇、企业规模、公司福利、公司介绍以及是否在首页显示20个属性,其E-R图如图4.4所示。
图4.4 招聘信息实体属性图
(2)管理员
管理员实体包含管理员id、姓名和密码三个属性,该实体的E-R图如图4.2所示。
图4.2 管理员实体属性图
(3)毕业生
毕业生实体中包含学生编号、密码、入学时间、毕业时间和班级等11个属性,其E-R图如4.3图所示。
图4.3 毕业生实体属性图
(4)就业情况
就业情况实体中包含学生编号、就业类型、单位地址、单位联系电话、第三方协议图片、所属行业、职位、单位性质、毕业学校、自主创业地址、自主创业公司名称、审核状态、审核时间、审核不通过理由、公司地址和薪资待遇等20个属性,其E-R图如图4.5所示。
图4.5 就业情况实体属性图
(5)辅导员
辅导员实体包含辅导员英文名字、姓名、密码以及管理班级4个属性,其E-R图如图4.6所示。
图4.6 辅导员实体属性图
(6)公告
公告实体中包含标题、内容、创建时间、角色、角色id以及发布公告人的姓名,其E-R图如图4.7所示。
图4.7 公告实体属性图
(7)班级
班级实体中包含班级名称、人数、学院以及专业4个属性,其E-R图如图4.8所示。
图4.8 班级实体属性图
图4.9 系统总体E-R图
4.3.2数据库的逻辑结构设计
数据库的逻辑结构设计是一种独立的数据模型,在实际操作中,一般使用的数据库环境已经提前设定好(如SQL或者MYSQL等)。当前使用的数据库基本都属于关系型数据库,首先需要将实体关系图转化成关系模型,然后再进行数据库的转化并优化数据库。
管理员表(管理员id,用户名,密码)
学院表(学院id,学院名称)
专业表(专业id,专业名称,学院id)
学生表(学生id,学号,身份证,性别,出生日期,电话,邮箱,政治面貌,民族,学院,专业,入学时间,姓名,密码,班级,毕业年份,是否提交就业信息)
班级表(班级id,班级名称,人数,学院,专业)
辅导员表(辅导员id,用户名,密码,姓名,学院)
就业信息表(就业信息id,学生id,就业类型,公司名称,公司类型,公司地址,公司联系人,公司电话,邮编,就业合同图片,公司服务领域,公司职务,公司性质,考研学校,考研专业,备注,创建时间,自主创业地址,创业项目名称,审核,审核时间,审核不通过原因,辅导员id,就业城市,工资)
公告信息表(公告id,标题,内容,创建时间,角色,角色id,姓名)
招聘信息表(招聘信息id,公司名称,公司类别,公司地址,公司服务领域,工作岗位,标题,内容,招聘人数,邮箱,电话,面试联系人姓名,面试时间,面试地址,面试备注,创建时间,薪资,公司人数规模,发布者id,是否在首页显示)
4.3.3 数据库物理结构实现
在本系统中所设计的数据库为关系型数据库,所以设计数据库最关键的是对二维表的设计。通常情况下二维表是关系型数据库中的关系模型。除了本文所所介绍的关系数据库模型之外,还有其他与之相关的关系模型也需要了解,才能做到很好的对关系模型进行相关的设计。下面就对关系,元组,关键字,域,属性等常见的概念做以简单的介绍。
关系:通常情况下关系就在数据库设计中就是一张简单的数据表,每张表都有对应的表名,简而言之,每个关系都有相应的名字,这与数据表名字相互统一;
元组:数据表中的每一行记录就代表一个元组;
关键字:数据表中有主外键之分,关键字通常情况下就是表中的主键;
属性:数据表中的每个字段代表属性,在数据表中每一列代表一个属性;
域:域就是对数据表中属性的取值进行限定;
对数据表中的概念了解之后,下面就通过绘制的E-R图完成相应的表结构设计,并在数据库中创建相应的数据表,并对每个表进行合理的命名。以下就对设计的结果通过表格形式进行展示。
表4.1 Tb_admin管理员
字段 | 注释 | 是否为空 | 默认 | 类型 |
adminId | Id | 否 | Int(11) | |
adminName | 用户名 | 是 | NULL | Varchar(255) |
adminPwd | 密码 | 是 | NULL | Varchar(255) |
表4.2 学院tb_college
字段 | 注释 | 是否为空 | 默认 | 类型 |
cid | Id | 否 | Int(11) | |
cname | 名称 | 是 | NULL | Varchar(255) |
表4.3 专业tb_professional
字段 | 注释 | 是否为空 | 默认 | 类型 |
pid | Id | 否 | Int(11) | |
pname | 专业名称 | 是 | NULL | Varchar(255) |
cid | 学院id | 是 | NULL | Varchar(255) |
表4.4 班级tb_class
字段 | 注释 | 是否为空 | 默认 | 类型 |
cid | 否 | Int(11) | ||
cname | 班级名称 | 是 | NULL | Varchar(255) |
cnum | 人数 | 是 | NULL | Varchar(255) |
college_id | 学院 | 是 | NULL | Varchar(255) |
professional_id | 专业 | 是 | NULL | Varchar(255) |
表4.5 学生tb_student
字段 | 注释 | 是否为空 | 默认 | 类型 |
stuId | Id | 否 | Int(11) | |
stuNum | 学号 | 是 | NULL | Varchar(255) |
idcars | 身份证 | 是 | NULL | Varchar(255) |
sex | 性别 | 是 | NULL | Varchar(255) |
borth | 出身日期 | 是 | NULL | Varchar(255) |
phone | 电话 | 是 | NULL | Varchar(12) |
邮箱 | 是 | NULL | Varchar(255) | |
political | 政治面貌 | 是 | NULL | Varchar(255) |
national | 民族 | 是 | NULL | Varchar(255) |
college_id | 学院 | 是 | NULL | Varchar(255) |
professional_id | 专业 | 是 | NULL | Varchar(255) |
school_time | 入学时间 | 是 | NULL | Varchar(255) |
stuName | 姓名 | 是 | NULL | Varchar(255) |
stuPwd | 密码 | 是 | NULL | Varchar(255) |
graduation_year | 毕业年 | 是 | NULL | Int(11) |
is_submit_emp | 是否提交就业信息 | 是 | NULL | Varchar(255) |
表4.6 公告tb_announcement
字段 | 注释 | 是否为空 | 默认 | 类型 |
annId | 否 | Int(11) | ||
title | 标题 | 是 | NULL | Varchar(255) |
context | 内容 | 是 | NULL | Longtext(0) |
cts | 创建时间 | 是 | NULL | Varchar(255) |
role | 角色 | 是 | NULL | Varchar(255) |
roleId | 角色id | 是 | NULL | Varchar(255) |
roleName | 姓名 | 是 | NULL | Varchar(255) |
表4.7 就业信息tb_employment
字段 | 注释 | 是否为空 | 默认 | 类型 |
eid | 否 | Int(11) | ||
stu_id | 学生id | 是 | NULL | Varchar(255) |
type | 就业类型 | 是 | NULL | Varchar(255) |
company_name | 公司名称 | 是 | NULL | Varchar(255) |
company_type | 公司类型 | 是 | NULL | Varchar(255) |
company_address | 公司地址 | 是 | NULL | Varchar(255) |
company_contact | 公司联系人 | 是 | NULL | Varchar(255) |
company_phone | 公司电话 | 是 | NULL | Varchar(255) |
company_code | 邮编 | 是 | NULL | Varchar(255) |
company_imgs | 就业合同图片 | 是 | NULL | Varchar(255) |
company_position | 公司职务 | 是 | NULL | Varchar(255) |
copany_nature | 公司性质 | 是 | NULL | Varchar(255) |
grind_school | 考研学校 | 是 | NULL | Varchar(255) |
grind_professional | 考研专业 | 是 | NULL | Varchar(255) |
cts | 创建时间 | 是 | NULL | Varchar(255) |
self_employment_address | 自主创业地址 | 是 | NULL | Varchar(255) |
self_employment | 创业项目名称 | 是 | NULL | Varchar(255) |
status | 审核 | 是 | NULL | Varchar(255) |
audit_msg | 审核不通过原因 | 是 | NULL | Varchar(255) |
counselor_id | 辅导员id | 是 | NULL | Varchar(255) |
company_city | 工资城市 | 是 | NULL | Varchar(255) |
company_price | 工资 | 是 | NULL | Varchar(10) |
表4.8 辅导员tb_counselor
字段 | 注释 | 是否为空 | 默认 | 类型 |
couId | 否 | Int(11) | ||
cname | 用户名 | 是 | NULL | Varchar(255) |
cpwd | 密码 | 是 | NULL | Varchar(255) |
表4.8 辅导员tb_counselor 续表
字段 | 注释 | 是否为空 | 默认 | 类型 |
realName | 姓名 | 是 | NULL | Varchar(255) |
college_id | 学院 | 是 | NULL | Varchar(255) |
表4.9 招聘信息tb_recruitment
字段 | 注释 | 是否为空 | 默认 | 类型 |
rid | 否 | Int(11) | ||
company_name | 公司名称 | 是 | NULL | Varchar(255) |
company_type | 公司类型 | 是 | NULL | Varchar(255) |
company_address | 公司地址 | 是 | NULL | Varchar(255) |
company_industry | 公司服务领域 | 是 | NULL | Varchar(255) |
company_position | 工作岗位 | 是 | NULL | Varchar(255) |
title | 标题 | 是 | NULL | Varchar(255) |
context | 内容 | 是 | NULL | Longtext(0) |
people_num | 招聘人数 | 是 | NULL | Varchar(255) |
email` | 邮箱 | 是 | NULL | Varchar(255) |
phone | 电话 | 是 | NULL | Varchar(255) |
mainshi_name | 面试联系人姓名 | 是 | NULL | Varchar(255) |
mianshi_time | 面试时间 | 是 | NULL | Varchar(255) |
mianshi_address | 面试地址 | 是 | NULL | Varchar(255) |
mianshi_note | 面试备注 | 是 | NULL | Varchar(255) |
cts | 创建时间 | 是 | NULL | Varchar(255) |
price | 薪资 | 是 | NULL | Varchar(255) |
company_size | 公司人数规模 | 是 | NULL | Varchar(255) |
public_id | 发布者id | 是 | NULL | Varchar(255) |
show_index | 是否展示 | 是 | NULL | Varchar(255) |
5 系统的详细设计与实现
5.1 详细设计概述
根据系统的总体设计分析,系统被划分为多个独立且相关的子功能模块,并对每个子功能模块所具有的功能进行分析,最后设计出相应的数据库。
在系统的详细设计这一阶段,可以将总体设计进一步简化,接下来设计每一个模块要实现的算法以及必须的局部结构,最后根据分析的需求来设计一个系统产品。
5.2 系统组织结构
本就业信息管理系统的开发是基于前后端分离的架构,使用了Spring boot开发框架,应用了MVC设计模式。将整个系统后台分成cons层、controller层、dao层、interceptor层、mfc层、service层、serviceImpl层、entity层八个部分,从而来完成商城系统的设计与实现。
系统后端设计组织结构如图5.1所示,系统前端设计的组织结构如图5.2所示,其中各部分结构详细说明见表5.1至5.6所示。
图5.1 系统组织结构图
图5.2 系统前台普通用户和管理员用户组织结构图
表5.1 系统后端组织结构说明表
项目所在的包 | 作用 |
controller | 用来分配某个业务来处理前台用户发过来的请求 |
cons | 对service层、dao层和controller层抛出的异常统一处理 |
interceptor | 可以拦截某些方法的调用,在目标方法前后加上自己的逻辑 |
mfc | 针对数据库,实现一些增删改查的操作 |
Dao | 用来存放所设计的对应数据库表之间的实体类 |
service | 用来controller层的类接口调用;声明一下所封装的方法 |
serviceImpl | 实现service层所封装的方法 |
entity | 可独立出来、根业务无关、通用的的工具类 |
表5.2 控制类列表
类名 | 作用 |
ExcelController | 导出表格的请求处理 |
indexController | 系统首页的请求处理 |
表5.2 控制类列表 续表
类名 | 作用 |
TbAdminController | 管理员的请求处理 |
TbClassController | 班级的请求处理 |
TbCollegeController | 学院的请求处理 |
TbCounselorController | 辅导员的请求处理 |
TbEmploymentController | 就业信息的请求处理 |
TbProfessionalController | 专业的请求处理 |
TbRecruitmentController | 招聘信息的请求处理 |
TbStudentController | 学生的请求处理 |
TbAnnouncementController | 留言板的请求处理 |
controller类接受前端用户传送过来的请求,根据请求路径调用相应的controller,然后再调用业务层的代码实现具体功能,将得到数据传回前端页面。
表5.3 实体类列表
类名 | 作用 |
tb_admin tb_college tb_professional tb_student | 管理员基本信息 学院信息处理 专业信息处理 学生信息处理 |
tb_class | 班级信息处理 |
tb_counselor | 辅导员信息处理 |
tb_employment | 就业信息处理 |
tb_announcement | 公告信息处理 |
tb_recruitment | 招聘信息处理 |
实体类主要用来存储和管理系统内部的信息,定义了实体属性以及get()、set()方法。
表5.4 DAO接口代理类列表
类名 | 作用 |
TbCollegeMapper | 学院基本操作代理类 |
TbAnnouncementMapper | 辅导员基本操作代理类 |
TbEmploymentMapper | 就业信息基本操作代理类 |
TbProfessionalMapper | 专业基本操作代理类 |
TbRecruitmentMapper | 招聘信息基本操作代理类 |
TbStudentMapper | 学生基本操作代理类 |
TbCollegeMapper | 学院基本操作代理类 |
TbEmploymentMapper | 就业信息基本操作代理类 |
TbCounselorMapper | 辅导员基本操作代理类 |
TbClassMapper | 班级基本操作代理类 |
TbAdminMapper | 管理员基本操作代理类 |
TbAnnouncementMapper | 公告信息基本操作代理类 |
Spring boot框架中的Spring可以通过接口代理来提高程序代码的灵活性。
表5.5 业务类接口列表
类名 | 作用 |
TbAdminService | 管理员处理接口 |
TbAnnouncementService | 公告信息处理接口 |
TbClassService | 班级处理接口 |
TbCollegeService | 学院处理接口 |
TbCounselorService | 辅导员处理接口 |
TbEmploymentService | 就业信息处理接口 |
TbProfessionalService | 专业处理接口 |
TbRecruitmentService | 招聘信息处理接口 |
TbStudentService | 学生处理接口 |
接口的实现是用来保证它们支持系统功能的某些操作。
表5.6 业务类接口列表
类名 | 作用 |
TbAdminServiceImpl | 管理员处理接口的实现 |
TbAnnouncementServiceImpl | 公告信息处理接口的实现 |
TbClassServiceImpl | 班级处理接口的实现 |
TbCollegeServiceImpl | 学院处理接口的实现 |
TbCounselorServiceImpl | 辅导员处理接口的实现 |
TbEmploymentServiceImpl | 就业信息处理接口的实现 |
TbProfessionalServiceImpl | 专业处理接口的实现 |
TbRecruitmentServiceImpl | 招聘信息处理接口的实现 |
TbStudentServiceImpl | 学生处理接口的实现 |
接口是抽象方法,而实现类是具体实现接口方法,每个接口都需要一个实现类。
5.3 配置文件
Maven创建项目时必须依赖pom.xml文件来进行,项目中依赖的基本信息都在该文件定义。每当有多个项目进行时,其中着多个项目有的配置是相同的且相互关联,所以在Eclipse中配置Maven,其在pom.xml文件中的关键代码如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mfc</groupId>
<artifactId>jiuye</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>springboot Maven Webapp</name>
<url>http://maven.apache.org</url>
5.4系统前台设计
5.4.1系统首页设计
毕业生就业管理系统主要为毕业生提供了一个操作简单、使用方面的找工作平台,系统首页主要包括导航菜单栏、轮播图展示以及关于办理业务的具体时间安排和注意事项等,其中导航菜单栏主要有首页、公告信息、招聘信息、中心概况以及用户登录五个主要的导航,首页、公告信息、招聘信息以及用户登录通过使用锚标记,点击相应的按钮跳转到相应的操作界面位置,系统登录界面采用Application跳转到对应的ftl(ftl是Freemarker模板的文件后缀名,其中Freemarker是一种简单的网页开发组件,尤其对图像处理很方便,对于处理xml也很方便。)页面。在开发本系统中页面整体布局主要使用bootstrap布局进行设计,轮播图的转换主要使用轮播插件Carousel,该插件使用简单灵活来实现图片轮播。系统首页面显示界面如图5.3所示。
图5.3 系统首页显示界面图
5.4.2用户登录页面
确保系统的安全性和真实有效性,点击用户登录按钮,在下拉框中会显示本系统中的所有角色,该系统共涉及到三个角色,主要包括管理员用户登录、辅导员用户登录以及学生用户登录,为了使用户登录安全有效,需要输入正确的用户名、密码以及系统随机生成的验证码进行登录,若所涉及到填写的内容有一项输入错误系统会显示如图5.4的提示(系统提示账号或密码错误或者输入的验证码有误),当输入的账号、密码以及验证码正确时,JS脚本会将登录输入的数据经过处理提交给controller,controller再通过调用service层对输入的数据进行判断,并进入到相应的登录界面。
用户在浏览器中如何实现登录过程,在浏览器中输入http://localhost:8099/,进入系统首页,点击用户登录按钮向服务器发出不同的用户请求,请求admin_login.html或者counselor_login.html或者student_login.html,所发送的请求传送到servlet层,并对所接收到的请求进行处理。用户在登录界面填写信息并点击登录按钮后,controller通过调用service层对数据进行校验,校验成功则会自动跳转到相应的用户界面,若输入信息有误则会返回到登录界面重新进行登录。
图5.4 登录出错页面
系统用户登录验证关键代码如下所示:
@RequestMapping("/login")
public String login(TbAdmin admin,HttpServletRequest request,HttpSession session) {
String verification=(String) session.getAttribute("verification");
String verification_qt=request.getParameter("verification");
if(!verification.equals(verification_qt)){
request.setAttribute("msg", "验证码错误");
return "admin_login";
}
admin.setAdminPwd(MD5Utils.stringToMD5(admin.getAdminPwd()));
System.out.println(admin.getAdminName()+","+admin.getAdminPwd()+","+verification+","+verification_qt);
TbAdmin ad=adminService.login(admin);
if(ad==null){
request.setAttribute("msg", "账号密码错误");
return "admin_login";
}else{
session.setAttribute("login_admin", ad);
return "admin_index";
}
5.5系统后台设计
5.5.1管理员登录后台设计
在系统首页,点击用户登录选择管理员登录,输入正确的管理员账号、密码以及验证码后,点击登录按钮进入管理员后台,在管理员后台进行一系列相关的操作。在/admin_login.html页面输入正确的用户名、密码以及验证码,验证成功后,通过Spring MVC进行页面跳转到/admin/login.html页面,在管理员登录后台页面进行管理学生信息、管理辅导员信息、管理学院信息、管理专业信息、管理班级信息、管理招聘信息、管理公告信息、就业统计总图、就业统计柱状图、修改密码以及退出登录操作。/admin/login.html界面如图5.5所示。
(1)管理学生信息
点击左边菜单栏中的管理学生信息按钮进入admin/student_page.html页面,触发事件后,后台拦截管理器将请求转送给controller,TbStudentController调用TbStudentService层的相关逻辑代码进行处理,通过使用RequestMapping接口中的TbStudent getById(String id)方法与数据库之间进行数据传输和交互,通过该方法获取到该id下的所有的数据list,并将数据集合传送给controller,经过controller层的处理后,返回到admin/student_page.html页面中显示。管理学生信息是该系统中主要功能之一,管理员登录后台,在管理学生界面可以对学生进行如下操作,以Excel表的形式导出所有的学生信息(包括学生姓名、性别、班级、学号以及电话等基本信息),在管理学生页面,管理员可以对其中某个学生进行查看详情、初始化学生登录密码、编辑以及删除操作,在数据量很大时,管理员可以通过学生姓名、学号、学生所在学院、专业以及班级进行搜索操作,管理员可以根据学生的基本信息添加学生,也可以清空数据库中所有的学生数据操作。
图5.5 管理员登录后台页面
图5.6 管理员管理学生信息
(2)就业统计总图
点击左边菜单栏中的就业统计按钮进入/employment/shanxing.html页面,触发事件后,后台拦截管理器将请求转送给controller,TbEmploymentController调用TbEmploymentService层的相关逻辑代码进行处理,通过使用RequestMapping接口中的TbEmployment getByStuId(String stuId)方法与数据库之间进行数据传输和交互,查找到所有提交就业信息的学生,跳转到/employment/shanxing.html页面,并以饼状图的形式显示出各就业情况的比例(就业、考研、自主创业和待业)。就业统计总图如图5.7所示。
图5.7 就业统计总图页面显示
5.5.2辅导员登录后台设计
辅导员用户登录系统成功界面如图5.8所示。点击系统首页用户登录,选择辅导员登录输入正确的用户名、密码以及验证码之后,点击登录按钮系统与数据库进行交互验证,验证成功系统会自动跳转到辅导员登录界面,其登录原理与管理员登录系统跳转方式基本一致。
图5.8 辅导员登录系统页面
(1)待审核就业信息
点击辅导员后台首页菜单栏中的审核就业信息选项按钮进入/employment/page.html界面,在此页面可以查看到该辅导员所管理的所有学生中已经提交了就业信息的学生,并对已提交就业信息的学生进行审核操作,若提交的就业信息正确,点击审核通过按钮,若有疑问点击审核不通过按钮,并填写审核不通过的理由。待审核就业信息页面显示如图5.13所示,其实现的关键代码如图5.9所示。
图5.9 审核就业信息界面显示
待审核就业信息实现的关键代码如下所示:
@RequestMapping(value = { "/shenhe" }, method = RequestMethod.POST)
public ResponseEntity<?> shenhe(int eid,String status,String audit_msg,HttpSession session) {
TbEmployment emp=new TbEmployment();
emp.setEid(eid);
emp.setAudit_msg(audit_msg);
emp.setAudit_ts(DateUtils.DateTimeToString(new Date()));
TbCounselor cou=(TbCounselor) session.getAttribute("login_counselor");
if(cou!=null){
emp.setCounselor_id(cou.getCouId()+"");
}
employmentService.update(emp);
return ResponseEntity.ok(JSONArray.fromObject(null).toString());
}
5.5.3毕业生登录后台设计
在系统首页点击用户登录按钮,选择学生登录,系统会自动跳转到/student_login.html页面,在当前页面输入正确的学号、密码和验证码后点击登录按钮,系统通过验证之后,Spring MVC进行页面跳转操作进入/student/login.html页面,在/student/login.html页面通过与数据库交互信息并进行加载,通过ajax异步请求,将学生登录后台中的个人基本信息、提交就业信息、修改密码和退出登录展示在该页面上。/student/login.html界面展示如图5.10所示。
图5.10 学生登录后台界面显示
(1)提交就业信息
点击左边菜单栏中的提交就业信息项进入/student/login.html页面,提交就业信息页面如图5.11所示,根据自己的情况填写不同的就业方向,若选择就业须填写就业信息,包括公司名称、单位类型、所属行业、公司地址、公司联系人名字、公司联系人电话、邮编、应聘岗位、就业城市、月薪、上传三方协议图片和备注信息,填写以上基本信息后,点击提交按钮JS进行数据项合法性校验,如果出现漏填信息系统会提示请填写此字段,若校验正确没有出现数据错误,页面通过请求controller层将用户所提交信息传送给后台,controller调用相关的service层实现数据交互,当后台操作完成,系统出现“就业信息添加成功,等待审核”提示信息,在管理员后台可以查看所提交的就业信息。
图5.11 提交就业信息界面显示
其所实现提交就业信息的关键代码如下所示:
@RequestMapping("/add_jiuye")
public String add_jiuye(TbEmployment employment,Map<String, Object> map,HttpServletRequest request,HttpSession session) {
TbStudent ad=(TbStudent) session.getAttribute("login_student");
if(ad==null){
return "student_login";
}
if(employment.getEid()==null){
employment.setStu_id(ad.getStuId()+"");
employment.setCts(DateUtils.DateTimeToString(new Date()));
employment.setStatus(Sys.Common.NO_USE);
employmentService.add_jiuye(employment);
TbStudent stu=new TbStudent();
stu.setStuId(ad.getStuId());
stu.setIs_submit_emp("1");
studentService.update(stu);
}else{
employment.setStatus(Sys.Common.NO_USE);
employmentService.update(employment);
}
map.put("employment", employment);
return "employment_add_succ";
}
6 系统测试
6.1 系统界面测试
系统界面测试模块主要是针对该设计中所涉及到的页面进行相关的测试与维护,在该测试中,并不会涉及到具体的实施和维护,因此这项工作并不是相当复杂,无需繁杂的操作,对于测试人员只要做到认真细心,就可以完成相关的测试。在系统页面测试中常见的相关测试问题有:
(1)中文乱码问题
常见的乱码问题有好几种:在页面显示时出现乱码问题、提交数据时产生乱码、数据库中的数据乱码显示。出现在页面显示时出现乱码的情况有两种,第一种是浏览器显示不合适,第二种是后台在运行时生成的动态页面显示不合适造成乱码问题;提交数据时产生乱码主要是在用户提交信息后,传送到控制层后变成乱码,出现这种情况的主要原因是发送请求对浏览器所提交的信息解析时方式不合适而出现乱码问题;最后在数据库中出现的乱码问题主要是由写入数据时产生的错误引起的,出现这种情况首先执行数据库语句,看其是否正确。
(2)浏览器相互不兼容问题
常见的浏览器不兼容主要有以下几种情形所引起,第一,HTML兼容问题,主要产生原因是使用了版本相对较低的浏览器中无法辨别的元素,导致解析失败;第二,CSS兼容问题,主要产生原因是浏览器采用不同的HTML标准,从而导致页面布局错乱等相关问题。
6.2 系统功能测试
对系统功能测试是对系统各个子功能进行测试,测试系统功能是否达到预期想要的结果,是否在运行中出现不必要的隐患。
系统功能测试主要包含以下几种方面:
(1)前端部分:
①在系统首页点击各按钮是否能跳转到相应的页面;
②首页轮播图是否正常跳转,点击相应的图片能否跳转到相应的页面和预先设置好的链接地址;
③点击公告信息按钮是否能进入到公告信息的页面,是否可以查看公告信息和发布公告信息等;
④点击招聘信息按钮是否可以进入到相关的页面,毕业生能否查看到已经发布的招聘信息和搜索招聘信息;
⑤用户登录按钮是否显示提前设置好的角色;
(2)后台部分:
①管理员管理全部学生和辅导员;
②管理员管理学员信息和专业信息;
③管理员/辅导员管理招聘信息和公告信息;
④管理员/辅导员查看就业统计总图或就业统计柱状图;
⑤毕业生登录系统查看个人基本信息和提交就业信息情况;
6.3 需求测试
需求测试在通常情况下包括以下几种主要的部分:
(1)测试需求的完整性。
(2)测试系统的功能完整性和系统可扩展性。
(3)测试系统的功能是否设置合理。
6.4 运行测试
通过测试系统不同角色登录模块来测试系统的完整性和系统流畅性。
(1)在谷歌浏览器中输入系统登录网址(http://localhost:8099/index.html)进入系统的首页,在系统首页点击用户登录,选择不同角色的用户进行登录,在系统没有缓存的情况下,点击登录按钮,系统通过与数据库交互验证,验证成功系统会直接跳转到相应的用户登录界面。
(2)用户登录界面测试,输入正确的用户名、密码和验证码,点击登录进入相应的页面,测试成功页面如图6.1所示。若输入不合法的用户名、密码或者验证码,在数据库(SQL)中无法获取相关的信息,系统会显示如图6.2所示的页面。
在输入不合法的用户名或密码或者验证码后,系统不会做出相应的跳转操作,会在当前登录界面显示用户名或密码错误或者验证码错误信息提示。
图6.1 用户登录测试页面
图6.2 测试登录不合法界面
(3)测试删除学生信息模块,在管理员登录系统后台后,点击管理学生信息按钮,学生基本信息中会有查看详情、初始化密码和删除等操作,点击删除按钮,系统会提示确定删除的信息,点击确定删除系统提示删除成功,在系统顶部以小框图的形式显示成功删除的提示信息,点击确定按钮即完成删除操作。删除信息成功页面测试如图6.3所示。
图6.3 测试成功删除学生信息页面显示
(4)系统毕业生用户提交就业信息并显示提交成功测试,当学生提交就业信息系统会出现“就业信息添加成功,等待审核”提示,系统提示页面如图6.4所示。
图6.4 测试就业信息添加成功页面显示
(5)测试系统辅导员用户登录系统审核就业信息模块,当学生成功提交就业信息,在辅导员后台可以成功查看已提交的就业信息,在辅导员后台页面中,点击待审核就业信息查看所有提交就业信息的学生,辅导员并对审核信息做出相应的审核和处理操作。待审核就业信息页面显示如图6.5所示。
图6.5 测试待审核就业信息页面显示图
当辅导员点击审核按钮进入审核信息的页面,页面会显示所提交的所有信息,包括学院、班级、姓名、学号和就业基本情况说明,辅导员所查看到的基本信息如图6.6所示。
图6.6 测试辅导员审核就业信息页面显示
由于系统的基本功能模块基本完成并达到需求分析中所要求的功能,并成功测试部分功能模块,但因为系统测试各功能模块比较繁杂,所以,在本文中只介绍到部分关键的测试模块,并作出相应的测试说明。
6.5系统功能测试结果
系统功能测试主要是针对系统各个功能是否完成和实现进行测试,是否存在不必要的Bug。依照系统的需求编写出测试用例,验证是否完成其对应的功能。是系统测试的重要环节,也是评价系统软件质量的一项重要指标。
在本系统中,功能测试主要对系统中不同用户登录后台进行测试。测试不同用户的各种操作,通过需求分析,查看系统测试结果是否与预期结果相符,从中得出测试结果。若测试结果与预期结果基本一致,则说明测试通过,否则测试不通过,需要在某些功能模块上继续修改直到达到预期结果。
系统测试用例表如表6.1和6.2。
表6.1 前台功能测试用例表
测试目的 | 验证大学生就业信息管理系统的每部分功能是否能正常运行 | ||||
测试数据 | 前台用户所能实现的功能操作 | ||||
测试项目 | 操作描述 | 前置条件 | 期望结果 | 实际结果 | 测试状态 |
登录 | 1.进入系统首页,点击用户登录选择不同用户登录 2.填写登录名、密码和验证码 3.点击登录按钮,进入相应的用户登录界面 | 无 | 成功登录 | 登录成功 | 通过 |
公告信息 | 1.在系统首页,点击公告信息进入公告信息显示页面 2.搜索、查看公告信息 | 无 | 进行公告信息的相关操作 | 公告信息操作成功 | 通过 |
表6.2 后台功能测试用例表
测试目的 | 验证大学生就业信息管理系统的每部分功能是否能正常运行 | ||||
测试数据 | 后台用户所能实现的功能操作 | ||||
测试项目 | 操作描述 | 前置条件 | 期望结果 | 实际结果 | 测试状态 |
用户登录 | 1.用户进入系统首页选择角色登录 2.输入账号、密码和验证码登录 | 无 | 成功登录 | 登录成功 | 通过 |
管理员管理学生信息 | 1.添加学生信息 2.导出学生信息 3.查看详情 4.初始化学生登录密码 5.编辑学生信息 6.删除学生信息 | 管理员用户登录状态下 | 完成管理员管理学生信息的相关操作 | 管理学生信息操作成功 | 通过 |
表6.2 后台功能测试用例表 续表
测试项目 | 操作描述 | 前置条件 | 期望结果 | 实际结果 | 测试状态 |
辅导员管理学生信息 | 1.查看学生是否提交就业信息 2.导出学生信息 3.导出就业信息 4.查看学生详情 | 辅导员用户登录状态下 | 完成辅导员管理学生信息相关操作 | 辅导员管理学生信息操作成功 | 通过 |
辅导员待审核就业信息 | 1.根据学号搜索学生 2.审核就业信息 | 辅导员用户登录状态下 | 完成辅导员审核就业信息相关操作 | 辅导员审核就业信息操作成功 | 通过 |
管理员管理辅导员信息 | 1.添加辅导员 2.初始化辅导员登录密码 3.编辑辅导员信息 4.删除辅导员信息 | 管理员用户登录状态下 | 完成管理员管理辅导员信息的相关操作 | 管理辅导员信息操作成功 | 通过 |
6.6 小结
系统测试是实现软件开发过程中最后一步,也是最重要、最关键的一步,通过对系统界面测试和功能模块的测试,从中发现在开发过程中出现的漏洞和不足,能够保证工作人员及时发现并改正和修复,再某种程度上提高用户对系统的完美体验。
总 结
随着社会快速发展和科技的创新,教育体系也在进一步深化改革。在现阶段高校扩招在逐年上升,高校毕业生随之增加,就业成为现在高校毕业生最大的挑战和面临的困难,就西北偏远地区,地域限制了高校学生的实习就业困难。
在此开发中,以当前网络发展为背景,以实现为毕业生提供就业信息、方便高效管理为前提,通过网络连接实现在互联网上发布招聘信息和实现在线统计就业情况来完成系统的设计与实现。
在开发与实现中,涉及到大学四年所用到的几乎所有的知识和还未接触到的知识,以Spring boot为框架,运用关系型数据库MySQL作为数据库的设计,以Eclipse作为开发环境,用HTML作为前端页面的开发。实现管理员在系统上进行相关的操作,如管理学生信息、发布公告信息、发布招聘信息以及查看就业情况等,满足学生用户查看公告信息和招聘信息的需求,除此之外,辅导员用户和学生用户也可进行相关的操作,便于系统维护和处理,提高系统的高效性。针对B/S结构设计的本系统,提高系统的性能和更强大的功能模块,进一步完善系统。在互联网高速发展的时代,网络安全尤为重要,在确保用户密码不被他人察觉到,在开发中运用相关的技术和方法实现密码加密,是现在网页和数据库之间进行数据交互和传输,使用户体验到更安全的操作。
回首过去的那些日子,通过回顾所学知识和上网查阅资料,完成毕业设计以及撰写毕业设计报告,从开始的选题到至今的撰写报告,这个过程虽然艰辛但充实,在这个过程中发现了自己的不足,让我真正体会到理论与实践相结合多么重要,再某种程度上也丰富了开发经验。
参考文献
[1]宋丽娜.基于JSP的Web开发中文乱码问题的研究与解决[J].电子术,2015,42(11):5-7.
[2]汪君宇.基于JSP的Web应用软件开发技术分析[J].科技创新与用,2018(16):158-160.
[3]赵钢.JSP Servlet+EJB的Web模式应用研究[J].电子设计工程,2016,21(13):47-49.
[4]肖英.解决JSP/Servlet开发中的中文乱码问题[J].科技传播,2017,(1)11-25.
[5]朱钧.基于角色的jsp通用权限系统设计与实现[D].山东大学,2014.
[6]康牧.JSP动态网站开发实用教程[M].清华大学出版社,2014.
[7]王建国.数据库设计在网站开发中的应用[J].山东农业工程学院学报,2017,34(04):158-159+164.
[8]张知青.基于关系数据库的查询方法及优化技术分析[J].煤炭技术,2015,31(05):218-220.
[9]陈志誉.Java工具及其调度方法研究[D].华南理工大学,2018.
[10]张孝祥,徐明华.JAVA基础与案例开发详解[M].清华大学出版社,2016.
[11]刘亚宾.精通Eclipse--JAVA技术大系[M].电子工业出版社,2015.
[12]曾志明.网站开发技术的比较研究[J].电脑知识与技术,2015,6(05):1075-1078.
[13]Konstantins Gusarovs. An Analysis on Java Programming Language Decompiler Capabilities[J]. Applied Computer Systems,2018,23(2).
致 谢
故事不能停留在这六章,继续写下去才知道梦有多长。
行文至此,落笔为终,追梦工院,终要离别,始于2017年初秋,终于2021年盛夏,回首四年光阴,如烟火,满眼繁华,点滴生活,历历在目,目光所及,皆是记忆。
桃李不言,下自成蹊。首先我要感谢我的毕业设计老师----刘瑞玲老师,从选题到设计完成以及论文修改后的定稿,每一部分都离不开刘老师的指导和帮助,使得本文才能成型。在此衷心的感谢指导老师,学生深感遇良师之不易,也再次感谢在四年时光中遇见的各位老师,谢谢你们,对学生的栽培和教育之恩。祝愿老师们工作顺利,事事顺心。
平生感知己,方寸岂悠悠。感谢我的女朋友王晓女士,陪伴我走过四年美好时光,是回忆是欢喜,有幸遇见感谢陪伴,愿可共白首,余生常相伴。在此感谢舍友相伴,四年时光匆匆而过,很幸运遇见了你们,相识相知亦成死党,感谢你们对我的帮助和关心,陪我度过青春时光。愿有前程可奔赴,已有岁月共回首。祝我们保持热爱,友谊长存,奔赴山海,高处相见。
父母之爱子,则为之计深远。感谢父母二十余载对我无微不至的照顾和教育之恩。对此之恩,无法回报,只想更加努力,成为他们的骄傲。祝愿他们身体健康,开心快乐。
以梦为马,不负韶华,感谢一直不曾放弃的自己,纵然现在还没有看见胜利的曙光,但心中永远保存着那份光亮,不断前行。
写尽千山,落笔是你;山水一程,三生有幸!感恩相遇,祝平安喜乐,愿梦想成真,老师们原路返回,同学们远走高飞。
附录
导出学生信息模块代码:
package com.mfc.ctrl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import com.mfc.entity.TbClass;
import com.mfc.entity.TbCollege;
import com.mfc.entity.TbEmployment;
import com.mfc.entity.TbProfessional;
import com.mfc.entity.TbStudent;
import com.mfc.service.TbClassService;
import com.mfc.service.TbCollegeService;
import com.mfc.service.TbEmploymentService;
import com.mfc.service.TbProfessionalService;
import com.mfc.service.TbStudentService;
import javax.servlet.http.HttpServletResponse;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;
@Controller
@RequestMapping(value = "/excel")
public class ExcelController {
@Autowired
private TbStudentService studentService;
@Autowired
private TbProfessionalService professionalService;
@Autowired
private TbClassService classService;
@Autowired
private TbEmploymentService employmentService;
@Autowired
private TbCollegeService collegeService;
//创建表头
private void createTitleStudentInfo(HSSFWorkbook workbook,HSSFSheet sheet){
HSSFRow row = sheet.createRow(0);
//设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
sheet.setColumnWidth(1,12*256);
sheet.setColumnWidth(3,17*256);
//设置为居中加粗
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setBold(true);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setFont(font);
HSSFCell cell;
cell = row.createCell(0);
cell.setCellValue("学号");
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("姓名");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("性别");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("出生日期");
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue("民族");
cell.setCellStyle(style);
cell = row.createCell(5);
cell.setCellValue("身份证号");
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellValue("电话");
cell.setCellStyle(style);
cell = row.createCell(7);
cell.setCellValue("邮箱");
cell.setCellStyle(style);
cell = row.createCell(8);
cell.setCellValue("入学时间");
cell.setCellStyle(style);
cell = row.createCell(9);
cell.setCellValue("政治面貌");
cell.setCellStyle(style);
cell = row.createCell(10);
cell.setCellValue("学院");
cell.setCellStyle(style);
cell = row.createCell(11);
cell.setCellValue("专业");
cell.setCellStyle(style);
cell = row.createCell(12);
cell.setCellValue("班级");
cell.setCellStyle(style);
cell = row.createCell(13);
cell.setCellValue("是否提交就业信息");
cell.setCellStyle(style);
}
@RequestMapping("/getStudentInfo")
public String getStudentInfo(TbStudent student,HttpServletResponse response) throws Exception{
String title="";
if(student.getStuName()!=null&&!student.getStuName().isEmpty()){
title+=student.getStuName();
}if(student.getStuNum()!=null&&!student.getStuNum().isEmpty()){
title+=student.getStuNum();
}if(student.getCollege_id()!=null&&!student.getCollege_id().isEmpty()){
TbCollege coll=collegeService.getById(student.getCollege_id());
title+=coll.getCname();
}if(student.getProfessional_id()!=null&&!student.getProfessional_id().isEmpty()){
TbProfessional pro=professionalService.getById(student.getProfessional_id());
title+=pro.getPname();
}if(student.getClass_id()!=null&&!student.getClass_id().isEmpty()){
TbClass cla=classService.getById(student.getClass_id());
title+=cla.getCname();
}
title+="学生信息表";
if(student.getIs_submit_emp()!=null&&!student.getIs_submit_emp().isEmpty()){
if(student.getIs_submit_emp().equals("1"))title+="(已提交就业)";
if(student.getIs_submit_emp().equals("0"))title+="(未提交就业)";
}
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(title);
createTitleStudentInfo(workbook,sheet);
List<TbStudent> rows = studentService.Page(student);
//设置日期格式
HSSFCellStyle style = workbook.createCellStyle();
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
//新增数据行,并且设置单元格数据
int rowNum=1;
for(TbStudent stu:rows){
HSSFRow row = sheet.createRow(rowNum);
row.createCell(0).setCellValue(stu.getStuNum());
row.createCell(1).setCellValue(stu.getStuName());
row.createCell(2).setCellValue(stu.getSex());
row.createCell(3).setCellValue(stu.getBorth());
row.createCell(4).setCellValue(stu.getNational());
row.createCell(5).setCellValue(stu.getIdcars());
row.createCell(6).setCellValue(stu.getPhone());
row.createCell(7).setCellValue(stu.getEmail());
row.createCell(8).setCellValue(stu.getSchool_time());
row.createCell(9).setCellValue(stu.getPolitical());
row.createCell(10).setCellValue(stu.getCollege_name());
row.createCell(11).setCellValue(stu.getProfessional_name());
row.createCell(12).setCellValue(stu.getClass_name());
if(stu.getIs_submit_emp().equals("1")){
row.createCell(13).setCellValue("已提交");
}else{
row.createCell(13).setCellValue("否");
}
// HSSFCell cell = row.createCell(10);
// cell.setCellValue(stu.getBorth());
// cell.setCellStyle(style);
rowNum++;
}
String fileName = title+".xls";
//生成excel文件
buildExcelFile(fileName, workbook);
//浏览器下载excel
buildExcelDocument(fileName,workbook,response);
return "download excel";
}
//生成excel文件
protected void buildExcelFile(String filename,HSSFWorkbook workbook) throws Exception{
FileOutputStream fos = new FileOutputStream(filename);
workbook.write(fos);
fos.flush();
fos.close();
}
//浏览器下载excel
protected void buildExcelDocument(String filename,HSSFWorkbook workbook,HttpServletResponse response) throws Exception{
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(filename, "utf-8"));
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
outputStream.flush();
outputStream.close();
}
//创建表头
private void createTitleEmploymentInfo(HSSFWorkbook workbook,HSSFSheet sheet,String type){
HSSFRow row = sheet.createRow(0);
//设置列宽,setColumnWidth的第二个参数要乘以256,这个参数的单位是1/256个字符宽度
sheet.setColumnWidth(1,12*256);
sheet.setColumnWidth(3,17*256);
//设置为居中加粗
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setBold(true);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setFont(font);
HSSFCell cell;
cell = row.createCell(0);
cell.setCellValue("学号");
cell.setCellStyle(style);
cell = row.createCell(1);
cell.setCellValue("姓名");
cell.setCellStyle(style);
cell = row.createCell(2);
cell.setCellValue("性别");
cell.setCellStyle(style);
cell = row.createCell(3);
cell.setCellValue("出生日期");
cell.setCellStyle(style);
cell = row.createCell(4);
cell.setCellValue("民族");
cell.setCellStyle(style);
cell = row.createCell(5);
cell.setCellValue("身份证号");
cell.setCellStyle(style);
cell = row.createCell(6);
cell.setCellValue("电话");
cell.setCellStyle(style);
cell = row.createCell(7);
cell.setCellValue("邮箱");
cell.setCellStyle(style);
cell = row.createCell(8);
cell.setCellValue("入学时间");
cell.setCellStyle(style);
cell = row.createCell(9);
cell.setCellValue("政治面貌");
cell.setCellStyle(style);
cell = row.createCell(10);
cell.setCellValue("学院");
cell.setCellStyle(style);
cell = row.createCell(11);
cell.setCellValue("专业");
cell.setCellStyle(style);
cell = row.createCell(12);
cell.setCellValue("班级");
cell.setCellStyle(style);
cell = row.createCell(13);
cell.setCellValue("就业方向");
cell.setCellStyle(style);
if(type!=null&&!type.isEmpty()){
if(type.equals("1")){
cell = row.createCell(14);
cell.setCellValue("就职企业");
cell.setCellStyle(style);
cell = row.createCell(15);
cell.setCellValue("企业类型");
cell.setCellStyle(style);
cell = row.createCell(16);
cell.setCellValue("所属行业");
cell.setCellStyle(style);
cell = row.createCell(17);
cell.setCellValue("工作地址");
cell.setCellStyle(style);
cell = row.createCell(18);
cell.setCellValue("邮编");
cell.setCellStyle(style);
cell = row.createCell(19);
cell.setCellValue("企业联系人");
cell.setCellStyle(style);
cell = row.createCell(20);
cell.setCellValue("电话");
cell.setCellStyle(style);
cell = row.createCell(21);
cell.setCellValue("应聘岗位");
cell.setCellStyle(style);
cell = row.createCell(22);
cell.setCellValue("就业城市");
cell.setCellStyle(style);
cell = row.createCell(23);
cell.setCellValue("月薪");
cell.setCellStyle(style);
cell = row.createCell(24);
cell.setCellValue("备注");
cell.setCellStyle(style);
}
if(type.equals("2")){
cell = row.createCell(14);
cell.setCellValue("报考学院");
cell.setCellStyle(style);
cell = row.createCell(15);
cell.setCellValue("报考专业");
cell.setCellStyle(style);
cell = row.createCell(16);
cell.setCellValue("备注");
cell.setCellStyle(style);
}
if(type.equals("3")){
cell = row.createCell(14);
cell.setCellValue("创业项目");
cell.setCellStyle(style);
cell = row.createCell(15);
cell.setCellValue("创业");
cell.setCellStyle(style);
cell = row.createCell(16);
cell.setCellValue("备注");
cell.setCellStyle(style);
}
if(type.equals("4")){
cell = row.createCell(14);
cell.setCellValue("备注");
cell.setCellStyle(style);
}
}else{
cell = row.createCell(14);
cell.setCellValue("就职企业");
cell.setCellStyle(style);
cell = row.createCell(15);
cell.setCellValue("企业类型");
cell.setCellStyle(style);
cell = row.createCell(16);
cell.setCellValue("所属行业");
cell.setCellStyle(style);
cell = row.createCell(17);
cell.setCellValue("工作地址");
cell.setCellStyle(style);
cell = row.createCell(18);
cell.setCellValue("邮编");
cell.setCellStyle(style);
cell = row.createCell(19);
cell.setCellValue("企业联系人");
cell.setCellStyle(style);
cell = row.createCell(20);
cell.setCellValue("电话");
cell.setCellStyle(style);
cell = row.createCell(21);
cell.setCellValue("应聘岗位");
cell.setCellStyle(style);
cell = row.createCell(22);
cell.setCellValue("就业城市");
cell.setCellStyle(style);
cell = row.createCell(23);
cell.setCellValue("月薪");
cell.setCellStyle(style);
cell = row.createCell(24);
cell.setCellValue("报考学院");
cell.setCellStyle(style);
cell = row.createCell(25);
cell.setCellValue("报考专业");
cell.setCellStyle(style);
cell = row.createCell(26);
cell.setCellValue("创业项目");
cell.setCellStyle(style);
cell = row.createCell(27);
cell.setCellValue("创业");
cell.setCellStyle(style);
cell = row.createCell(28);
cell.setCellValue("备注");
cell.setCellStyle(style);
}
}
@RequestMapping("/getEmploymentInfo")
public String getStudentInfo(TbEmployment employment,HttpServletResponse response) throws Exception{
String title="";
if(employment.getStuName()!=null&&!employment.getStuName().isEmpty()){
title+=employment.getStuName();
}if(employment.getStuNum()!=null&&!employment.getStuNum().isEmpty()){
title+=employment.getStuNum();
}if(employment.getProfessional_id()!=null&&!employment.getProfessional_id().isEmpty()){
TbProfessional pro=professionalService.getById(employment.getProfessional_id());
title+=pro.getPname();
}if(employment.getClass_id()!=null&&!employment.getClass_id().isEmpty()){
TbClass cla=classService.getById(employment.getClass_id());
title+=cla.getCname();
}
title+="学生就业信息表";
if(employment.getType()!=null&&!employment.getType().isEmpty()){
if(employment.getType().equals("1"))title+="(就业)";
if(employment.getType().equals("2"))title+="(考研)";
if(employment.getType().equals("3"))title+="(自主创业)";
if(employment.getType().equals("4"))title+="(待业)";
}else title+="(全部就业)";
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet(title);
createTitleEmploymentInfo(workbook,sheet,employment.getType());
List<TbEmployment> rows = employmentService.Page(employment);
//设置日期格式
HSSFCellStyle style = workbook.createCellStyle();
style.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
//新增数据行,并且设置单元格数据
int rowNum=1;
for(TbEmployment emp:rows){
HSSFRow row = sheet.createRow(rowNum);
row.createCell(0).setCellValue(emp.getStuNum());
row.createCell(1).setCellValue(emp.getStuName());
row.createCell(2).setCellValue(emp.getSex());
row.createCell(3).setCellValue(emp.getBorth());
row.createCell(4).setCellValue(emp.getNational());
row.createCell(5).setCellValue(emp.getIdcars());
row.createCell(6).setCellValue(emp.getPhone());
row.createCell(7).setCellValue(emp.getEmail());
row.createCell(8).setCellValue(emp.getSchool_time());
row.createCell(9).setCellValue(emp.getPolitical());
row.createCell(10).setCellValue(emp.getCname());
row.createCell(11).setCellValue(emp.getPname());
row.createCell(12).setCellValue(emp.getClass_name());
if(emp.getType().equals("1")){
row.createCell(13).setCellValue("就业");
}
if(emp.getType().equals("2")){
row.createCell(13).setCellValue("考研");
}
if(emp.getType().equals("3")){
row.createCell(13).setCellValue("自主创业");
}
if(emp.getType().equals("4")){
row.createCell(13).setCellValue("待业");
}
if(employment.getType()!=null&&!employment.getType().isEmpty()){
if(employment.getType().equals("1")){
row.createCell(14).setCellValue(emp.getCompany_name());
row.createCell(15).setCellValue(emp.getCompany_type());
row.createCell(16).setCellValue(emp.getCompany_industry());
row.createCell(17).setCellValue(emp.getCompany_address());
row.createCell(18).setCellValue(emp.getCompany_code());
row.createCell(19).setCellValue(emp.getCompany_contact());
row.createCell(20).setCellValue(emp.getCompany_phone());
row.createCell(21).setCellValue(emp.getCompany_position());
row.createCell(22).setCellValue(emp.getCompany_city());
row.createCell(23).setCellValue(emp.getCompany_price());
row.createCell(24).setCellValue(emp.getNote());
}
if(employment.getType().equals("2")){
row.createCell(14).setCellValue(emp.getGrind_school());
row.createCell(15).setCellValue(emp.getGrind_professional());
row.createCell(16).setCellValue(emp.getNote());
}
if(employment.getType().equals("3")){
row.createCell(14).setCellValue(emp.getSelf_employment());
row.createCell(15).setCellValue(emp.getSelf_employment_address());
row.createCell(16).setCellValue(emp.getNote());
}
if(employment.getType().equals("4")){
row.createCell(14).setCellValue(emp.getNote());
}
}else{
row.createCell(14).setCellValue(emp.getCompany_name());
row.createCell(15).setCellValue(emp.getCompany_type());
row.createCell(16).setCellValue(emp.getCompany_industry());
row.createCell(17).setCellValue(emp.getCompany_address());
row.createCell(18).setCellValue(emp.getCompany_code());
row.createCell(19).setCellValue(emp.getCompany_contact());
row.createCell(20).setCellValue(emp.getCompany_phone());
row.createCell(21).setCellValue(emp.getCompany_position());
row.createCell(22).setCellValue(emp.getCompany_city());
row.createCell(23).setCellValue(emp.getCompany_price());
row.createCell(24).setCellValue(emp.getGrind_school());
row.createCell(25).setCellValue(emp.getGrind_professional());
row.createCell(26).setCellValue(emp.getSelf_employment());
row.createCell(27).setCellValue(emp.getSelf_employment_address());
row.createCell(28).setCellValue(emp.getNote());
}
// HSSFCell cell = row.createCell(10);
// cell.setCellValue(stu.getBorth());
// cell.setCellStyle(style);
rowNum++;
}
String fileName = title+".xls";
//生成excel文件
buildExcelFile(fileName, workbook);
//浏览器下载excel
buildExcelDocument(fileName,workbook,response);
return "download excel";
}
}
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论