挑战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文件
下期预告:小程序生成题库,自动组题,得分判题
下期预告