基于Java爬虫的课堂考勤管理系统(毕业设计论文)

开发环境和选用的架构:

本系统中采用的开发环境是Windows10+JDK8+Tomcat8+MySQL5.6

使用IDEA作为开发工具,GIT用作版本控制,Maven管理依赖

采用SSM+SpringBoot+HTML+CSS+JQuery+Ajax的架构

使用了Java爬虫,正则表达式处理,定时任务,邮件发送,数据加密,前端参数校验,动态加载,JS自动填充下拉框,Ajax请求发送等功能

以下是我个人的毕业论文,实现代码有删减,完整代码可以参考:

 

 

摘  要............................................ I

关键字............................................ I

Abstract......................................... II

Key words....................................... III

1  绪论........................................... 1

1.1 引言........................................................ 1

1.2 选题的目的和意义............................................ 1

1.3 本文研究内容................................................ 1

2  系统描述与可行性分析............................. 3

2.1 系统描述.................................................... 3

2.2  模块分析................................................... 3

2.3 可行性分析.................................................. 4

3  网络爬虫原理和实现............................... 5

3.1  网络爬虫的原理............................................. 5

3.2  网络爬虫的实现方法......................................... 6

4  B/S系统总体架构设计............................. 7

4.1  概述....................................................... 7

4.2  前端架构设计............................................... 7

4.3  后端架构设计............................................... 7

4.4  项目流程图................................................. 8

5  后端详细设计与实现.............................. 10

5.1  概述...................................................... 10

5.2  登录注册模块.............................................. 10

5.3  爬虫导入课表模块.......................................... 12

5.4  请批假模块................................................ 13

5.5  发布考勤模块.............................................. 14

5.6  学生签到模块.............................................. 16

5.7  统计考勤模块.............................................. 16

6  前端详细设计与实现.............................. 18

6.1  概述...................................................... 18

6.2  静态页面结构.............................................. 18

6.3  页面跳转结构.............................................. 18

6.4  JS及JQuery框架的使用.................................... 19

7  全文总结与展望................................. 22

7.1 系统优势................................................... 22

7.2 不足与改进................................................. 22

7.3 未来展望................................................... 22

参考文献......................................... 23

致  谢........................................... 24

 

 

基于Java爬虫的课堂考勤管理系统

 

摘  要

 

考勤问题一直是大学课堂的痛点问题,课堂点名给老师造成了极大的不便,也浪费了所有同学宝贵的时间,针对现有考勤速度慢,信息不共享的问题,很有必要研究开发出一个高效可记录化课堂考勤系统。

现有考勤系统速度慢的根本原因是其无法获取学生的课程信息,而爬虫可以从教务网抓取学生课表,直接解决了这一问题。因此本系统将爬虫引入到考勤系统中,用爬虫技术抓取教务网课表数据,结合请假数据,综合得到考勤所需要数据,便可以自动发布考勤,最终直接统计学生考勤即可。该系统整合了Java爬虫和课堂考勤管理系统,采用B/S架构,以JavaWeb形式开发;后端使用SSM架构,使用SpringBoot整合第三方服务和Java爬虫;前端使用HTML和CSS开发静态页面,使用JS及其框架Jquery做简单数据处理和数据交互;前后端通过约定好接口的形式分开开发,互不干扰。最终将实现一个基于Java爬虫的考勤管理系统,学生可以通过教务网账号获取课表,系统根据课表定时自动发布考勤,教师则可以查看签到状态,达到考勤快速化,记录共享化的目的。

 

关键字:Java爬虫;课堂考勤管理系统;B/S架构;SSM架构

 

 

Class attendance management system based on Java crawler

 

Abstract

 

Attendance problem has always been a pain point in the university classroom, classroom roll call has caused great inconvenience to teachers, but also wasted precious time of all students. In view of the existing problems of slow attendance and information sharing, it is necessary to research and develop an efficient and recordable classroom attendance system.

 

The main reason for the slow speed of the existing attendance system is that it can't get the course information of the students, and the crawler can grab the students' timetable from the educational administration network, which directly solves this problem. Therefore, this system introduces the crawler into the attendance system, uses the crawler technology to grab the course schedule data of the educational administration network, combines the leave data, comprehensively obtains the data required for attendance, and then automatically issues attendance, and finally directly counts the attendance of students. The system integrates Java crawler and classroom attendance management system, adopts B/S architecture, and is developed in the form of JavaWeb; the back end uses SSM architecture, and uses SpringBoot to integrate the third party service and Java crawler; the front end uses HTML and CSS to develop static pages, and JS and its framework Jquery to do simple data processing and data interaction; the front end and the back end are developed separately through the agreed interface, and do not do anything to each other Disturb. Finally, we will implement an attendance management system based on Java crawler. Students can get the timetable through the account of educational administration network. The system will automatically release the attendance according to the timetable, and teachers can check the attendance status to achieve the purpose of rapid attendance and record sharing.

 

Key wordsJava crawler; Class attendance management system; B/S architecture;SSM framework

 

 

1  绪论

    1. 引言

爬虫是以获取数据为目的一种程序,通过模拟浏览器请求抓取互联网上的数据,具有高度的自动化和高效化,其随着互联网快速发展而产生,随着大数据时代的到来,运用范围越来越大,技术也越来越成熟,是新兴的互联网技术,值得我们深入研究。

在互联网的快速发展的背景下,各种基于B/S结构的Web管理系统如雨后春笋般涌出。通过统一的服务器,不同操作系统的用户都可以直接在浏览器上获取服务,兼容了不同的系统,方便了开发者的开发,也不占用用户设备的内存,具有极大的潜力,是未来信息化的重要手段。

B/S架构分为服务器和客户端,服务器运行在远程主机,负责处理各种逻辑和数据;客户端则是各种浏览器,提供可视化页面和数据交互,服务端和客户端通过Tcp和ip协议通信[1],只需约定好前后端接口,便可分别开发前后端程序。

在开发前端页面时,我们将使用主流的HTML+CSS+JS开发的形式开发[2];在开发后端时,将采用目前主流的Java开发语言来保证项目开发的便捷性和高效性[3]。因此将Java爬虫和基于B/S架构的系统结合即可以满足我们的需求

1.2 选题的目的和意义

考勤问题一直是大学课堂的痛点问题,课堂点名给老师造成了极大的不便,也浪费了所有同学宝贵的时间,而目前已存在的考勤系统只能由教师每节课来设置发布考勤,无法识别学生请假也不会将数据反馈给辅导员等其他老师,本质上也是原始课堂点名的方式,没有达到快速化和信息共享化的目的。其根本原因是现有的考勤系统无法获取学生的课程信息,也没有导入教务网数据,导致每次点名都需要教师发布和人工核对,最后的考勤结果也没有共享给他人。

为解决这些问题,达到快速可记录化考勤的目的,可以结合爬虫从教务网获取课程信息,有了所有同学的课表数据,便可以设计一个基于B/S结构的系统,结合请假信息,每节课自动发布签到,让学生快速签到,老师方便统计签到状态。

一旦完成了这个项目,课堂考勤问题将会极为简便,学生只需在上课前进行签到就可以完成考勤,系统本身也保存着所有的签到数据,从而使教师可以随时随地统计考勤信息,节约了所有人的时间,也保存了所有签到信息,有着极大的实用意义。

1.3 本文研究内容

本文作者在毕业设计过程中,对本课题作了以下几个方面的工作:

  1. 爬虫是一种较为新兴的技术,现有的书本教程较少,需要多通过网络学习其原理和实现方法。本文的重点是研究针对教务网课表数据的网络爬虫的编写方法,获取课表数据,并将课表数据处理为目标数据;
  2. 研究基于B/S架构的Java Web系统的设计和开发方法[4],主要包括:后端SSM架构的使用,前端基于HTML+CSS+JQuery的开发,Java爬虫与考勤系统的整合三个方面。

 

 2  系统描述与可行性分析

2.1 系统描述

本课题的目的在于设计一个基于爬虫和JavaWeb的课堂考勤管理系统,其主要功能是通过教务网课表数据来自动发布考勤,该系统主要有学生和老师两个用户类型,学生可以获取课表数据,在指定位置签到,申请请假;老师可以查看签到状态,批准请假。

主流程如下:1,学生注册后,使用教务网账号密码后可以查看通过爬虫获取课表的信息,如果需要请假,可以在线上向老师发出请假申请;2,后台结合学生请假状态,解析出需要签到的学生以及对应的时间地点;3,后台使用定时任务发布课堂点名,学生要在满足要求的情况下签到;4,教师可以审批学生提交的请假,也可以查询考勤状态。

2.2  模块分析 

2.2.1 用户注册和个人信息管理模块

用户可以通过邮箱验证的方式注册账号,用户名为学号,并可以将注册邮箱和学号绑定。用户可以修改自己的个人信息和密码,其中修改密码必须进行邮箱验证。

参数:学号,邮箱号,个人信息等参数。

结果:通过邮箱可以获取验证码用来注册和修改个人信息。

2.2.2  爬虫导入课表模块

通过爬虫爬取学生教务网课表,解析课表数据,将课表处理为目标数据存入数据库。

参数:学号,教务网登录密码,教务网验证码。

结果:将学生课表处理后的目标数据存入数据库。

2.2.3  请批假模块

学生可以填写请假时间和原因向指定老师请假,老师可以审批与自己相关的请假。

参数:学号,请假时间,请假原因,教师号。

结果:学生可以请假,教师可以审批。

2.2.4 发布考勤模块  

教师可以选择指定地点,指定时间等参数发布考勤,系统也可以通过定时任务自动发布考勤。

参数:考勤地点经纬度,考勤时间,考勤课程等参数。

结果:将所有需要考勤的学生查询出来,添加到需要考勤的表中,这一过程可以由教师选择相关参数也可以由定时任务按照预设规则自动选择参数。

2.2.5  学生签到模块 

学生可以在时间地点课程符合的情况下签到。

参数:时间,当前位置经纬度,学号。

结果:符合条件时学生可以签到。

2.2.6  统计考勤模块   

教师可以根据自己的需要在考勤数据中统计自己需要统计的考勤数据。

参数:课程号等相关参数。

结果:统计出需要的信息。

2.3 可行性分析

爬虫获取课表模块根据学号和教务密码可以得到教务网课表,有了所有人的课表即可以分析出所有同学的课堂信息。根据当前时间,我们可以计算出当前是哪一周的周几的哪一节,然后根据这个时间节点可以去数据库查询当前时间开设了哪些课程,通过课程我们又可以查询到选取该课程的学生名单,从而知道那些学生需要签到,与此同时,还要去请假数据中查询出已请假的同学,最后标记需要签到的学生和已经请假的学生,完成考勤的发布。

发布考勤后,学生可以在符合考勤要求的时间地点等要求下签到,最后教师将通过考勤表统计考勤数据。

 

3  网络爬虫原理和实现

3.1  网络爬虫的原理 

3.1.1 网络爬虫原理简介

网络爬虫是一种以获取互联网上数据为目的的一种程序,其一般的实现方法是通过模拟浏览器的请求来获取数据,在获取到原始数据后还要进行相应的处理才能得到目标数据。简单的说,就是将我们上网所看到页面上的数据爬取下来,并进行数据处理和存储。

3.1.2 爬虫模拟浏览器原理探究

下面将通过Google Chrome的开发者模式探讨一下爬虫是如何实现模仿浏览器操作来获取数据的,首先进入Chrome浏览器打开百度首页,打开浏览器开发者模式,我们将看到如图3-1所示:

 

图 3-3 网络爬虫工作流程

3.2  网络爬虫的实现方法

一般情况下,我们会针对特定的URL来编写爬虫,用以获取期待的数据,一般分为两个步骤,第一步:模拟浏览器获取网页数据;第二步:通过特定规则处理原始数据,获得目标数据。在具体操作中我们可以输入账号密码等参数,通过设置Cookie,Request Method等相关参数,模拟登录教务网,因此服务器会响应相关请求,这样就得到的原始的网页数据,接下来将原始数据通过正则解析便得到了我们需要形式的数据,最后将数据存入数据库即可。

 

4  B/S系统总体架构设计

4.1  概述

本系统中采用的开发环境是Windows10+JDK8+Tomcat8+MySQL5.6,使用IDEA作为开发工具,采用前后端分离的方式开发,其中前端是在已有模板的基础上改写而来,在已有的静态页面中添加JS代码。后端使用Spring+SpringMVC+MyBatis的SSM架构[5]。并使用了Spring boot来简化和整合项目。

4.2  前端架构设计

前端采用HTML5+CSS3+JQuery的开发模式,页面采用HTML编写,在HTML文件中采用HTML套HTML的方式模块化开发页面,每个前端页面由公共页面,导航栏页和展示页面三个页面共同组成,公共页面中设置有注销登录等公共按钮,导航栏提供跳转功能,展示页面动态展示内容。各个页面由CSS文件美化,用JQuery框架实现输入参数的校验和前后端数据交互,利用Ajax异步的优势,返回数据后使用前端动态渲染的方式渲染到展示页面中,从而完成整个的页面展示和数据交互。

4.3  后端架构设计

4.3.1  SSM架构的使用

后端采用SSM架构,即Spring+Spring MVC+MyBatis的开发模式,其中Spring MVC提供三层开发模式,具体是Control层提供权限控制和参数校验,Service层负责组装和提供服务,Dao层负责数据操作,三者间通过约定好的接口沟通联接,互不干扰,规范了开发方式;SpringBoot提供简易的模块引用以及依赖注入和控制反转,是简化开发便于项目管理主流方式;Mybatis则是为了简化数据库操作而引入的,可以简单便捷的处理数据。

4.3.2  约定统一数据形式和接口

为了方便前后端的交互,数据的返回格式也应该统一规定,特别是在返回给前端的数据时,应该约定数据的返回格式,最好带上状态码和提示信息等,这样便于前端判断请求的状态和问题。后端开发必须严格按照接口约定,接口统一使方法便于调用,也利于代码的测试。在本项目中前端页面请求将访问Control层接口,而Control接口又访问Service接口,Service接口访问Dao层接口,Dao层接口操作数据库,各个接口间紧密联系,需要约定好接口形式。

4.3.3  MyBatis的配置和使用

MyBats可以通过配置文件自动生成对应数据库地段的映射文件,具体方法是声明数据库连接参数,配置表名和实体类的对应关系,配置字段对应关系,通过实体类来操作DAO层,一下配置文件声明了数据连接参数:

        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">

   

   

       

                        connectionURL="jdbc:mysql://127.0.0.1/check"

                        userId="root"

                        password="******">

4.3.3  Spring配置文件

Spring 中约定了很多默认的配置,如果需要个性化配置可以编写.yml文件来配置我们需要的参数,在本系统中配置文件主要配置了数据库连接参数,邮箱参数,MyBatis配置文件路径等参数。其部分配置如下:

spring:

  datasource:

    type: com.alibaba.druid.pool.DruidDataSource

    driver-class-name: com.mysql.jdbc.Driver

jdbc:mysql://127.0.0.1:3306/check?characterEncoding=utf-8&autoReconnect=true&useSSL=false

  mail:

    host: smtp.163.com

username: [email protected]

default-encoding: UTF-8

    protocol: smtps

    port: 465

4.4  项目流程图

项目流程图如图4-1所示:主要的节点数据分为请假数据,签到数据,选课数据,各个模块单元围绕以上三个节点展开。

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第1张图片

图4-1 项目流程图

 

5  后端详细设计与实现

5.1  概述  

因为该系统比较简单,任务也很明确,所有选择使用瀑布模型来开发该系统后端部分[6]。第一步要搭建Windows10中JDK8+Tomcat8+MySQL5.6的开发环境。第二步需要先明确任务,设计好对应的数据库结构,仔细思考每一张表中的每一个字段,确保数据库表结构不会有大的修改,并在数据库中建表。第三步配置项目的配置文件,建立相关文件的文件夹,使用Mybatis自动生成数据库映射文件。第四步完成各层次文件夹的建立,编写公共的工具类和基类及相关接口。第五步根据需求编写后端代码,完成接口测试。第六步编写前端代码实现前后端交互和测试。

5.2  登录注册模块

5.2.1 登录注册密码的加密

为保证用户密码的安全,我们一般不直接将用户密码的原字符存入数据库,而是将密码加密后保存到数据库中,这样即使数据泄露也无法得知密码明文,可以加强系统的安全性。在实施具体加密操作中,有MD5加密和BASE64加密两种方法,由于MD5在不同版本JDK中可能不兼容,所以在本系统中我们使用BASE64加密,并将其封装为一个工具方法,以便在需要时随时调用,实现过程如下:

 public static String enCodeByBase64(String str) throws UnsupportedEncodingException {

        Base64.Encoder encoder = Base64.getEncoder();

        byte[] strByte = str.getBytes("UTF-8");

        String encodedText = encoder.encodeToString(strByte);

        return encodedText;

}

5.2.2 邮箱验证模块

目前很多系统使用手机号绑定账号,通过短信验证码的形式进行手机号验证,但发送验证短信需要收费,为了节省开支,我们使用邮箱号绑定账号,通过发送邮件的形式进行验证码的发送,这样也可以达到相同的目的。我们将引入SpringBoot中的邮箱模块,配置邮箱参数,封装一个发送邮件的方法,在我们调用该方法时即可发送验证码,实现过程如下:

 public void send(String path, String title, String text) {

        SimpleMailMessage message = new SimpleMailMessage();

        message.setFrom("[email protected]");

        message.setTo(path);

        message.setSubject(title);

        message.setText(text);

        mailSender.send(message);

}

5.2.3登录注册模块功能展示

登录功能如图5-1所示:输入正确的账号密码可以登录,也可以点击忘记密码或者去注册按钮跳转到对应页面。

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第2张图片

图5-1 登录页面

找回密码功能如图5-2所示:通过邮箱获取验证码找回自己与邮箱绑定的账号

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第3张图片

图5-2 找回密码页面

 

  注册功能如图5-3所示:通过邮箱获取验证码来绑定和注册账号

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第4张图片

图 5-3 注册页面

5.3  爬虫导入课表模块

5.3.1  爬虫获取课表原始数据

通过设置相关参数,输入学号,教务网密码和验证码,可模拟登录教务网并获取课表数据。具体过程为设置参数,发送请求,获取数据,其代码片段如下:

Map datas = new HashMap<>();

datas.put("TextBox2", password);

datas.put("txtSecretCode", checkCode);

datas.put("RadioButtonList1", "%D1%A7%C9%FA");

try {

connection = Jsoup.connect("http://jw1.hustwenhua.net/(bd1qzh55cszyfl45hzst5b55)/default2.aspx");

connection.header("User-Agent",

"Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36");

response = connection.postDataCharset("GB2312").ignoreContentType(true).method(Connection.Method.POST)

.data(datas).cookies(cookies).execute();

5.3.2将课表原始数据处理为目标数据

数据处理方式是使用正则表达式匹配,通过编写正则表达式来解析需要的数据,具体操作是封装一个正则匹配的方法,需要匹配时再使用该方法处理数据,正则匹配方法代码如下:

public static List getSubUtil(String soap, String rgex) {

List list = new ArrayList();

Pattern pattern = Pattern.compile(rgex);// 匹配的模式

Matcher m = pattern.matcher(soap);

while (m.find()) {

int i = 1;

list.add(m.group(i));

i++;

}

return list;

}

5.3.3 获取课表页面功能展示

获取课表功能如图5-4所示:通过学号,教务网密码,验证码即可获取课表数据。

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第5张图片

图 5-4  获取课表页面

5.4  请批假模块  

5.4.1 学生请假

学生请假需要提交一个请假请求,该请求需要包括请假同学id,请假课程,请假时间等参数,后台收到请求后会将请假信息记录到请假信息表中,并设置请假状态字段为默认未批准状态。

学生也可以查询自己提交的请假,通过学生id可以在请假信息记录表中找到自己的请假信息。

5.4.2 教师审批

教师可以查询与自己相关的审批,并对请假请求进行审批操作,其本质是修改请假信息表中的状态字段,可以将状态字段修改为同意或者不同意这两种状态。

5.4.3 请批假模块功能展示

请假模块如图 5-5所示:可以选择请假对象,请假原因,请假时间

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第6张图片

图5-5 请假页面

  批假模块如图 5-6所示:教师可以审核请假

 

图 5-6 批假页面

 

5.5  发布考勤模块

5.5.1 教师发布考勤

教师发布考勤是通过教师输入自定义考勤参数来发布考勤,教师可以选择考勤地点和有效距离等参数,个性化的灵活发布考勤。由于其参数明确,发布考勤过程也相对简单,第一步需要选择合适的参数,第二步查找出对应需要签到的学生存入考勤表,第三步在考勤表中查找并标记已经请假的学生。

5.5.2 定时自动发布考勤

定时自动发布考勤模块是利用SpringBoot的定时任务,在每一天的每节课前设置定时任务,在课表数据库查找当前时间下的课程,通过课程id发布考勤。第一步是计算当前时间对应是多少周和周几,通过定时任务查询对应的课程列表,第二步是遍历该课程列表查询课程对应的学生名单,第三步是通过课程名设置对应的默认签到参数,第四步查询标记已请假学生。

  1. 通过当前时间戳计算当前是该学期的多少周,同理也可以计算出当前是周几,代码片段如下:

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

        Date start, end;

        start = sdf.parse(START_TIME);

        end = new Date();

        Long startLong = start.getTime();

        Long endLong = end.getTime();

        Long ms = endLong - startLong;

        long zhou;

        zhou = ms / 1000 / 24 / 3600 / 7 + 1;

        return (int) zhou;

  1. 使用SpringBoot的定时任务,通过SpringBoot中Scheduled注解设置定时参数即可完成定时任务,其中@scheduled(cron = “0 10 8 * * ?”)表示每天的八点十分代码将自动执行,具体代码片段如下:

    @Scheduled(cron = "0 10 8 * * ?")

    private void sign1() throws ParseException {

        setSign(1);

}

  1. 通过课程名自动设置考勤参数,使用正则匹配的方法,匹配出课程对应的教室位置。代码片段如下:

private static SignInfoDO place(SignInfoDO signInfoDO, String place) {

        String s = "^(.*?)[\u4e00-\u9fa5]";

        String ss = "[\u4e00-\u9fa5]+(.*?)$";

        s = PublicUtil.getSubUtilSimple(place, s);

        if (s.equals("")) {

            s = PublicUtil.getSubUtilSimple(place, ss);

        }

        s = s.substring(0, 1);

        switch (s) {

            case "A": {

                signInfoDO.setX(114.44842366281756);

                signInfoDO.setY(30.499670598795895);

                signInfoDO.setInfo("根据教室自动设置的点名,工程实训楼A区");

                break;

            }

5.5.3 发布考勤模块功能展示

发布考勤模块如图5-7所示:可以选择发布考勤的相关参数来自定义考勤信息。

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第7张图片

图 5-7 发布考勤页面

5.6  学生签到模块

学生签到模块如图 5-8所示:学生在签到页面可以自动查询可以签到的课程,在符合签到条件的情况下可以进行签到操作,其本质是对考勤表中对签到状态标记字段的修改。

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第8张图片

图 5-8 签到页面

5.7  统计考勤模块

统计考勤没有进行任何逻辑操作和数据修改,本质上只是进行数据查询,查询的方式和需求可能多种多样,我们在此仅对按班级查询作讨论,只需要查询考勤表对于考勤状态的记录的字段即可查询需要的数据。

 

 

 

6  前端详细设计与实现

6.1  概述

由于本文重点不是研究前端页面的设计编写,因此没有过多关注前端页面的研究,只是前端模板上进行修改和添加新的功能。我们将在HTML和CSS组成的静态页面中使用JS及其框架JQuery完成数据格式校验,请求发送,动态加载数据,页面跳转等功能。

6.2  静态页面结构

静态页面由主题公共页面,导航栏页面,内容展示页面三个部分组成。主题公共页面是完全一样的,其包含退出登录等公共功能;导航栏页面提供点击跳转页面功能;点击后内容展示页面将展示对应的页面;其结构如图6-1所示:最大的方框是主体公共页面,第一个小方框是导航栏,第二个小方框是内容展示页面。 

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第9张图片

图6-1 静态页面的组成

6.3  页面跳转结构

页面跳转操作主要是使用导航栏和按钮实现,其中点击导航栏中不同按钮将展示对应页面,其实现代码片段如下:

       

       

其他页面之间的关系结构如图6-2所示:

基于Java爬虫的课堂考勤管理系统(毕业设计论文)_第10张图片

图6-2 页面跳转关系

6.4  JS及JQuery框架的使用

6.4.1  JS用于前端输入参数的初步校验

为了优化用户体验,减轻后台服务器的压力,JS通常使用在前端来校验输入参数是否满足一定的规则,比如说手机号应该是11位的数字,一般情况下我们是使用正则表达式来进行校验的。其代码如下:

$("#login").on("click", function () {

            var id = $("#telphone").val();

            var password = $("#password").val();

            var r = /^1[3456789][0-9]{10}$/;

            var r1 = /[0-9]{8}$/;

            var r2 = /[0-9]{4}$/;

            if (!r.test(id) && !r1.test(id) && !r2.test(id)) {

                alert("账号格式错误");

                return false;

            }

            if (password == null || password == "") {

                alert("密码不能为空");

                return false;

            }

6.4.2  JQuery发送Ajax请求

由于项目是前后端分离的,前端的操作必须与后端联系起来,这时我们将通过JQuery来发送Ajax请求来和后端接口通信,我们仅仅需要向指定的URL发送post请求,不用关系该请求具体是如何实现的。

 $.ajax({

                type: "post",

                contentType: "application/x-www-form-urlencoded",

                url: "http://127.0.0.1:8080/user/login",

                data: {

                    "id": id,

                    "password": password

                },

                dataType: 'json',

                async: true,

                xhrFields: {

                    withCredentials: true

                },

6.4.3  JQuery根据状态编码跳转页面

前端获取到后台的数据后将通过状态码判断请求状态,并将判断接下来的操作逻辑,对不同的状态做出相应的响应,以下代码将自动判断账号的权限等级并跳转到相应权限等级的页面。

                success: function (data) {

                    if (data.code == 0) {

                        var user = {id: data.data.id, name: data.data.name};

                        var userJson = JSON.stringify(user);

                        localStorage.setItem("user", userJson);

                        if (data.data.id > 100000000) {

                            window.location.href = "s_index.html";

                        } else if (data.data.id > 10000) {

                            window.location.href = "t_index.html";

                        } else {

                            window.location.href = "a_index.html";

                        }

                    } else {

                        alert("登录失败" + data.message);

                    }

 

7  全文总结与展望

7.1 系统优势

本系统创造性的将爬虫爬取教务网数据这一功能加入到考勤系统中,主动收集碎片化的数据,从根本上改变了原有考勤方式,是一个重要的突破;在开发本系统时后端使用到了主流的SSM+SpringBoot,前端使用到了主流的HTML+CSS+JS,完整的开发出了一个项目的前后端,具有较大的实践意义,也为日后工作打下了基础;整个系统非常注意细节,加入了邮箱验证,定时任务,前端参数校验,计算时间下拉框等功能,优化了系统功能和用户体验,也学习到了很多第三方服务的用法。从整体来看,该系统不仅具有较大的实用意义,而且在使用主流的框架开发的同时也引入了大量新技术,是一个极具价值的项目。

7.2 不足与改进

7.2.1 性能问题

由于发布点名环节和查询点名有大量数据库查询操作,而这两个操作对应的时间又刚好高度集中,因此可能存在大量用户下的性能问题,这个问题可以通过以下三个方面来解决:1,使用性能更好的服务器;2,优化数据库查询语句,减少联表查询和复杂查询;3,将任务分散到各个时间,避免同时大量执行任务。

7.2.2 定位精度问题

由于基于浏览器的定位存在很大误差,不满足考勤需要的精度,从而会导致签到时距离无法精确判断的问题,解决这个问题有以下两个方法:1,开发出一个app,利用手机的定位来获取位置信息;2,开发出微信小程序,利用微信小程序所带的位置接口获取位置信息,这两种情况下后端代码基本不变,只是改变了前端页面的形式。

7.3 未来展望

开发本系统是在数据不共享情况下的无奈之举,因为数据不共享,我们没有教务网数据,也没有请假数据,但我们可以通过爬虫和开发一个所有教师和学生都参入进来的系统来弥补数据不共享的不足,通过我们的主动将碎片化的数据集中起来处理,虽然解决了问题,但是导致服务器性能差,系统难以开发和维护,不同系统功能分散的问题。未来可以争取直接从教务网导入课表数据,避免爬取和分析处理课表数据导致的性能问题,或者也可以将本系统的请假和签到功能移植添加到教务系统中,进而直接到教务系统中完成签到,直接解决以上所有问题。

参考文献

 

[1] 林爱武、张采芳等, 计算机网络 ,华中科技大学出版社, 2017

[2] 刘瑞新、张兵义, 网页设计与制作教程:HTML+CSS+JavaScript, 机械工业出版, 2013

[3] 明日科技, Java从入门到精通, 清华大学出版社,2016

[4] 孙鑫, Java Web 开发详解,电子工业出版社, 2010

[5] 罗时飞. 精通Spring—深入Java EE开发核心技术.电子工业出版社. 2008

[6] 李刚. 疯狂Java讲义.第四版.电子工业出版社. 2018

[7] 陈强. 精通Java开发技术,清华大学出版社. 2014

[8] 黑马程序员, Java基础入门 , 清华大学出版社,2018

[9] 熊传玉,徐尤华,过滤器在Java Web开发中的应用研究[J]. 信息技术,2015

[10] 软件设计师教程(第5版)清华大学出版社,2018

[11]  Abdelhak Mesbah,Jean-Louis Lanet,Mohamed Mezghiche. Reverse engineering a Java Card memory management algorithm[J]. Computers & Security,2017

[12]  G. Bacci,M. Bazzicalupo,A. Benedetti,A. Mengoni. StreamingTrim 1.0: a Java software for dynamic trimming of 16S rRNA sequence data from metagenetic studies[J]. Mol Ecol Resour,2014

[13]  Pablo Piedrahita-Quintero,Carlos Trujillo,Jorge Garcia-Sucerquia. JDiffraction : A GPGPU-accelerated JAVA library for numerical propagation of scalar wave fields[J]. Computer Physics Communications,2016

[14]  Lorenzo Bettini,Ferruccio Damiani. Xtraitj : Traits for the Java Platform[J]. The Journal of Systems & Software,2016
[15]  Oscar Vega-Gisbert,Jose E. Roman,Jeffrey M. Squyres. Design and implementation of Java bindings in Open MPI[J]. Parallel Computing,2016

致  谢

本系统的开发总历时一年多,在我大三下就开始进行相关功能的编写,后期一直不断完善,虽然在这个过程中我遇到了很多问题,但是我有幸生于互联网时代,可以去网络上查询问题解决方案,学习前辈的经验,在这个过程中我浏览了很多前辈的博客或者教程,学习到了很多知识,在此我真挚的感谢CSDN,博客园等网友给予我的帮助!当通过网络解决不了我的问题时,我会请教我的老师,他们对我的帮助很大,特别是老师和老师,他们细致入微的辅导帮助我解决了很多问题,在此我真挚的感谢老师们对我的教导和关怀!

你可能感兴趣的:(java)