鸿蒙掌上驾考宝典应用开发14:考试引擎设计——ExamManager 与 ExamService 架构
​第14篇考试引擎设计——ExamManager 与 ExamService 架构一、引言考试引擎是整个驾考应用的核心负责试题管理、答题记录、分数统计等核心功能。DriverLicenseExam 项目通过ExamManager和ExamService两个核心类实现了完整的考试引擎。本文将深入解析其架构设计。二、ExamService 数据服务2.1 单例模式ExamService 采用单例模式确保整个应用只有一个数据服务实例// commons/datasource/src/main/ets/ExamService.etsObservedV2exportclassExamService{privatestatic_instance:ExamService;privateexamDetails:ExamDetail[] [];TracemockExamCount:number0;TracemockExamScore:number[] [];staticcontext:Context;constructor() {this.examDetailsthis.generateExamDetail(); }publicstaticinstance(context: Context) {ExamService.context context;if(!ExamService._instance) {ExamService._instancenewExamService(); }returnExamService._instance; } }2.2 核心数据统计方法// 获取总题数publicgetTotalCount(): number {returnthis.examDetails.length; }// 获取已做题数publicgetDidCount(): number {returnthis.examDetails.filter(item item.isCorrect ! undefined).length; }// 获取正确题数publicgetCorrectCount(): number {returnthis.examDetails.filter(item item.isCorrect true).length; }// 获取错题数publicgetErrorCount(): number {returnthis.examDetails.filter(item item.isCorrect false).length; }// 计算正确率publiccalAccuracyRate(): number {constrightCount this.getCorrectCount();consttotalCount this.getTotalCount();if(rightCount 0)return0;returnMath.ceil(rightCount / totalCount *100); }// 计算平均分publiccalculateAverageScore(): number {if(this.mockExamCount 0)return0;returnMath.ceil(this.mockExamScore.reduce((pre, next) pre next) /this.mockExamCount); }三、ExamManager 试卷管理器3.1 试卷数据结构//ExamManager 管理一份试卷 export class ExamManager { name: string | Resource;//试卷名称 examDetails: ExamDetail[];//试题列表 currentQuestionId: number;//当前题目索引 correctNumber: number;//正确数 errorNumber: number;//错误数 timeLimit: number;//限时0表示不限时 }3.2 试卷获取策略// 根据名称和类型获取试卷getManagerByName(name:string|Resource,type:EXAM_MANAGER_TYPE,currentQuestionId:number0,chapterName:string, wrongOrCollect?:WRONG_COLLECT):ExamManager{letexamManager this.examManagerList.find(itemitem.name name);if(examManager undefined|| wrongOrCollect !undefined) {constexamList this.getExamQuestionList(type, chapterName, nameasstring, wrongOrCollect);constcorrectCount this.getCorrectCountByManger(examList);consterrorCount this.getErrorCountByManger(examList); examManager newExamManager(name, examList, currentQuestionId, correctCount, errorCount);// 需要缓存的场景才缓存NEED_NEW_LIST.indexOf(type) -1this.examManagerList.push(examManager); }returnexamManager; }// 模拟考试每次获取新试卷getMockExamManager(name:string| Resource) {letexamManager newExamManager(name,this.generateExamDetail()); examManager.timeLimit1;// 限时1分钟returnexamManager; }四、试题数据模型4.1 ExamDetail 数据结构exportclassExamDetail{ question:string;// 题目文本image?:string;// 题目图片options:string[];// 选项列表correctAnswer:string[];// 正确答案questionType: QuestionTypeEnum;// 题型classificationType: ClassificationTypeEnum;// 难度analysis:string;// 解析chapterName:string;// 章节名称videoUrl:string;// 相关视频isCorrect?:boolean;// 是否答对isCollect:boolean;// 是否收藏selected:string[];// 已选答案}4.2 题型枚举export enum QuestionTypeEnum { RADIO 1,//单选题 CHECK_BOX 2,//多选题 JUDGE 3,//判断题 } export enum ClassificationTypeEnum { EASY 1,//容易 SIMPLE 2,//简单 MIDDLE 3,//一般 EASY_MISTAKE 4,//易错 HARD 5,//困难 }五、总结ExamService ExamManager 构成了完整的考试引擎实现了数据管理试题的增删改查统计计算正确率、平均分等统计指标试卷管理多种试卷类型的获取和缓存数据持久化答题记录和进度的持久化关键源码文件commons/datasource/src/main/ets/ExamService.ets— 考试服务commons/datasource/src/main/ets/Model.ets— 数据模型components/exam/src/main/ets/model/QuestionAnswerRecord.ets— 答题记录​

相关新闻

【AI】技术日报| 2026 年 7 月 30 日

【AI】技术日报| 2026 年 7 月 30 日

AI 技术日报 | 2026 年 7 月 30 日 本期聚焦海外前沿:OpenAI GPT-5.6 全家族正式 GA、英伟达牵头的「开放安全 AI 联盟」,以及围绕开源权重与监管节奏的行业角力。 目录引言一、OpenAI GPT-5.6 全面 GA:Sol / Terra / Luna 三档分层&#xff…

2026/7/31 14:34:51 阅读更多 →
MP4Box.js:浏览器端MP4处理的完整解决方案,快速实现视频文件解析与处理

MP4Box.js:浏览器端MP4处理的完整解决方案,快速实现视频文件解析与处理

MP4Box.js:浏览器端MP4处理的完整解决方案,快速实现视频文件解析与处理 【免费下载链接】mp4box.js JavaScript version of GPACs MP4Box tool 项目地址: https://gitcode.com/gh_mirrors/mp/mp4box.js 你是否曾想过在浏览器中直接处理MP4视频文件…

2026/7/31 14:34:51 阅读更多 →
终极指南:如何通过Wand-Enhancer解锁WeMod完整功能

终极指南:如何通过Wand-Enhancer解锁WeMod完整功能

终极指南:如何通过Wand-Enhancer解锁WeMod完整功能 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款开源工具&#…

2026/7/31 14:33:50 阅读更多 →

最新新闻

从南京到全球求职市场,蒸汽教育是一家怎样的公司?

从南京到全球求职市场,蒸汽教育是一家怎样的公司?

搜索“蒸汽教育怎么样”时,留学生和家长可能会先遇到一个基础问题: “蒸汽教育”“蒸汽求职”“STEM Career Group”和“南京蒸汽职业咨询有限公司”,说的是同一家公司吗?为什么中文品牌、英文名称和合同主体看起来并不一样&#…

2026/7/31 18:56:29 阅读更多 →
Docker从零搭建:安装/镜像管理/容器运行全攻略

Docker从零搭建:安装/镜像管理/容器运行全攻略

容器技术 基础环境: 配置Yum仓库 docker安装 配置镜像加速 镜像管理&容器管理 镜像管理命令 容器管理命令 简单镜像制作 容器内部署应用 基础环境: 配置Yum仓库 把 docker 软件包添加到跳板机的自定义 yum 仓库中 [root@ecs-proxy ~]# rsync -av docker/ /var/ftp/loc…

2026/7/31 18:56:29 阅读更多 →
银河麒麟V10多路径Multipath配置指南:存储链路高可用,不再随机掉盘

银河麒麟V10多路径Multipath配置指南:存储链路高可用,不再随机掉盘

Multipath 介绍与配置指南 一、Multipath 介绍 1. Multipath 简介 2. 实现功能 3.配置文件核心结构 4.高级参数优化 二、操作环境 三、iSCSI 安装(服务器端) 1. 安装 iSCSI 2. 配置 iSCSI 四、iSCSI 配置(客户端) 1. 安装并加入认证 2. 发现服务器端 iSCSI 3. 登录 4. 查看…

2026/7/31 18:56:29 阅读更多 →
NativeOverleaf:重塑桌面端LaTeX写作体验的跨平台解决方案

NativeOverleaf:重塑桌面端LaTeX写作体验的跨平台解决方案

NativeOverleaf:重塑桌面端LaTeX写作体验的跨平台解决方案 【免费下载链接】NativeOverleaf Next-level academia! Repository for the Native Overleaf project, attempting to integrate Overleaf with native OS features for macOS, Linux and Windows. 项目地…

2026/7/31 18:56:29 阅读更多 →
Python OpenCV图像处理:从BGR到RGB转换与RAW格式保存的完整指南

Python OpenCV图像处理:从BGR到RGB转换与RAW格式保存的完整指南

1. 引言 在计算机视觉和图像处理领域,OpenCV是最常用的库之一。然而,许多开发者在处理图像格式转换和保存时会遇到各种问题,特别是BGR与RGB格式的差异以及如何正确保存原始图像数据。本文将深入探讨如何使用OpenCV进行图像加载、格式转换和RA…

2026/7/31 18:56:29 阅读更多 →
下一代防火墙为什么越用越贵?拆解厂商常见的IPS、AV、URL过滤、沙箱订阅套路

下一代防火墙为什么越用越贵?拆解厂商常见的IPS、AV、URL过滤、沙箱订阅套路

买下一代防火墙,很多企业以为是"一次性投入",设备到手才发现:IPS、AV、URL过滤、沙箱这些本属于防火墙内置的安全能力,却被厂商拆成独立订阅模块按年续费,三年下来可能比防火墙本身还贵。本文聚焦下一代防火…

2026/7/31 18:55:29 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻