基于WEB的实验室选课系统的设计与实现(开题+源代码)

  

网络的使用已经越来越普及,为了摆脱从前选课的空间局限性,让选课更加高效便捷,各种网上选课系统应运而生,满足了众多学生教师的需求,为学生和学校节约了大量的时间成本与资源。但在学校中,有一些实验室或机房等实践场所的利用率不高,或者因为考虑安全问题,申请使用的手续较为繁琐,使学生不能及时的申请实验场所进行实操,学校可以通过选课系统对学生的使用意向进行统计,从而更好的规划实验室资源,并进行管理。

为了解决以上问题,本课题提出了基于WEB技术并利用eclipse工具,进行实验室选课系统的开发与设计,创建一个页面简洁美观,功能健全,可以满足学生需求的自由选课平台。本系统以提高大学生学习热情,提高实践操作能力为主旨,学校可以不定时安排空闲实验室,并安排相应教师进行管理并给予学生学习上的指导,让学生在安全便捷的环境下,尽情用实践的方式,加强对已掌握知识的使用。由于存在对自己目标比较模糊的同学,本系统提供了根据爱好推荐课程的功能,从而解决个别同学犹豫不决的问题,解决了当下学校教学资源利用率不高,学生理论知识充足却无法获得足够实操机会的问题。

关键词:WEB;实验室选课;MYSQL;Eclipse

Abstract

The use of the Internet has become more and more popular. In order to get rid of the spatial limitations of the previous course selection and make the course selection more efficient and convenient, various online course selection systems have emerged to meet the needs of many students and teachers. Save a lot of time costs and resources for students and schools. However, in schools, there are some laboratories or computer rooms and other practical places are not high utilization, or because of the consideration of safety issues, the application procedures are more cumbersome, so that students can not apply for experimental sites in time for practical operation, schools can use the elective system for students The intention to use statistics, so as to better plan laboratory resources, and management.

In order to solve the above problems, this paper puts forward the development and design of laboratory course selection system based on WEB technology and eclipse tool, and creates a free course selection platform with simple and beautiful page and sound function, which can meet the needs of students. This system aims to improve college students ' learning enthusiasm and practical operation ability. Schools can arrange idle laboratories from time to time, and arrange corresponding teachers to manage and give students guidance on learning, so that students can use practice in a safe and convenient environment to strengthen the use of knowledge. Due to the existence of students who are vague about their goals, this system provides the function of recommending courses according to their hobbies, so as to solve the problem of individual students ' hesitation, and solve the problem that the utilization rate of school teaching resources is not high, and students have sufficient theoretical knowledge but cannot obtain sufficient practical opportunities.

Keywords: WEB; Laboratory course selection; MYSQL: Eclipse

目  录

第一章 绪论

1.1课题的背景及意义

1.2国内外研究现状

1.3论文的主要工作

1.4论文结构安排

第二章 开发工具与相关技术

2.1开发环境

2.2 Java介绍

2.3 Eclipse开发工具

2.4 MySQL数据库

2.5 Spring MVC

2.6 Echarts

2.7人脸识别API

2.8人脸识别算法

2.9本章小结

第三章 需求分析

3.1课题可行性分析

3.2功能需求分析

3.3系统流程分析

3.4本章小结

第四章 系统设计

4.1系统设计

4.2数据库设计

4.2.1数据库实体

4.2.2数据库表

4.3本章小结

第五章 系统实现

5.1数据库连接的实现

5.2登录模块的实现

5.2.1密码登录的实现

5.2.2人脸识别登录的实现

5.3选课人数比例模块的实现

5.4管理员模块的实现

5.4.1管理员信息管理的实现

5.4.2学生信息管理的实现

5.4.3教师信息管理的实现

5.4.4开课管理的实现

5.4.5兴趣爱好管理的实现

5.5学生模块的实现

5.5.1学生个人信息模块的实现

5.5.2全部选课模块的实现

5.5.3推荐选课模块的实现

5.5.4已修课程模块的实现

5.5.5学生每周课表的实现

5.6辅导教师模块的实现

5.6.1教师信息模块的实现

5.6.2教师课程模块的实现

5.6.3选课学生模块的实现

5.6.4教师每周课表的实现

5.7本章小结

第六章 系统测试

6.1软件测试意义

6.2软件测试目的

6.3测试结果

6.4 本章小结

总结

参考文献

致 谢

第一章  绪论

1.1课题的背景及意义

时代快速发展,网络已经成为新时代生活中不可分割的一部分,这也对很多人的办事方式产生冲击,从前如果需要办理事务需要到对应的事务处进行办理,而如今,各种网上办事系统应运而生,破除了传统办事系统的空间限制,大多数事情都可以在任意有网络的地点,进行网上办理。各学校也紧跟时代步伐,推出了属于自己的选课系统,从而方便学生进行选课,大大提高了选课的办事效率。

同时由于社会的进步与教育的改革,学生接触的理论知识占比很大,加上生活条件越来越好,很多事情不需要学生亲自动手,学生动手实操的机会越来越少,动手能力也相应的越来越弱。科学理论非常重要,但动手与实践也不可或缺。缺少实践能力,对即将走向社会的大学生们来说,是一个致命的缺点。一个大学生在谈起理论知识时头头是道,但真要上手操作,却经常摸不着头脑。

学校的机房,实验室等在不上课时,可以开放给学生使用,虽新冠疫情已经放松管理,但化学实验室之类的,为了安全问题,必须安排相关教师进行现场监督,而电脑机房在使用过程中,虽然不易发生安全问题,但安排教师可以对学生进行疑难解答。

本系统可以实现学生对需要的技术实验室进行预约选课,对没有目标的学生也可以根据学生的爱好进行课程推荐,同时由于实验室每次使用都有损耗,为在方便学生的同时,节约开支,选择人数较少的实验室不能开课。

所以本课题的意义在于根据学生需求,提供实践场所,提高学生的学习兴趣与动手能力,提前适应社会,再没有人要求的情况下知道自己的需求,并能解决问题,从而高效的完成工作,并具备一定的独自抗压能力。

1.2国内外研究现状

如今国内大部分大学采用学分制,同时将课程分为必修课与选修课,选修课,顾名思义,将课程选择权交给学生,可以根据自己职业规划的需要与个人喜好,自由选择。通常在选课的时候,会有大量的信息进行处理,而且要在短时间内完成,靠人力着实有点艰难,于是便有了网上选课系统,选课系统可以在短时间内处理大量学生的选课数据,几乎零出错率,并且很快就可以给出排课结果,很大程度上减少了教务人员的工作量。而国外的教学系统起步早,发展成熟,早在上个世纪七十年代末,国外就已经实现了线上进行课题的申报和报备课题进展。

如今大学生的家庭条件相较于过去都有较大的改善,很多事情都不用自己亲自动手,大学之前的学习几乎完全向理论知识倾斜,对相关操作技术的实际操作仅停留在见过。进入大学后,越来越多的事情需要亲手去验证,然后获得领悟,于是出现了许多大学生在实操时无法适从,完全跟不上节奏,为了解决这个问题,结合成熟的网上系统,将限制的资源充分利用,让学生自己选择,增强大学生的动手能力。

1.3 论文的主要工作

本系统的目的在于帮助同学利用课余时间提高自己实操能力,统计学校可使用空闲实验室后,录入系统中去,并安排教师进行监督指导。对学生来说,学校提供了极其便利的学习条件及硬件基础,让学生在动手操作的过程中,学习起来事半功倍。对学校来说,对资源更好的利用,让学生有了更好的选择,最重要的是可以让学生更依赖于学校,方便学校进行监督管教,很大程度上减少了发生意外的概率,更容易培养出实操性人才。

本系统的主要实现的功能为:生成可视化饼图来观察目前选课人数比例,不同用户的个人信息管理,课程管理,开课管理,打分等。对不同用户的不同需求要提供不一样的操作界面。本系统使用eclipse进行开发,利用MySQL进行数据存储,在已学知识的基础上进行扩展,完成需求分析中的各项功能。

在前期的准备阶段中,本人会参考其他类型的选课系统,并查阅相关文献,了解当前的国内外研究现状,从而更好的分析设计需求,让实验室选课系统更加完善,并对软件可能性进行评估。在设计实现阶段,先编写好需求分析,根据需求分析对功能与数据库进行设计,最终实现功能并对系统的稳定性和兼容性进行测试。

1.4 论文结构安排

本文将从六个章节对基于WEB的实验室选课系统进行详细阐述,具体内容如下。

第一章绪论,主要讲述了当前选课系统的研究背景,研究目的与意义,之后通过调查国内外研究现状,为本系统选择一个设计方向。最后详细描述本文的工作内容和论文结构。

第二章主要对开发环境及开发软件进行介绍,包括eclipse,java,mysql,Spring MVC等内容。

第三章主要对系统从可行性,功能,系统流程等方面进行分析,从而更高效,有计划的完成系统设计。

第四章对系统的功能与数据库进行设计,为后期的实现进行铺垫,此时的系统雏形就已经开始出现。

第五章主要是对系统功能与页面的具体实现,在本章节会详细展示系统的功能演示及具体实现代码并进行说明。

第六章主讲述了软件测试的意义及结果,系统完成后,需要对系统位置的错误进行发现与纠正,从而进行软件测试,使软件更加完善,是在软件开发过程中不可缺少的部分。

第二章 开发工具与相关技术

2.1 开发环境

实验室选课系统的开发环境是在windows系统环境中,在eclipse软件中用java语言并套用Spring MVC进行Web开发,用Navicat对Mysql数据库进行可视化管理,并与选课系统进行连接。

2.2 Java介绍

Java是一种面向对象的语言,与传统的C++比,Java具有前者的各种优点,对于那些深涩的指针,多继承之类的东西选择了剔除。而由于Java吸收了许多C++的东西,让当时无数C++程序员非常容易上手,而且比C++简单的多,具有很好的移植性,慢慢的就风靡了代码届,越来越多的程序员加入了Java语言的编程。不仅如此Java语言还十分安全,它经常被用于网络环境中,所以它为自己做了一个可以阻挡恶意攻击的机制。在如今,Java几乎已经成为只要是从事与计算机相关的工作的人,即使不要认真学习Java语言,也要对Java语言有一定的了解。

Java语言中,对象是由类来构建的,类在Java 中的使用是非常基本的,不可能不使用类而编写出一个有意义的Java应用程序。通过继承机制,Java也支持代码重用,一个类可以由另外的类派生。这个过程称为继承。Java语言提供了一个非常有用的类体系结构,最顶层是Object类,这是所有其他类得以派生的根类。默认时,一个新创建的类总是继承Object类,即使并没有明确定义所继承的父类。预定义的Java类体系使得Java环境丰富多彩。

2.3 Eclipse开发工具

Eclipse是一个开源的且具有商业品质的开发平台,它集中了很多开源的框架,功能强大,例如Spring,Hibernate,Struts,JSF,JPA等。它基本由平台运行库、工作区、工作台,团队支持和帮助板块组成。

平台运行库是Eclipse最重要的部分,类似于大脑,决定了软件拥有哪些功能,在Eclipse启动时,会自动检索那些已经安装好的插件,但不会立刻加载这些插件,在实际项目中调用时才会加载。在Eclipse中,除了内核,几乎每样事情都需要插件的支持。

工作区就是Eclipse的工作文件存放区,用户创建的工程文件全都都存放在这个空间,且在文件资源做出改变时,工作区还会告知该项目所用到的插件资源信息已经变更。

工作台,顾名思义就是用户在使用Eclipse创建并进行编写代码时所用到的界面组件,包括菜单栏,工具栏,透视图。在导航器中可以看见所有项目,包括项目中的子文件,通过编辑器可以对目标项目进行编辑,修改,查看等操作。

团队支持组件可以帮助用户对Eclipse的版本与配置进行管理,也可以根据用户需求添加视图从而达到用户与控制系统进行交互。

帮助组件具有一定的扩展能力,能够提供一个附加的导航结构,帮助用户以以HTML文件的形式添加文档。

目前常用的WEB开发环境是由Tomcat充当Web服务器,Struts提供MVS框架支持,也有为了替代EJB来充当数据库的持久层,选择Hibernate,这些工具大大方便了我们进行WEB项目开发,并且可以免费使用,大大减少了开发成本,所以十分适合学生来开发属于自己的系统。

2.4 MySQL数据库

MYSQL是一个可以自由使用的开源的关联性数据库系统,属于Oracle公司,与Oracle,DB2,微软的SQL Server相比,体积更小,速度快,且因为开源,任何人都可以对MYSQL的缺陷进行修正,成本也更低,还具有很强的跨平台性。

MYSQL的主要特点就是快速,健壮和在使用过程中,简单易上手。但他也具有一些不足,就是相对于其他商用数据库,容量较小,安全性较低,但对个人用户来说,可以忽略不计。

为了更加直观,便捷的管理数据库,我选用Navicat软件,Navicat拥有非常简洁的图形用户界面,通过点击的方式即可完成对对数据库的创建与修改,免除复杂的SQL语言的编写,但仍保留了数据库语言编写的能力,而且在导出和导入数据库方面也是非常的简单迅速。

2.5 Spring MVC

在早期的javaweb开发中,java代码和html代码严重耦合,使得开发者必须要同时掌握java和前端技术,为了解决这个问题便提出了MVC模型,即在使用时,用户请求先发送至Servlet,然后根据请求中的内容调用Java Bean,最后结果由JSP完成。Spring MVC是Spring框架的一个模块,基于JAVA的轻量级Web框架,将模型(Model),视图(View),控制器(Controller)进行分离,将Web层分解成多个部分,具有清晰的角色分配,支持各种试图技术,与Spring框架集成,一个功能完成后,再下次遇到类似的功能需求时,可以将上次完成的功能模块进行修改,然后移植到当前项目中,至此,在企业级的大型网站开发项目中,再也不会出现一个人身兼数职,而是在开发前对整个项目功能进行分析,分化成多个小项目,大大减轻了工作压力,功能模块的可复用性也降低了项目的开发资源与时间成本。

2.6 Echarts

Echarts的全称为Enterprise Charts,是由百度公司推出的一款开源的商业级数据图表绘画插件,兼容性非常高,不仅可以在目前市面上绝大多数浏览器中流畅运行,还有移动端的优化和跨平台的使用。支持用户个性化定制可视化图标,且做出来的图表美观,生动,甚至可以交互,大大提高了用户体验。

Echarts几乎支持所有形式的可视化图表,包括但不局限于折线图,柱状图,饼图等。在平时制作图表时,需要预先处理大量的数据,然后再进行导入,而Echarts可以做到对数据的动态渲染,用户加载数据的同时Echarts会同步进行渲染,节约了大量的等待时间,提高了资源的利用率。在制作图表时的常用Echarts配置参数及说明如表2-1所示。

表2-1常用Echarts配置及说明

配置参数

参数

说明

注释

tooltip

提示框组件,配置图表显示框在什么情况下与鼠标交互。

编号

click

鼠标点击的情况下交互

mouseover

鼠标划过的情况下交互

formatter

字符串模板,用来输出提示框字符内容。

账号

saveAsImage

导出当前图表文件。

真实姓名

data

图表数据所存放的数组

dashed

虚线的效果

dotted

点线的效果

solid

实线的效果

2.7 人脸识别API

在登陆时,为了考虑安全性,可以使用人脸识别的方式来对登录用户进行验证来保证是本人进行的操作。实验室选课系统的人脸识别功能将通过调用从百度旗下申请的人脸识别的API。API指应用程序接口,包含了程序所需的功能集,开发人员可以通过调用API,并填写对应参数,即可直接实现功能,极大程度上减轻了工作量。

API主要是由软件组件,协议,接口构成,协议中规定了功能中信息交互的规则与步骤。接口则是调用方与程序方之间进行通讯的窗口。同时在通讯的过程中,双方的语言也有标准,通用格式包含XML与JSON。

2.8 人脸识别算法

世界上不存在任何两张一模一样的脸,即使双胞胎也会在鼻子,眼睛,下巴等地方上存在细微的差别。而对这些不同器官的形状和结构刻画,可以为人脸识别提供识别要素,即几何特征识别。

几何特征人脸算法主要是根据人脸的轮廓曲线来获取该人脸的明显五官特点,并由这些显著点导出一组用于识别的特征度量如距离、角度等。寻找出这些人脸特点的基本元素如五官大小,五官之间的距离等之后,系统会计算出它们的几何特征量,将这些数据结合就会形成对整张人脸的刻画。在用户进行人脸识别时,系统会先扫描该用户的五官特征并进行数据合并,之后系统将合并后的几何关系识别参数与数据库中的原始图像参数进行比较与判断,这种方式的识别率较高,但在对人脸识别前,需要进行大量的数据预处理工作。

2.9本章小结

本章节主要由八个部分组成,分别对开发环境,java开发语言,eclipse开发工具,mysql数据库,Spring MVC框架以及Echarts图表插件,人脸识别算法,人脸识别所调用的API进行了介绍。第一部分介绍了实验室选课系统的运行环境。第二部分介绍了选择java语言的原因并解释了java语言的优缺点。第三部分介绍了eclipse开发工具的优势以及eclipse每个板块的功能。第四部分介绍了MySQL数据库的免费开源且便于开发的特点。第五部分介绍了使用Spring MVC框架后可以让开发流程更清晰的特点。第六部分则介绍Echarts图表插件的便利以及在使用过程中经常用到的功能参数。第七部分介绍了人脸识别功能api的特点,而第八部分就几何人脸识别算法进行了介绍。

第三章 需求分析

3.1课题可行性分析

在正式进行系统设计之前,进行可行性分析,从多种角度对分析该系统是否实用,成本是否昂贵,功能设计进行合理,从而有一个明确的目标,提高效率。

1、成本可行性

本系统所用的软件eclipse,mysql及相关技术均是免费开源的,无需消耗个人资金。系统的设计也并不复杂,不需要昂贵的硬件基础支持,且维护相对简单,所以系统从设计到完成的成本相对低廉,在测试阶段,测试环境搭建的成本也几乎可以忽略不计,极大程度上减少了开发系统的经济压力。

2、技术可行性

设计系统主要的开发工具eclipse,技术发展早,用户基数大,是目前市面上最成熟,受欢迎的java开发工具之一,当遇到自己无法独立解决的问题,可以从多种渠道寻求帮助,从而解决问题。选课系统仅依赖WEB浏览器,兼容性高,使用渠道几乎没有局限性。

3、操作可行性

实验室选课系统可以在任何支持浏览器的设备上进行使用,没有空间上的局限性,功能上,该系统的功能并不复杂,页面简洁,用户使用时极容易上手,且响应速度快速。

4、管理可行性

该系统的账号由管理员统一添加,加强了系统的稳定性。管理员在管理系统时会遵守法律法规,尊重系统内教师与学生的个人信息,不能随意泄露隐私,保障用户的信息安全。

3.2功能需求分析

本系统主要由教务管理员,教师,学生三个模块部分构成,接下来就对主要的功能进行分析。

1.登录界面

在用户进入登陆界面后会发现账号密码下方有三个单选按钮,对应着不同 的身份,用户可以选择不同的身份进行密码验证以及人脸识别,通过后,用户可进入对应身份的板块,从而进行不同的操作。

2.用户信息管理

在不同用户的模块中,都可以通过点击个人信息管理的下拉菜单从而对自己的个人信息,账号密码等进行查看与编辑,管理员拥有最高的权限,可以查看所有人员的身份信息并进行修改或者删除,也可以添加新的教师或者学生,并赋予账号。

3.课程管理

管理员可以在课程信息列表中查看所有课程信息,并进行编辑和删除,在开课模块中,对符合开课条件的课程可以进行开课如果人数太少,则不给予开课。而教师学生在课程信息列表中可以看到自己课程的开课状态和开课时间以做好实验准备,以保障在实验室内上课有足够的安全保障。

4.表现分数管理

在实验室经过指导老师的教育,并有足够的实践经历后,老师可以根据学生表现给学生打分,以让学生清楚自己的能力定位,从而更好的查漏补缺。

5.课程分类管理

管理员可以根据课程属性,给课程进行分类,以分配不同的实验场所,也方便学生根据自身兴趣进行选课。

6.选课管理

学生通过点击选课按钮进行选课,也可以通过选择感兴趣的课程种类之后再进行选课。

3.3系统流程分析

在实验室选课系统的登陆界面,用户根据自身的身份及需求选择身份进行登录验证,学生或者教师登陆成功后会进入对应的系统界面并可以看到目前选课完成与未完成的人数比例饼图,在左侧下拉菜单栏可以选择要办理的事务,点击事务即可进入详情界面,详情如图3-1所示。

图3-1 系统流程图

3.4本章小结

做任何事情都要有规范标准,软件项目更需要如此,需求分析具有决策性,方向性和策略性的作用,在软件开发过程中有着举足轻重的作用,可以避免软件在编写过程中出现功能偏差,帮助开发者发现软件潜在的问题,提高软件的可靠性,本章主要从可行性,不同板块功能以及系统流程进行分析,是本系统实现的基石。

第四章 系统设计

4.1系统设计

实验室选课系统的整体操作模块分为三个:管理员,学生,教师,详情如图4-1所示。

图4-1 系统总功能模块图

管理员模块分为用户管理,课程管理,和兴趣爱好管理这三个模块,三个主模块下还有我的信息,学生信息列表,教师信息列表,课程列表,兴趣爱好列表功能,如图4-2所示。

图4-2 管理员模块图

教师模块分为用户管理和课程管理这两个板块,两个模块下有教师信息,我的课程列表,选课学生列表功能,如图4-3所示。

图4-3 教师模块图

学生模块同样分为用户管理和选课管理这两个板块,两个模块下有用户管理,全部课程列表,我的课程列表,兴趣爱好推荐功能,如图4-4所示。

图4-4 学生模块图

4.2 数据库设计

4.2.1 数据库实体

实验室选课系统的数据库采用的是MYSQL数据库,本系统主要由三个角色构成,分别是管理员,学生,和辅导教师,为了更科学,更清晰的设计数据库,表现每个实体之间的关系,本人将设计一个E-R图。

  1. R图的三要素是实体,属性,关系,分别对应着不同的形状——矩形,圆形和菱形,利用E-R图,可以让人更直观的的了解数据库数据之间的联系和组成。而本系统的实体主要是课程实体,管理员实体,学生实体,分数实体,课程类别实体与人脸信息实体。

1.根据上述说明,实验室选课系统的E-R数据模型如图4-5所示。

图4-5 实验室选课系统E-R图

2.管理员E-R图,如图4-6所示。

图4-6 管理员E-R图

3.教师E-R图,如图4-7所示。

图4-7 教师E-R图

4.学生E-R图,如图4-8所示。

图4-8 学生E-R图

5.课程E-R图,如图4-9所示。

图4-9课程E-R图

6.分数E-R图,如图4-10所示。

图4-10课程E-R图

7.课程类别E-R图,如图4-11所示。

图4-11课程E-R图

8.人脸信息E-R图,如图4-12所示。

图4-12人脸信息E-R图

4.2.2 数据库表

实验室选课系统的数据库具体表结构如下

1.管理员表

主要包含编号,账号,真实姓名,创建时间,密码。管理员表结构如表4-1所示。

表4-1管理员表结构

列名

类型

长度

是否主键

能否为空

注释

id

int

11

编号

username

varchar

255

账号

realname

varchar

255

真实姓名

createtime

varchar

255

创建时间

password

varchar

255

密码

2.教师表

主要包含编号,教师编号,教师姓名,教师性别,学历,职称,入职时间,创建时间,密码,账号苏,所在学院。教师表结构如表4-2所示。

表4-2 教师表结构

列名

类型

长度

是否主键

能否为空

注释

id

int

11

编号

tno

varchar

255

教师编号

tname

varchar

255

教师姓名

tsex

varchar

255

教师性别

edu

varchar

255

学历

titlename

varchar

255

职称

time

varchar

255

入职时间

createtime

varchar

255

创建时间

password

varchar

255

密码

tloginname

varchar

255

账号

classroom

varchar

255

所在学院

3.学生表

主要包含编号,学生姓名,学生性别,出生年月,入学年月,所属院系,密码,创建时间,兴趣,账号。学生表结构如表4-3所示。

表4-3 学生表结构

列名

类型

长度

是否主键

能否为空

注释

id

int

11

编号

sname

varchar

255

学生姓名

sex

varchar

255

学生性别

day

varchar

255

出生年月

time

varchar

255

入学年月

room

varchar

255

所属院系

password

varchar

255

密码

createtime

varchar

255

创建时间

type

varchar

255

兴趣爱好

loginname

varchar

255

学号

4.课程表

主要包含编号,学生编号,课程名称,课程内容,课程类别,课程德育分,创建时间,开班状态,地址,上课时间。课程表结构如表4-4所示。

表4-4课程表

列名

类型

长度

是否主键

能否为空

注释

id

int

11

编号

userid

varchar

255

学生编号

subjectname

varchar

255

课程名称

subjectcomment

varchar

255

课程内容

subjecttype

varchar

255

课程类别

subjectscore

varchar

255

课程德育分

createtime

varchar

255

创建时间

state

varchar

255

开班状态

address

varchar

255

上课地址

subjectime

varchar

255

上课时间

5.分数表

主要包含编号,课程编号,学生编号,分数。分数表结构如表4-5所示。

表4-5分数表

列名

类型

长度

是否主键

能否为空

注释

id

int

10

编号

subjectid

varchar

255

课程编号

userid

varchar

255

学生编号

score

varchar

255

分数

6课程类别表

主要包含编号,课程类别,创建时间。分数表结构如表4-6所示。

表4-6课程类别表

列名

类型

长度

是否主键

能否为空

注释

id

int

10

编号

remark

varchar

255

课程类别

createtime

varchar

255

创建时间

7人脸信息

主要包含编号,人脸数据用户编号。分数表结构如表4-6所示。

表4-7课程类别表

列名

类型

长度

是否主键

能否为空

注释

id

int

10

编号

data

varchar

255

人脸数据

uno

varchar

255

用户编号

4.3本章小结

本章主要根据需求分析对管理员,教师,学生模块进行详细的功能板块设计,此时的系统框架已经搭建结束,只需进行功能实现即可。之后数据库进行设计,并对每个数据的列名进行说明。

第五章 系统实现

5.1数据库连接的实现

实验室选课系统在设计时主要是用Navicat连接mysql数据库进行可视化操作,对管理员账号进行预录入。在使用系统时,使用eclipse导入jar包,添加JDBC数据库连接文件。之后编写jdbc.properties文件用于数据库连接,这种方式可以做到编写一次,多次调用,在数据库配置发生变化时方便修改,具体代码如代码1所示,其中database.url用来配置数据库的路径,username是数据库的登录用户名,password是数据库的登陆密码,driverClassName用来配置连接数据库的工具包。maxActive是数据库连接池最大连接数,cp.maxIdle用来设置最大等待连接中的数量,cp.minIdle用来设置最小等待数量,但此处的0代表无限制,cp.maxWait为连接最大等待毫秒。

代码1 JDBC配置代码

database.url=jdbc:mysql://localhost:3306/ssm_subject?useAffectedRows=true&useUnicode = true&characterEncoding=utf-8

Database.username = root

Database password = 123456

database.driverClassName = com.mysql.jdbc.Driver

cp.maxActive = 96

cp.maxIdle = 16

cp.minIdle = 0

cp.maxWait = 60000

5.2登录模块的实现

5.2.1 密码登录的实现

在进入选课系统后,如图5-1所示,用户可以根据自身身份然后选择符合条件的单选按钮,即可跳转到对应身份的系统界面,并进行对应选课,管理,打分的功能,为了安全性考虑,选课系统并没有注册功能,而是由教务系统分配。

图5-1 登录页面

登陆界面的关键代码如代码2所示所示,用来判断账号密码是否为空,并向主页面传送数据。

代码2 判断账号密码是否为空

$('#denglu').click(function(){  

  var userName = $.trim($('#userName').val());

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

     if(userName == ''){  

         layer.msg('用戶名不能为空',function() {time:2000});

         return false;  

     }

     if(password == ''){  

         layer.msg('密码不能为空',function() {time:2000});

         return false;  

     }

})

选择用户后登录跳转不同页面的代码如代码3所示,这段代码对传来的账号密码属于什么类型进行判断,从而在验证成功后显示不同的页面。

代码3 根据用户账号类型跳转不同页面

if(type != null && type.equals("1")){//管理员

     user.setUserName(userName);

    user.setPassword(password);

    User admin = us.selectUser(user);

    if(admin == null){

mv.addObject("msg1", "用户不存在或者密码错误");

mv.setViewName("views/login");

    }

    }else if(type != null && type.equals("2")){

     teacher.settLoginName(userName);

     teacher.setPassword(password);

     Teacher te = us.selectTeacher(teacher);

     if(te == null){

mv.addObject("msg1", "用户不存在或者密码错误");

mv.setViewName("views/login");

    }

    }

request.getSession().setAttribute("subjectTypes", subjectTypes);

return mv;

5.2.2 人脸识别登录的实现

用户在输入账号密码后,会先跳转到人脸识别的界面,在该页面中,可以看到自己的实时画面,点击验证后,系统会抓取画面并与系统中的信息进行对比,相似度达到80即可认证成功,如图5-2所示。

图5-2 人脸识别页面

验证界面的功能实现主要由两个部分组成,首先就是对画面的抓取,该功能的实现如代码4所示。

代码4 人脸信息抓取关键代码

if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {

      getUserMedia({video : {width: 480, height: 320}}, success, error);

    } else {

      alert('不支持访问用户媒体');

    }

    document.getElementById('capture').addEventListener('click', function () {

      context.drawImage(video, 0, 0, 480, 320);

      const img=context.drawImage(video, 0, 0, 480, 320);

  var image = new Image();

  image.src = canvas.toDataURL("image/png");

  console.log(image);

人像信息抓取成功后,即可与数据库中的人像信息进行对比,相似度达到80即可返回识别正确,具体实现如代码5所示。

代码5 人脸信息对比关键代码

JSONObject myJson = new JSONObject(result);

int error = myJson.getInt("error_code");

if (error == 0) {

JSONObject resultList = (JSONObject) myJson.get("result");

double score = resultList.getDouble("score");

System.out.println(score);

if (score >=80) {

flag = true;

}

}

return flag;

} catch(Exception e){

e.printStackTrace();}

return flag;

5.3选课人数比例模块的实现

所有用户在登录系统后都可以在工作台查看到当前选课学生与未选课学生之间的比例,激励学生活跃起来,投身到实践课中,如图5-3所示。

图5-3 统计图页面

饼图可视化关键代码如代码6所示。

代码6 数据可视化饼图关键代码

series: [

{

 name: '半径模式',

 type: 'pie',

radius: [20, 140],

center: ['25%', '50%'],

roseType: 'radius',

itemStyle: {

borderRadius: 5},

label: {show: false},

emphasis: {

label: {

show: true }},

data: bcounts

}]});

5.4管理员模块的实现

通过管理员单选按钮进行登录验证之后即可进入管理员页面,在该页面管理员用户可以进行个人信息管理,教师信息管理,课程管理等功能如图5-4所示。

图5-4 登录页面

5.4.1 管理员信息管理的实现

在管理员模块中的我的信息中,如图5-5所示,管理员可以查看个人信息,点击修改后,可以对管理员的身份信息,账号密码等进行更新,如图5-6所示。

图5-5 管理员登录页面

图5-6 管理员密码更改页面

修改管理员密码关键代码如代码7所示,获取输入框中的管理员账号及密码进行更新。

代码7 修改密码关键代码

String id = request.getParameter("id");

String userName = request.getParameter("userName");

String realName = request.getParameter("realName");

String password = request.getParameter("password");

User user =new User();

user.setId(Integer.parseInt(id));

user.setPassword(password);

user.setRealName(realName);

user.setUserName(userName);

try{

us.updateUserById(user);

mv.addObject("msg", "success");

mv.setViewName("views/user/userList");

}

5.4.2 学生信息管理的实现

在管理员模块中选择学生信息列表,如图5-7所示,管理员可以查看所有已经录入系统的学生的个人信息,在左上角输入框中,教师可以搜索指定的学生的个人信息,点击添加按钮即可添加学生信息,如图5-8所示。同样管理员也可点击编辑按钮从而对学生信息进行修改与删除操作,如图5-9所示。

图5-7 管理员登录页面

图5-8 添加学生页面

添加学生信息关键代码,如代码6所示,将修改信息页面中输入框的值传入数据库中。

代码8 添加学生信息关键代码

Student student =new Student();

student.setCreateTime(simpleDateFormat.format(new Date()));

student.setDay(day);

student.setName(userName);

student.setPassword(password);

student.setRoom(room);

student.setSex(sex);

student.setTime(classTime);

student.setType(type);

student.setLoginName(loginName);

int count = us.selectStudentCountsByLoginName(loginName);

if(count == 0){

us.saveStudent(student);

re = true;

}

图5-9 修改学生页面

修改学生信息关键代码如代码9所示,将页面中输入框的值更新到数据库中。

代码9 更新学生信息关键代码

Student student =new Student();

student.setCreateTime(simpleDateFormat.format(new Date()));

student.setDay(day);

student.setId(Integer.parseInt(id));

student.setLoginName(loginName);

student.setName(studentName);

student.setPassword(password);

student.setRoom(room);

student.setTime(classTime);

student.setType(type);

us.updateStudent(student);

re = true;

return re;

5.4.3 教师信息管理的实现

在教师管理页面中,如图5-10所示,在这个页面中,管理员可以看到所以教师的详细信息,可以通过左上角的搜索框搜索特定教师,点击对应按钮即可对教师信息进行编辑,点击添加按钮即可添加教师信息。

图5-10 教师管理页面

删除教师信息关键代码如代码10所示,根据教师id进行删除教师信息。

代码10 删除教师信息关键代码

@RequestMapping("/deleteTeacher")

    public boolean deleteTeacher(HttpServletRequest request,

HttpServletResponse response){

boolean re = false;

String id = request.getParameter("id");

us.deleteTeacher(Integer.parseInt(id));

    re = true;

    return re;

}

5.4.4 开课管理的实现

在开课管理页面中,管理员可以看到所有课程的详细信息,包括课程名,授课老师等信息,最重要的可以看到该课程的开课状态,管理员可以对符合条件的课程进行开课,如果选课人数少于5人,则不能开课。同时支持同时对课程类型和课程名称进行搜索点击对应按钮即可完成对课程的编辑,增加与删除,如图5-11所示。

图5-11 开课管理页面

关于开班的关键代码如代码11所示,对选课大于三人的实验室进行开班并安排教师。

代码11 开班关键代码

public boolean openSubject(HttpServletRequest request){

boolean re = false;

Integer subjectId = Integer.parseInt(request.getParameter("id"));

Integer count = subjectService.selectRecordsById(subjectId);

if(count > 3){

subjectService.openSubject(subjectId);

re = true;

}

return re;

}

5.4.5 兴趣爱好管理的实现

实验室选课系统的目的在于让同学根据自身目标及需求来进行选择实验室并安排相应老师进行指导,但考虑到有些学生没有规划,所以就有了根据兴趣爱好进行选课的功能,在这个页面管理员可以添加课程对应的爱好,如图5-12所示 ,以解决学生的选择困难的问题。

图5-12 兴趣爱好管理页面

5.5学生模块的实现

5.5.1 学生个人信息模块的实现

在该页面中,学生登陆后可以查看到自己的身份信息及注册时间等。学生信息页面如图5-13所示,点击修改按钮即可修改个人信息,兴趣爱好及密码。

图5-13 学生个人信息页面

5.5.2 全部选课模块的实现

在学生的全部选课页面中,学生可以看到学校可以提供的实验室及其对应课程的开课和选课状态,开班后和已选课都会拿绿色字体进行标识,反之则是红色,如图5-14所示,未选的课程后面是蓝色的选课按钮,如果选课成了,蓝色按钮会变成红色的退课按钮。

图5-14 全部选课页面

学生选课关键代码如代码12所示,将选课学生的信息传入数据库中。

代码12 学生选课关键代码 

public boolean checkSubject(HttpServletRequest request){

boolean re = false;

Integer subjectId = Integer.parseInt(request.getParameter("id"));

Student student =(Student)request.getSession().getAttribute("student");

Integer studentId= student.getId();

Records record = new Records();

record.setSubjectId(subjectId);

record.setUserId(studentId);

record.setScore(0);

subjectService.checkSubject(record);

re = true;

return re;

}

5.5.3 推荐选课模块的实现

在推荐选课模块中,学生可以看见根据自己兴趣爱好,系统推荐的课程,如图5-15所示,学生可以选择感兴趣的课程进行选课,点击选课按钮即可选择心仪的课程。

图5-15 学生推荐选课页面

根据推荐个人选择的兴趣爱好进行推荐课程的关键代码如代码13所示。

代码13 推荐选课关键代码

List<Subject> list = new ArrayList<>();

Map<String,Object> maps = new HashMap<>();

maps.put("type", type);

maps.put("subjectName", subjectName);

PageHelper.startPage(currentPage,8);

    list=subjectService.selectOrderSubjectList(maps);

    if(list != null && list.size()>0){

     for(Subject sub : list){

     sub.setRecords("2");//不存在

     Integer id = sub.getId();

     List<Records> reList = subjectService.selectRecords(id);

     if(reList != null && reList.size()>0){

     String record= "";

     for(Records re : reList){

     record = record + "%"+re.getUserId().toString()+"%";

}

     if(record.contains(studentId)){

     sub.setRecords("1");//存在

}

5.5.4 已修课程模块的实现

在已修课程模块中,学生可以直观的看到自己选课后并开班的课程名称,以及课程场地等信息,以及辅导教师对学生实践操作的评价分数,最后可以获得相应的德育实践分,如图5-16所示。

图5-16 已修课程页面

5.5.5 学生每周课表的实现

学生点击我的课表后,即可在该页面中查看学生该周课表如图5-17学生可以在该页面中查看自己本周的课程安排从而做好充足的准备。

图5-17 学生每周课表页面

5.6辅导教师模块的实现

5.6.1 教师信息模块的实现

教师登录后,点击教师信息列表,即可看到自己的身份信息,账号密码,入职年月等,点击对应按钮即可对教师的个人信息进行编辑或者修改操作,如图5-18

图5-18 教师个人信息页面

分页显示内容关键代码如代码14所示,该代码将数据库中的数据录入表格中,后面需要查看表格直接调用即可

代码14 分页显示内容关键代码

 public ModelAndView HobbyList(

@RequestParam(defaultValue="1")

Integer currentPage,HttpServletRequest request,

Map<String,Object> map){

List<SubjectType> list = new ArrayList<>();

PageHelper.startPage(currentPage,8);

    list = subjectService.selectAllSubjectList();

PageInfo<SubjectType> pageInfo=new PageInfo<SubjectType>(list,8);

map.put("pageInfo", pageInfo);

return new ModelAndView("views/hobby/hobbyList");

}

点击页数跳转实现页面跳转的功能实现如代码15所示

代码15 下一页显示关键代码

<li><a class="layui-btn layui-btn-primary layui-btn-sm"

href="${pageContext.request.contextPath}/studentList?currentPage=1">首页</a></li>

<li><c:if test="${pageInfo.hasPreviousPage }">

<a class="layui-btn layui-btn-normal layui-btn-sm"

href="${pageContext.request.contextPath}/studentList?currentPage=${pageInfo.pageNum-1}">

<span>上一页</span></a>

</c:if></li>

<li><c:if test="${pageInfo.hasNextPage }">

<a class="layui-btn layui-btn-normal layui-btn-sm "

href="${pageContext.request.contextPath}/studentList?currentPage=${pageInfo.pageNum+1}">

下一页</a>

</c:if></li>

<li><a class="layui-btn layui-btn-primary layui-btn-sm"

href="studentList?currentPage=${pageInfo.pages}">末页</a></li>

5.6.2 教师课程模块的实现

教师点击我的课程进入该页面后,即可看到自己被安排的课程,如图5-19所示。教师可以看到这些课程的选课人数和开课状态,开课时间,实验室名称等。

图5-19 教师课程页面

5.6.3 选课学生模块的实现

教师点击选课学生列表后,可以看到自己辅导的学生及学生的对应课程,如图5-20。教师也可以点击打分按钮,根据学生的学习状态给予分数,以让受辅导学生了解自身情况,提醒学生对自己的不足及时进行补缺,而且打分后不可撤回,修改。

图5-20 教师打分页面

打分关键代码如代码16所示,根据课程id和学生id进行打分。

代码16 打分关键代码

public boolean point(HttpServletRequest request){

boolean re = false;

Integer recordId = Integer.parseInt(request.getParameter("recordId"));

Integer score = Integer.parseInt(request.getParameter("score"));

Records record =new Records();

record.setId(recordId);

record.setScore(score);

subjectService.point(record);

re = true;

return re;

}

5.6.4 教师每周课表的实现

教师点击我的课表后,即可在该页面中查看教师该周课表如图5-21在该页面中可以查看到本周教师需要授课的课程与时间,以便更好的提醒自己并安排时间对授课进行准备工作,点击下一周即可查看下周课表。

图5-21 教师课表页面

5.7本章小结

到此,实验室选课系统已经基本完成,本章主要通过图片的方式,展示了系统的每个板块的页面设计与实际使用画面,并对系统的一些关键功能进行代码展示,并解读代码实现的逻辑,在进行功能的具体实现之前,参考了很多选课系统,但参考不等于拷贝别人的代码,而是要分析别人的程序思想,理解每个代码块之间的关系,从而让自己的编程逻辑更加清晰,提高工作效率。

第六章 系统测试

6.1 软件测试意义

到这里系统设计就基本完成了,但系统肯定仍有尚未发现的不足,为了找出开发系统过程中遗漏的问题,就需要进行软件测试了。软件测试,顾名思义是一种用来促进鉴定软件正确性,完整性,安全性和质量的过程,本质上是一种将预期结果与实际结果进行对比的过程,在过程中不断发现问题,并对设计进行重新评估的过程。而软件测试又可以大致分为白盒测试和黑盒测试,黑盒测试把测试对象看作一个不可打开的盒子,测试者不知道里面的结构,只能根据使用说明,测试该程序的功能是否和使用说明一致,一致则通过。白盒测试则与之相反,测试者可以看清白盒内所有结构,同时也要对该程序的运行逻辑有了解,进而检测程序在运行中,是否每一个通路都按照要求进行工作。

6.2 软件测试目的

本次软件测试目的是为了验证该系统的实际功能是否与设计需求一致,在运行过程中是否会出现崩溃或报错的情况,具体测试内容如下:

1.功能测试:测试实验室选课系统的不同用户登录功能可不可以登录成功,在选课,编辑信息后,页面会不会刷新,信息有没有保存至数据库中,查看需求分析中的功能是否全部实现,对所有功能进行全面测试,是否在使用过程中因为异常报错导致崩溃。

2.性能测试:该测试主要测试本系统的性能是否满足预期,在进行操作时观察反应速度,并发操作时会不会出现死锁,在高频率的操作下会不会出现卡死等情况,该测试需要多种情况下进行多次实验,以确保系统的稳定性和可靠性。

3.兼容性测试:因为本系统是运行在浏览器中的,不同的浏览器兼容性有些许差异,也需要去在不同的浏览器进行操作,看是否会出现不兼容闪退的情况。

6.3 测试结果

准备好测试环境后,进行详细、多次测试。以下以表格形式呈现测试结果。

表6-1 登录测试

测试目的:测试实验室选课系统是否能不同用户登录

测试环境:用eclipse打开系统文件连接数据库,并用tomcat连接服务器,用谷歌浏览器和Microsoft Edge打开系统。

测试步骤

预期实现

进入登录界面,选择管理员,输入正确的管理员账号密码

成功进入管理员界面

进入登录界面,选择教师,输入正确的教师账号密码

成功进入教师界面

进入登录界面,选择学生,输入正确的学生账号密码

成功进入学生界面

登录时账号或密码不填写

不能登录

进入登录界面,选择管理员,输入正确的学生账号密码

不能登录

进入登录界面,选择管理员,输入正确的教师账号密码

不能登录

进入登录界面,选择管理员,输入错误的管理员账号密码

不能登录

测试结果:

  1. 进入登陆界面后,在选择用户身份后,在输入对应用户身份的正确账号密码可以登录成功。
  2. 在登陆界面,选择错用户身份后,即使账号密码没有问题也不可以登录。
  3. 登陆时,输入空的账号密码不可登录成功。
  4. 登陆时,账号或密码错误时,不能登陆成功。


表6-2 功能测试

测试目的:测试实验室选课系统功能是否符合预期

测试环境:用eclipse打开系统文件连接数据库,并用tomcat连接服务器,用谷歌浏览器和Microsoft Edge打开系统。

测试步骤

预期实现

进入教师页面,进行选课,编辑个人信息操作

编辑成功后,系统会自动刷新,数据同步更新

进入教师界面给学生进行打分

学生端可以同步看到成绩更新

进入管理员界面进行开课

教师端和学生端都可以看到课程状态更新

管理员添加教师和学生账号

新添加教师和学生可以进行登录

三个以上学生选课

管理员可以进行开课

多个学生同时进行选课退课

正常更新进度

学生更新呢兴趣爱好

推荐课程同步更新

测试结果:

  1. 在多进程情况下,不会出现死锁。
  2. 在不同浏览器中,不会出现因为不兼容而导致的报错或适应度异常。
  3. 系统功能符合需求分析,没有异常功能。
  4. 在高频率操作下,没有出现崩溃或数据异常的情况。

6.4 本章小结

系统完成后需要大量的测试来保证系统的稳定性,通过这次测试已经排查出大部分的问题。在这次软件测试中,本人独立设计测试计划,并根据计划进行测试,缺陷跟踪及回归测试,一共进行了两轮测试,保证了实验室选课系统的质量,也暴露出了在编程过程中的问题,好在都进行了解决,软件测试技能还需进一步学习,吸收失败经验,为以后的正式测试工作打下基础。

总结

本次毕业设计历时六个月,到这里,实验室选课系统的实现就已经基本结束了,经过一段时间的运行,运行很稳定,对预期的那些效果都进行了实现。过程中虽然有过迷茫,但好在还有老师和同学对我的帮助,论文初期还停留在规划层面,但真正上手之后发现自己的水平太过于有限,也深刻认识到在学校学的终归是皮毛,还学通过查阅书籍和一些网络教程来对软件设计做进一步的了解。

因为实习的机会,能更多的接触软件开发,现在的我负责调研市场上的软件功能,并在确切使用过软件后写一个使用说明,之后将使用说明对工程师进行汇报,然后一起讨论其对于公司软件有什么优越性的功能可以拿来借鉴。所以在经历这些之后,我对软件需求的分析有了很大程度上的提升,可以知道哪些对于用户来说是需要的,哪些部分可以进行优化。

测试分析之后,便要进行功能的实现了,这个部分才是整个设计中最难的的,虽然已经构思出想要的功能,但要想让这些功能运行成功,真的很需要扎实的基本编写能力,幸运的是通过询问老师和互联网教学,个人的编写能力显著提高,终于开始了程序的编写。

我一直相信办法比困难要多,在编写完成后虽然还遇到了许多预料之外的问题,但在仔细查阅代码之后,分析报错信息及位置,终于完成了设计,回头看看,瞬间觉得成就感十足。

这次的设计真的让我进步许多,从一个几乎什么都不懂的小白,到一个可以独立进行需求分析,最后到独立完成功能实现,每一步都浸透的自己的汗水与努力。每当我往前进一步时,就会感觉离目标的大山更近一步,但真正拨开云雾,到达山边时,才发现原来目标中的那座大山只不过是山脚而已,真的是太渺小了,还需更加努力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值