基于微信小程序的在线考试系统源码

目录

一、整体目录(示范):

文档含项目技术介绍、E-R图、数据字典、项目功能介绍与截图等

二、运行截图

三、代码部分(示范):

四、数据库表(示范):

数据库表有注释,可以导出数据字典及更新数据库时间,欢迎交流学习

五、主要技术介绍:

六、项目调试学习(点击查看)

七、项目交流


一、整体目录(示范):

文档含项目技术介绍、E-R图、数据字典、项目功能介绍与截图等

二、运行截图

基于微信小程序的在线考试系统源码_第1张图片
基于微信小程序的在线考试系统源码_第2张图片
基于微信小程序的在线考试系统源码_第3张图片
基于微信小程序的在线考试系统源码_第4张图片
基于微信小程序的在线考试系统源码_第5张图片

三、代码部分(示范):

注册较验代码:
// 注册
            async register() {
                if((!this.ruleForm.yonghuzhanghao) && `yonghu` == this.tableName){
                    this.$utils.msg(`用户账号不能为空`);
                    return
                }
                if(`yonghu` == this.tableName && (this.ruleForm.yonghuzhanghao.length<8)){
                    this.$utils.msg(`用户账号长度不能小于8`);
                    return
                }
                if(`yonghu` == this.tableName && (this.ruleForm.yonghuzhanghao.length>12)){
                    this.$utils.msg(`用户账号长度不能大于12`);
                    return
                }
                if((!this.ruleForm.mima) && `yonghu` == this.tableName){
                    this.$utils.msg(`密码不能为空`);
                    return
                }
                if(`yonghu` == this.tableName && (this.ruleForm.mima!=this.ruleForm.mima2)){
                    this.$utils.msg(`两次密码输入不一致`);
                    return
                }
                if((!this.ruleForm.yonghuxingming) && `yonghu` == this.tableName){
                    this.$utils.msg(`用户姓名不能为空`);
                    return
                }
                if(`yonghu` == this.tableName && this.ruleForm.nianling&&(!this.$validate.isIntNumer(this.ruleForm.nianling))){
                    this.$utils.msg(`年龄应输入整数`);
                    return
                }
                if((!this.ruleForm.schoolname) && `yonghu` == this.tableName){
                    this.$utils.msg(`学校名称不能为空`);
                    return
                }
                if(`yonghu` == this.tableName && this.ruleForm.shouji&&(!this.$validate.isMobile(this.ruleForm.shouji))){
                    this.$utils.msg(`手机应输入手机格式`);
                    return
                }
                if(`yonghu` == this.tableName && this.ruleForm.youxiang&&(!this.$validate.isEmail(this.ruleForm.youxiang))){
                    this.$utils.msg(`邮箱应输入邮件格式`);
                    return
                }
                await this.$api.register(`${this.tableName}`, this.ruleForm, this.emailcode);
                this.$utils.msgBack('注册成功');;
            }
        }
    }
推荐算法代码
//智能推荐商品业务步骤1.获取当前用户信息2.判断当前是否有收藏信息3.如有收藏信息按收藏推荐信息推荐,无推荐信息默认按点击次数
//================以下是相关类和方法==============//商品信息后端接口类
com.controller.ShangpinxinxiController
/**
 * 商品信息前端智能排序
 */@IgnoreAuth@RequestMapping("/autoSort")public R autoSort(@RequestParam Map params,ShangpinxinxiEntity shangpinxinxi, HttpServletRequest request,String pre){
    EntityWrapper ew = new EntityWrapper();
    Map newMap = new HashMap();
    Map param = new HashMap();
    boolean flag = false;
    String isRecommend =(String) params.get("isRecommend");
    if("1".equals(isRecommend)){ //是否推荐
        String  userId =  (String) params.get("userId");
        YonghuEntity user = yonghuService.selectById(Long.valueOf(userId));
        params.remove("isRecommend");
        params.remove("userId");
        StringBuffer refIds = new  StringBuffer();
        List  storeupList = storeupService.selectListView(new EntityWrapper().eq("userid",userId));
        if(storeupList!=null && storeupList.size()>0){
            for(StoreupView storeupView: storeupList){
                refIds.append(storeupView.getRefid()+",");
            }
            flag =true;
            ew.in("id",refIds.toString());
        }
    }
    Iterator> it = param.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry entry = it.next();
        String key = entry.getKey();
        String newKey = entry.getKey();
        if (pre.endsWith(".")) {
            newMap.put(pre + newKey, entry.getValue());
        } else if (StringUtils.isEmpty(pre)) {
            newMap.put(newKey, entry.getValue());
        } else {
            newMap.put(pre + "." + newKey, entry.getValue());
        }
    }
    params.put("sort", "clicknum");
    params.put("order", "desc");
    PageUtils page = shangpinxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, shangpinxinxi), params), params));
    return R.ok().put("data", page);
}


//收藏表后端接口
com.controller.StoreupController/**
 * 收藏表后端保存方法 
 */@RequestMapping("/save")public R save(@RequestBody StoreupEntity storeup, HttpServletRequest request){
    storeup.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    //ValidatorUtils.validateEntity(storeup);
    storeup.setUserid((Long)request.getSession().getAttribute("userId"));
    storeupService.insert(storeup);
    return R.ok();
}
/**
 * 收藏表删除方法
 */@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){
    storeupService.deleteBatchIds(Arrays.asList(ids));
    return R.ok();
}

四、数据库表(示范):

数据库表有注释,可以导出数据字典及更新数据库时间,欢迎交流学习

五、主要技术介绍:

后端技术介绍

1.1三层架构:

三层架构是指:视图层 View、服务层 Service,与持久层 Dao。它们分别完成不同的功能。

View 层:用于接收用户提交请求的代码在这里编写。

Service 层:系统的业务逻辑主要在这里完成。

Dao 层:直接操作数据库的代码在这里编写。

为了更好的降低各层间的耦合度,在三层架构程序设计中,采用面向抽象编程。

即上层对下层的调用,是通过接口实现的。

而下层对上层的真正服务提供者,是下层接口的实现类。

服务标准(接口)是相同的,服务提供者(实现类)可以更换。

这就实现了层间解耦合。

1.2 MVC:

MVC,即 Model 模型、View 视图,及 Controller 控制器。

View:视图,为用户提供使用界面,与用户直接进行交互。

Model:模型,承载数据,并对用户提交请求进行计算的模块。其分为两类: 一类称为数据承载 Bean:实体类,专门用户承载业务数据的,如 Student、User 等一类称为业务处理 Bean:指 Service 或 Dao 对象,专门用于处理用户提交请求的。

Controller:控制器,用于将用户请求转发给相应的 Model 进行处理,并根据 Model 的计算结果向用户提供相应响应。

MVC 架构程序的工作流程:

(1)用户通过 View 页面向服务端提出请求,可以是表单请求、超链接请求、AJAX 请求等

(2)服务端 Controller 控制器接收到请求后对请求进行解析,找到相应的 Model 对用户请求进行处理

(3)Model 处理后,将处理结果再交给 Controller

(4)Controller 在接到处理结果后,根据处理结果找到要作为向客户端发回的响应 View 页面。页面经渲染(数据填充)后,再发送给客户端。

1.3 MVVM模式介绍:

MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版。MVVM 就是将其中的View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。当然这些事 ViewModel 已经帮我们做了,它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑。微软的WPF带来了新的技术体验,如Silverlight、音频视频3D动画……,这导致了软件UI层更加细节化、可定制化。同时,在技术层面,WPF也带来了 诸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由来便是MVP(Model-View-Presenter)模式与WPF结合的应用方式时发展演变过来的一种新型架构框架。它立足于原有MVP框架并且把WPF的新特性糅合进去,以应对客户日益复杂的需求变化。

1.4 MVVM模式优点:

MVVM模式和MVC模式一样,主要目的是分离视图(View)和模型(Model),有几大优点

1.4.1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

1.4.2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。

1.4.3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。

1.4.4. 可测试。界面素来是比较难于测试的,测试可以针对ViewModel来写。

1.6 B/S体系结构介绍:

B/S结构(Browser/Server,浏览器/服务器模式),是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。客户机上只要安装一个浏览器,如ChromeSafariMicrosoft EdgeNetscape NavigatorInternet Explorer,服务器安装SQL ServerOracleMYSQL等数据库。浏览器通过Web Server同数据库进行数据交互。

1.7 B/S体系工作原理:

B/S架构采取浏览器请求,服务器响应的工作模式。

用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;

而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;

Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。

在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。

1.8 ssm框架介绍:

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

1.8.1 Spring

Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。

Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。

1.8.2 SpringMVC

SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

1.8.3 mybatis

mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。

1.9 ssm框架各层关系:

DAO层、Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势。

Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。

1.10 MyBatis 介绍

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java对象)映射成数据库中的记录。

1.11 MyBatis 功能架构

我们把Mybatis的功能架构分为三层:

1.11.1 API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。

1.11.2 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。

1.11.3 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

1.12 MyBatis 框架架构

框架架构讲解:

1.12.1加载配置:配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

1.12.2 SQL解析:当API接口层接收到调用请求时,会接收到传入SQL的ID和传入对象(可以是Map、JavaBean或者基本数据类型),Mybatis会根据SQL的ID找到对应的MappedStatement,然后根据传入参数对象对MappedStatement进行解析,解析后可以得到最终要执行的SQL语句和参数。

1.12.3 SQL执行:将最终得到的SQL和参数拿到数据库进行执行,得到操作数据库的结果。

1.12.4结果映射:将操作数据库的结果按照映射的配置进行转换,可以转换成HashMap、JavaBean或者基本数据类型,并将最终结果返回。

1.13 Maven 介绍

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档项目管理工具软件。

Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用 Maven 的比例在持续增长。

Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs

1.14 Maven 特点

那么,Maven 和 Ant 有什么不同呢?在回答这个问题以前,首先要强调一点:Maven 和 Ant 针对构建问题的两个不同方面。Ant 为 Java 技术开发项目提供跨平台构建任务。Maven 本身描述项目的高级方面,它从 Ant 借用了绝大多数构建任务。因此,由于 Maven 和 Ant代表两个差异很大的工具,所以接下来只说明这两个工具的等同组件之间的区别,如下表所示。

Maven

Ant

标准构建文件

project.xml 和 maven.xml

build.xml

特性处理顺序

${maven.home}/bin/driver.properties

${project.home}/project.properties

${project.home}/build.properties

${user.home}/build.properties

通过 -D 命令行选项定义的系统特性

最后一个定义起决定作用。

通过 -D 命令行选项定义的系统特性

由任务装入的特性

第一个定义最先被处理。

构建规则

构建规则更为动态(类似于编程语言);它们是基于 Jelly 的可执行 XML。

构建规则或多或少是静态的,除非使用

你可能感兴趣的:(小程序,java,android,微信小程序)