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

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.心得体会

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

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

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

...全文
262 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

686

社区成员

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

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