基于SSM框架的家教平台设计与实现

目 录

摘 要 I
Abstract II
引 言 1
1 相关技术 3
1.1 IDEA 3
1.2 MVC设计模式 3
1.3 MySQL数据库 3
1.4 SSM框架 4
1.5 本章小结 4
2 系统分析 5
2.1 需求分析 5
2.2 用例分析 5
2.3 非功能需求 8
2.4 本章小结 8
3 系统设计 9
3.1 系统总体设计 9
3.2 系统详细设计 11
3.2.1 表设计 12
3.2.2 系统功能设计 18
3.3 本章小结 20
4 系统实现 21
4.1 开发环境 21
4.2 系统设计实现 21
4.2.1 数据库实现 21
4.2.2 修改学生个人信息功能 22
4.2.3 学员发布订单功能 22
4.2.4 查看所有家教功能 23
4.3 本章小结 24
5 系统测试 25
5.1 测试计划 25
5.2 测试结果 25
5.2.1 用例测试 25
5.2.2 压力测试 26
5.3 本章小结 26
结 论 27
致 谢 28
参考文献 29
附录 源程序清单 31

摘 要

随着人们生活水平的不断提高,家长越来越重视孩子的教育,开发一套家教服务平台为家长、学生和老师提供服务是必要的。家教管理平台力求解决家教有知识无处施展,学生想学知识却不易寻找到家教老师的状况。
本课题通过对家教领域教师和学生双方需求的深入调研,使用SSM主流框架完成家教平台的设计与实现,使用MySQL对数据进行存储并以Tomcat为应用服务器开发实现家教平台。所设计开发的家教平台主要包括学员模块、教师模块、管理员模块。为教师和学生都节约大量时间,提供更广阔的资源,为家长、学生和老师带来了便利。
本文采用SSM技术使得系统具有跨平台性好,可扩展性强等特点。经过具体的编码实现和系统测试,家教系统中各模块均已成功实现,并已投入使用。经实际使用证明,本文所设计的家教系统架构性能良好,整体性能良好。并使用MVC的设计模式,使得模型、视图、控制器可以独立处理自己的任务。

关键词:家教平台系统; SSM框架; MVC设计模式

Abstract

With the improvement of people’s living standards, parents have paid more and more attention to children’s education. Thus, it is necessary to develop a family education service platform to provide services for parents, students and teachers. The tutoring platform strives to solve the demand balance between tutors and students.
Through in-depth investigation of the needs of both teachers and students in the home education market, the research and complete the tutoring platform using SSM mainstream framework. In the design, MySQL is applied to store the data, and the Tomcat is used as the application server to develop the tutoring platform. The platform designed mainly includes student’s module, tutor module and administrator modules. The platform saves a lot of time for teachers and students, provides broader resources, and brings convenience to parents, students, and teachers.
The article uses SSM technology and the system have the characteristics of good cross-platform performance and strong scalability. After specific coding implementation and system testing, each module in the family education system has been successfully implemented and has been put into use. The actual use proves that the architecture of the tutoring system designed in the paper performs well.And use MVC design pattern, so that the model, view, controller can handle their own tasks independently.

Keywords: Tutoring platform system; SSM; MVC design pattern

引 言

随着人们生活水平的不断提高,家长越来越重视孩子的教育,开发一套家教服务平台为家长、学生和老师提供服务是必要的。家教管理平台力求解决家教有知识无处施展,学生想学知识却不易寻找到家教老师的状况。
建立家教网络平台,为广大网民提供线上教学视频、线下名师指导、以及其他服务于一体的专业网络服务体系,解决网民在寻求家教过程中遇到的问题,为网民会员提供最便利、最实惠的家教服务以及更多的集趣味性、娱乐性、盈利性于一体的网民服务业[1]。在这样一个信息时代,绝大多数的人们都在使用互联网,给生活带来便捷,所以建立一个家教平台具有较好的应用前景。
在国内随着社会的不断发展,无论是国家还是家庭都加大了对教育的投资,越来越多的家长认识到知识能力在社会发展的重要性,为了加强孩子的教育,弥补家长在这方面的缺失,越来越多的家长更青睐于通过请家教的方式来教导自己的孩子,而随着网络的普及,也诞生出许多家教平台,但普遍存在运营模式问题,比如:
① 家教专业素质的认证,对于招到的教师并没有严格的考核。
② 当家教与学员相处久之后,可能会摆脱线上交流,而进行线下交流。
③ 大部分家教平台缺少学科培训等制度,这使得家教平台本身并没有很好的教师资源,想要学生找到一个好的老师就更加难了。
在国外计算机普及较为广泛,计算机网络比较发达,自然家教平台就比国内要先进,无论是在平台管理上还是在教师资格认证的考核程度上都要比国内要先进。有很多方面值得我们学习借鉴。由于文化差异,国外的家长更加青睐一种在线家教的新型教育模式,这样不但可以让孩子在家中花更少的钱接收高质量的教育,而且在家学习会更加安全方便,在线教育算是一种新型的教育模式。
我认为教育不管是在现在还是在未来在国内还是在国外,都不应该过分以营利为目的扩张,这样只会使得家教平台逐渐失去网络市场,所以在未来,我们应该加强平台的管理,加强网络师资的培训,加大对老师的筛选资格力度,而不是盲目的去通过烧钱模式,扩张自己平台的知名度。
本文主要从相关技术、系统分析、系统设计、系统实现、系统测试等方面全面展示该家教平台的设计。该系统主要三大模块功能,分为学员模块、教师模块、管理员模块。本文结构安排如下。
第一章相关技术,主要介绍IDEA开发工具,SSM(即Spring+SpringMVC+MyBatis)框架的应用,存储数据使用的是MySQL,以及使用Tomcat作为应用服务器。
第二章系统分析,介绍该家教平台系统的需求分析,包括根据网络调查进行的需求分析,并根据需求对家教功能需求进行分析,家教平台的用例分析,以及家教平台的非功能需求分析。
第三章系统设计,包括家教系统总体设计和系统详细设计。家教系统总体设计描述了系统体系结构图和系统功能结构图。系统详细设计围绕系统的功能结构图,系统的E-R图、表关系视图、功能描述等。
第四章系统实现,介绍家教系统的开发环境、系统设计实现。开发环境具体描述软件硬件环境。系统设计实现主要描述数据库的实现以及一些核心功能代码的实现。
第五章系统测试,介绍家教系统的测试内容,包括家教的测试计划、测试用例、测试结果。这里会采用工具直接对家教系统进行压力测试,也会进行黑盒测试,对用例进行测试。

1 相关技术

家教平台使用IDEA开发工具进行开发,使用SSM(即Spring+SpringMVC+MyBatis)框架实现各部分功能。存储数据使用的是MySQL,使用的应用服务器为Tomcat9.0.该家教平台的主体设计思想是MVC设计模式,M:model的简写,用于处理程序中的逻辑部分。V:view为视图层,用于处理数据显示部分。C:controller为控制层,用于处理用户交互部分。
1.1 IDEA
IDEA 全称 IntelliJ IDEA,是java编程语言开发的集成环境。IntelliJ在业界被公认为最好的java开发工具之一,相比于Eclipse有着更好的代码提示功能,并且拥有智能选取、历史记录、xml完美支持、运行效率高等特色功能,大大减少了程序员的工作。
1.2 MVC设计模式
在最开始接触学习JavaWeb的时候,我们习惯使用JSP进行页面动态展示,使用Servlet进行页面之间的跳转,这种模式适用于开发小型网站,但对于开发大型网站就存在诸多问题,比如:每写一个Servlet就需要在web.xml上配置一个,这样会导致web.xml中内容过于繁多,看起来很不方便。如果在Servlet中的一个方法中,有很多功能,会导致该方法繁多,不利于查看。所以我们在这里使用MVC设计模式进行编写。
MVC即Model-View-Controller,Model层:Model指模型部分,一般在应用中Model层包括业务处理层和数据访问层。也就是Service层和Dao层,Service层进行业务逻辑的实现而数据访问层是通过封装好的代码对数据库进行访问操作。Controller层:Controller指控制部分,一般是对用户对客户端进行请求操作,通过请求调用业务逻辑来处理这个请求,最后进行请求转发或者重定向到另一个Controller。View层:View指视图部分,主要负责页面的显示,通常使用JSP和HTML进行构建。
1.3 MySQL数据库
MySQL数据库是一种开源的关系型数据库管理系统,MySQL关系型数据库有以下特点:存储方式:数据以行列的形式进行存储。存储结构:必须先定义好表结构,才能将数据存储到数据库中。查询方式:关系型数据库通过结构化查询语言对数据库进行查询,可以对数据进行增删改查操作。
事务性:关系型数据库强调ACID规则即原子性、一致性、隔离性、持久性。原子性即事务中多个SQL为一个整体,都成功则提交,有一个失败就回滚。一致性表示事务结束后的数据必须和数据库中数据一致。隔离性表示在用户并发操作的情况下,用户和用户数据是相互不影响的。持久性是指事务对数据的影响是持久的。
1.4 SSM框架
Spring是轻量级的开源框架,不是替换原有的任何技术,而是对开发过程中的组件(包括Action/service/dao/事务等)进行管理的框架,是项目管理的框架,其中使用了很多优秀的设计模式(工厂模式、代理模式、原型模式等),它包含俩大核心思想,即IOC(控制反转)和AOP(面向切面编程),并且对对象和对象的依赖关系也提供了完美的解决方案,即DI(依赖注入)。IOC是将对象的创建 由原来代码中new的方法 转移到 Spring的配置文件中,由Spring工厂进行创建。AOP是从切面(切入点+通知)入手,基于Spring的动态代理 给目标类 增加 额外 功能。DI则是一种编程思想,如果一类要使用另一个类,则把被使用的类定义为当前类的成员变量,使用Spring可以进行属性的自动赋值。
SpringMVC是典型的MVC框架,和Struts2类型,提供了新的控制器Controller对替换原控制器。功能、地位和Struts2都等同。
MyBatis框架是一个基于java的持久层框架,主要用于对数据库进行增删改查等操作。是对现有JDBC-DAO层代码的合理封装,可以自动完成对象关系映射(ORM),极大的简化开发,提高开发效率。MyBatis还提供了动态SQL,可以将公共SQL片段提取出来进行复用,也可以使用在高级搜索功能上,使用之后可以去除条件中对于的and|or并且当有条件不满足时,where关键字也不会出现在语句中。
1.5 本章小结
本章介绍了家教平台系统中所设计的所有技术,有web开发工具IDEA、MVC设计模式、数据库开发工具MySQL、以及最重要的设计框架SSM框架即Spring,SpringMVC,Mybatis。

2 系统分析

本章以第一章相关技术作为基础,对家教平台的业务进行分析和设计,得出需求分析和系统设计的大致思路。从以下几个方面进行总体介绍,包括家教平台的功能需求、用例分析、非功能需求。
2.1 需求分析
随着生活水平的挑高,越来越多家长认识到学习对一个孩子来说的重要性,家长们由于自己的精力或者学识有限,一般会通过选择课外辅导班或者找家教的方式来提高孩子的学习成绩。随着网络的不断发达,越来越多的人喜欢通过网络的方式去寻找合适的家教,这就诞生了基于SSM家教平台的设计与实现。
国内现状,通过调查发现家长寻找家教的方式有三种,一种是通过中介机构;二是通过亲戚朋友介绍;三是请高校在校生,大部分的人会通过中介机构来给孩子找家教。而随着互联网时代的兴起,家教网孕育而生,大部分机构通过网络进行很好的宣传,吸引了大部分的流量。但网上家教平台目前来说大部分的还不是很规范,缺少很好的管理以及师资力量,也会有一些不规范的家教中介对登记来的老师从来不进行考察,掩盖老师的资历,有些平台更甚者会将学生的个人信息泄露出去,给网络家教平台造成了很不好的影响。
国外现状,国外计算机运用的比国内要早,所以计算机网络相比之下就会更发达,信息化程度也比较高,家教平台相比于国内要规范先进许多,并且国外的家教很推崇在家教育的方式,他们认为在家教育比在学校教育要安全并且质量要高,所以在国外请家教就很普遍。
2.2 用例分析
家教平台主要有三个角色,第一个角色是学员,第二角色是家教,第三个是管理员。根据家教平台的学员用例图可以看出学员功能的详细,其中包括:学员查看基本信息功能,学员可以对自己的基本信息进行查看、学员修改基本信息功能,学员可以对自己的基本信息进行修改、学员查看发布的教师订单功能,学员可以查看教师所发布的订单、学员申请订单功能,学员可以申请发布订单、学员接受教师申请订单功能,学员可以接收教师所发布的订单、学员查看已发布的订单功能,学员可以查看自己已发布的订单、学员查看所有家教信息功能,学员可以查看所有的家教信息、学员接受退款功能,学员可以进行退款操作、学员申请退款功能,学员可以进行申请退款的操作、学员发布订单功能,学员可以向外部发布订单、学员查看已申请的订单功能、学员取消已申请订单功能,学员可以取消已经申请的订单、学员取消已发布订单功能,学员可以取消已经发布的订单、学生查看已完成订单功能,学员可以查看已完成订单的记录、学员申请实名认证功能,学员可以申请实名认证、学员申请发布订单权限功能,学员可以申请发布订单的权限、学员修改头像功能,学员可以修改自己的头像,详情见 “家教平台”系统的学员用例图2.1。家教平台系统的学员用例图可以具体细致呈现出学员功能的具体的详细的功能。
在这里插入图片描述

图2.1 “家教平台”系统的学员用例图
根据家教平台的家教用例图可以看出家教功能的详细,其中包括:家教登录功能、家教注册功能、家教查看已完成订单功能,家教可以查看自己已经完成的订单信息、家教申请订单功能,家教可以申请订单、家教查看已发布订单功能,家教可以查看自己发布的订单、家教查看已申请订单功能,家教可以查看已申请的订单、家教修改个人信息功能,家教可以修改自己的个人信息、家教查看个人信息功能,家教可以查看自己的个人信息、家教申请实名验证功能,家教需要申请实名认证、家教申请订单权限功能,家教需要申请订单权限功能、家教申请退款功能,家教可以申请退款功能、家教接收退款功能,家教可以接收退款功能。详情可见 “家教平台”系统的家教用例图2.2。家教平台系统的家教用例图可以具体细致呈现出家教功能的具体的详细的功能。
在这里插入图片描述

图2.2 “家教平台”系统的家教用例图
根据家教平台的管理员用例图可以看出管理员功能的详细,其中包括:
管理员修改家教订单功能:如果需要修改家教订单信息,管理员可以在后台修改任意的家教订单信息、管理员查看注册的总人数功能,管理员可以查看包括学员和教师的注册人数、管理员删除家教订单功能:如果需要管理员删除家教订单,管理员可以在后台对任意家教订单进行删除,对一些存在异常的订单进行删除、管理员查看学生订单功能:如果需要查看学生订单信息,管理员可以查看任意学生的订单信息、管理员删除学生订单功能:如果需要管理员对学生的订单进行删除,管理员可以在后台对任意学生订单进行删除,管理员查看城市功能:如果需要管理员对所在学员和教师的城市进行查看,管理员可以在后台查看学员和教师的所在城市、管理员查看成交额功能:如果需要查看成交额,管理员可以在后台查看总的交易金额、管理员录入城市功能:如果管理员想要对新的城市进行录入,管理员可以在后台对城市进行添加,防止有些偏远城市没有及时的录入、管理员修改学员订单功能:如果需要修改学员订单信息,管理员可以在后台修改任意的学员订单信息。详情可见 “家教平台”系统的管理员用例图2.3。家教平台系统的管理员用例图可以具体细致呈现出管理员功能的具体的详细的功能。
在这里插入图片描述

图2.3 “家教平台”系统的管理员用例图
2.3 非功能需求
家教平台的功能需求是指在家教平台中所具备的功能,满足调查中呈现的需求的一种属性。除了满足上述介绍的有关家教需求方面的具体家教平台功能,还有一些非功能性的需求分析,首先是界面,有关于界面的问题,我这里使用的是Vue,因为Vue非常容易学习,非常容易与其他库或已有项目整合,并且在数据绑定上要优于JQuery。另一个是对于该系统的可维护性,这里使用Redis做数据缓存替代MyBatis的缓存机制,MyBatis自带的缓存机制只能针对多例模式下,而Redis做数据缓存还可以在单例模式下运行。
2.4 本章小结
本章介绍了家教平台的系统分析,通过对家教行业的需求进行分析,了解网络家教平台在国内外的发展情况以及在互联网如此发达的社会背景下对家教行业的影响并分析出随着生活水平的提高,家长们更加重视对孩子的教育。最后,总结出使用SSM进行家教平台的设计很有必要,很符合市场的需求。并对需要实现的功能进行分析,通过使用用例图来展示需要实现的功能具体包括三个方面,分别是学员、管理员、家教,展现了实现家教平台的意义。

3 系统设计

3.1 系统总体设计
项目主体设计中心思想为MVC,设计模式,用户通过浏览器访问向Controller发送请求,Controller调用Model层的业务逻辑,之后Model会去访问数据库进行增删改查操作,并将数据通过Controller的Forward或者Direct请求响应回客户端并将数据展示给用户,详情可见家教平台系统体系图3.1。
在这里插入图片描述

图3.1 “家教平台”系统的体系结构
根据家教平台的功能结构图可以看出中拥有三个主要角色,第一个角色是学员,主要有登录注册功能,查看个人资料功能,查看订单详情功能,接收退款,学员申请订单功能,学员修改个人资料功能,学员接受退款功能,学员申请退款等功能。第二角色是家教,主要有家教的登录注册功能,家教查看个人信息功能,家教查看订单信息功能,家教退款功能,家教实名认证,家教申请订单功能,家教发布订单等功能。第三个是管理员,主要有查看注册人数功能,管理城市信息功能,管理删除订单功能,管理修改订单功能等功能,管理查看成交额功能。详情见 “家教平台”系统的功能结构图3.2。
在这里插入图片描述

图3.2 “家教平台”系统的功能结构图
根据家教平台的学员结构图可以看出学员功能的详细,其中包括:学员查看基本信息功能、学员修改基本信息功能、学员查看发布的教师订单功能、学员申请订单功能、学员接受教师申请订单功能、学员查看已发布的订单功能、学员查看所有家教信息功能、学员接受退款功能、学员申请退款功能、学员发布订单功能、学员查看已申请的订单功能、学员取消已申请订单功能、学员取消已发布订单功能、学生查看已完成订单功能、学员申请实名认证功能、学员申请发布订单权限功能、学员修改头像功能,详情见 “家教平台”系统的用户结构图3.3。
在这里插入图片描述

图3.3 “家教平台”系统的学员结构图
根据家教平台的家教结构图可以看出家教功能的详细,其中包括:登录功能、注册功能、查看已完成订单功能、申请订单功能、查看已发布订单功能、查看已申请订单功能、修改个人信息功能、查看个人信息功能、申请实名验证功能、申请订单权限功能、申请退款功能、接收退款功能。详情见 “家教平台”系统的家教结构图3.4。
在这里插入图片描述

图3.4 “家教平台”系统的家教结构图
根据家教平台的管理员结构图可以看出管理员功能的详细,其中包括:修改家教订单功能、查看注册人数功能、删除家教订单功能、查看学生订单功能、查看城市功能、修改学生订单功能、查看成交额功能、删除学生订单功能、录入城市功能、删除城市功能、查看家教订单功能。详情见 “家教平台”系统的管理员结构图3.5。
在这里插入图片描述

图3.5 “家教平台”系统的管理员结构图
3.2 系统详细设计
家教平台的ER图展现家教平台系统有有16个实体有12个关系,有1个多对多关系有11个一对一关系,有16个表分别是:教师申请发布订单权限表、教师申请实名认证表、教师申请升级表、家教表、家教订单表、登录日志表、头像表、学员订单表、学员表、学员申请发布订单权限表、密码修改日志表、投诉表、管理员表、投诉类型表、等级类型表、所在地表。详情见家教平台系统的ER图图3.6。
在这里插入图片描述

图3.6 “家教平台”系统的ER图
3.2.1 表设计
如表3.1是总体展示数据库中的20个表,所一一对应的表名,家教表、学员表、管理员表、家教订单表、学员订单表、等级类型表、所在地表、家教订单关联表、学员订单关联表、投诉表、投诉关联表、投诉类型表、头像表、登陆日志表、密码修改记录表、教师申请升级表、教师申请实名认证表、学员申请实名认证表、学员申请发布订单权限表、教师申请发布订单权限表。学员表和家教表是多对多的关系,学员表和学员申请发布订单权限表是一多一的关系,学员表和学员订单表是一对一的关系,学员表和密码修改日志表是一对一的关系,家教表和家教申请升级表是一对一的关系,家教表和家教订单表是一对一的关系,家教表和登录日志表时一对一的关系,学员表和头像表是一对一的关系,家教表和头像表是一对一的关系,家教申请发布订单权限表与家教表是一对一的关系。此外,投诉表、管理员表、投诉类型表、等级类型表、所在地表是独立的表,与其他表无关。
表3.1 “家教平台”系统的总表名
表名 功能说明
teacher 家教表
student 学员表
admin 管理员表
teacher_order 家教订单表
student_order 学员订单表
level_type 等级类型表
address 所在地表
teacher_have_order 家教订单关联表
student_have_order 学员订单关联表
complaint 投诉表
complaint_student_teacher 投诉关联表
complaint_type 投诉类型表
photo 头像表
login_log 登陆日志表
password_log 密码修改记录表
teacher_levelup 教师申请升级表
teacher_real 教师申请实名认证表
student_real 学员申请实名认证表
student_control 学员申请发布订单权限表
teacher_control 教师申请发布订单权限表
家教表有7个字段分别是姓名,电话,所在地,账号,密码,等级类型,注册时间,字段名分别为name,phone,location,username,password,level,time。注册时间字段为时间类型,其他的都为字符串类型,并根据需求设置非空字段以及设置不同长度的字符串,本表中不设置约束条件。详情可见家教表3.2。
表3.2 “家教平台”系统的家教表teacher
列名 数据类型 空/非空 约束条件 其它说明
name varchar2(20) NOT NULL 姓名
phone varchar2(20) NOT NULL 电话
location varchar2(45) NOT NULL 所在地
username varchar2(45) NOT NULL 账号
password varchar2(45) NOT NULL 密码
level varchar2(10) 等级类型
time date 注册时间
学员表有6个字段分别是姓名,电话,所在地,账号,密码,注册时间,字段名分别为name,phone,location,username,password,time。注册时间字段为时间类型,其余都为字符串类型,根据需求设置不同长度的字符串,并设置非空字段,无约束条件。详情可见表3.3“家教平台”系统的学员表student。
表3.3 “家教平台”系统的学员表student
列名 数据类型 空/非空 约束条件 其它说明
name varchar2(20) NOT NULL 姓名
phone varchar2(20) NOT NULL 电话
location varchar2(45) NOT NULL 所在地
username varchar2(45) NOT NULL 账号
password varchar2(45) NOT NULL 密码
time date 注册时间
管理员表有2个字段分别是账号、密码,列名分别为username和password都为字符串类型,都设置为非空字段,没有约束条件。详情见家教平台系统的管理员表3.4。
表3.4 “家教平台”系统的管理员表admin
列名 数据类型 空/非空 约束条件 其它说明
username varchar2(45) NOT NULL 账号
password varchar2(45) NOT NULL 密码
家教订单表有7个字段分别是单号,金额,实付金额,订单产生时间,订单状态,订单完成时间,教师id,订单产生时间和订单完成时间字段都为时间类型,其余都为字符串类型。详情见家教平台系统的家教订单表3.5。
表3.5 “家教平台”系统的家教订单表teacher_order
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL PRIMARY KEY 单号
money varchar2(20) 金额
real_pay varchar2(20) 实付金额
producer_time date 订单产生时间
state varchar2(20) 订单状态
finissh_time date 订单完成时间
teacher_id varchar2(50) 教师id
学员订单表中有7个字段分别是单号,金额,实付金额,订单产生时间,订单状态,订单完成时间,学员id,订单产生时间和订单完成时间字段都为时间类型,其余都为字符串类型。详情见学员订单表3.6。
表3.6 “家教平台”系统的学员订单表student_order
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL PRIMARY KEY 单号
money varchar2(20) 金额
real_pay varchar2(20) 实付金额
producer_time date 订单产生时间
state varchar2(20) 订单状态
finissh_time date 订单完成时间
student_id varchar2(50) 学员id
等级类型表有2个字段分别是等级名称,等级需要的订单,字段名分别为name、level_order,字段都为字符串类型,设置非空字段,无约束条件。详情见等级类型表3.7。
表3.7 “家教平台”系统的等级类型表level_type
列名 数据类型 空/非空 约束条件 其它说明
name varchar2(20) NOT NULL 等级名称
level_order varchar2(20) 等级需要的订单
所在地表有2个字段分别是地址名称,地址编号,字段名分别为name、id,字段都为字符串类型,并设置非空字段,无约束条件。详情见所在地表3.8。
表3.8 “家教平台”系统的所在地表address
列名 数据类型 空/非空 约束条件 其它说明
name varchar2(50) NOT NULL 地址名称
id varchar2(20) NOT NULL 地址编号
家教订单关联表有2个字段分别是家教id,学员id,字段名分别为teacher_id、student_id,两个字段都为字符串类型,设置非空字段,无约束条件。详情见家教订单关联表3.9。
表3.9 “家教平台”系统的家教订单关联表teacher_have_order
列名 数据类型 空/非空 约束条件 其它说明
teacher_id varchar2(50) NOT NULL 家教id
student_id varchar2(50) NOT NULL 学员id
学员订单关联表有2个字段分别是家教id,学员id,字段名分别为teacher_id、student_id,两个字段都为字符串类型,根据需求设置字符串的长度,根据需求设置非空字段,本表中无约束条件。详情见学员订单关联表3.10。
表3.10 “家教平台”系统的学员订单关联表student_have_order
列名 数据类型 空/非空 约束条件 其它说明
teacher_id varchar2(50) NOT NULL 家教id
student_id varchar2(50) NOT NULL 学员id
投诉表有3个字段分别是投诉类型,投诉内容,投诉时间,字段名分别为type、content、time,投诉时间的字段类型为时间类型,其余都为字符串类型,此表根据需求不设置约束条件,并根据需求设置非空字段。详情见投诉表3.11。
表3.11 “家教平台”系统的投诉表complaint
列名 数据类型 空/非空 约束条件 其它说明
type varchar2(50) NOT NULL 投诉类型
content varchar2(150) NOT NULL 投诉内容
time date 投诉时间
投诉关联表有2个字段分别是家教id,学员id,字段名分别为teacher_id、student_id,两个字段都为字符串类型,设置非空字段,无约束条件。详情见投诉关联表3.12。
表3.12 “家教平台”系统的投诉关联表complaint_student_teacher
列名 数据类型 空/非空 约束条件 其它说明
teacher_id varchar2(50) NOT NULL 投诉类型
student_id varchar2(50) NOT NULL 投诉内容
投诉类型表有2个字段分别是投诉类型名称,类型编号,字段名分别为name、id,字段类型都为字符串类型,并设置非空字段,无约束 条件。详情见投诉类型表3.13。
表3.13 “家教平台”系统的投诉类型表complaint_type
列名 数据类型 空/非空 约束条件 其它说明
name varchar2(50) NOT NULL 投诉类型名称
id varchar2(20) NOT NULL 类型编号
头像表有2个字段分别是用户id,用户类型 url,字段名分别为id、url_type,字段类型都为字符串类型,并设置非空字段,将id设为主键。详情见头像表3.14。
表3.14 “家教平台”系统的头像表photo
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL PRIMARY KEY 用户id
url_type varchar2(100) NOT NULL 用户类型 url
登陆日志表有3个字段分别是投诉类型,投诉内容,投诉时间,字段名分别为id、type、time,登录时间字段为时间类型,其余都为字符串类型。详情见登陆日志表3.15。
表3.15 “家教平台”系统的登陆日志表login_log
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL PRIMARY KEY 登陆人id
type varchar2(20) NOT NULL 登陆人类型
time date 登陆时间
密码修改记录表有3个字段分别是修改人id,修改人类型,修改时间,字段名分别为id、type、time,修改时间字段为时间类型,其余都为字符串类型。详情见密码修改记录表3.16。
表3.16 “家教平台”密码修改记录表password_log
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL PRIMARY KEY 修改人id
type varchar2(50) NOT NULL 修改人类型
time date 修改时间
教师申请升级表有5个字段分别是教师id,教师申请时间,教师原等级编号,教师升级后等级编号,申请状态,教师申请时间字段为时间类型,其余都为字符串类型。详情见教师申请升级表3.17。
表3.17 “家教平台”教师申请升级表teacher_levelup
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL PRIMARY KEY 教师id
time date NOT NULL 教师申请时间
origen_id varchar2(50) 教师原等级编号
new_id varchar2(50) 教师升级后等级编号
state varchar2(20) 申请状态
教师申请实名认证表有3个字段分别是教师id,教师真实姓名,教师身份证号,申请状态,字段都为字符串类型,并设置非空字段。详情见教师申请实名认证表3.18。
表3.18 “家教平台”教师申请实名认证表teacher_real
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL PRIMARY KEY 教师id
name varchar2(50) NOT NULL 教师真实姓名
id_card varchar2(50) 教师身份证号
state varchar2(20) 申请状态
学员申请实名认证表有4个字段分别是学员id,学员真实姓名,学员身份证号,申请状态,字段都为字符串类型,并设置非空字段。详情见学员申请实名认证表3.19。
表3.19 “家教平台”学员申请实名认证表student_real
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL PRIMARY KEY 学员id
name varchar2(50) NOT NULL 学员真实姓名
id_card varchar2(50) 学员身份证号
state varchar2(20) 申请状态
学员申请发布订单权限表有2个字段分别是学员id,申请状态,字段名分别为id、state,字段都为字符串类型,设置非空字段。详情见学员申请发布订单权限表3.20。
表3.20 “家教平台”学员申请发布订单权限表student_control
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL 学员id
state varchar2(20) 申请状态
教师申请发布订单权限表有2个字段分别是教师id,申请状态,字段名分别为id、state,字段都为字符串类型,设置非空字段。详情见教师申请发布订单权限表3.21。
表3.21 “家教平台”教师申请发布订单权限表teacher_control
列名 数据类型 空/非空 约束条件 其它说明
id varchar2(50) NOT NULL 修改人id
state varchar2(20) 修改人类型
3.2.2 系统功能设计
系统功能设计主要是对实现功能的时序图设计和描述。接下来对家教平台的4个核心功能为例介绍家教平台系统的功能完善程度。首先介绍学员查看订单功能。
学员查看订单功能首先是学员点击网页向Controller发送查看订单请求,然后调用Service层的方法实现业务逻辑,之后通过Mapper映射访问数据库执行查询操作,最后将查询结果逐层返回到界面,将查询到的结果展示给学员。详情可见表“家教平台”系统的学员查看订单时序图3.22。
在这里插入图片描述

图3.22 “家教平台”系统的学员查看订单时序图
学员查看指导教师功能。首先是学员点击网页上的查看指导教师功能,向StudentController发送查看指导教师请求,然后调用StudentService层的学员查看指导教师方法实现业务逻辑,之后通过StudentMapper映射访问数据库并对数据库执行查询操作,最后将查询结果逐层并将查询到的结果展示给学员,显示到页面上。详情可见“家教平台”系统的学员查看指导教师时序图3.23。
在这里插入图片描述

图3.23 “家教平台”系统的学员查看指导教师时序图
学员输入订单功能是为了方便学员通过输入合适的金额吸引相关教师来申请订单。通过学员输入订单功能的时序图来展示学员添加订单功能的具体流程。以下是流程的文字介绍,首先是学员点击网页的输入订单功能,向StudentController发送添加订单请求,然后调用StudentService层的学员输入订单的方法实现业务逻辑,之后通过StudentMapper映射访问数据库并对数据库执行添加操作,之后将添加结果逐层返回给StudentMapper、接下来将结果返回给StudentService、再将结果返回给StudentController最后再到界面,将结果展示给学员,详情见“家教平台”系统的学员输入订单时序图3.24。
在这里插入图片描述

图3.24 “家教平台”系统的学员输入订单时序图
3.3 本章小结
本章介绍了家教平台系统的系统设计,系统设计包含家教平台的总体描述和系统的详细设计,系统的总体设计主要通过系统的体系结构图描述总体设计中还通过系统的功能结构图描述不同角色的不同功能。
系统的详细设计主要通过展示系统的ER图,描述了各个表之间的关系,表中的关系是一对一还是多对一都可以通过这个图表现出来。系统的详细设计还包括系统功能设计,描述了本平台所涉及到的功能功能逻辑以及流程。

4 系统实现

4.1 开发环境
家教平台系统的开发环境是终端硬件处理器i7以上;硬盘>=500G;内存>=8G;终端软件操作系统:Windows 10;数据库是MySQL数据库,开发工具是IDEA,服务器是Tomcat9.0。根据家教平台的功能要求,这些软件硬件等开发环境符合响应要求,可以进行家教平台系统的开发。
4.2 系统设计实现
4.2.1 数据库实现
家教平台系统数据库实现20个主要功能表,分别是家教表、学员表、管理员表、家教订单表、学员订单表、等级类型表、所在地表、家教订单关联表、学员订单关联表、投诉表、投诉关联表、投诉类型表、头像表、登陆日志表、密码修改记录表、教师申请升级表、教师申请实名认证表、学员申请实名认证表、学员申请发布订单权限表、教师申请发布订单权限表。
在这里插入图片描述

图4.2 “家教平台”系统的数据库实现图
4.2.2 修改学生个人信息功能
系统实现通过需求分析的了解、系统设计的编排,实现家教平台系统的功能,具体展示该平台的样式,以及该平台中重要功能的实现和具体操作。下面通过系统详细设计介绍的3个功能进行设计实现的具体展示。
修改学生个人信息功能,首先学员输入要修改的姓名以及电话信息,点击修改按钮。向Controller发送修改请求,然后调用Service层的方法实现业务逻辑,之后通过Mapper映射访问数据库执行修改操作,最后将修改结果逐层返回到界面,将结果展示给学员,修改学生个人信息成功如图4.4“家教平台”系统的学员发布订单成功界面。
在这里插入图片描述

图4.3 “家教平台”系统的修改学生个人信息成功界面
/**
* 修改学生个人信息
* @param
* @return
/
@RequestMapping(value = “/editStudentInf”, method = RequestMethod.POST)
public R editStudentInf(@RequestParam Map<String,Object> map){
R r = new R();
Map<String,Object> record = new HashMap<String, Object>();
map.put(“studentId”,redisUtil.get(“id”));
record.put(“msg”,studentService.editStudentInf(map));
return r.ok(record);
}
/
*
4.2.3 学员发布订单功能
学员发布订单功能,首先学员输入想要发布的订单的订单金额信息向,点击发布按钮。StudentController发送发布订单请求,然后调用StudentService层的方法实现发布订单的业务逻辑,之后通过StudentMapper映射访问数据库执行添加操作,最后将添加结果逐层返回到界面,将结果展示给学员,学员发布订单成功如图4.4“家教平台”系统的学员发布订单成功界面。
在这里插入图片描述

图4.4 “家教平台”系统的学员发布订单成功界面
/**
* 学员发布订单
* @param
* @return
*/
@RequestMapping(value = “/studentInputOrder”, method = RequestMethod.POST)
public R studentInputOrder(@RequestParam Map<String,Object> map){
R r = new R();
Map<String,Object> record = new HashMap<String, Object>();
map.put(“studentId”,redisUtil.get(“id”));
record.put(“msg”,studentService.studentInputOrder(map));
return r.ok(record);
}

/**

4.2.4 查看所有家教功能
学员查看所有家教功能,学员点击查看所有的家教功能,首先学员向StudentController发送查询所有家教的请求,然后调用StudentService层的方法实现业务逻辑,之后通过StudentMapper映射访问数据库执行查询操作,最后将查询结果逐层返回到界面,将结果展示给学员,如教师的教师名、教师所在地、教师手机号信息学员查看所有家教如图4.4“家教平台”系统的学员查看所有家教界面。
在这里插入图片描述

图4.5 “家教平台”系统的学员查看所有家教界面
/**
* 查看所有家教
* @param
* @return
*/
@RequestMapping(value = “/queryTeacher”, method = RequestMethod.POST)
public R queryTeacher(@RequestParam Map<String,Object> map){
R r = new R();
Map<String,Object> record = new HashMap<String, Object>();
map.put(“studentId”,redisUtil.get(“id”));
record.put(“teacher”,studentService.queryTeacher(map));
return r.ok(record);
}
**/
**/
4.3 本章小结
本章主要介绍该家教平台的具体实现,包括家教平台的开发环境和系统的具体实现。本平台的开发环境要求并不是那么严格,在标配的电脑上即可运行此程序。
通过数据库表的描述以及部分核心功能代码的实现,详细了解家教平台系统的各部分功能的执行流程以及各部分与各部分之间的关系,通过对此过程的描述,可以更加理解功能运行的流程。通过展示了部分功能代码以及效果图,已基本实现了本平台的所有功能。

5 系统测试

系统测试是编写代码之后进行测试的最重要的一部分,测试中可以检测是否出现一些逻辑上的错误,因为逻辑上的错误可能会使程序出现崩溃的情况或者造成巨大的损失。测试中还包括进行压力测试,压力测试是指在系统正常运行情况下,高频词的访问是否会给系统运行造成影响。在当今互联网急速发展的情况下,压力检测是非常有必要的。
5.1 测试计划
为保证本家教平台系统的用户体验,尽快找出该系统出所出现的错误,本次测试计划将演示用例测试以及压力测试,确保代码的业务实现符合逻辑并且可以在异常访问量的情况下运行。
5.2 测试结果
5.2.1 用例测试
测试分为黑盒测试和白盒测试,此次测试主要是对软件界面和软件功能进行的黑盒测试。测试结果图如5.1所示。
用例编号 用例分类 用例目的 预期结果 测试结果
Case1 教师模块 教师查看基本信息 正确显示 结果相同
Case2 教师模块 教师修改基本信息 正确显示 结果相同
Case3 教师模块 教师查看已发布的学生订单 正确显示 结果相同
Case4 学员模块 学员查看基本信息 正确显示 结果相同
Case5 学员模块 学员修改基本信息 正确显示 结果相同
Case6 学员模块 学员查看发布的教师订单 正确显示 结果相同
Case8 管理员模块 管理员删除家教订单 正确显示 结果相同
Case9 管理员模块 管理员查看所有的学员订单 正确显示 结果相同
Case10 管理员模块 管理员修改的学员订单 正确显示 结果相同
图5.1 “家教平台”测试样例图
在测试中,对教师模块的查看基本信息功能进行测试,可以将查询到的结果正确显示出来。对教师模块的修改基本信息功能进行测试,在点击修改按钮后,可以对教师信息进行正确的修改。对教师模块的查看已发布的学生订单功能进行测试,教师可以正常显示学生发布的订单信息。
对学员模块的查看基本信息测试,可以查询到正确的结果并显示出来。对学员模块的修改基本信息进行测试,在点击修改按钮后,可以对学员信息进行正确的修改。对学员模块的查看发布的教师订单进行测试,可以正确显示所有的教师订单。
对管理员模块的删除家教订单功能进行测试,管理员点击删除按钮,删除后的家教订单可以正确显示在界面上。对管理员模块的查看所有订单的学员订单进行测试,可以将所有的学员订单显示在界面上。
5.2.2 压力测试
压力测试又叫负载测试,目的是为了检测程序在正常运行情况下,软件对数据的吞吐量,在如今互联网如此发达的环境下,对正常运行的程序进行压力测试是很有必要的,如果程序因用户访问量过多而崩溃的话,会影响用户的体验的,所以可以进行代码的优化,或者进行横向扩展和纵向扩展。详情见图5.2“家教平台”系统的压力测试结果图。
在这里插入图片描述

图5.5“家教平台”系统的压力测试结果图
对10个接口每个测试200次,测试完成后,共发送2000次HTTP请求,平均响应时间40,最快响应速度31,最慢反应速度338,异常发生率0%,数据吞吐量24.3sec。
5.3 本章小结
本章主要叙述了家教平台系统系统测试阶段需要完成的工作。主要介绍用例测试和压力测试法进行家教平台的测试。本论文使用了测试工具来进行测试工作。此小结的结束代表本已对本平台功能进行了测试,都可以正常显示预期的结果。
结 论

随着互联网的兴起,越来越多的人通过网络的方式进行学习教育。为此,为满足这一行业需求,设计并实现了家教平台系统。本文首先分析了家教平台系统所使用的的技术,之后进行系统的需求分析,然后对系统设计进行详细的说明包括数据库到的设计以及核心功能的实现等,最后对家教平台系统的设计及实现方法进行了描述并进行了有力的测试。本文所开发的家教系统已经具备基本的功能,可以较好的满足家教行业对于网络家教服务的业务需求。
本文系统在设计与实现的过程中充分考虑了可操作性行、可扩展性、使用者的用户体验性等要求,所以本文运用Javaweb技术,MVC为项目主体设计思想,采用web开发中最常用的SSM框架,采用MySQL用于存储数据,Tomcat作为应用服务器。实际应用效果说明了对于本系统的设计是合理有效的,并且可以发挥一定重要作用的。
本系统的设计与实现有效的提高了家教行业的发展,节省了家长寻找家教的时间,带动了家教行业的发展,对于其他的社会行业具有广泛的借鉴意义和参考价值。本文系统还存在一定的不足。比如缺少支付功能等更强大的功能,还需要将来进一步完善。

致 谢

本论文是通过毕业设计导师高丽以及聂菲的细心辅导下完成的。在毕业设计期间,导师曾多次辅导我分析本家教平台的项目需求,让我对家教平台的发展有了更深的了解,对家教平台的功能实现有了明确的目标,为我完成毕业设计提供了很有效的帮助。在实习期间我学会了很多技术,并且实习导师会精心教导我,为我提供了很大的鼓励和支持。实习导师还会和我一起探讨要实现的业务逻辑,哪地方有缺陷会指导我去改,为我今后开发工作积累了宝贵的经验。在此,我要对毕业实际导师以及见习老师的帮助表示由衷的感谢。同时我也要感谢沈阳城市学院机电工程学院全体领导和老师,在大学四年里对我的关心和教育,在此向所有老师致以诚挚的谢意!

参考文献

[1] 天津滨海迅腾科技集团有限公司.Java Web应用程序开发[M].天津:南开大学出版社,2017
[2] 梁弼,王光琼,邓小清.基于Spring框架的Web应用轻量级3S解决方案[J].西华大学学报:自然科学版,2018(3):78-82
[3] 罗如为.基于项目驱动的JavaEE框架技术实践教学改革探索--以湖南人文科技学院为例[J].湖南人文科技学院学报,2018,35(05):69-72+87
[4] 乔岚.基于MyBatis和Spring的JavaEE数据持久层的研究与应用[J].信息与电脑(理论版),2017(08):73-76
[5] 薄奇,许林英.Spring框架中IoC的实现[J].微处理机,2008(1)
[6] 于亚芳,郭磊.JavaEE框架技术课程建设研究[J].电脑知识与技术,2018,14(20):119-121
[7] 李杉,贾彦平,达虎.Mybatis逆向工程在JavaEE中的应用[J].通讯世界,2017(24):342
[8] 李澎林,朱国清,吴斌.基于iBatis SQL Map的数据持久层实现应用研究[J].浙江工业大学学报,2008(01)
[9] 杨国勋.Java Web应用框架研究与应用[J].科技传播,2017,9(21):90-91
[10] 杨黎薇,段洪杰,林国良,崔建文,刘琼仙,邱志刚.基于JavaEE设计模式的烈度速报建设与应用[J].世界地震工程,2018,34(02):147-156
[11] 梁腊梅.基于BSSM的家教服务平台构建研究[J].电脑知识与技术,2018(33)
[12] 陈雄华.精通Spring4.x——企业应用开发实战[M].北京:电子工业出版社.2017:20-28
[13] 祝霖,黄静.贵州大学生家教网“卓越家教”平台的设计与实现[J].物联网技术,2016(04)
[14] 栾波,孙爱伟,杨宇.探析“网络家教”新型课外辅导模式[J].农业网络信息,2011(05)
[15] 王鹤琴,汪炜玮,朱珍元.基于SSM框架技术的办公管理系统的研究[J].安徽警官职业学院学报,2017,16(03):118-122
[16] 唐权.SSM框架在JavaEE教学中的应用与实践[J].福建电脑,2017,33(12):93-94+61
[17] 方志朋.深入理解Spring Cloud与微服务构建 第2版[M].北京:人民邮电出版社,2019
[18] [美]克雷格·沃斯.Spring Boot in Action[M].北京:人民邮电出版社,2016
[19] Yinfei Chen,Injazz J Chen. Mediated power and sustainable supplier management (SSM)[J]. International Journal of Physical Distribution & Logistics Management,2019,49(8):20-21
[20] Zoya Ali. Designing Object Oriented Software Applications within the Context of Software Frameworks[D]. Ohio State University,2011
[21] Rachit Mohan Garg,Yamini Sood,Balaji Kottana,Pallavi Totlani. A Framework Based Approach for the Development of Web Based Applications Waknaghat[J]. Jaypee University of Information Technology,2011,1(1):1-4
[22] 熊永平.基于SpringBoot框架应用开发技术的分析与研究[J].电脑知识与技术.2019,15(36):76-77
[23] Nathan Wilson,Karen Wynter,Clare Anderson et al.More than depression:a multi-dimensional assessment of postpartum distress symptoms before and after a residential early parenting program[J]. BMC Psychiatry,2019,19(1):46-50
[24] 冯金柱,何贤慧.“互联网+”背景下大学生兼职服务平台探究[J].中国商论.2019(19)
[25] 徐晓东.基于WEB的家教信息平台的设计浅析[J].科技经济导刊.2019(01)

附录 源程序清单
//管理员功能
package com.zly.controller;

import com.zly.R;
import com.zly.RedisUtil;
import com.zly.service.AdminService;
import com.zly.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@CrossOrigin
@RequestMapping(“/admin”)
public class AdminController {
@Autowired
AdminService adminService;
@Autowired
private RedisUtil redisUtil;

/**
 * 查询教师订单
 * @param
 * @return
 */
@RequestMapping(value = "/queryTeacherOrder", method = RequestMethod.POST)
public R queryTeacherOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("teacherOrder",adminService.queryTeacherOrder(map));
    return r.ok(record);
}

/**
 * 查询学生订单
 * @param
 * @return
 */
@RequestMapping(value = "/queryStudentOrder", method = RequestMethod.POST)
public R queryStudentOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("studentOrder",adminService.queryStudentOrder(map));
    return r.ok(record);
}

/**
 * 去修改订单
 * @param
 * @return
 */
@RequestMapping(value = "/toexitOrder", method = RequestMethod.POST)
public R toexitOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    redisUtil.set("orderId",map.get("id"));
    return r.ok(record);
}

/**
 * 修改学生订单
 * @param
 * @return
 */
@RequestMapping(value = "/exitStudentOrder", method = RequestMethod.POST)
public R exitStudentOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("orderId",redisUtil.get("orderId"));
    record.put("msg",adminService.exitStudentOrder(map));
    return r.ok(record);
}

/**
 * 修改教师订单
 * @param
 * @return
 */
@RequestMapping(value = "/exitTeacherOrder", method = RequestMethod.POST)
public R exitTeacherOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("orderId",redisUtil.get("orderId"));
    record.put("msg",adminService.exitTeacherOrder(map));
    return r.ok(record);
}

/**
 * 删除学生订单
 * @param
 * @return
 */
@RequestMapping(value = "/delStudentOrder", method = RequestMethod.POST)
public R delStudentOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("msg",adminService.delStudentOrder(map));
    return r.ok(record);
}

/**
 * 删除教师订单
 * @param
 * @return
 */
@RequestMapping(value = "/delTeacherOrder", method = RequestMethod.POST)
public R delTeacherOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("msg",adminService.delTeacherOrder(map));
    return r.ok(record);
}

/**
 * 添加城市
 * @param
 * @return
 */
@RequestMapping(value = "/addcity", method = RequestMethod.POST)
public R addcity(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("msg",adminService.addcity(map));
    return r.ok(record);
}

/**
 * 查询城市
 * @param
 * @return
 */
@RequestMapping(value = "/queryCity", method = RequestMethod.POST)
public R queryCity(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("city",adminService.queryCity(map));
    return r.ok(record);
}

}
//教师功能
package com.zly.controller;

import com.zly.R;
import com.zly.RedisUtil;
import com.zly.service.StudentService;
import com.zly.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@CrossOrigin
@RequestMapping(“/teacher”)
public class TeacherController {
@Autowired
TeacherService teacherService;
@Autowired
private RedisUtil redisUtil;

/**
 * 获取教师个人信息
 * @param
 * @return
 */
@RequestMapping(value = "/queryTeacherInf", method = RequestMethod.POST)
public R queryTeacherInf(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("teacherInf",teacherService.queryTeacherInf(map));
    return r.ok(record);
}

/**
 * 修改教师个人信息
 * @param
 * @return
 */
@RequestMapping(value = "/editTeacherInf", method = RequestMethod.POST)
public R editTeacherInf(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("teacherId",redisUtil.get("id"));
    record.put("msg",teacherService.editTeacherInf(map));
    return r.ok(record);
}

/**
 * 查询可接订单
 * @param
 * @return
 */
@RequestMapping(value = "/queryStudentNotOrder", method = RequestMethod.POST)
public R queryStudentNotOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("teacherId",redisUtil.get("id"));
    record.put("studentOrder",teacherService.queryStudentNotOrder(map));
    return r.ok(record);
}

/**
 * 教师申请订单
 * @param
 * @return
 */
@RequestMapping(value = "/applyOrder", method = RequestMethod.POST)
public R applyOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("teacherId",redisUtil.get("id"));
    record.put("msg",teacherService.applyOrder(map));
    return r.ok(record);
}

/**

  • 教师取消订单

  • @param

  • @return
    /
    @RequestMapping(value = “/cancel”, method = RequestMethod.POST)
    public R cancel(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put(“teacherId”,redisUtil.get(“id”));
    record.put(“msg”,teacherService.cancel(map));
    return r.ok(record);
    }
    /
    *

    • 查询已申请订单
    • @param
    • @return
      */
      @RequestMapping(value = “/queryStudentApplyOrder”, method = RequestMethod.POST)
      public R queryStudentApplyOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“studentOrder”,teacherService.queryStudentApplyOrder(map));
      return r.ok(record);
      }

    /**

    • 教师发布订单
    • @param
    • @return
      */
      @RequestMapping(value = “/teacherInputOrder”, method = RequestMethod.POST)
      public R teacherInputOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“msg”,teacherService.teacherInputOrder(map));
      return r.ok(record);
      }

    /**

    • 查询已发布订单
    • @param
    • @return
      */
      @RequestMapping(value = “/queryTeacherInputOrder”, method = RequestMethod.POST)
      public R queryTeacherInputOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“teacherOrder”,teacherService.queryTeacherInputOrder(map));
      return r.ok(record);
      }

    /**

    • 教师同意订单
    • @param
    • @return
      */
      @RequestMapping(value = “/applyStudent”, method = RequestMethod.POST)
      public R applyStudent(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“msg”,teacherService.applyStudent(map));
      return r.ok(record);
      }

    /**

    • 教师查询完成订单
    • @param
    • @return
      */
      @RequestMapping(value = “/queryOverOrder”, method = RequestMethod.POST)
      public R queryOverOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“studentOrder”,teacherService.queryOverOrder(map));
      return r.ok(record);
      }

    /**

    • 教师实名认证申请
    • @param
    • @return
      */
      @RequestMapping(value = “/applyReal”, method = RequestMethod.POST)
      public R applyReal(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“msg”,teacherService.applyReal(map));
      return r.ok(record);
      }

    /**

    • 教师发布订单权限申请
    • @param
    • @return
      */
      @RequestMapping(value = “/applyControl”, method = RequestMethod.POST)
      public R applyControl(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“msg”,teacherService.applyControl(map));
      return r.ok(record);
      }

    /**

    • 教师退款申请
    • @param
    • @return
      */
      @RequestMapping(value = “/delOrder”, method = RequestMethod.POST)
      public R delOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“msg”,teacherService.delOrder(map));
      return r.ok(record);
      }

    /**

    • 同意退款订单
    • @param
    • @return
      */
      @RequestMapping(value = “/applyCancel”, method = RequestMethod.POST)
      public R applyCancel(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“teacherId”,redisUtil.get(“id”));
      record.put(“msg”,teacherService.applyCancel(map));
      return r.ok(record);
      }
      }
      //学员功能
      package com.zly.controller;

import com.zly.R;
import com.zly.RedisUtil;
import com.zly.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@CrossOrigin
@RequestMapping(“/student”)
public class StudentController {
@Autowired
StudentService studentService;
@Autowired
private RedisUtil redisUtil;

/**
 * 用户注册
 * @param
 * @return
 */
@RequestMapping(value = "/register", method = RequestMethod.POST)
public R register(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    studentService.register(map);

    record.put("type",map.get("Type"));
    record.put("msg","注册成功");
    return r.ok(record);
}

/**
 * 用户登陆
 * @param
 * @return
 */
@RequestMapping(value = "/login", method = RequestMethod.POST)
public R login(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("data",studentService.login(map));
    record.put("type",map.get("type"));
    record.put("msg","登陆成功");
    return r.ok(record);
}


/**
 * 获取城市
 * @param
 * @return
 */
@RequestMapping(value = "/getCity", method = RequestMethod.POST)
public R getCity(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("city",studentService.getCity(map));
    return r.ok(record);
}

/**
 * 获取学生个人信息
 * @param
 * @return
 */
@RequestMapping(value = "/queryStudentInf", method = RequestMethod.POST)
public R queryStudentInf(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    record.put("studentInf",studentService.queryStudentInf(map));
    return r.ok(record);
}

/**
 * 修改学生个人信息
 * @param
 * @return
 */
@RequestMapping(value = "/editStudentInf", method = RequestMethod.POST)
public R editStudentInf(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("studentId",redisUtil.get("id"));
    record.put("msg",studentService.editStudentInf(map));
    return r.ok(record);
}

/**
 * 查询可接订单
 * @param
 * @return
 */
@RequestMapping(value = "/queryTeacherNotOrder", method = RequestMethod.POST)
public R queryTeacherNotOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("studentId",redisUtil.get("id"));
    record.put("teacherOrder",studentService.queryTeacherNotOrder(map));
    return r.ok(record);
}

/**
 * 学员申请订单
 * @param
 * @return
 */
@RequestMapping(value = "/applyOrder", method = RequestMethod.POST)
public R applyOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("studentId",redisUtil.get("id"));
    record.put("msg",studentService.applyOrder(map));
    return r.ok(record);
}

/**
 * 查询已申请订单
 * @param
 * @return
 */
@RequestMapping(value = "/queryTeacherApplyOrder", method = RequestMethod.POST)
public R queryTeacherApplyOrder(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put("studentId",redisUtil.get("id"));
    record.put("teacherOrder",studentService.queryTeacherApplyOrder(map));
    return r.ok(record);
}

/**

  • 学员取消订单

  • @param

  • @return
    */
    @RequestMapping(value = “/cancel”, method = RequestMethod.POST)
    public R cancel(@RequestParam Map<String,Object> map){
    R r = new R();
    Map<String,Object> record = new HashMap<String, Object>();
    map.put(“studentId”,redisUtil.get(“id”));
    record.put(“msg”,studentService.cancel(map));
    return r.ok(record);
    }

    /**

    • 学员发布订单
    • @param
    • @return
      */
      @RequestMapping(value = “/studentInputOrder”, method = RequestMethod.POST)
      public R studentInputOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“msg”,studentService.studentInputOrder(map));
      return r.ok(record);
      }

    /**

    • 查询已发布订单
    • @param
    • @return
      */
      @RequestMapping(value = “/queryStudentInputOrder”, method = RequestMethod.POST)
      public R queryStudentInputOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“studentOrder”,studentService.queryStudentInputOrder(map));
      return r.ok(record);
      }

    /**

    • 学员同意订单
    • @param
    • @return
      */
      @RequestMapping(value = “/applyTeacher”, method = RequestMethod.POST)
      public R applyTeacher(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“msg”,studentService.applyTeacher(map));
      return r.ok(record);
      }

    /**

    • 学员取消发布订单
    • @param
    • @return
      */
      @RequestMapping(value = “/cancelInput”, method = RequestMethod.POST)
      public R cancelInput(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“msg”,studentService.cancelInput(map));
      return r.ok(record);
      }

    /**

    • 学员同意退款订单
    • @param
    • @return
      */
      @RequestMapping(value = “/applyCancel”, method = RequestMethod.POST)
      public R applyCancel(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“msg”,studentService.applyCancel(map));
      return r.ok(record);
      }

    /**

    • 学员查询完成订单
    • @param
    • @return
      */
      @RequestMapping(value = “/queryOverOrder”, method = RequestMethod.POST)
      public R queryOverOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“teacherOrder”,studentService.queryOverOrder(map));
      return r.ok(record);
      }

    /**

    • 学员退款申请
    • @param
    • @return
      */
      @RequestMapping(value = “/delOrder”, method = RequestMethod.POST)
      public R delOrder(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“msg”,studentService.delOrder(map));
      return r.ok(record);
      }

    /**

    • 实名认证申请
    • @param
    • @return
      */
      @RequestMapping(value = “/applyReal”, method = RequestMethod.POST)
      public R applyReal(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“msg”,studentService.applyReal(map));
      return r.ok(record);
      }

    /**

    • 发布订单权限申请
    • @param
    • @return
      */
      @RequestMapping(value = “/applyControl”, method = RequestMethod.POST)
      public R applyControl(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“msg”,studentService.applyControl(map));
      return r.ok(record);
      }

    /**

    • 查看所有家教
    • @param
    • @return
      */
      @RequestMapping(value = “/queryTeacher”, method = RequestMethod.POST)
      public R queryTeacher(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“teacher”,studentService.queryTeacher(map));
      return r.ok(record);
      }

    /**

    • 头像
    • @param
    • @return
      */
      @RequestMapping(value = “/queryStudent”, method = RequestMethod.POST)
      public R queryStudent(@RequestParam Map<String,Object> map){
      R r = new R();
      Map<String,Object> record = new HashMap<String, Object>();
      map.put(“studentId”,redisUtil.get(“id”));
      record.put(“student”,studentService.queryStudent(map));
      return r.ok(record);
      }
  • 13
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值