狗头警告,这是VIP文章!
说明:
文件1: REPS_2024.pdf
可再生能源工厂系统 (REPS) 概述
可再生能源工厂 (REP) 是一个多代能源系统工厂,负责为城市、工业等生产可再生能源。可再生能源通常在世界各地的任何地点都可获得,具体取决于类型。此外,与常规能源相比,使用可再生能源资源具有多个优势和好处。REP 配备了控制工厂内一切的软件,例如从能源生产到场地监控。为了做到这一点,它从传感器和摄像头收集信息。传感器收集、整理并发送有关生产系统健康状况的数据,如每小时的能源产量,而摄像头则记录并发送视频到服务器控制室,展示工厂内发生的事情,如人员的流动和运输方式(用于监控活动)或卡车装载物资的交换。并非所有信息都必须发送到服务器并远程处理。可以考虑本地子系统(例如基于嵌入式图像处理框架的摄像头中的嵌入式处理)。REP 软件还旨在通过例如移动太阳能板以准确跟随太阳,或移动风力涡轮以跟随风向来提高能源产量。此外,REP 还可以建议因任何原因改变生产物资,例如由于老化导致能源产量减少。
实施目标
你的团队被一家可再生能源公司雇佣,设计并构建一个可再生能源工厂系统。项目的目标是创建一个功能齐全且高效的发电厂,利用可再生能源为当地社区发电。发电厂必须可靠、可持续且成本效益高。你需要实现以下用例:
- 系统应该设计为监控和控制发电厂的可再生能源,包括太阳能板、风力涡轮机和水力发电。
- 系统应能够收集与可再生能源产生的能源相关的数据,并将其存储在文件中。
- 系统应提供发电厂能源生产和存储能力的视图,允许操作员根据需要调整发电厂的运行。此视图应显示存储在文件中的数据。
- 系统应能够分析从可再生能源收集的数据。应能够按小时、日、周和月过滤数据。在可能的情况下,应能够对数据进行排序。必须允许用户搜索系统中存储的所需数据。数据分析应包括:
- 平均值:通过将一组数据中的所有值相加并除以你所加的总数值来找到平均值。
- 中位数:一组值中的中间数字。你可以通过将数字按从小到大的顺序排列,然后覆盖两端的一个数字,直到你到达中间。
- 众数:一组中最常出现的数字或值。要找到众数,你需要计算每个值出现的次数。
- 范围:最低值和最高值之间的差异。计算它,只需从最高值中减去最低值。
- 中间值:一组数据中最小和最大数字之间的确切中点。要计算中间值,必须找到最小和最大的数字之和,然后除以2。
- 系统应能够检测并处理可再生能源的问题,例如低能源产出和设备故障,相应地为操作员生成警报。
注意:确保遵循 Scala 风格指南,并使用适当的命名约定为变量、函数和类命名。你的代码应该组织良好、文档齐全、易于阅读。所有的功能和代码结构必须遵循函数式编程范式,其中:
- 确保数据不可变性。
- 使用递归帮助完成迭代工作。
- 使用高阶函数完成任务。
在 Scala 中以非函数方式实现文件 I/O - 命令式语言的常规方式。最好使用 .xls 或 .csv 文件进行 I/O;这相对容易。
文件2: Supplementary_Guidance_REPS_Project.pdf
CT60A9600 [Lahti] 2024年春季
补充指导
数据:为了收集太阳能、风能和水能的数据,我们建议使用如 Fingrid.fi 这样的资源,它提供了关于能源生产和消费的全面数据。通过访问这个平台,用户可以检索实时和历史数据,有效地监控可再生能源源。错误处理:为确保数据完整性,系统必须实施错误处理机制。这包括检测各种类型的错误,并可能向用户提供清晰的指导,说明如何纠正它们。以下是几个可能的场景以及系统应如何处理它们:
示例场景:
- 日期格式错误:
- 用户尝试输入日期:“2024年4月12日”。
- 系统期望的日期格式为 “DD/MM/YYYY”。
- 系统检测到错误的日期格式,并显示错误消息:“日期格式无效。请输入格式为 ‘DD/MM/YYYY’ 的日期。”
- 除了错误消息外,系统还使用实际日期显示正确的日期格式示例:“例如,输入 ‘12/04/2024’ 表示2024年4月12日。”
- 选定日期无可用数据:
- 用户输入日期:“15/04/2024” 表示2024年4月15日。
- 系统搜索可用数据,但未找到选定日期的数据。
- 系统显示消息:“选定日期无可用数据。请选择另一个日期。”
- 用户被提示更正日期输入或选择另一个日期。
使用其他 API 提供商:
- 虽然 Fingrid API 是一个不错的选择,但如果需要,你可以探索其他可再生能源数据的 API 提供商。确保与你的系统无缝集成和兼容。
注意:
- 这只是为了使你的实现更轻松,并为你提供项目几个方面的可能方向的指导。请注意,此指导不会限制你探索其他可能性或实现方式。此外,如果你仅限于处理仅作为示例的错误处理场景,这将不会给你任何学分。
完整代码如下:
package org.exampleimport org.json4s.DefaultFormatsimport scala.io.StdIn
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
import scala.io.Source
import org.json4s._
import org.json4s.jackson.JsonMethods._
import java.net.{HttpURLConnection, URL}object REPSConsoleApp {// 检查时间格式def checkTimeFormat(time: String): Boolean = {try {ZonedDateTime.parse(time, DateTimeFormatter.ISO_ZONED_DATE_TIME)true} catch {case _: Exception => false}}// 从API获取数据def fetchData(datasetId: String, startTime: String, endTime: String): List[Map[String, Any]] = {val url = s"https://data.fingrid.fi/api/datasets/$datasetId/data?startTime=$