688
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | <2023年福大-软件工程实践-W班> |
|---|---|
| 这个作业要求在哪里 | <软件工程实践第二次作业——个人实战> |
| 这个作业的目标 | <完成对澳网选手和比赛数据的收集,并实现一个能够对赛事数据进行统计并输出的控制台程序> |
| 其他参考文献 | 《构建之法》 |
| PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 25 | 20 |
| • Estimate | • 估计这个任务需要多少时间 | 25 | 15 |
| Development | 开发 | 1120 | 1230 |
| • Analysis | • 需求分析 (包括学习新技术) | 300 | 270 |
| • Design Spec | • 生成设计文档 | 90 | 120 |
| • Design Review | • 设计复审 | 60 | 60 |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 25 | 45 |
| • Design | • 具体设计 | 95 | 1400 |
| • Coding | • 具体编码 | 350 | 360 |
| • Code Review | • 代码复审 | 90 | 120 |
| • Test | • 测试(自我测试,修改代码,提交修改) | 180 | 180 |
| Reporting | 报告 | 200 | 160 |
| • Test Repor | • 测试报告 | 90 | 120 |
| • Size Measurement | • 计算工作量 | 35 | 45 |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 60 | 45 |
| 合计 | 1420 | 1675 |
players数据和0116到0122的数据已提供,其余比赛日的比赛数据则从澳网官网中获取
进入澳网官网页面,搜索results,按F12开启浏览器开发者模式,选择网络项,搜索results,找到对应的json文件并下载到本地。

我采用的是引入com.alibaba.fastjson包对JSON文件进行解析。在项目中引入com.alibaba.fastjson.JSON,com.alibaba.fastjson.JSONArray,
com.alibaba.fastjson.JSONObject三个包,用来解析相对应的JSON对象
players.json文件的处理:先用JSONObject获取存储在src/data文件目录下的player.json文件,再用JSONArray存取相应的players节点,依次遍历输出,并形成需要输出的字符串形式
results.json文件的处理:根据input.txt中result后所跟的参数,生成JSON文件的路径,并从中提取相应的matches比赛信息,判断是否存在弃赛的情况,再从中取出actual_start_time,并作为时间输出;而获取胜利者则先要找到胜利队伍的ID,再去寻找比赛胜利者的ID;获取比分要先获取两队每轮的比分,再按照譬如:score:6:4 | 6:3的格式加入字符串;最后将比赛实际开始时间,比赛实际开始时间以及每一轮双方的比分拼接在一起成为一个字符串
信息
我的程序分为AOSearch类和Lib类
AOSearch类只包含一个主函数,用来判断输入指令的参数个数是否正确,并构造一个Lib类对象
Lib类中包含了主要的接口和函数
public boolean Judge_Date(String str)
{
if (str.charAt(0) == 'Q' && str.length() == 2)
{
if (str.charAt(1) == '1' || str.charAt(1) == '2' || str.charAt(1) == '3' || str.charAt(1) == '4' )
return true;
else
return false;
}
else if (str.charAt(0) == '0' && Integer.valueOf(str).intValue() >= 116&&Integer.valueOf(str).intValue() <= 129 && str.length() == 4)
return true;
return false;
}
public String Read_Json(String json) throws IOException
{
String js = " ";
try
{
BufferedReader br = new BufferedReader(new FileReader(new File(json)));
StringBuilder sb = new StringBuilder();
while (true)
{
int ch = br.read();
if (ch != -1)
{
sb.append((char) ch);
}
else
break;
}
js = sb.toString();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
return js;
}
public String Get_Result(String str)
{
String result = "";
try
{
JSONObject jo = JSON.parseObject(Read_Json("src/data/" + str + ".json"));
JSONArray ja = jo.getJSONArray("matches");
for (int i = 0; i < ja.size(); i++)
{
JSONObject match = ja.getJSONObject(i);
JSONObject match_status = match.getJSONObject("match_status");
if (match_status.getString("abbr").equals("W/O"))
{
result += "W/O\n-----\n";
continue;
}
result += "time:";
String time = match.getString("actual_start_time");
result += time;
JSONArray teams = ja.getJSONObject(i).getJSONArray("teams");
JSONObject team_a = teams.getJSONObject(0);
JSONObject team_b = teams.getJSONObject(1);
String winner_id = " ";
if (team_a.get("status") != null)
winner_id = team_a.getString("team_id");
else
winner_id = team_b.getString("team_id");
result += "\nwinner:";
String winner = " ";
JSONArray team = jo.getJSONArray("teams");
JSONArray players = jo.getJSONArray("players");
for (int k = 0 ; k < team.size() ; k++)
{
String team_id = team.getJSONObject(k).getString("uuid");
if (team_id.equals(winner_id))
{
team.getJSONObject(k).getJSONArray("players");
for (int l = 0; l < team.getJSONObject(k).getJSONArray("players").size(); l++)
{
String id = team.getJSONObject(k).getJSONArray("players").getString(l);
for (int m = 0; m < players.size(); m++)
{
JSONObject player = (JSONObject) players.get(m);
String uuid = (String) player.get("uuid");
if (uuid.equals(id))
{
winner = player.getString("short_name");
result += winner;
}
}
}
}
}
result += "\nscore:";
JSONArray score_a = team_a.getJSONArray("score");
JSONArray score_b = team_b.getJSONArray("score");
for (int j = 0; j < score_a.size()-1 ; j++)
{
result += score_a.getJSONObject(j).getString("game");
result += ":";
result += score_b.getJSONObject(j).getString("game");
result += "|";
}
result += score_a.getJSONObject(score_a.size()-1).getString("game");
result += ":";
result += score_b.getJSONObject(score_a.size()-1).getString("game");
result += "\n-----\n";
}
}
catch (IOException e)
{
e.printStackTrace();
}
return result;
}

我对包含可能出现I/O读取异常的函数都添加了try和catch,对抛出的异常进行提示输出
主函数中我添加了一个用来判断输入指令的参数个数是否正确的异常处理
对于input.txt中无法输出的指令进行相对应的错误输出