挑战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文件下期预告:小程序生成题库,自动组题,得分判题
下期预告
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。