zoukankan      html  css  js  c++  java
  • 微信公众号教程(17)问答系统

     原文:http://www.cnblogs.com/imaker/p/6252617.html

    昨天在ZTalk的技术群里有人在询问如何通过微信来做问答系统,他有1000道题目,想每次随机抽取10道题目让用户来回答,题目格式如图:

    这个图是那位朋友的,从题目上来看,嘻嘻应该是运营商滴干活。

    答题系统源码

    建议先下载安装了再看文章,以下是注意事项:

    1、与微信接口文件为wx_interface.php,大家可以将里面源代码复制粘贴到自己的接口文件里覆盖掉。

    2、其他的文件全部上传到SAE的代码编辑里,有同名文件可以先删除原来文件再上传。

    3、文件说明:

    base-class.php 自定义函数,无需改动

    wx_tpl.php 回复消息的模板,无需改动

    question_manager.php 题库管理,无需改动

    question_add.php 添加题目,无需改动

    wx_interface.php 微信接口文件,根据自己实际修改名称

    数据库创建,创建代码在数据库.txt里。数据库分两张表,一张是问题表,一张是答题情况表,问题库的结构我就参照上图来了,答题情况表结构为序号、答题时间、回答的题目序号、答题消耗时间、答题错误次数。

    一、题库建立

    做问答系统首先是创建一个题库,一般的题目会有单选题、多选题和问答题,鉴于手机用户使用方便考虑,建议使用单选题。

    添加题目的文件为question_add.php,大致的代码结构跟上次的通讯录后台一样,唯一多的是一个题目选项,题目选项我是用textarea这个控件,这是一个支持多行输入的输入框,并且可以直接存放到数据库,并且方便的按原来样子输出显示。

    后台的效果如下图所示:

    二、从题库随机提取不重复的N个问题

    所有做问答系统的朋友都会问这个问题,如何从题库中随机的提取N个不重复的,今天在教程里就有这段代码。

    其实Mysql本身是有自己的获取随机记录的函数,但是那个效率太低,如果数据库里记录超过几万,就会非常慢。

    三、用户答题流程

    用户答题整个程序都在wx_interface.php里,我在这里简单的介绍一下。

    为了方便随时修改每次让用户回答的题目数,在第17行设了一个抽取题目数,修改这个数字就可以控制用户回答题目的数量。

    一个友好的关注欢迎引导词是必不可少的,如何设置欢迎词请查阅第9期教程。用户输入“GO”后就进入了答题环节。

    首先是从题库中提取N个不重复的随机题目,获取的题目是数组形式,我们将这些题目用serialize序列化后保存到缓存里(命名为:微信用户OPENID_question_data),接下来用户答题就是从这个缓存里获取。

    设定答题的当前序号为setp_1并保存到缓存,用户互动时就通过判断这个缓存是否有值决定是否是答题状态。

    设定开始的时间和初始化错误次数并保存到缓存,用来记录用户的一些答题数据。

    由于答题是一个循环的过程,因此我们在用户输入go的时候只是把相关数据初始化放入缓存并不输出问题,而是单独写一个每次答题都会用到的循环过程来做答题,这个循环过程包括:

    1、从缓存中取出数据

    2、判断当前是否在答题状态,即question_order这个缓存是否有值,同时提取当前是第几题赋值给$now_order。

    3、如果当前不是第一题,则表示这个时候用户发送的回复消息应该是答案,那么检查答案是否正确,如果不正确提示错误并退出程序让用户继续回答当前题目。

    4、判断当前是否是最后一题,如果是则保存用户答题数据,清空所有缓存,提示用户答题完成信息。

    5、当前问题回答正确且没有到最后一题的,系统提取下一个题目输出,同时增加答题序号的步长。

    6、一些附加功能,比如输入best查询自己的最好成绩,输入history查询自己最近10次答题记录。

    如果想做互动的话还可以让做个查看比你快的用户有多少等等,自由发挥吧。

  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/imaker/p/6252617.html
Copyright © 2011-2022 走看看