软件工程实践第二次作业——个人实战

222100132谢凌云 2024-03-02 20:17:25
这个作业属于哪个课程2023年福大-软件工程实践-W班
这个作业要求在哪里软件工程实践第二次作业——个人实战
这个作业的目标完成对世界游泳锦标赛跳水项目相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序
其他参考文献码出高效_阿里巴巴Java开发手册源代码管理

目录

  • Gitcode项目地址
  • PSP表格
  • 解题思路描述
  • 1、先对数据进行分析
  • 2、需求分析
  • 3、得出框架
  • 接口设计和实现过程
  • 1、getPlayers接口
  • 2、getScore接口
  • 3、接口printError
  • 关键代码展示
  • getPlayers接口
  • getScore接口
  • printError接口
  • main函数
  • 性能改进
  • 单元测试
  • 异常处理
  • 心得体会

Gitcode项目地址

https://gitcode.net/qq_62699435/project-java

PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划12060
• Estimate• 估计这个任务需要多少时间12060
Development开发15901610
• Analysis• 需求分析 (包括学习新技术)240240
• Design Spec• 生成设计文档6070
• Design Review• 设计复审6050
• Coding Standard• 代码规范 (为目前的开发制定合适的规范)120100
• Design• 具体设计90100
• Coding• 具体编码600720
• Code Review• 代码复审240210
• Test• 测试(自我测试,修改代码,提交修改)180120
Reporting报告180160
• Test Repor• 测试报告6050
• Size Measurement• 计算工作量6050
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划6060
合计18901830

解题思路描述

1、先对数据进行分析

通过网页上的api将选手数据和比赛数据拷贝一份储存在本地文件中,文件命名为players和比赛名称

img

2、需求分析

要求有两种输出,分别是输出选手信息和输出比赛数据,意味着需要从已经拷贝到本地的txt文档中筛选出有效信息,利用文件流BufferedReader和BufferedWriter读出字符串,再通过JSON解析即可得到需要输出的数据并写入output.txt

3、得出框架

将不同的输出封装起来,在main函数中按行读取input.txt中的字符串,解析读入的字符串是否为合法要求,根据字符串执行不同的函数即可完成output.txt的写入功能。

接口设计和实现过程

1、getPlayers接口

getPlayers:当从input.txt中读入某一行的字符串为players时,调用该接口。通过JSONTokener读入预先存储在本地文件players.txt中的选手数据,解析为JSONObject,循环读出每一位选手的firstName和lastName连接为fullName,以及国籍和性别,通过BufferedWriter写入output.txt中。

2、getScore接口

getScore:接口需要参数path,来源于result请求后的字符串,将path转换为相对地址pathName对应本地文件txt的名称,即可打开正确的比赛记录文件。和接口一类似从本地txt文件中读入比赛信息,通过JSONObject和JSONArray的嵌套使用过滤出需要的数据,写入output.txt。

3、接口printError

printError:当iunput请求是不符合规定的请求时,调用该接口,在output.txt中写入字符串Error

关键代码展示

getPlayers接口

img

getScore接口

img

printError接口

img

main函数

img

性能改进

由于开始编程时没有考虑有重复申请相同信息的情况,采取的是一次请求一次输出的方法,当样本量增大时时间复杂度太高。

所有11条不同指令消耗的时间(120ms):

img

11*10=110条指令消耗的时间(540ms):

img

1100条指令消耗的时间(3949ms):

img

可以明显发现时间复杂度几乎是线性增大的,解决的方法也很简单,建立合适的数据结构将筛选后的数据存储起来,实现数据的复用。但是这样几乎要把之前的代码推倒重来,观察发现这次的题目其实数据量不大,输出的数据也比较固定,总共只有11种合法指令,所以考虑第一次输出的同时将输出存储到哈希表中,之后遇到相同指令时直接从哈希表中取出数据即可,同样体现了数据的复用。
即使是这样修改之后,时间复杂度和室友对比之后发现仍然较高,检查发现原因是BufferedWriter没有实现复用,每次输出到output中时都要新建一个BufferedWriter,写入之后再关闭,浪费资源。于是将BufferedWriter也封装起来实现复用,性能取得巨大提升。

优化后:
所有11条不同指令消耗的时间(120ms->113ms):

img

11*10=110条指令消耗的时间(540ms->125ms):

img

1100条指令消耗的时间(3949ms->132ms):

img

10888条指令消耗的时间(221ms):

img

单元测试

白盒测试:使用了一个包含11种合法输入的10890行的input.txt测试输出结果,得到output.txt共716760行,与舍友程序得到的结果进行对比,结果相同,基本能够通过白盒测试。

img

编写了一个test测试程序自动测试getPlayers接口能否输出正确的程序

img

异常处理

在读写文件前先检查文件是否存在

img

检查是否是非法输入,通过正则表达式检验是否为result+比赛名的合法输入

img

try-catch捕获程序过程中的异常,而不会中断程序的执行。

img

心得体会

1、基本了解了从网页爬取数据的步骤,对网页数据有了更多的理解。但是爬取数据的方法有待拓展,基本是通过api网址手动爬取保存到本地文件中,后续可以学习使用工具更方便地爬取。
2、初步掌握JSON解析的方法,能够从网页上爬取的数据进行解析,得到想要的某一部分数据,同时也涉及输入输出流的运用,从文件中读取大数据,进行解析得到部分数据,再输出到对应文件中,日常使用中也很好用。
3、封装思想。经过性能优化环节,对封装的作用有了更深理解,能实现代码和数据的复用,极大提升性能,之后编程过程中也会注意封装。
4、重视需求分析,一开始没有考虑到数据结构怎么建立,只考虑到一次输入一次输出,后续修改就非常麻烦了。所以之后会认真分析需求,建立合适的数据结构和接口,实现代码复用。

...全文
300 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
助教-何浩然 助教 2024-03-13
  • 打赏
  • 举报
回复

整体上很棒,继续加油!

内容概要:本文围绕基于三电平ANPC-VSG(虚拟同步发电机)的构网型逆变器控制展开研究,重点设计并实现了双闭环控制与中点电位平衡控制策略。通过Simulink仿真实现,验证了该控制体系在提升逆变器并网性能方面的有效性。系统采用虚拟同步发电机技术,使逆变器具备类似同步电机的惯量与阻尼特性,显著增强电网稳定性;结合电压外环与电流内环构成的双闭环控制结构,实现对输出电压和电流的精确动态调节与高稳态精度;同时,针对三电平拓扑中存在的中点电位漂移问题,引入有效的平衡控制算法,确保母线电压对称,保障系统安全可靠运行。整体方案不仅支持电压、频率的自主恢复,还能实现功率的合理分配,特别适用于高比例新能源接入的弱电网或孤岛运行环境。; 适合人群:电气工程、电力电子与电力系统相关专业的研究生、科研人员及从事新能源并网逆变器开发的高级工程师。; 使用场景及目标:①应用于高比例可再生能源电网中构网型逆变器的设计与仿真;②实现三电平ANPC逆变器在孤岛或弱电网条件下的稳定并网运行;③解决中点电位不平衡问题,提升多电平逆变器的电能质量和运行可靠性;④为VSG控制、双闭环设计及中点电位控制提供完整的理论依据与仿真验证平台。; 阅读建议:此资源以Simulink仿真为核心,建议读者结合文中控制策略进行模型复现,重点关注双闭环参数整定、VSG惯量阻尼系数设置及中点电位平衡算法的实现细节,并通过稳态、动态与不平衡工况下的仿真结果分析系统性能。
内容概要:本文研究了基于二阶锥双层凸规划的分布式风光与电动汽车协同调压降损调度方法,旨在通过优化调度策略实现配电网的电压稳定与网损降低。研究构建了一个包含分布式光伏、风力发电及电动汽车V2G(Vehicle-to-Grid)能力的多时段协同优化模型,采用二阶锥松弛技术将原本非凸非线性的复杂优化问题转化为可高效求解的凸优化问题,并通过Matlab编程实现了算法仿真与验证。文中系统阐述了模型的数学建模过程,包括以最小化网络损耗和电压偏差为目标的目标函数设计,以及涵盖功率平衡、节点电压范围、设备容量限制等在内的多重约束条件。结合标准算例进行仿真分析,结果表明所提出的调度方法在改善配电网电压质量、降低网络损耗方面具有显著效果,尤其适用于高比例可再生能源与大规模电动汽车接入的复杂运行场景。该研究为现代智能配电网的安全、经济、高效运行提供了坚实的理论依据与可行的技术路径。; 适合人群:具备电力系统分析、优化理论基础及Matlab编程能力的研究生、科研人员,以及从事智能电网、分布式能源系统规划与运行、电动汽车与电网互动(V2G)等领域的工程技术人员。; 使用场景及目标:①应用于高渗透率新能源与电动汽车共同接入背景下的配电网多时段协同调度仿真与优化;②支撑科研工作者对二阶锥规划(SOCP)、双层优化建模范式的复现、学习与改进;③为电力系统运行部门提供一套切实可行的节能降损、电压稳定控制的技术方案参考,助力新型电力系统建设;④作为高级调度算法的教学案例,深化对现代优化技术在电力系统中应用的理解。; 阅读建议:读者应结合文中的数学模型推导与提供的Matlab代码进行对照学习,重点掌握二阶锥松弛技术的应用技巧、双层优化问题的分解策略与求解逻辑,建议动手调试代码以深入理解各约束条件与目标函数项的实际作用机制,并可在此基础上进一步拓展至多目标优化、不确定性优化(如鲁棒优化、随机规划)或考虑通信延迟等更复杂的实际因素。
内容概要:本文针对电动汽车充电站接入背景下配电网承载能力的评估与优化问题,提出了一套完整的Matlab代码实现方案。研究构建了包含电动汽车渗透率、分布式光伏出力、SVC无功补偿等多类型资源协同作用的配电网基础模型,并建立了涵盖一次设备安全、负荷平稳性、电能质量和系统效率的多维评价指标体系。在此基础上,采用熵权法客观赋权与模糊综合评价相结合的双层评分模型,对不同渗透率场景下的配电网承载能力进行量化评估,通过算例仿真分析各指标的变化规律与灵敏度,验证了方法的有效性与实用性。; 适合人群:具备电力系统基础知识和Matlab编程能力,从事新能源接入、配电网规划与优化相关研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于评估高比例电动汽车接入对配电网运行安全性与电能质量的影响;②为配电网扩容改造、充电站规划布局提供量化决策依据;③支撑多类型分布式资源协同优化调度的研究与仿真验证。; 阅读建议:建议结合文中目录结构,重点研读模型构建与评价体系部分,运行提供的Matlab代码以复现仿真结果,并可根据实际需求修改参数设置,拓展至含储能、V2G等更复杂场景的应用。

315

社区成员

发帖
与我相关
我的任务
社区描述
福州大学的软件工程实践-2023学年-W班
软件工程需求分析结对编程 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • Pity·Monster
  • 助教张富源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧