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

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

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

2026/10/12 1:55:19 阅读更多 →
HarmonyOS ArkTS 实战:实现一个校园迎新与报到注册应用

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

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

2026/10/13 14:53:15 阅读更多 →

最新新闻

AI是怎么判断一家店值得推荐的?云南老板看完这篇就懂了

AI是怎么判断一家店值得推荐的?云南老板看完这篇就懂了

在昆明开店这些年,最近经常听同行聊起一件事:客人不刷抖音也不翻百度了,直接打开豆包问一句“附近哪家靠谱”。但很多老板发现,自己的店在AI回答里几乎不出现。 这个问题背后,是一套和传统搜索完全不同的推荐逻辑。AI推…

2026/10/16 8:42:43 阅读更多 →
2026 自建聚合大模型网关实战教程:NewAPI 从零部署到客户端接入全流程

2026 自建聚合大模型网关实战教程:NewAPI 从零部署到客户端接入全流程

想在同一个入口里调用多家大模型,又不依赖别人搭好的服务,基于 NewAPI 自建聚合网关是开发圈里常见的做法。NewAPI 是 One-API 的活跃分支,开源免费、兼容 OpenAI 接口格式,既能当个人统一入口,也能做多团队的分发系统…

2026/10/16 8:42:43 阅读更多 →
RFC 3327 解读:Rust Lang 团队顾问(Lang Team Advisors)子团队的正式化设计

RFC 3327 解读:Rust Lang 团队顾问(Lang Team Advisors)子团队的正式化设计

文档 【免费下载链接】rfcs RFCs for changes to Rust 项目地址: https://gitcode.com/gh_mirrors/rf/rfcs 点击查看 免费下载 导读 本篇文章基于仓库中的 RFC 3327:Lang team advisors RFC,系统解读 Rust 语言团队(lang team&a…

2026/10/16 8:42:43 阅读更多 →
从一篇文章到一镜到底的成片:web-video-presentation 网页视频制作完整指南

从一篇文章到一镜到底的成片:web-video-presentation 网页视频制作完整指南

从一篇文章到一镜到底的成片:web-video-presentation 网页视频制作完整指南 【免费下载链接】garden-skills ConardLis open-source Skills collection, featuring web design, knowledge retrieval, image generation, and more. 项目地址: https://gitcode.com/…

2026/10/16 8:42:43 阅读更多 →
lol-skins 中 Inkshadow Lee Sin 幻化(Chroma)资源集:8 个 Chroma ID 全索引、Zip 包结构与 WAD 文件解析

lol-skins 中 Inkshadow Lee Sin 幻化(Chroma)资源集:8 个 Chroma ID 全索引、Zip 包结构与 WAD 文件解析

【免费下载链接】lol-skins Comprehensive collection of League of Legends skins available for custom use. 项目地址: https://gitcode.com/gh_mirrors/lo/lol-skins 点击查看 免费下载 本文以 Inkshadow Lee Sin Chromas 文档为主体,完整收录墨影李…

2026/10/16 8:42:43 阅读更多 →
OpenClaw 实战演示|文件自动归档、网页批量信息采集方案

OpenClaw 实战演示|文件自动归档、网页批量信息采集方案

📌 说明 本文基于 OpenClaw 版本展开讲解,全程采用图形化、可视化的交互模式。整合包已内置全部运行依赖,普通用户也能轻松复现完整的部署流程。 ✨核心亮点: 全程可视化图形交互界面,自动补齐全部运行依赖&#xff0c…

2026/10/16 8:41:42 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

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

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 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/15 0:14:36 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/15 9:49:14 阅读更多 →