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/9/21 22:36:25 阅读更多 →
5分钟找回QQ空间丢失的说说:GetQzonehistory终极数据恢复指南

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

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

2026/9/18 10:39:08 阅读更多 →
HarmonyOS ArkTS 实战:实现一个校园迎新与报到注册应用

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

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

2026/9/20 0:31:35 阅读更多 →

最新新闻

别再瞎折腾了 一文搞懂色导网项目搭建避坑指南

别再瞎折腾了 一文搞懂色导网项目搭建避坑指南

别再瞎折腾了 一文搞懂色导网项目搭建避坑指南 学完 Python 或 Java 基础语法,面对空白的 IDE 窗口,脑子一片空白?这是绝大多数初学者的噩梦。你背下了 for 循环和类继承,却不知怎么把它们组装成一个能跑起来的系统。…

2026/9/22 21:54:15 阅读更多 →
3招搞定ps填色卡顿图解原理与性能优化实战

3招搞定ps填色卡顿图解原理与性能优化实战

3招搞定ps填色卡顿图解原理与性能优化实战 刚学完Python或JS基础,手里拿着 Pillow 或 Canvas API,想做个简单的图片填色功能,结果一跑大图直接卡死。这种“代码能跑但产品难用”的窘境,是培训机构学员转岗时最大的拦路虎。…

2026/9/22 21:54:15 阅读更多 →
3步搞定架设单机传奇,新手避坑指南

3步搞定架设单机传奇,新手避坑指南

3步搞定架设单机传奇,新手避坑指南 配置环境就卡半天,是不是你架设单机传奇时的真实写照?别急,新手避坑的关键在于理清依赖和端口。很多人对着黑框框发呆,其实问题出在底层的网络监听和进程管理上。今天咱们不聊虚的,直接拆解传奇服务端(如GOM/G…

2026/9/22 21:54:15 阅读更多 →
蔬菜销售系统避坑指南:3步搞定复制代码跑不通难题

蔬菜销售系统避坑指南:3步搞定复制代码跑不通难题

蔬菜销售系统避坑指南:3步搞定复制代码跑不通难题 你是不是也遇到过这种崩溃时刻?从网上抄了一段蔬菜销售的 Python 代码,复制粘贴到本地,结果终端直接报错 ModuleNotFoundError…

2026/9/22 21:54:15 阅读更多 →
wps如何插入图片原理详解

wps如何插入图片原理详解

WPS插入图片踩坑实录:5个致命Bug避坑指南 报错堆满屏幕,StackTrace 看得人头大?别慌,这不仅是代码的问题,更是工具链的暗坑。很多人卡在 WPS…

2026/9/22 21:54:15 阅读更多 →
3步搞定样本制作:源码解析让复制代码不再报错

3步搞定样本制作:源码解析让复制代码不再报错

3步搞定样本制作:源码解析让复制代码不再报错 刚接手新项目,从网上复制了一段样本制作代码,结果运行直接报错。环境版本不对、依赖缺失、路径配置混乱,这种复制来的代码跑不通不知道怎么调的情况,几乎每个开发者都经历过。别急,光靠猜和百度搜报错信息…

2026/9/22 21:53:14 阅读更多 →

日新闻

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天

3台商务办公笔记本实测:手写实现环境配置,告别卡半天 配置环境就卡半天?别怪机器慢,多半是你没选对工具链。在Java、Go或Python的项目现场, 手写实现…

2026/9/22 0:00:41 阅读更多 →
剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑

剑帝加点速查手册:3分钟搞懂核心逻辑 面试被问原理答不上来,是不是常态?别慌。很多开发者对着 GitHub 开源仓库里的代码发呆,看似简单实则暗藏玄机。今天这份【剑帝加点】速查手册,直接带你拆解核心实现,把面试必考的原理讲透。…

2026/9/22 0:00:41 阅读更多 →
手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优

手写实现图片压缩网站核心:搞定WebP转换与质量调优 复制来的代码跑不通不知道怎么调?别慌,这种“复制粘贴地狱”在开发圈太常见了。尤其是做 图片压缩网站…

2026/9/22 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/22 4:32:41 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/22 4:38:57 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/22 8:51:04 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/22 2:43:42 阅读更多 →