鸿蒙掌上驾考宝典应用开发17:专项练习系统——章节、难度、题型多维筛选

鸿蒙掌上驾考宝典应用开发17:专项练习系统——章节、难度、题型多维筛选 第17篇专项练习系统——章节、难度、题型多维筛选一、引言专项练习允许用户按章节、难度、题型等维度进行针对性练习是驾考应用的重要功能。DriverLicenseExam 项目通过EXAM_MANAGER_TYPE枚举实现了多维度的数据筛选机制。本文将深入解析其实现。二、专项练习入口2.1 导航到专项练习// HomeView.etsColumn({space: 4 }){Image($r(app.media.special_practice)).width(40).height(40);Text(专项练习).fontSize(14); } .onClick(() { this.vm.navStack.pushPathByName(specialExercisesView,true); });2.2 专项练习页面// SpecialExercisesView.etsComponentV2 export struct SpecialExercisesView { build() { NavDestination() { Column() {// 章节练习this.chapterSection();// 按难易程度this.difficultySection();// 按题目类型this.questionTypeSection(); } } } }三、多维筛选机制3.1 EXAM_MANAGER_TYPE 枚举export enum EXAM_MANAGER_TYPE { sequence 0,//顺序练习 random 1,//随机练习 chapter_name 2,//章节练习 easy 3,//容易 simple 4,//简单 normal 5,//一般 mistake 6,//易错 difficult 7,//困难 single 8,//单选题 multi 9,//多选题 judging 10,//判断题 error 11,//错题 collect 12,//收藏 search 13,//搜索 mock_exam 14,//模拟考试 }3.2 数据筛选逻辑// ExamService.getExamQuestionListgetExamQuestionList(type: EXAM_MANAGER_TYPE, chapterName:string, searchCondition:string, wrongOrCollect?: WRONG_COLLECT) {constoriginData this.examDetails;letexamData:ExamDetail[] [];switch(type) {caseEXAM_MANAGER_TYPE.sequence: examData originData;// 全部题目break;caseEXAM_MANAGER_TYPE.random:// 随机排序constnewArray [...originData]; examData newArray.sort(() ExamService.getRandomFloat() -0.5);break;caseEXAM_MANAGER_TYPE.chapter_name:// 按章节筛选examData originData.filter(itemitem.chapterName.includes(chapterName));break;caseEXAM_MANAGER_TYPE.easy: examData originData.filter(itemitem.classificationTypeClassificationTypeEnum.EASY);break;caseEXAM_MANAGER_TYPE.single: examData originData.filter(itemitem.questionTypeQuestionTypeEnum.RADIO);break;caseEXAM_MANAGER_TYPE.multi: examData originData.filter(itemitem.questionTypeQuestionTypeEnum.CHECK_BOX);break;caseEXAM_MANAGER_TYPE.judging: examData originData.filter(itemitem.questionTypeQuestionTypeEnum.JUDGE);break; }returnexamData; }四、章节练习4.1 章节数据获取// 获取章节列表public getChapterList(): Chapter[]{if(this.chapterList.length0) { const chapterTitleList:string[][]; this.examDetails.forEach((item: ExamDetail) {if(chapterTitleList.indexOf(item.chapterName)-1) { chapterTitleList.push(item.chapterName); } }); chapterTitleList.forEach((item:string,index:number) { const examManger this.getManagerByName(item, EXAM_MANAGER_TYPE.chapter_name, 0,item); const color COLOR_GARDEN[index%6]; this.chapterList.push(newChapter(item,color,examManger)); }); } return this.chapterList; }4.2 章节颜色映射const COLOR_GARDEN [#46B1E3,#61CFBE,#ED6F21,#A5D61D,#AC49F5,#64BB5C];五、统计查询// 获取各难度题量publicgetEasyQuestionCount(): number {... }publicgetSimpleQuestionCount(): number {... }publicgetMiddleQuestionCount(): number {... }publicgetMistakeQuestionCount(): number {... }publicgetHardQuestionCount(): number {... }// 获取各题型题量publicgetRadioQuestionCount(): number {... }publicgetMultiQuestionCount(): number {... }publicgetJudgeQuestionCount(): number {... }六、总结专项练习系统通过 EXAM_MANAGER_TYPE 枚举实现了多维度的数据筛选支持按章节、难度、题型等维度进行针对性练习。这种设计具有良好的可扩展性新增维度只需添加新的枚举值和对应的筛选逻辑。关键源码文件commons/datasource/src/main/ets/ExamService.ets— 数据筛选服务commons/datasource/src/main/ets/Model.ets— 类型定义products/entry/src/main/ets/pages/specialExercises/SpecialExercisesView.ets— 专项练习页面products/entry/src/main/ets/pages/specialExercises/ChapterListView.ets— 章节列表