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

222000135尼加提 学生 2023-06-12 21:45:08
这个作业属于哪个课程2023软工W班
这个作业要求在哪里软件工程实践——个人实战
这个作业的目标
其他参考文献

第二次作业—个人实战

1.Gitcode项目地址

地址: 点击这里

2.PSP表格

PSP阶段预估耗时(分钟)实际耗时(分钟)
Planning(计划)2525
• Estimate(估计这个任务需要多少时间)2525
Development(开发)710900
• Analysis(需求分析,包括学习新技术)6595
• Design Spec(生成设计文档)3035
• Design Review(设计复审)1015
• Coding Standard(代码规范,为目前的开发制定合适的规范)1520
• Design(具体设计)6070
• Coding(具体编码)450540
• Code Review(代码复审)5075
• Test(测试,自我测试,修改代码,提交修改)7070

3. 解题思路描述

. 使用 Python 爬虫框架,如 requests 和 BeautifulSoup,进行网页爬取

. 找到目标网页的 URL,并向该 URL 发送 GET 请求

. 获取响应内容,并使用 BeautifulSoup 进行 HTML 解析

img

指令解析:


public class Parser {

public static String parseCommand(String content) {

String[] parts = content.split(" ");

if (parts.length == 1 && (parts[0].equals("count") || parts[0].equals("players"))) {

return parts[0];

} else if (parts.length == 2 && parts[0].equals("team")) {

return "team";

} else if (parts.length == 2 && parts[0].equals("result")) {

return "result";

} else {

return "invalid";

}

}

}

JSON 解析:


public class Parser {

public static String parseJSON(String json, String command) {

if (command.equals("players")) {

return parsePlayers(json);

} else if (command.equals("result")) {

return parseResult(json);

} else {

return "invalid";

}

}

private static String parsePlayers(String json) {

JSONArray players = JSON.parseArray(json);

StringBuilder builder = new StringBuilder();

for (int i = 0; i < players.size(); i++) {

JSONObject player = players.getJSONObject(i);

String id = player.getString("id");

String name = player.getString("name");

String shortName = player.getString("short_name");

String teamId = player.getString("team_id");

builder.append(id).append(" ").append(name).append(" ").append(shortName).append(" ").append(teamId).append("\n");

}

return builder.toString();

}

private static String parseResult(String json) {

JSONObject obj = JSON.parseObject(json);

String date = obj.getString("date");

JSONArray games = obj.getJSONArray("games");

StringBuilder builder = new StringBuilder();

for (int i = 0; i < games.size(); i++) {

JSONObject game = games.getJSONObject(i);

String team1Id = game.getString("team1_id");

String team2Id = game.getString("team2_id");

int team1Score = game.getIntValue("team1_score");

int team2Score = game.getIntValue("team2_score");

builder.append(date).append(" ").append(team1Id).append(" ").append(team2Id).append(" ").append(team1Score).append(" ").append(team2Score).append("\n");

}

return builder.toString();

}

}

4接口设计和实现过程

1.类设计

//主类,包括main函数,传入实参input.txt和outp.txt

public class AOSearch {

public static void main(String[] args) {

Lib lib = new Lib();

List input_content = lib.input_txt_analyse(args[0]);

List output_content = lib.operate(input_content);

lib.output_txt_operate(output_content, args[1]);

}

}

//核心类,包括文件解析和指令解析的函数

public class Lib {

private List playersList;

private List resultList;

public Lib() {

playersList = new ArrayList<>();

resultList = new ArrayList<>();

}

public List operate(List input_content) {

List output_content = new ArrayList<>();

for (String content : input_content) {

String command = content_analyse(content);

switch (command) {

case "players":

String players_content = players_analyse();

output_content.add(players_content);

break;

case "result":

String date = content.split(" ")[1];

String result_content = result_analyse(date);

output_content.add(result_content);

break;

case "count":

int count = playersList.size();

output_content.add(String.valueOf(count));

break;

case "team":

String team_id = content.split(" ")[1];

List names = get_name(team_id, resultList.get(0));

if (names == null) {

output_content.add("Error: team not found!");

} else {

output_content.addAll(names);

}

break;

default:

output_content.add("Error: command not found!");

break;

}

}

return output_content;

}

//以下为之前的函数,无需更改

//功能:打开input.txt,按行读取文件

//参数:输入文件的路径

//返回:存放每行内容的List

public static List input_txt_analyse(String path) {

//...

}

//功能:解析input.txt的行内容

//参数:行内容

//返回:规定的指令类型

public static String content_analyse(String content) {

//...

}

//功能:解析players.json

//返回:存放players内容的字符串

public static String players_analyse() {

//...

}

//功能:解析result.json

//参数:日期

//返回:存放指定日期的比赛结果的字符串

public static String result_analyse(String date) {

//...

}

//功能:返回team_id对应的player名字并判断人数

//参数:team_id和result类

//返回:人名简写

public static List get_name(String team_id, JResult result) {

//...

}

//功能:将指令结果存入output.txt

//参数:存放对应指令的List集合,output.txt文档名字

public static void output_txt_operate(List input_content, String output_name) {

//...

}

}

//选手类,类成员名称与所需要的Json属性一一对应

public class JPlayers {

private String id;

private String name;

private String short_name;

private String team_id;

//...

}

//结果类,类成员名称与所需要的Json属性一一对应

public class JResult {

private String date;

private List games;

//...

}

public class JGame {

private String team1_id;

private String team2_id;

private int team1_score;

private int team2_score;

//...

}

5.心得体会

在开发过程中,文件划分和代码规范性都是非常重要的。一个良好的文件结构和规范的代码可以让程序更易于维护和扩展。因此,在开发前需要先思考如何划分文件,如何组织代码。此外,需要注意代码的规范性,包括变量命名、注释、缩进等方面。这不仅能提高代码的可读性,还能减少出错的概率。

另外,初期开发阶段应该抓住大体,让程序能够跑起来,而不是过于注重细节。当然,这并不意味着可以忽略细节,只是在不确定方向的情况下,应该先实现基本功能,然后再逐步完善。这样可以提高开发效率,并且不容易陷入无限调试的泥潭。

遇到问题时,首先应该自己尝试解决,但如果解决进展不顺,可以考虑与其他同学交流,或者寻求老师的帮助。在交流过程中,可能会得到新的启发,也能够扩展自己的知识面。除此之外,还可以参考一些经典的编程书籍,如《代码大全》、《重构》等,这些书籍可以帮助我们更好地理解编程思想和技巧,提升自己的编程能力。

...全文
685 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文围绕基于Basisformer模型的时间序列锂离子电池SOC(State of Charge,荷电状态)预测展开研究,提出一种融合Transformer架构与基函数映射机制的深度学习方法,旨在提升锂电池SOC估计的精度与鲁棒性。该方法采用PyTorch框架实现,通过构建轻量化Basisformer网络,对电池运行过程中采集的电压、电流、温度等多维时序数据进行高效建模,充分挖掘数据中的长期依赖关系与非线性动态特征,从而实现高精度的端到端SOC预测。文中系统阐述了模型的设计原理、网络结构细节、训练优化策略及实验验证流程,并在公开电池数据集上开展对比实验,结果表明该方法在预测准确性、收敛速度和泛化能力方面均优于传统的LSTM、CNN-LSTM及标准Transformer模型。; 适合人群:具备一定Python编程基础和深度学习理论知识,从事电池管理系统、新能源汽车、储能系统或时间序列预测相关研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于锂电池健康状态监控与剩余电量精确估计,提升电动汽车与储能系统的安全性与能效管理水平;②为深度学习在工业级时序预测任务中的【锂电池SOC估计】【PyTorch】基于Basisformer时间序列锂离子电池SOC预测研究(python代码实现)落地提供可复现的技术方案与优化思路;③作为基于注意力机制的电池状态预测研究的入门与进阶参考资料。; 阅读建议:建议读者结合提供的Python代码实践操作,深入理解Basisformer中基函数编码与注意力机制的融合设计,同时可尝试在不同电池工况数据上迁移验证,进一步掌握模型调参与性能优化技巧。
内容概要:本文系统阐述了基于麻雀搜索算法(SSA)的无人机三维路径规划方法,并提供了完整的Matlab代码实现。该方法采用一种新兴的群体智能优化算法——麻雀搜索算法,针对复杂三维环境(如城市、山地等)中的无人机飞行任务,构建多目标优化模型,综合考虑路径长度、飞行高度变化、威胁规避能力及转弯角度成本等因素,以实现安全、高效、低能耗的最优路径搜索。文中不仅详细介绍了SSA算法的原理及其在路径规划中的具体应用流程,还通过与其他主流智能算法(如灰狼优化GWO、粒子群PSO、鲸鱼优化WOA等)进行对比实验,验证了SSA在收敛速度、寻优精度和鲁棒性方面的优越性能。该资源属于一系列智能优化算法在无人机路径规划中应用的研究成果之一,配套仿真模型与可运行代码,便于科研复现与教学实践。; 适合人群:具备一定Matlab编程基础,熟悉智能优化算法基本原理,从事无人机路径规划、智能控制、群体智能或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 在复杂三维地形或城市环境中规划无人机的安全飞行路径;② 对比分析麻雀搜索算法与其他智能优化算法(如PSO、GWO、WOA等)在路径规划任务中的性能差异;③ 实现兼顾路径最短、能耗最低、安全性最高的多目标无人机航迹优化。; 阅读建议:建议结合提供的Matlab代码进行仿真实验,深入理解目标函数设计、环境建模、约束处理及算法参数调优等关键环节,可进一步拓展至动态障碍物避障、多无人机协同路径规划等更复杂的应用场景。

688

社区成员

发帖
与我相关
我的任务
社区描述
2023年福州大学软件工程实践课程W班的教学社区
软件工程团队开发软件构建 高校 福建省·福州市
社区管理员
  • FZU_SE_teacherW
  • 张书旖
  • 郭渊伟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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