HarmonyOS ArkTS 实战:实现一个校园宿舍管理与查寝应用
HarmonyOS ArkTS 实战实现一个校园宿舍管理与查寝应用项目效果本文使用 HarmonyOS 和 ArkTS 实现一个校园宿舍管理与查寝应用。应用可以管理宿舍成员信息进行查寝签到记录晚归情况进行卫生评分并提供宿舍报修、水电费查询和查寝统计等功能。项目使用 DevEco Studio 开发适配 API 23 及以上版本。运行效果功能介绍本项目实现了以下功能宿舍成员管理查寝签到晚归登记卫生检查评分宿舍报修水电费查询请假外宿登记查寝记录查看卫生排名统计晚归次数统计宿舍公告定义数据结构首先定义宿舍成员和查寝记录的数据结构interfaceDormMember{id:number;studentId:string;name:string;bedNumber:string;major:string;phone:string;isRoomLeader:boolean;}interfaceCheckRecord{id:number;date:string;time:string;type:string;status:string;lateReason:string;score:number;remark:string;}interfaceDormitory{id:number;building:string;roomNumber:string;floor:number;members:DormMember[];checkRecords:CheckRecord[];hygieneScore:number;notice:string;}字段说明如下DormMember宿舍成员id成员编号studentId学号name姓名bedNumber床位号major专业phone电话isRoomLeader是否宿舍长CheckRecord查寝记录id记录编号date日期time时间type类型查寝/卫生检查/晚归status状态在寝/晚归/不在/请假lateReason晚归原因score卫生评分remark备注Dormitory宿舍id宿舍编号building楼栋roomNumber房间号floor楼层members成员列表checkRecords查寝记录hygieneScore卫生评分notice宿舍公告初始化页面状态使用State保存签到信息、评分StateprivatelateReasonText:string;StateprivateremarkText:string;StateprivatehygieneScore:number90;StateprivateselectedStatus:string在寝;StateprivatenextRecordId:number10;准备一些初始宿舍数据Stateprivatedormitories:Dormitory[][{id:1,building:12号楼,roomNumber:302,floor:3,hygieneScore:92,notice:本周四下午卫生检查请大家整理好内务,members:[{id:1,studentId:2023001,name:张三,bedNumber:1号床,major:计算机科学与技术,phone:138****1234,isRoomLeader:true},{id:2,studentId:2023002,name:李四,bedNumber:2号床,major:计算机科学与技术,phone:139****2345,isRoomLeader:false},{id:3,studentId:2023003,name:王五,bedNumber:3号床,major:软件工程,phone:137****3456,isRoomLeader:false},{id:4,studentId:2023004,name:赵六,bedNumber:4号床,major:软件工程,phone:136****4567,isRoomLeader:false}],checkRecords:[{id:1,date:2026-07-17,time:22:30,type:查寝,status:在寝,lateReason:,score:0,remark:全员在寝},{id:2,date:2026-07-16,time:22:45,type:查寝,status:晚归,lateReason:实验室做项目,score:0,remark:李四晚归15分钟},{id:3,date:2026-07-15,time:15:00,type:卫生检查,status:,lateReason:,score:92,remark:整体整洁桌面需整理}]}];查寝签到宿舍长进行查寝签到privatesubmitCheck(dormId:number):void{constnownewDate();constdate${now.getFullYear()}-${String(now.getMonth()1).padStart(2,0)}-${String(now.getDate()).padStart(2,0)};consttime${String(now.getHours()).padStart(2,0)}:${String(now.getMinutes()).padStart(2,0)};this.dormitoriesthis.dormitories.map((dorm:Dormitory){if(dorm.iddormId){constrecord:CheckRecord{id:this.nextRecordId,date,time,type:查寝,status:this.selectedStatus,lateReason:this.lateReasonText,score:0,remark:this.remarkText};this.nextRecordId1;return{...dorm,checkRecords:[record,...dorm.checkRecords]};}returndorm;});this.lateReasonText;this.remarkText;this.selectedStatus在寝;}卫生检查评分privatesubmitHygieneCheck(dormId:number):void{constnownewDate();constdate${now.getFullYear()}-${String(now.getMonth()1).padStart(2,0)}-${String(now.getDate()).padStart(2,0)};consttime${String(now.getHours()).padStart(2,0)}:${String(now.getMinutes()).padStart(2,0)};this.dormitoriesthis.dormitories.map((dorm:Dormitory){if(dorm.iddormId){constrecord:CheckRecord{id:this.nextRecordId,date,time,type:卫生检查,status:,lateReason:,score:this.hygieneScore,remark:this.remarkText};this.nextRecordId1;return{...dorm,hygieneScore:this.hygieneScore,checkRecords:[record,...dorm.checkRecords]};}returndorm;});this.remarkText;}请假外宿登记privatesubmitLeave(dormId:number,reason:string):void{constnownewDate();constdate${now.getFullYear()}-${String(now.getMonth()1).padStart(2,0)}-${String(now.getDate()).padStart(2,0)};consttime${String(now.getHours()).padStart(2,0)}:${String(now.getMinutes()).padStart(2,0)};this.dormitoriesthis.dormitories.map((dorm:Dormitory){if(dorm.iddormId){constrecord:CheckRecord{id:this.nextRecordId,date,time,type:请假,status:请假,lateReason:reason,score:0,remark:已报备辅导员};this.nextRecordId1;return{...dorm,checkRecords:[record,...dorm.checkRecords]};}returndorm;});}统计数据privategetLateCount(dorm:Dormitory):number{returndorm.checkRecords.filter(rr.status晚归).length;}privategetPresentCount(dorm:Dormitory):number{returndorm.checkRecords.filter(rr.status在寝).length;}privategetAverageScore(dorm:Dormitory):number{constscoresdorm.checkRecords.filter(rr.type卫生检查).map(rr.score);if(scores.length0)return0;returnMath.round(scores.reduce((a,b)ab,0)/scores.length);}privategetLeaveCount(dorm:Dormitory):number{returndorm.checkRecords.filter(rr.status请假).length;}顶部统计区域展示本月查寝、在寝率、晚归次数、卫生评分this.StatCard(本月查寝,${dorm.checkRecords.filter(rr.type查寝).length}次,#15803D,#DCFCE7);this.StatCard(在寝率,${Math.round(this.getPresentCount(dorm)/(this.getPresentCount(dorm)this.getLateCount(dorm)this.getLeaveCount(dorm))*100)}%,#059669,#ECFDF5);this.StatCard(晚归次数,${this.getLateCount(dorm)}次,#DC2626,#FEF2F2);this.StatCard(卫生评分,${dorm.hygieneScore}分,#F59E0B,#FFFBEB);设置状态颜色privategetStatusColor(status:string):ResourceColor{if(status在寝)return#059669;if(status晚归)return#DC2626;if(status请假)return#F59E0B;return#6B7280;}privategetStatusBgColor(status:string):ResourceColor{if(status在寝)return#DCFCE7;if(status晚归)return#FEE2E2;if(status请假)return#FEF3C7;return#F3F4F6;}privategetScoreColor(score:number):ResourceColor{if(score90)return#059669;if(score80)return#F59E0B;return#DC2626;}绿色在寝/优秀红色晚归/不合格橙色请假/良好灰色其他深绿色系页面主题色状态选择按钮封装BuilderStatusButton(text:string){Button(text).height(36).padding({left:16,right:16}).fontSize(13).fontColor(this.selectedStatustext?Color.White:#344054).backgroundColor(this.selectedStatustext?#15803D:#F3F4F6).borderRadius(18).onClick((){this.selectedStatustext;});}宿舍成员网格展示使用Grid展示宿舍成员Grid(){ForEach(dorm.members,(member:DormMember){GridItem(){Column(){Circle().width(48).height(48).fill(#15803D20).overlay(Text(member.name.charAt(0)).fontSize(18).fontColor(#15803D))Text(member.name).fontSize(13).fontWeight(FontWeight.Medium).margin({top:8})Text(member.bedNumber).fontSize(11).fontColor(#6B7280).margin({top:2})if(member.isRoomLeader){Text(宿舍长).fontSize(10).fontColor(#15803D).backgroundColor(#DCFCE7).padding({left:6,right:6,top:2,bottom:2}).borderRadius(4).margin({top:4})}}.width(100%).padding(12).backgroundColor(Color.White).borderRadius(12)}},(member:DormMember)member.id.toString())}.columnsTemplate(1fr 1fr 1fr 1fr).rowsGap(12).columnsGap(12).width(100%)页面设计说明应用使用深绿色作为主题色体现宿舍、生活、整洁的氛围。页面主要分为以下区域顶部宿舍信息查寝数据统计宿舍公告成员网格展示查寝签到表单卫生评分查寝记录列表页面采用浅灰色背景和白色卡片。床位使用4列网格展示查寝状态使用不同颜色标签卫生评分使用星级展示查寝记录使用时间倒序排列宿舍长使用特殊标记。SDK 配置本项目使用 HarmonyOS API 24满足 API 23 及以上要求{ name: default, compatibleSdkVersion: 6.1.1(24), runtimeOS: HarmonyOS, targetSdkVersion: 6.1.1(24), compileSdkVersion: 6.1.1(24) }entry 模块中的运行系统也要保持一致{ apiType: stageMode, targets: [ { name: default, runtimeOS: HarmonyOS } ] }运行项目使用 DevEco Studio 打开项目然后找到entry/src/main/ets/pages/Index.ets等待项目同步完成点击右侧的Preview按钮即可查看应用效果。项目总结本文使用 HarmonyOS 和 ArkTS 实现了一个校园宿舍管理与查寝应用。项目实现了成员管理、查寝签到、晚归登记、卫生评分、请假登记、查寝记录、统计排名等功能。通过这个项目可以掌握ArkTS 接口定义和嵌套数据结构State状态管理查寝签到流程Grid网格布局展示成员List和ForEach列表渲染评分和统计计算自定义Builder组件HarmonyOS 宿舍管理类应用布局后续还可以加入人脸识别查寝、自动定位签到、水电费缴纳、宿舍报修、调宿申请、文明宿舍评选、访客登记和宿舍评比等功能。

相关新闻

SinaL2实战指南:构建高性能实时Level2行情数据处理系统

SinaL2实战指南:构建高性能实时Level2行情数据处理系统

SinaL2实战指南:构建高性能实时Level2行情数据处理系统 【免费下载链接】SinaL2 Level2 from dHydra 项目地址: https://gitcode.com/gh_mirrors/si/SinaL2 在量化交易领域,Level2行情数据是构建精准交易策略的关键基础设施。SinaL2作为一款专为P…

2026/10/7 0:06:58 阅读更多 →
5分钟找回QQ空间丢失的说说:GetQzonehistory终极数据恢复指南

5分钟找回QQ空间丢失的说说:GetQzonehistory终极数据恢复指南

5分钟找回QQ空间丢失的说说:GetQzonehistory终极数据恢复指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾在深夜翻看QQ空间时,发现那些承载青春记忆…

2026/10/6 21:44:22 阅读更多 →
HarmonyOS ArkTS 实战:实现一个校园迎新与报到注册应用

HarmonyOS ArkTS 实战:实现一个校园迎新与报到注册应用

HarmonyOS ArkTS 实战:实现一个校园迎新与报到注册应用 项目效果 本文使用 HarmonyOS 和 ArkTS 实现一个校园迎新与报到注册应用。 应用可以帮助新生完成线上报到,填写个人信息,缴纳学费,查看报到流程,分配宿舍&#x…

2026/9/25 0:48:28 阅读更多 →

最新新闻

Visual C++ 手搓本地搜索引擎:倒排索引、分词与 TF-IDF 排序实战

Visual C++ 手搓本地搜索引擎:倒排索引、分词与 TF-IDF 排序实战

简介:这份资源是面向C初学者与游戏AI爱好者的Surakarta人机博弈项目源码包,基于Visual C开发,核心围绕alpha-beta搜索算法与简单估值函数展开,适合想理解博弈搜索、搜索引擎式状态空间遍历及面向对象编程的读者练手。压缩包共8个文…

2026/10/9 6:06:02 阅读更多 →
TCP网络通信编程大作业:从三次握手到C语言Socket实战

TCP网络通信编程大作业:从三次握手到C语言Socket实战

简介:一份完整的TCP/IP课程设计大作业报告,基于C语言实现TCP网络通信编程,面向计算机网络或TCP/IP协议课程的学生与开发者。报告围绕客户/服务器通信程序展开,实现了注册、登陆、单聊、私聊、在线人数列表、退出等功能&#xff0c…

2026/10/9 6:06:01 阅读更多 →
GitHub克隆/推送慢?3行Git指令+SSH/浅克隆实战提速

GitHub克隆/推送慢?3行Git指令+SSH/浅克隆实战提速

GitHub克隆/推送速度慢这个话题,几乎隔几天就会在技术群里被捞起来一次。症状非常固定:git clone跑了一半,进度条卡在Receiving objects,接着一行RPC failed; curl 18 transfer closed with outstanding read data remaining直接终…

2026/10/9 6:06:01 阅读更多 →
基于Flask的体检管理系统开发实战:从数据库设计到部署

基于Flask的体检管理系统开发实战:从数据库设计到部署

1. 项目背景与整体设计思路1.1 为什么选Flask而不是Django或FastAPI我在接手这个健康医疗体检管理系统之前,其实纠结过一阵子框架选型。市面上Python做Web开发主要有三驾马车:Django、Flask、FastAPI。Django确实自带Admin后台、ORM、认证体系&#xff0…

2026/10/9 6:06:01 阅读更多 →
Java+MySQL图书管理系统实战:从环境搭建到MVC三层架构完整跑通

Java+MySQL图书管理系统实战:从环境搭建到MVC三层架构完整跑通

简介:这份资源是面向Java Web初学者与课程设计学习者的图书管理系统完整项目包,采用Java MySQL技术栈,以MVC三层架构组织各功能模块,适合用于毕业设计参考、课程作业实践或自学练手。系统涵盖用户登录、用户信息管理、图书信息增…

2026/10/9 6:06:01 阅读更多 →
SSR 前端项目 Docker 本地部署实战:从 Dockerfile 到 compose 编排

SSR 前端项目 Docker 本地部署实战:从 Dockerfile 到 compose 编排

如果你写过或者接手过 SSR 前端项目,大概都有过这种经历:本地npm run dev跑得飞起,可真要让项目在另一台电脑上跑起来,或者部署到服务器上验证,就开始连环翻车——Node 版本不对、系统库缺失、环境变量没配、数据库连不…

2026/10/9 6:05:01 阅读更多 →

日新闻

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API实战:LocalDate、Date与ZonedDateTime的转换与避坑指南

Java时间API这个话题,隔三差五就会在群里被翻出来讨论一次。上周还有个同事线上处理一个订单超时问题,排查到最后发现是ZonedDateTime序列化后时区丢了,用户在下单当天晚上看到的时间整整差了8个小时。这类问题几乎每个做Java开发的人都遇到过…

2026/10/9 0:00:49 阅读更多 →
EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

EasyTier实践:从NAT穿透到子网代理的异地组网部署与排错

前几个月我手头有好几台机器需要互相访问:办公室台式机、家里 NAS、还有一台云主机。如果只是偶尔传个文件倒还好,问题是工作场景经常要在几处环境之间来回切换,每次都先登录跳板机再层层代理,实在折腾。我先后试过端口映射、自建…

2026/10/9 0:00:49 阅读更多 →
AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent工程实战:从七要素到七个决策点的系统设计指南

AI Agent 这个词在过去一年里被反复提及,但真正动手搭过一套能跑起来的 Agent 系统的人都知道,从"知道它是什么"到"让它稳定干活"之间隔着一整套工程决策。我前后参与过几个 Agent 项目的落地,从最初用现成框架拼装&…

2026/10/9 0:01:50 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:32 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:40 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 10:10:36 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 21:13:17 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 15:26:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/7 13:34:55 阅读更多 →