挑战30天,开发一个消防答题小程序专题系列深受很多行内外粉丝的好评。其中包括行内3-5年从业经验的大佬到想转行做软件开发的行外粉丝,其中也采纳很多大佬的设计理念和各种建议,力求把答题小程序做到底层功能齐全,上层功能DIY定制,来满足各行业不同的需求

挑战30天开发一个答题小程序系列已经做了两期,前两期介绍小程序UI框架组件的选用和用户登录注册的逻辑处理往期回顾:挑战30天,开发一个答题小程序,从前端零基础变开发大牛。

第一天挑战30天,开发一个消防答题小程序。教你如何处理小程序用户注册(有不懂的可以下方留言,我会一一解答)告诉大家一个好消息,我的答题小程序已经开源,感兴趣的朋友,获取源码,版本不断更新中,动动你的小手点点star[惊喜]软件架构:微信原生小程序+云开发开源地址:戳我(不要着急哦~,可能存在更新延迟)

今天介绍的是答题小程序的重点功能【题库设计】一个答题小程序好不好,主要看它的题库设计,答题分为很多类型:单选题、多选题、判断题、问答题、主观题、等等。当然我们做的这个答题小程序一般用于场景在于赛事和节日,这两种场景对答题的结果要求存在及时性,通俗的意思是,我没有阅卷老师来跟你判断你的回答题到底对不对?[笑]所以今天只介绍单选题、多选题、判断题,三种题型的设计。

后续可能会增加问答题准备工作:1、消防知识答题150道(单选题50道、多选题50道、判断题50道)2、WPS开始上图:消防知识答题示例
图片
消防答题示例Excel表格示例
图片
Excel表格~这个表格我花了一小时整理好的,累呀好了,咱们开始想办法把这个Excel题目导入到数据库中,方便云开发查询题目,从而使用户能够愉快的答题~1、导入数据库1):打开云开发工具,点击“云开发”图标,打开云开发后台
图片
云开发2):点击红色箭头“+”号,创建一个答题集合,用于存在题目数据
图片
创建集合3):取一个集合名字,不要输入中文或者特殊符号哦
图片
集合名词4):设置一下数据权限,这里很重要哦!系统默认是“仅创建者可读写”。如果忘了修改,你会发现用户读取不了题目,无法答题。记得一定要把权限设置为“所有用户可读,仅创建者读写”,重要的重申三遍!!!一定要把权限设置为“所有用户可读,仅创建者读写”一定要把权限设置为“所有用户可读,仅创建者读写”一定要把权限设置为“所有用户可读,仅创建者读写”
图片
数据权限5):导入数据库,题库目前包含三种题型(单选题、多选题、判断题),云开发后台已提供两种数据格式的导入(csv和json)
图片

图片
咱们就选择json格式导入,分析一下Excel字段如下题干 → title题型 → type_name选项A → A选项B → B选项C → C选项D → D正确答案 → answer解析 → explain分数 → score2、整理json文件1):把Excel表格整理成可导入的json文件我的方法是通过php读取excel处理的,也可以通过第三方工具整理PHP代码//导入excel生成json

    Vendor('PHPExcel.Classes.PHPExcel');
    $objReader = \PHPExcel_IOFactory::createReader('Excel2007');
    $file = 'D:/111/question.xlsx';
    $PHPExcel = $objReader->load($file);//$file_url即Excel文件的路径
    //读取excel文件中的第一个工作表
    $sheet = $PHPExcel->getSheet(0);
    //取得最大的列号
    $allColumn = $sheet->getHighestColumn();
    //取得最大的行号
    $allRow = $sheet->getHighestRow();
    $arr = [];
    $Str = '';
    //从第二行开始插入,第一行是列名
    for ($currentRow = 2; $currentRow <= $allRow; $currentRow++) {
      $title     = $PHPExcel->getActiveSheet()->getCell("A" . $currentRow)->getValue();
      $type_name = $PHPExcel->getActiveSheet()->getCell("B" . $currentRow)->getValue();
      $type = '';
      switch ($type_name) {
          case '单选题':
              $type = 1;
              break;
          case '多选题':
              $type = 2;
              break;
          case '判断题':
              $type = 3;
              break;
          default:
              $type ='错误';
              break;
      }
      $option_1 = $PHPExcel->getActiveSheet()->getCell("C" . $currentRow)->getValue();
      $option_2 = $PHPExcel->getActiveSheet()->getCell("D" . $currentRow)->getValue();
      $option_3 = $PHPExcel->getActiveSheet()->getCell("E" . $currentRow)->getValue();
      $option_4 = $PHPExcel->getActiveSheet()->getCell("F" . $currentRow)->getValue();
      $option_5 = $PHPExcel->getActiveSheet()->getCell("G" . $currentRow)->getValue();
      $answer   = $PHPExcel->getActiveSheet()->getCell("H" . $currentRow)->getValue();
      $explain  = $PHPExcel->getActiveSheet()->getCell("I" . $currentRow)->getValue();
      $score    = $PHPExcel->getActiveSheet()->getCell("J" . $currentRow)->getValue();
      //数组
      $arr = [
        'title'     => $title,
        'type_name' => $type_name,
        'type'      => $type,
        'A'  => $option_1,
        'B'  => $option_2,
        'C'  => $option_3,
        'D'  => $option_4,
        'E'  => $option_5,
        'answer'    => $answer,
        'explain'   => $explain,
        'score'     => $score 
      ];
      $Str = json_encode($arr,JSON_UNESCAPED_UNICODE).PHP_EOL;
      echo $Str;
    }打印如下:一定要按照官方文档的格式来处理,不然会出现无法导入的情况

图片
2):打开导入开关,选择上传文件。选择insert插入模式
图片
3):导入成功啦,是不是很激动?
图片
终于结束了,其实概括起来,就三步走:第一步:整理题目Excel第二步:处理Excel生成规范的Json文件第三部:导入Json文件下期预告:小程序生成题库,自动组题,得分判题
图片
下期预告


气势凌人的火锅
1 声望0 粉丝

知识答题小程序:php7770