鸿蒙掌上驾考宝典应用开发16:模拟考试系统——计时、评分与结果统计

📅 2026/7/31 14:28:58
鸿蒙掌上驾考宝典应用开发16:模拟考试系统——计时、评分与结果统计
第16篇模拟考试系统——计时、评分与结果统计一、引言模拟考试是驾考应用的核心功能之一它模拟真实考试环境提供计时答题、自动评分、成绩统计等功能。DriverLicenseExam 项目的模拟考试系统设计精巧本文将深入解析其实现。二、模拟考试模式2.1 模式触发在 HomeView 中点击模拟考试按钮触发// HomeView.etsRow(){Image($r(app.media.trophy)).width(24).height(24);Text(模拟考试).fontSize(14).fontColor(#FFFFFF);Text(仿真冲刺).fontSize(12).fontColor(#FFFFFF); } .onClick(() { const param: ROUTE_PARAM { title: 模拟考试,type:EXAM_MANAGER_TYPE.mock_exam, examManager: this.examService.getMockExamManager(模拟考试)}; this.vm.navStack.pushPathByName(practiceView,param); });2.2 试卷生成每次模拟考试都生成新的试卷// ExamService.getMockExamManagergetMockExamManager(name:string| Resource){letexamManager newExamManager(name,this.generateExamDetail()); examManager.timeLimit 1;// 限时1分钟return examManager; }三、倒计时实现3.1 倒计时逻辑// Exam.etsaboutToAppear(): void {this.currentIndex this.examManager.currentQuestionId 1;if(this.examManager.timeLimit !0) {this.remainTime this.examManager.timeLimit *60; let showDialog: boolean true; setInterval(() {if(showDialog !this.isStop) {if(this.remainTime 1) {this.remainTime--; }else{// 时间到自动交卷showDialog false;this.isStop true;this.examSubmitDialog.open(); } } },1000); } }3.2 暂停/继续// 暂停考试this.isStop true;// 继续考试this.isStop false;四、评分与成绩统计4.1 分数计算// 提交试卷时计算分数submitExam() {consttotalQuestions this.examManager.examDetails.length;constcorrectCount this.examManager.correctNumber;constscore Math.round(correctCount / totalQuestions *100);// 记录模拟考试分数this.mockExamCall(score); }4.2 成绩统计// ExamService 统计TracemockExamCount:number0;// 考试次数TracemockExamScore:number[] [];// 每次分数publicaddMockExamCount(score:number) {this.mockExamCount;this.mockExamScore.push(score); }// 计算平均分publiccalculateAverageScore():number{if(this.mockExamCount0)return0;returnMath.ceil(this.mockExamScore.reduce((pre, next) pre next) /this.mockExamCount); }五、返回拦截与确认弹窗5.1 返回拦截// PracticeView.ets.onBackPressed(() {if(this.type EXAM_MANAGER_TYPE.mock_exam) {this.examController.isShowMockExamDialog true;returntrue;// 拦截返回}this.vm.navStack.pop();returntrue; })5.2 确认弹窗Monitor(examController.isShowMockExamDialog)mockExamDialogChange() {if(examController.isShowMockExamDialog) { examController.isShowMockExamDialog false;this.isStop true;this.examExitDialog.open(); } }六、总结模拟考试系统展示了完整的限时答题流程试卷生成每次考试生成新的试卷倒计时使用 setInterval 实现秒级计时暂停机制支持暂停和继续考试自动评分提交或时间到自动评分成绩统计累计考试次数和平均分关键源码文件products/entry/src/main/ets/pages/home/HomeView.ets— 模拟考试入口products/entry/src/main/ets/pages/practice/PracticeView.ets— 考试页面components/exam/src/main/ets/components/Exam.ets— 考试组件commons/datasource/src/main/ets/ExamService.ets— 数据服务