中国知网查重 高校在线论文查重入口

立即检测
  • 58 元/篇
    系统说明: 知网职称论文检测AMLC/SMLC是杂志社专用系统,针对投稿论文、评审论文、学校、单位职称论文的学术不端重复率检测系统。
  • 298 元/篇
    系统说明: 知网本科论文检测PMLC是最权威的大学生毕业论文检测系统,含“大学生论文联合对比库”,国内95%以上高校使用。检测结果和学校一致!
  • 498 元/篇
    系统说明: 此系统不支持验证!可用作研究生初稿检测,相比知网VIP5.3缺少“学术论文联合对比库”,检测结果有5%左右的误差!(论文中若参考往届研究生论文,重复率误差会较大)
  • 128 元/篇
    系统说明: 大分解论文检测系统,对于想检测学术不端文献检测系统,而又价格便宜的同学可以选择,限每篇2.9万字符,结果与大学生PMLC、硕博VIP定稿系统有出入!
  • 68 元/篇
    系统说明: 知网论文小分解检测系统,适合中国知网初稿查重,数据库和定稿查重不同。结果与本科PMLC,研究生VIP5.3有出入,限每篇1.4万字符!
  • 3 元/千字
    系统说明: 学术家论文重复率检测系统,支持学位论文、毕业论文、投稿论文、职称评审论文,提供全文对照,word标红报告,性价比超高!
论文方式解析-基于微信的培训机构教育平台的开发和实现
时间:2021-05-05 16:42:16

  随着人工智能技术与大数据技术的发展,现在很多学生手机里面拥有者很多学习软件种类繁多,为了解决这个问题,本文提出以微信小程序开发一款授课和教育平台。作为一种劳逸结合的学习方式的线上培训报名平台,主要服务群体是学生,在报名培训的同时也能够自发的去学习一些新鲜事物。开发一款轻量而且功能相对完善的小程序来,满足需要学习的同学。

  培训平台主要实现的功能包括:课程预约、课间活动、集卡活动、新闻动态四大核心功能。结合软件工程的思想对目前存在主流平台进行分析,对功能分析并实现数据库设计。按照微信小程序对外开放的API(接口),将更加丰富多彩的线上学习内容得以展示。平台采用目前主流的MySQL数据库。最后通过软件测等技术,这使得系统平台得以充分完善和可靠技术保障。

  在中小学的教育之中,家长督促学生学习,这对于在学校进行的文化教育学习的学生起到了很大的帮助。通过便捷的学习平台以及优质的学习资源,让学习变得更加简单,充分利用课余时间。加强老师与学生之间的互动与交流。在对于知识的海量的掌握,开阔他们的视野,学更加多元化的知识,从更加充沛的时间来完善和提高自己,从而取得更加优异的成绩。

  随着这几年网络的迅猛发展,尤其是5G时代的普及,以及越来越多人使用微信来进行日常联系,人们最常使用的应用软件是微信,再加上在微信里我们不止可以聊天,移动智能手机还可以进行各种各样的使用,刷剧,玩游戏等。无论看什么做什么都特别方便,并且在进行其他操作时不占手机空间。通过智能手机等设备,手机端学习可以随时随地、任意地点进行课堂预约学习。同时,微信小程序也有很好的交互性,非常适合教育教学。一方面为广大的校长老师同学提供了一个非常好用的平台;二是可以激发学生在线学习兴趣,将劳逸结合体现的淋漓尽致。实现了学习方式的分段自主方便,交互式学习。这对于今后的教育教学意义重大。

  通过大数据的调查,一线城市以及二线城市更多的家庭对兴趣的培养及知识的掌握程度不断提高。相比于传统的购课以及上课方式通常需要面对繁多的课程阻碍进行购课,如不知道该如何去选择适合自己的课程。

  其次,对于当今飞速发展的而经济情况,学生家长不仅仅满足于上课老师所传授的课程,更多的是通过课外补习的过程通过积累自己的储备知识。市场上的课程以及教育平台良莠不齐,一方面师资力量不足再加上课程收费的比较昂贵。学生的课余时间不是很充足,学生大部分的情况是没时间去线下进行报取辅导班。借助于微信平台的开放性以及普及性使得功能以及内容加以充分。因此,在这里我们使用微信小程序进行分析并开发一款便于用户使用的关于在线教育平台小程序。

  基于以上因素,进行了本教育平台小程序的设计与开发。

  (1)小程序市场不断扩大。据微信公众号公开课发布的2018年微信小程序数据显示,小程序覆盖200个行业,活跃用户超过2.1亿,年交易额增长超过600%,商业价值超过5000亿。微信官网用数据向我们展开了。

  (2)小程序已经融入到生活的方方面面。小程序已经在不知不觉中融入到我们生活的各个方面,用户也已经习惯了使用小程序来解决生活中的问题。

  (3)小程序在经济效益方面的情况。“小程序+”时代的到来,开发成本低,推广成本低的小程序成为创业者的绝佳流量。

  (4)微信“小程序”是依托微信平台开发的一种应用程序,它在安装方面与其它应用程序有很大不同,不需要下载安装,只需在微信搜索栏搜索自己想要的应用程序名称或扫描该功能的二维码即可使用,而且,该小程序的使用不会占用内存,非常快速方便。

  1.2目的和意义

  在微信小程序还具有良好的交互性的良好的平台下,设计一款满足教师(校长)、和学生为一体的教育培训平台。

  将教育教学融入到学习的快乐之中。一是为广大的校长老师同学提供了一个非常好用的平台;二是可以激发学生在线学习兴趣,将劳逸结合体现的淋漓尽致。实现了学习方式的分段自主方便,互动式学习。对未来的教育教学具有重要的意义。

  1.3系统设计思想

  通过软件工程所学理论,以瀑布模型由W.W.Royce在1970年最初提出的软件开发模型,在瀑布模型中,开发被认为是按照需求分析,设计,实现,测试(确认)集成和维护顺序的进行。通过较传统的工程的原则以及方法以提高质量、降低成本。这个探索过程中,不同软件开发模型被提出,比较典型的方法有:瀑布式、快速原型法、以及迭代式开发。选择瀑布式模型来作为主要的开发流程是我选择的。

  2国内现状

  2.1传统网络学习平台的缺陷

  目前,很多高校利用传统的技术搭建了网络学习平台,但是这些平台一般都是利用PC机进行搭建与学习,而一般用户没办法保障随时随地通过PC机进行学习,严重影响了平台上的整体效果(张妮,基于微信小程序的移动学习平台的设计开发研究,电脑知识与技术,2019年2月)。另外,在很多学校中,为了便于管理,新生是不给带电脑到学校的,或者部分学生因为各方面的原因,没有个人个人计算机,但是,学校从资源优化配置以及安全角度去考虑,又无法为学生提供充足的计算机或者机时进行学习,这对他们的自主学习造成了诸多不便。而基于微信小程序学习平台主要基于手机进行使用,它能很好地克服传统网络学习平台在时间和空间上限制,提供良好的可移动性,使得教师和学生都可以根据自身的需要进行不受时间和空间限制的课程管理与学习,从而有助于提升实际的教学效果和质量;其次,平台支持对于各种优质教学资源(如MOOC视频、课件、案例等)的融合,扩展学生学习的知识来源和结构,从而提升学生的学习效果。

  2.2教育+互联网

  2.2.1发展规律

  “教育+互联网”,而不是“互联网+教育”。

  (1)规律一:“教育+互联网”融合而不是颠覆,在线教育和线下培训是互补而不是互斥。因为教育的本质是服务,在“教师-场景-学生”链条上,大多数在线教育模式都缺少合适的学习场景,未来主流仍将是线下授,互联网很难颠覆线下培训机构,线下的培训机构经过对在线教育业务进行深度布局后,将具有极强的竞争力。在我们看来,未来最大的教育企业是具有在线教育基因的离线机构。以新东方和好未来、中公教育和华图教育为龙头的在线教育培训机构,凭借各自的教研资源和资金优势,进行深度布局。

  (2)规律二:服务和教学是第一位的,流不等于流。渠道(流量)只是网络教育企业做大做强的一个维度,“品牌、运营、教学、研究、渠道”仍是网络教育界关注的焦点。

  (3)规律三:由于试错成本、时间成本和机会成本极高,且升学就业效应占主导地位,免费模式难以延续。

  (4)规律四:教育行业高度垂直,不具备跨年龄段范围经济,类淘宝的C2C平台难以有生命力。

  (5)规律五:网上教育是一种线下培训的运作模式,一对一的规模并不经济,班上学习仍然是未来的主流。

  需求量:升学就业需求,科技创新,政策调控,创造千亿需求。驱动因素一:升学就业需求:焦虑和危机感有望推动庞大中产阶层的教育支出持续上升;驱动因素二:技术创新:前沿科技,AI和大数据等前沿科技将重构教育体验;驱动力三之政策规范:线下培训政策收紧有望驱动在线教育快速发展。根据艾媒咨询数据,2017年中国网络教育市场规模达1917亿元,到2020年有望达到3150亿元。

  2.2.2未来趋势

  快速、直播和AI。

  (1)趋势一:在线教育将经历30年的线下培训发展历程,领先的线下培训机构可以占到1~3%的市场份额,而领先的在线教育公司可以占10%~20%的市场占有率,在线教育企业的天花板可能是同类线下培训公司的10倍。

  (2)趋势二:教育的本质是服务,直播服务更接近于线下培训体验,将成为未来最重要的行业风口。趋势三:AI大数据精准教学:教育行业1.0和2.0阶段分别以“教师”和“学生”为核心,未来将基于大数据对学生进行精确画像,以“效果和效率”标准为学生提供个性化服务,有望真正实现因材施教。

  如图所示尚德机构营业收入(单位:亿元)如图2-1所示。

  图2-1尚德机构营业收入

  3需求分析

  3.1可行性分析

  (1)开发门槛低,降低建设维护成本。微信小程序的底层技术支持与HTML技术有许多相似之处,前端技术与其他技术相比无论是入门还是学习门槛都比较低。

  (2)基于微信入口,易于传播和推广。微信是建立在微信平台之上的,有其独特的访问点。微信用户占据了互联网用户的大部分市场。用户只需要一个微信账号,扫描二维码,与朋友聊天,分享,搜索,就可以直接打开微信小程序。

  (3)用完就走,用起来更方便。微信小程序内置微信云应用,其突出的特点是无需下载,不需要安装,不需要卸载,的优点,充分发挥移动互联网入口轻量级的时代,只需要通过微信“扫描”等函数可以访问“动摇”,真正意识到触手可及,即使用,使用更方便,用户不必担心终端应用安装过多导致内存不足的问题(张妮,移动学习平台基于微信小程序设计开发的研究,计算机知识与技术,2019年2月)。此外,由于微信平台所使用的小程序由腾讯维护,大大降低了平台开发的软硬件成本。

  (4)前、后端分离项目,小程序使用接口功能是否正常,异常处理,数据反馈。

  3.2操作可行性分析

  (1)对于用户使用,确实很方便,需要打开时使用,不需要时关闭,即用即走。这样做比需要下载、占用手机内存空间的APP更好更加便捷。

  (2)主要样式(风格)代码都封装在微信小程序里面,所以比普通HTML5打开得更快,接近原生APP。

  (3)与HTML5相比,可调用的手机系统功能较多,如GPS定位、录音、拍视频、重力感应等,可开发出更丰富的使用场景。

  (4)在Android手机上可以加个桌面应用程序,看起来和原生APP差不多,但仅限于Android手机,iphone不能加。

  (5)运行速度和APP差不多,也能做很多HTML5做不到的事情,开发成本和HTML五差不多,相对来说开发成本比APP低。

  3.3技术可行性分析

  因为小程序开发框架的目标是尽可能以简单和有效的方式解决问题开发者可以在微信中开发具有本地应用经验的服务。因此,平台系统框架该结构继承了小程序框架的优良风格,系统架构设计主要分为逻辑两部分应用服务和视图。View层使用描述语言WXML和WXSS,以及基于javascript的逻辑层框架,并在视图和逻辑层之间提供数据传输和事件系统,使开发人员能够集中精力研究数据和逻辑(田颖,基于mini programs政治思想学习平台研究与设计、数字技术与应用(2018年8月样本的设计可以帮助我们有效地构建软件测试技术和应用学习平台。

  本设计选用的开发软件是微信开发者工具是一个功能十分强大的软件,它是基于由JSON、WXML、WXSS、JS几种语言构成的,WXSS基于使用的CSS、WXML基于HTML语言代码,与原有的代买进行修改并加以修饰形成的语法。这些文件构成了小程序的组成形成了小程序的布局设置。最终的可以达到我们想要的所有功能。综上所述,在技术上方面是完全可行的。

  3.4系统用户主要功能分析

  本平台主要服务于老师(校长)和学生两个不同角色。

  3.5用户功能分析

  图3-1用户主要功能用例图

  3.6系统主要UML建模分析

  图3-2小程序登陆(请求)时序图

  说明:

  (1)调用wx.login()获取临时登录凭证code,并返回给开发人员服务器。

  (2)调用auth.code2Session接口,作为用户对会话密钥session_key和OpenID的唯一标识。

  之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

  注:

  (1)会话密钥session_key是用于加密签署用户数据的密钥。为保证应用本身的数据安全,开发人员服务器不应向小程序发送会话密钥,也不应对外提供该密钥。

  (2)临时登录凭证代码(code)只能使用一次

  解决思路:

  (1)首先调用wx.login({})获取登录凭证代码(code)。

  (2)在使用调用接口前,要用微信小程序的appid和secret发送给了后端。

  (3)用获取的code换取openid。

  实例代码如下:

  App({

  onLaunch:function(){

  var self=this;

  //展示本地存储能力

  var logs=wx.getStorageSync('logs')||[]

  logs.unshift(Date.now())

  wx.setStorageSync('logs',logs)

  /**关键来了****************

  *********/

  //登录

  wx.login({

  success:res=>{

  //发送res.code到后台换取openId,sessionKey,unionId

  var Params={

  code:res.code,//临时登录凭证

  key:self.globalData.MD5Key

  };

  //生成加密key

  Params.key=self.MD5(Params.code+"&"+self.getNowTime()+"&"+Params.key);

  wx.request({

  url:'https://testurl/api/test/GetOpenId',//这里应该填写第三方的接口地址

  data:'='+JSON.stringify(Params),

  header:{

  'content-type':'application/json'

  },

  method:'POST',//OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT

  success:function(res){

  var openid=res.data.RntData.openid//返回openid

  self.globalData.openid=openid;

  console.log(openid);

  }

  })

  }

  })

  /**关键结束

  ********************************/

  //获取用户信息

  wx.getSetting({

  success:res=>{

  if(res.authSetting['scope.userInfo']){

  //已经授权,可以直接调用getUserInfo获取头像昵称,不会弹框

  wx.getUserInfo({

  success:res=>{

  //可以将res发送给后台解码出unionId

  this.globalData.userInfo=res.userInfo

  //因为getUserInfo是网络请求,可能会在Page.onLoad之后才返回

  //所以呢在这里加入callback以防止这种情况

  if(this.userInfoReadyCallback){

  this.userInfoReadyCallback(res)

  }

  }

  })

  }

  }

  })

  }

  })

  小程序可以通过各种前端接口来获得微信提供的开放数据。如果开发者服务器也能获得这些数据,那么微信就可以进行签名和加密。当开发前台收到开放数据后,可以对数据进行校验和签名解密,以确保数据不被篡改。如图3-3所示。

  图3-3小程序开放数据校验与解密

  图3-4用户评论课程顺序图

  图3-5用户购课活动图

  3.7教育培训平台需求分析总结

  结合软件工程等学科的知识、平台的想法集中体现、可见需求分析无论是在软件工程以及开发过程中都起到了无可替代的重要地位。主要体现形式有:

  (1)用户需求:设计软件运行方式,界面风格,报表格式,用户业务范围。我们对于系统或系统的开发,如工作流程,以及对用户的热情等。

  (2)功能要求:功能要求是软件系统最基本的要求,它描述了系统应完成的工作,涉及到软件系统的功能特性、功能边界、输入输出接口、异常处理方法和问题。换言之,功能需求要求软件系统提供全面而详细的服务功能。数据流图通常用来描述系统的数据处理过程,它在一定程度上反映了系统的动态特性。换言之,数据流图可用于软件系统功能动态建模。

  (3)数据需求:数据需求用于系统中数据的详细用途描述和规范定义,包括:输入数据、输出数据、处理中的数据、存储在存储设备上的数据等。在结构化方法中,通常使用数据字典对数据进行全面、准确的定义,如名称、名称、构成元素、位置、频率等。数据关系模型图(E-R图)也可用于描述数据库中的数据实体和数据实体之间的关系,而所开发的软件系统涉及数据库的操作。

  图3-5需求分析过程

  4总体设计

  4.1系统模块总体设计

  一、平台首页主要分为

  系统前台用户功能图如图4-1所示。

  图4-1系统前台功能结构图

  (1)预约报名:用户可查看当前正在预售的课程、进行预约试听;可以选择学校的地址、课程、学生姓名、联系方式等信息填写来进行课程预约。

  (2)课间新闻:查看不同的课间新闻动态来了解丰富的学科知识等生活常识以达到劳逸结合的效果;进行评论点赞等行为;

  (3)精品课程约课(购课):用户在有购买需求后,可以将中意的课程进行购买,在都选好之后,点击提交报名。

  (4)集卡:集卡可作为网站一种营销行为来进行吸引用户以达到一种吸引广大的学生课余兴趣。用户参加集卡活动,集齐所需要的卡片进行奖品兑换。奖品的具体形式可以经过快递等形式邮寄给用户。

  二、后台系统功能模块分为

  (1)课程管理模块:按的种类管理课程,对课程的信息在上架初就要填写好种类;

  (2)用户管理模块:系统管理员可以对网站用户进行管理,同时为了保证用户的隐私,系统管理员可以查看用户的个人信息、注销用户信息等功能;管理员(教师、校长)仅仅可以进行课程上下架操作、进行价格修改、评论管理等操作;

  (3)管理员维护模块:增加、修改、删除管理员信息;

  (4)订单管理模块:管理员有权限查看、修改定单;

  (5)新闻管理模块:管理员可以检索、修改、发布、删除新闻;

  (6)评论区:管理员有权限查看、删除用户的评论;其中图4-2显示了系统后台管理员的功能结构图。

  图4-2系统后台功能结构图

  4.2系统主要报名流程图

  使用者通过首页的精品课程查看,根据自己的需要来进行报名,系统为报名者提供新的报名界面通过提交具体的报名信息,后台加以判断合法性来进行确认接收报名信息。当用户确认提交信息时并且有效,提示报名成功,结束报名。如图4-3所示。

  图4-3报名流程图

  4.3数据库设计

  图4-4数据库设计流程图

  4.3.1数据库设计概述

  数据库设计是指在给定的应用环境下,构建(设计)最优的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使其能够有效地储存和管理数据,满足各种用户的应用需要,包括信息管理要求和数据操作要求。

  信息管理要求:哪些数据对象应该存储在数据库中并进行管理。

  数据操作要求:对数据对象需要进行哪些操作,如查询、增、删、改、统计等操作。

  数据库设计是指在给定的应用环境下,构建(设计)最优的数据库逻辑模式和物理结构,并据此建立数据库及其应用系统,使其能够有效地储存和管理数据,满足各种用户的应用需要,包括信息管理要求和数据操作要求。

  4.3.2概念设计

  图4-5系统主要角色E-R图

  课程{课程名称,课程类型,课程编号}

  课程分类{分类名称,课程名称,存入时间}

  老师{编号,姓名,分类名称,所属分校,毕业学校,教龄,电话}

  4.3.3逻辑结构设计

  在数据库开发过程中逻辑结构的设计主要包括:将ER图向关系模型的转换;数据模型的优化;设计用户子模式。

  实体:用户,课程,课程类别,购课,订单,新闻,

  联系:

  关联1:(课程(ID),课程评论(PID))1:N

  关联2:(课程(ID),课程图片(PID))1:N

  关联3:(课程(ID),课程详情(PID))1:N

  关联4:(课程(ID),课程详情(CID))1:1

  包含:(订单(ID),订单详情(OID))1:N

  推广1:(新闻(SID),类型(ID))1:1

  推广2:(新闻(TID),课程类别(ID))1:1

  组成1:(用户(ID),订单(UID))1:N

  组成2(课程(ID),订单(PID))1:N

  分类1:(分类(ID),课程(classID))1:N

  分类2:(课程类别(ID),课程(classID))1:N

  属于:(课程类别(ID),课程类别(PID))1:N

  评论:(用户(ID),课程评论)1:N

  收藏1:(课程(ID),课程收藏(PID))1:N

  收藏2:(用户(ID),课程收藏(UID))1:N

  数据模型的优化:通常的数据模型也需要转换到特定数据库管理系统的模型进行转换。其主要转换依据是所选择的数据库管理系统的功能和局限性。这里没有严格的规定。

  但是对于大部分关系模型来说,使用这样的转换通常都比较简单。并且数据库逻辑设计的结果并不是是唯一的。

  得到了最初的数据模型后,应该还进行适当地修改、调整数据的模型结构,来确保提高数据库应用系统的性能,这是数据模型的优化。利用关系数据魔性的优化通常以规范化理论进行指导。

  常见的优化方式:

  (1)首先确定该关系模式符合第一范式;

  (2)分析该关系模式中的函数依赖关系;

  (3)按照数据规范化的第二范式、第三范式来解决关系模式中存在的问题;

  (4)将模式逐渐分解成符合范式要求的若干关系模式;

  过程中实践总结:

  (1)数据库中的表越少越好。只有当表的数量很小,系统的e-r图可以显示少而精,冗余消除了冗余的实体,形成客观世界的高度抽象,进行系统的数据集成,和patch-type设计是预防。

  (2)表中组合的主键字段越少越好。

  因为主键的作用,第一个是建立主键索引,第二个是作为子表的外键,这样就减少了主键字段的数目,既节省了运行时间,又节省了索引的存储空间。

  (3)表中的字段越少越好。仅在字段数目较少时,系统中才没有数据重复,也没有数据冗余。此外,在初级的使用者的使用过程中“从列到行”,以避免子表中的字段被拖到主表中,这样就会在主表上留下很多空白字段。“从列到行”是将主表的一部分拖出,然后创建一个独立的子表。这种方式非常简单,效果显著。

  数据冗余与处理速度之间的平衡是数据库设计的实用原则。三少观是一个整体的概念,是一个综合性的观点,它不能孤立于原则之外。这个原则是相对的,不是绝对的。“三多”原则肯定是错误的。想象一下:如果覆盖了系统的相同功能,一个有100个实体(1000个属性)的e-r图要比一个有200个实体(1000个属性)的e-r图要好得多。

  以“三少”为原则,采用数据库设计技术实现了系统的数据集成。而数据集成的步骤是将文件系统与应用数据库进行集成,将应用数据库与主题数据库进行整合,将主题数据库与全球综合数据库进行融合。整合度越高,数据共享越强,信息孤岛现象就越少,整体企业信息系统e-r图中的实体数、主键数、属性数都会减少。

  “三少”原则的目的主要是为了开发者使用修补技术,不断增加删改数据库,使企业数据库变得随机“转储”设计一个数据库表,或数据库表“绘画”,最终导致数据库基本表,表的代码,中间表、临时表杂乱无章,无数,导致企业和机构的信息系统维护和瘫痪。

  开发者可以通过“三多”这个方法(数据库设计的“补丁方法”)做到这一点。

  “三少”原则,即少而精的原则,它主要要求较高的数据库设计技巧和艺术水平,不是任何人都能做到的,因为这一原则就是反对用“补丁法”设计数据库。

  4.3.4数据字典

  表4-6用户表:user

  列名数据类型长度主键允许空说明

  user_id int 15是否用户ID

  user_icon varchar 30否是用户头像

  user_name varchar 20否是用户名

  user_openid varchar 20否是openid

  uer_createtime date否是存入时间

  user_type bool 1否是用户身份

  user_op int 15否是操作

  user_phone int否是手机号

  表4-7课间表:recess

  列名数据类型长度主键允许空说明

  recess_id int 15是否用户ID

  recess_name varchar 30否是分类名称

  uer_createtime date否是存入时间

  recess_type int 100否是牌序

  recess_op int 15否是操作

  表4-8课程分类表:typecourse

  列名数据类型长度主键允许空说明

  typecourse_id int 15是否课程ID

  typecourse_name varchar 30否是分类名称

  uer_createtime date否是存入时间

  typecourse_type int 100否是排序

  表4-9课程表:course

  列名数据类型长度主键允许空说明

  course_id int 15是否课程ID

  typecourse_name varchar 30否是分类名称

  course_name varchar 20否是课程名称

  course_keshi int 5否是总课时

  course_begin date 3否是开始时间

  course_end date 3否是结束时间

  price decimal(5,2)否是原价

  表4-10用户收藏表:favorite

  列名类型长度不是null主键

  id int 5 TRUE主键

  username varchar 64 TRUE

  export_type varchar 10 TRUE

  template_name varchar 64 TRUE

  template_data text 0 TRUE

  表4-11用户分组表:usergroups

  列名类型长度不是null主键

  usergroup varchar 64 TRUE主键

  tab varchar 64 TRUE主键

  allowed enum 0 TRUE主键

  表4-12用户配置表:userconfig

  列名类型长度不是null主键

  username varchar 64 TRUE主键

  timevalue timestamp 0 TRUE

  config_data text 0 TRUE

  表4-13集卡表:card

  列名类型长度不是null主键

  db_name varchar 64 TRUE主键

  table_name varchar 64 TRUE主键

  pdf_page_number int 11 TRUE主键

  x float 0 TRUE

  y float 0 TRUE

  4.3.5数据库设计总结

  在给定的系统硬件和系统软件条件下,提高数据库系统运行效率的途径是:

  (1)在数据库的物理设计方面,减少范例,增加冗余,减少触发器,并增加存储过程。

  (2)计算非常复杂时,记录的数量很大(例如,1千万),数据而且复杂的计算应该在数据库之外,以文件系统的方式完成后用c++语言进行,最后将库添加到表中。此为电信费系统设计经验。

  (3)如果发现表中的记录过多,例如超过1000万条记录,就需要对表进行水平分割。水平分区是通过将表的记录水平划分为两个表,一个值有界的表的主键PK。如果一个表发现有太多的字段,如超过80,表垂直分割,把原始表分成两个表。

  (4)数据库管理系统DBMS的系统优化,也就是优化各种系统参数,还有缓冲区数等。

  (5)使用面向数据的SQL语言编程时,尽可能采用最优算法。简单地说,要提高数据库的运行效率,必须同时从数据库系统级优化、数据库设计级优化和程序实现级优化三个方面着手。

  对于数据库主键设计:

  (1)、不建议使用多个字段作为主键,单个表也可以,但会存在关联关系问题,主键自增量是高性能的。进出口是有问题的。

  (2)、一般情况下,如果有两个外键,则不推荐将其用作联合主键,而将另一个字段作为主键。如果记录没有逻辑删除标记,那么该表总是只有一条用于此联合主键的记录。

  (3)、一般情况下,一个实体可以同时具有主键和外键。在e-r关系图中,其叶中的实体可以定义一个主键,也可以不定义它(因为它没有子代),但它必须有一个外键(由于它有父键)。

  在全局数据库设计中,主键和外键的设计是至关重要的。世界数据库设计完成后,一位美国数据库设计专家说:“钥匙,钥匙无处不在,只有钥匙”,这是他的数据库设计的经验,也是其高度抽象的信息系统核心思想(数据模型)的体现。原因:主键是对实体的高度抽象,主键和外键组成了连接之间的实体。

  5详细设计与实现

  5.1运行与开发环境

  (1)本地客户端软件环境:

  开发者工具:微信开发者工具;

  浏览器:Google Chrome版本75.0.3770.80(正式版本)(64位);

  (2)服务端软件环境:

  操作的系统:微软Windows 10 X64专业版1909;

  XAMPP建站服务器等工具;

  (3)数据库系统:

  采用mysql等数据库作为数据库服务器。

  (4)其他辅助类工具有:

  采用viso、staruml、xmind作为建模导图工具;

  采用墨刀进行UI原型设计。

  5.2技术简介

  本系统采用微信官方MINA框架。主要采用官方框架提供了自己的视图层描述语言WXML和WXSS,以及基于JavaScript的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,可以方便的聚焦于数据与逻辑上。大幅度降低了学习成本。还涉及的技术有HTML技术、json技术、数据库技术等。小MINA开发框架,以及丰富的组件和API,利用微信具有原本的APP开发服务。开发过程主要分为语言、框架、能力、调试等几个方面,快速全面地了解小程序开发的各个方面。框架、组件、API等方面的更多细节。

  XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。可以在Windows、Linux、Solaris、Mac OS X等多种操作系统下安装使用。

  StarUML一款开放源码的UML开发工具,是由韩国公司主导开发出来的产品,可以直接到StarUML网站下载。可以用来创建UML类图。”

  JSON数据库技术,数据库中的每条记录都是一个JSON格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个JSON数组,数组中的每个对象就是一条记录,记录的格式是JSON对象。

  关系型数据库和JSON有着对应的关系如:关系型数据库database-文档型数据库database。关系型表table-文档型集合collection。关系型行row-文档型记录record/doc。关系型列column-文档型字段field。

  5.3系统首页设计

  系统首页效果如图5-1所示,系统首页主要拥有以下模块:预约报名、集卡活动等。页面使用wxml技术。首页图展示模块采用jQuery技术,通过后台已有数据库中的图片调用到前台的界面中。

  图5-1系统首页图

  5.4课程课间我的界面效果图

  预约课程试听、课程、课间、我的;课程或者授课、兴趣方式的选择;参加课间活动,丰富课余生活。页面布局采用css等技术实现,通过查找已经购课的表来查找相应的ID、课程名称以及课程信息。课间通过查找课间表显示课间的分类ID以及具体课间信息等。具体如图5-2所示。

  图5-2课程和课间效果图

  5.5集卡、约课界面效果图

  通过集卡活动获得卡片碎片,集齐卡片即可获得奖品。

  图5-3集卡和约课效果图

  通过点击“精品课程”,会得到后台的课程表的已经添加过得课程分类课程详情,当用户点击具体的课程会弹出一个wxml页面来进行预约课程报名的新的一个提交过程,使用页面JS技术,对数据进行出来发送给后台,对数据表进行增加记录的操作。效果图如图5-4所示,核心代码见5-5,所示。

  图5-4课程预约界面

  课程预约数据判断合法性实现代码如图5-5所示:

  图5-5课程预约合法性判断代码

  5.6课间页面实现

  课间首页、课间详情采用wxml页面结构技术以及MINA框架提供的wxss样式表进行实现。如图5-6,5-7所示。

  5.7课间评论效果实现

  除了约课功能还提供了劳逸结合的课间功能。使用者可以进行对课件的评论收藏、分享操作如图5-8,5-9所示。

  5.8课程预约实现

  图5-10课程预约功能实现图

  实现原理如图5-11所示:

  图5-11课程预约实现代码

  5.9转发分享操作

  实现小程序转发有二种方式,一种是用户点击右上角转发,一种是在html文件中通过button实现转发功能。

  通过查看微信参考文档可以发现。

  图5-12微信文档提供的方法

  图5-13在开发工具中实现

  实现原理:用户点击button来触发转发事件,

  实现转发功能:<buttonplain='true'open-type='share'></button>,将它放入wxml文件,点击它即可实现转发,转发功能就可以实现。

  第一种方式:

  转发:获取更多转发信息:

  在开发者想要把应用程序转发出去的时候,往往可以获得一些信息,比如群标识。目前,您可以通过调用wx.showShareMenu并将withShareTicket设置为true,这样,当用户将小程序转发到任何群聊后,该转发卡片在群聊中被其他用户打开时,就可以从App.onLaunch或App.on Show中获得一个shareTicket。此shareTicket是通过调用wx.getShareInfo接口传入的,从而获得转发信息的。

  页面内发起转发:

  基础库1.2.0已经开始支持,低版本需要兼容处理。

  用户点击后,通过button组件设置属性open-type="share"来触发Page.onShareAppMessage事件,相关组件:button。

  5.7管理员登录

  管理员能通过给定的账号和密码进行对小程序平台进行登录查看。如对会员信息的查看;数据概况信息包括老师总数、今日课程总数今日预约人数今日对报名人数。

  图5-14管理员登陆效果图

  5.8课程管理效果图

  管理员通过后台系统进行对课程分类的添加通过button按钮对后台数据库的课程分类表分类名称以及序号进行insert操作,如图5-15。接着对课程信息进行插入的操作。如图5-16所示。

  图5-15课程分类管理

  图5-16课程管理

  图5-17添加课程

  5.9课间分类管理效果图

  后台管理员通过后台系统进行对课间分类的添加通过button按钮对后台数据库的课间分类表分类名称以及序号进行insert操作,如图5-15。接着对课间信息进行插入的操作。如图5-16所示。

  图5-18课间分类管理

  图5-19课间活动管理

  5.9老师管理

  通过后台的管理可以对老师进行增加、删除、修改、查看等操作。采用HTML和css等技术实现。如图5-20,5-21。

  图5-20老师管理

  图5-21老师信息管理

  5.10网络请求

  5.10.1服务器域名配置

  在配置小程序的时候都需要预先设置好域名,每个小程序只能和某个指定的域名和网络进行通信。这包括普通的HTTPS请求(wx.request)、上传文件(wx.uploadfile)、下载文件(wx.downloadfile)和WebSocket通信(wx.connectsocket)。

  要微信小程序进行网络通信,必须先设置域名,不然会出现错误:URL域名不合法,请在mp后台配置后重试。

  主要配置过程:

  (1)在“applet后台-开发-开发设置-服务器域名”中配置服务器域名。

  (2)域名只支持HTTPS(wx)。请求,天气。和WSS(wx.connectsocket)协议。

  (3)域名不能使用IP地址(小程序的局域网IP除外)或本地主机;

  还可以配置端口,例如https://myserver.com:8080,

  但只有在https://myserver.com:8080上的配置请求之后。如果URL请求如https://myserver.com,https://myserver.com:9091将失败。

  如果没有配置端口。37与https://myserver.com一样,所请求的URL不能包含端口,甚至不能包含默认端口443。对https://myserver.com:443的请求将失败。

  域名必须通过ICP注册;

  由于安全原因,api.weixin.qq.com不能配置为服务器域名,相关API不能在applet中调用。开发人员应该将AppSecret保存到后台服务器,使用getAccessToken接口通过服务器获取access_token,并调用相关API。

  每个接口最多可以配置20个域名。

  5.10.2超时时间

  默认超时时间和最大超时时间都是60s;

  超时时间可以在app.json或game.json中通过networktimeout配置。

  (1)使用限制:

  wx.request、wx.uploadFile、wx.downloadFile的最大并行限制是10个;

  wx.connectSockt的最大并发限制是5个。

  小程序进入后台运行后,如果5秒内网络请求没有结束,最终将会回调错误信息储存在fail interrupted在回到前台

  之前,网络请求接口调用都会无法调用。

  (2)返回编码值:

  在开发期间,建议使用UTF-8编码服务器返回值。对非UTF-8编码时,小程序会尝试进行编码转换,但转换失败的可能性很大,因此要避免直接用UTF8编码转换失败。

  小程序会自动对BOM头进行过滤(仅过滤一个BOM头部)。

  不管statusCode是多少,只要服务器成功接收返回,就进入success回调。请开发者根据业务逻辑对返回值进行判断。

  (3)跳过域名检验:

  在微信开发工具中,可以暂时打开开发环境不检查请求域名、TLS版本和HTTPS证书选项,跳过服务器域名检查。这时,微信开发工具和手机上打开调试模式,将不会对服务器域名进行检查。

  在服务器域名配置成功后,建议开发者关闭此选项进行开发,并在各平台下进行测试,以确认服务器域名配置正确。

  http请求:

  使用wx.request可以发起http请求,而微信小程序只能同时发起5个网络请求。如图5-22所示:

  图5-22实例代码1

  图5-22的代码会发送一个http get请求,接着打印出返回的结果。其中的参数也比较容易理解。,如图5-23所示:

  图5-23实例代码2

  另外还有两个参数没有在代码里:

  (1)method http方法,默认是GET请求。

  (2)complete调用接口结束之后的回调函数,不管成功与否该接口都会被调用。

  上传文件:

  上传文件的api为wx.uploadFile,该api会发起一个http post请求,其中的Content-type为multipart/form-data。服务器端需要按照该Content-type类型接收文件,如图5-24所示:

  图5-24实例代码3

  其中的url,header,success,fail以及complete和普通的http请求是一样的。

  这里有区别的参数是:

  (1)name文件对应的key,服务器端需要通过name参数获取文件

  (2)formData http请求中可以使用的其他参数

  下载文件:

  下载文件的api为wx.downloadFile,此处的api会发起一个http get请求信息,在进行下载成功之后返回文件的临时路径如图5-25所示:

  图5-25实例代码4

  其中的url,header,fail,complete和wx.43uploadFile的参数实现是一致的,其中有不同的参数是:

  type:下载资源的类型,作用是与客户端自动识别,可以使用的参数image/audio/video

  success:下载成功之后的回调,以tempFilePath的参数返回文件的临时目录:res={tempFilePath:‘文件路径’}

  在下载成功后的是暂时文件,只会在程序本次运行时间可用,在需要持久的保存,应通过调用方法wx.saveFile主动持久化文件,如图5-26所示。

  图5-26实例代码5

  使用wx.saveFile存储的临时文件到本地,给予给小程序下次重新启动时调用,其中的参数:

  (1)tempFilePath需要被保存文件的路径。

  (2)success保存成功的回调,返回保存成功的路径,使用res.savedFilePath可以获取保存成功的路径。

  (3)fail失败的回调。

  (4)complete结束的回调。

  超时的设置:

  在微信小程序开发:MINA中已经提到过,通过设置app.js中的networkTimeout,可以为四种类型的网络访问设置超时。如图5-27所示:

  图5-27实例代码6

  6系统测试

  6.1开发者真机调试

  vConsole:

  在真机上,如果想要查看console API输出的日志内容和额外的调试信息,需要在点击屏幕右上角的按钮打开的菜单里选择「打开调试」。此时小程序/小游戏会退出,重新打开后会右下角会出现一个vConsole按钮。点击vConsole按钮可以打开日志面板。

  小程序和小游戏的vConsole展示内容会有一定差别。

  图6-1左边是小程序vConsole,图6-1右侧是小游戏vConsole。

  图6-1 Vconsol进行测试

  vConsole使用说明:

  由于实现机制的限制,开发者调用console API打印日志内容,是转换成JSON字符串后传输给vConsole的,会将vConsole中显示的内容会有一些限制:除了Number、String、Boolean、null外,其他类型都会被作为Object处理展示,打印对象及原型链中的Enumerable属性。

  Infinity和NaN会显示为null。

  undefined、ArrayBuffer、Function类型无法显示。

  无法打印存在循环引用的对象。

  (let a={}

  a.b=a

  console.log(a)//2.3.2以下版本,会打印`An object width circular reference can't be logged`)

  针对上述问题,小程序/小游戏在使用vConsole时做了一些解决的办法

  在2.3.2及以上版本,支持打印循环引用对象。循环引用的对象属性会显示引用路径, 表示对象本身。

  const circular={x:{},c:{}}

  circular.x=[{promise:Promise.resolve()}]

  circular.a=circular

  circular.c.x0=circular.x[0]

  console.log(circular)

  在2.3.1及以上版本,支持展示所有类型的数据。基础库会对日志内容进行一次转换,经过转换的内容会使用<>包裹。如:

  <Function:func>

  <Undefined>

  <Infinity>

  <Map:size=0>

  <ArrayBuffer:byteLength=10>

  在2.3~2.3.0版本中,可以展示ArrayBuffer和Function类型,undefined会被打印为字符串'undefined'问题。

  注:尽量避免在非调试情景下打印结构过于复杂或内容过长的日志内容(如游戏引擎中的精灵或材质对象等),可能会带来额外耗时。为了防止异常发生,日志内容超过一定长度会被替换为<LOG_EXCEED_MAX_LENGTH>,此时需要开发者裁剪日志内容。

  Source Map:

  当前仅iOS 6.7.2及以上版本支持

  当打包时,小程序/小游戏将所有js代码打包为一个文件,为开发者在手机上调试时方便地找到错误位置,它还提供了Source Map的支持。

  SourceMap的.map文件是在开发者工具中启用ES6转ES5时生成的,代码压缩。DevelopmentGadget中,底层库将使用代码包中的.map文件,重新映射vConsole中显示的错误信息堆栈(仅针对开发者代码文件)。如图6-2所示:

  图6-2测试结果

  如果使用外部的编译脚本对源文件进行处理,只需将对应生成的Source Map文件放置在源文件的相同目录下,如:

  {pages/index.js

  pages/index.js.map

  app.js

  app.js.map}

  开发者工具会读取、解析Source Map文件,并进行将其上传后续可以在小程序后台的运营中心可以利用上传的Source Map文件进行错误分析。

  1.Source Map文件将不会计入代码包大小计算之中。

  2.开发版代码包中由于包含了.map文件,代码包的实际大小将大于体验版和正式版本。

  真机调试:真机的远程调试功能可以实现开发人员工具的直接使用,经过网络连接,可以对运行在手机上的小程序进行调试,帮助开发人员更好地定位和查找手机中的问题。关于实际的机器调试,详情请参阅开发工具文档。

  6.2权限测试

  在日常开发中常常碰见这种需要,用户使用的某个功能需要申请权限。我们需要提前申请权限,使用户能够正常使用功能,在第一次进行权限判断时,有几种情况:

  (1)用户第一次进入需要给予权限提示。

  (2)用户第二次进入时不会再提示,无论最后是否允许权限。

  (3)当用户点击需要使用权限的功能时,进入到权限设置页面引导用户进行权限设置。如图6-3所示。

  图6-3测试代码1

  需要时用的情况下就要将权限功能来做进一步的判断。如图6-4所示。

  图6-4测试代码2

  未经授权登入小程序时,一般使用一些业务功能的痛时,都会弹出相应提示:先授权后操作相应功能。当数据提交到后台时,将提示附加相关身份信息以使提交成功。

  6.3功能测试

  (1)按功能模块测试按照设计的各大类功能模块进行划分,然后逐步细化,尽可能涵盖每项功能的全部测试点。

  (2)按照业务流程测试小程序的业务,如咨询,付款,播放,查询,下载等。将各个功能点串联起来,组成一个完整的业务流程来进行检查;同一个业务,可能存在无法实现的路径,每个路径都需要覆盖检查。

  (3)按数据流向测试根据从一端操作输入和输出流向的数据,设计基于数据流的测试用例,在此测试过程中,输出的数据也可以变成另一端的输入,根据代码逻辑检查输入的数据是否正确输出,以及数据是否出现了异常(不能输入;有输入但没有输出;输出不正确;多余的输出其他信息…)。

  6.4性能测试

  包含页面的白屏时间,首屏时间、资源消耗、页面渲染时间、帧速率等。

  测速系统:小程序·测速系统开始内测。为开发人员提供简便的速度测量网络性能,绘制/加载性能等测试工具。测速结果数据支持地域、运营商、系统、网络类型等关键维度交叉分析,支持分钟级数据实时查看。如图6-5所示。

  图6-5测试数据

  网络类:包含维度操作系统、运营商、网络类型、地区。主要用来针对网络相关的耗时测量,如网络api耗时、云调用耗时、网络数据读写耗时等。

  加载/渲染类:包含维度操作系统、机型。可以用来测量页面切换耗时、组件渲染耗时等。

  6.5易用性测试

  为了更好的开发体验,我们从视觉,交互,性能等方面对小程序进行优化升级,以达到合理使用。

  6.6本章小结

  最佳实践解决方法。

  (1)避免JS异常:

  出现JavaScript异常可能导致程序的交互无法进行下去,我们应当追求零异常,保证程序的高鲁棒性和高可用性。

  得分条件:不出现任何JS异常。

  (2)避免网络请求异常:

  请求失败可能导致程序的交互不能继续,因此应确保所有请求都成功。

  得分条件:所有网络请求都正常返回。

  (3)不使用废弃接口:

  使用即将废弃的或已废弃的接口会导致小程序无法正常工作。一般而言,接口不会立即去掉,但保险起见,建议不要使用,避免后续小程序突然运行异常。

  得分条件:不使用任何文档中提示废弃的接口。

  (4)使用HTTPS:

  使用HTTPS使小程序更安全,HTTP是纯文本传输,有被篡改的危险。

  得分条件:所有网络请求都使用HTTPS。

  (5)最低基础库版本:

  当使用的组件/API的支持版本大于配置的线上最低基础库版本时,可能导致相应功能不可用。开发者可通过调整最低基础库版本或在代码上兼容的方式解决该问题。

  由于用户可以通过代码兼容的方式解决该问题,因此该指标仅作为评分的提醒项,不计入总分中。

  判断标准:不存在使用的组件/API的支持版本大于配置的线上最低基础库版本。

  6.移除不可访问到的页面:

  小程序的包大小会影响装入时间,应尽量控制包大小,避免把不能使用的文件装入。由于该项指标依赖开发者的操作路径,因此仅作为评分的提醒项,不计入总分中。

  判断标准:不存在访问不到的页面被打包到小程序中。

  7.WXSS使用率:

  我们应该按需引入wxss资源,如果小程序中存在大量未使用的样式,会增加小程序包体积大小,从而在一定程度上影响加载速度。

  由于该项指标依赖开发者的操作路径,因此仅作为评分的提醒项,不计入总分中。判断标准:每个wxss资源的未使用部分不超过2 KB。