HarmonyOS ArkTS 实战:实现一个校园水电费查询缴费应用
HarmonyOS ArkTS 实战实现一个校园水电费查询缴费应用项目效果本文使用 HarmonyOS 和 ArkTS 实现一个校园水电费查询缴费应用。应用可以查询每月水电用量和费用在线缴费查看缴费记录并提供用量统计、欠费提醒和账单明细等功能。项目使用 DevEco Studio 开发适配 API 23 及以上版本。运行效果功能介绍本项目实现了以下功能查询每月水电费账单查看水电用量明细在线缴费查看缴费记录用量趋势统计欠费提醒按月份查询统计已缴、未缴、欠费金额单价设置账单导出定义数据结构首先定义账单记录的数据结构interfaceBillRecord{id:number;month:string;dormNumber:string;waterUsage:number;electricUsage:number;waterFee:number;electricFee:number;totalFee:number;status:string;payTime:string;payMethod:string;}字段说明如下BillRecord账单记录id账单编号month账单月份dormNumber宿舍号waterUsage用水量吨electricUsage用电量度waterFee水费元electricFee电费元totalFee总费用元status状态未缴费/已缴费/已逾期payTime缴费时间payMethod支付方式初始化页面状态使用State保存宿舍号、单价、筛选月份StateprivatedormNumberText:string3号楼 302;StateprivatewaterPrice:number3.5;StateprivateelectricPrice:number0.6;StateprivatefilterStatus:string全部;StateprivatecurrentUserId:string2023001;StateprivatenextBillId:number5;准备一些初始账单数据Stateprivatebills:BillRecord[][{id:1,month:2026-07,dormNumber:3号楼 302,waterUsage:8,electricUsage:120,waterFee:28,electricFee:72,totalFee:100,status:未缴费,payTime:,payMethod:},{id:2,month:2026-06,dormNumber:3号楼 302,waterUsage:6,electricUsage:85,waterFee:21,electricFee:51,totalFee:72,status:已缴费,payTime:2026-06-15 14:30,payMethod:微信支付},{id:3,month:2026-05,dormNumber:3号楼 302,waterUsage:7,electricUsage:95,waterFee:24.5,electricFee:57,totalFee:81.5,status:已缴费,payTime:2026-05-18 09:15,payMethod:支付宝},{id:4,month:2026-04,dormNumber:3号楼 302,waterUsage:5,electricUsage:60,waterFee:17.5,electricFee:36,totalFee:53.5,status:已逾期,payTime:,payMethod:}];生成新账单每月自动生成新账单privategenerateBill():void{constnownewDate();constmonth${now.getFullYear()}-${String(now.getMonth()1).padStart(2,0)};constexiststhis.bills.some(bb.monthmonth);if(exists)return;constwaterUsageMath.floor(Math.random()*10)5;constelectricUsageMath.floor(Math.random()*100)50;constwaterFeeMath.round(waterUsage*this.waterPrice*10)/10;constelectricFeeMath.round(electricUsage*this.electricPrice*10)/10;constbill:BillRecord{id:this.nextBillId,month,dormNumber:this.dormNumberText,waterUsage,electricUsage,waterFee,electricFee,totalFee:Math.round((waterFeeelectricFee)*10)/10,status:未缴费,payTime:,payMethod:};this.bills[bill,...this.bills];this.nextBillId1;}缴费功能用户可以缴纳水电费privatepayBill(billId:number,method:string):void{constnownewDate();constpayTime${now.getFullYear()}-${String(now.getMonth()1).padStart(2,0)}-${String(now.getDate()).padStart(2,0)}${String(now.getHours()).padStart(2,0)}:${String(now.getMinutes()).padStart(2,0)};this.billsthis.bills.map((bill:BillRecord){if(bill.idbillIdbill.status!已缴费){return{id:bill.id,month:bill.month,dormNumber:bill.dormNumber,waterUsage:bill.waterUsage,electricUsage:bill.electricUsage,waterFee:bill.waterFee,electricFee:bill.electricFee,totalFee:bill.totalFee,status:已缴费,payTime,payMethod:method};}returnbill;});}筛选账单按状态筛选账单privategetFilteredBills():BillRecord[]{if(this.filterStatus全部){returnthis.bills;}returnthis.bills.filter((b:BillRecord)b.statusthis.filterStatus);}筛选按钮封装BuilderFilterButton(text:string){Button(text).height(32).padding({left:14,right:14}).fontSize(12).fontColor(this.filterStatustext?Color.White:#344054).backgroundColor(this.filterStatustext?#4338CA:#EEF2FF).borderRadius(16).onClick((){this.filterStatustext;});}统计数据统计已缴、未缴、欠费金额privategetUnpaidAmount():number{returnthis.bills.filter(bb.status未缴费||b.status已逾期).reduce((sum,b)sumb.totalFee,0);}privategetPaidAmount():number{returnthis.bills.filter(bb.status已缴费).reduce((sum,b)sumb.totalFee,0);}privategetOverdueCount():number{returnthis.bills.filter(bb.status已逾期).length;}privategetTotalWaterUsage():number{returnthis.bills.reduce((sum,b)sumb.waterUsage,0);}privategetTotalElectricUsage():number{returnthis.bills.reduce((sum,b)sumb.electricUsage,0);}顶部统计区域展示待缴金额、已缴金额、逾期账单、累计用电this.StatCard(待缴金额,¥${this.getUnpaidAmount().toFixed(1)},#DC2626,#FEF2F2);this.StatCard(已缴金额,¥${this.getPaidAmount().toFixed(1)},#059669,#ECFDF5);this.StatCard(逾期账单,${this.getOverdueCount()}个,#D97706,#FFF7E8);this.StatCard(累计用电,${this.getTotalElectricUsage()}度,#4338CA,#EEF2FF);设置状态颜色不同账单状态使用不同颜色privategetStatusColor(status:string):ResourceColor{if(status已缴费){return#059669;}if(status已逾期){return#DC2626;}return#D97706;}privategetStatusBgColor(status:string):ResourceColor{if(status已缴费){return#DCFCE7;}if(status已逾期){return#FEE2E2;}return#FEF3C7;}绿色已缴费红色已逾期橙色未缴费靛蓝色页面主题色使用列表展示账单使用List和ForEach渲染账单列表List({space:12}){ForEach(this.getFilteredBills(),(bill:BillRecord){ListItem(){this.BillCard(bill)}},(bill:BillRecord)bill.id.toString());}.width(100%).layoutWeight(1).scrollBar(BarState.Off);每个账单卡片包含月份、宿舍号、用水量/用电量、水费/电费、总金额、状态和缴费按钮。页面设计说明应用使用靛蓝色作为主题色体现生活服务、稳重可靠的感觉。页面主要分为以下区域顶部宿舍信息费用统计区域用量概览状态筛选账单列表缴费弹窗页面采用浅灰色背景和白色卡片。待缴金额使用醒目的红色已缴使用绿色逾期使用红色警示用水量使用蓝色水滴图标用电量使用黄色闪电图标费用使用大号字体突出显示。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) }运行项目使用 DevEco Studio 打开项目然后找到entry/src/main/ets/pages/Index.ets等待项目同步完成点击右侧的Preview按钮即可查看应用效果。项目总结本文使用 HarmonyOS 和 ArkTS 实现了一个校园水电费查询缴费应用。项目实现了账单查询、用量统计、在线缴费、缴费记录、欠费提醒、状态筛选、金额统计等功能。通过这个项目可以掌握ArkTS 接口定义State状态管理费用计算逻辑List和ForEach列表渲染reduce数组统计支付流程模拟自定义Builder组件HarmonyOS 生活服务类应用布局后续还可以加入用电预警、用量对比图表、自动代扣、电子发票、报修联动、公摊费用、室友AA分摊和历史用量分析等功能。

相关新闻

HarmonyOS ArkTS 导航栏的精细化打磨:动画曲线、视觉层次与交互细节的调优

HarmonyOS ArkTS 导航栏的精细化打磨:动画曲线、视觉层次与交互细节的调优

引子:导航栏的"差不多"和"刚刚好" 其实 Index.ets 里的导航栏代码经过了好几轮调优——图标的缩放比例从 1.15 改到 1.2,透明度从 0.4 改到 0.3,动画时长从 300ms 改到 350ms,下划线从内联改成了独立的 Row …

2026/7/19 13:04:31阅读更多 →
HarmonyOS ArkTS 数据驱动的富文本展示:从星图详情页看结构化数据的可视化呈现

HarmonyOS ArkTS 数据驱动的富文本展示:从星图详情页看结构化数据的可视化呈现

引子:数据有了,怎么展示才好看 重构后的星空运势应用,星座数据从原来的 5 个字段扩展到了 8 个——新增了优势(strengths)、弱点(weaknesses)、最佳配对(matches)。数据丰…

2026/7/19 13:04:31阅读更多 →
LuaJIT字节码逆向分析终极指南:专业级LJD反编译工具完整解析

LuaJIT字节码逆向分析终极指南:专业级LJD反编译工具完整解析

LuaJIT字节码逆向分析终极指南:专业级LJD反编译工具完整解析 【免费下载链接】luajit-decompiler https://gitlab.com/znixian/luajit-decompiler 项目地址: https://gitcode.com/gh_mirrors/lu/luajit-decompiler LuaJIT反编译工具LJD是一款专门用于解析Lua…

2026/7/19 13:04:31阅读更多 →
Java数组连接方法与性能优化实践

Java数组连接方法与性能优化实践

1. Java数组连接的基础概念在Java开发中,数组连接是一个常见但容易被忽视的基础操作。无论是处理网络协议数据、文件IO操作还是简单的字符串拼接,掌握高效的数组连接方法都能显著提升代码质量。不同于其他语言,Java的数组是固定长度的&#x…

2026/7/19 20:10:21阅读更多 →
SUV789智能穿戴设备:户外健康监测与预警系统解析

SUV789智能穿戴设备:户外健康监测与预警系统解析

1. SUV789项目概述第一次听说SUV789这个项目时,我脑海中浮现的是汽车行业的某个新车型。但深入了解后发现,这实际上是一个融合了智能硬件与移动应用的创新项目。作为一名在智能硬件领域摸爬滚打多年的从业者,我对这类跨界项目总是充满兴趣。S…

2026/7/19 20:10:21阅读更多 →
Android倒计时器实现:线程与Handler的最佳实践

Android倒计时器实现:线程与Handler的最佳实践

1. 项目概述:Android倒计时器的线程与Handler实现 在Android开发中,倒计时功能是许多应用的基础需求。这个8秒倒计时器项目看似简单,却涉及Android多线程编程的核心机制。不同于简单的Timer实现,这里采用ThreadHandler的方案&…

2026/7/19 20:10:21阅读更多 →
ARM处理器PMU与ETM寄存器配置实战:性能监控与指令追踪

ARM处理器PMU与ETM寄存器配置实战:性能监控与指令追踪

1. 项目概述:深入ARM核心的“听诊器”与“录像机”在嵌入式系统和处理器开发的深水区,性能瓶颈的定位和复杂软件缺陷的根因分析,往往让开发者感到无从下手。你无法仅凭直觉判断一个循环为何耗时异常,也难以在系统崩溃后重现导致问…

2026/7/19 20:10:21阅读更多 →
嵌入式显示系统SDI模块驱动开发:从LVDS原理到TI OMAP实战调试

嵌入式显示系统SDI模块驱动开发:从LVDS原理到TI OMAP实战调试

1. 项目概述:深入理解嵌入式显示系统的“神经末梢”在嵌入式系统开发,尤其是涉及人机交互界面的领域,显示子系统(Display Subsystem, DSS)的地位堪比整个系统的“视觉中枢”。它负责从内存中获取图像数据,经…

2026/7/19 20:10:21阅读更多 →
Zygisk-Il2CppDumper实战:动态提取Unity游戏内存元数据逆向分析指南

Zygisk-Il2CppDumper实战:动态提取Unity游戏内存元数据逆向分析指南

1. 项目概述:为什么我们需要Zygisk-Il2CppDumper?如果你正在尝试分析一款安卓上的Unity游戏,并且已经尝试过传统的静态分析工具,大概率会遇到一堵墙:游戏的核心逻辑被编译成了libil2cpp.so和global-metadata.dat&#…

2026/7/19 20:08:20阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/19 0:01:04阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/19 0:01:04阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/19 0:01:04阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/18 22:49:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/19 14:50:26阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/19 18:50:36阅读更多 →