挑战30天,开发一个消防安全答题小程序。「题库设计」-难点解析

挑战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
  • 分数 → score

2、整理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文件


下期预告:小程序生成题库,自动组题,得分判题

 

下期预告

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值