688
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 2023年福大-软件工程实践-W班 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践寒假作业 |
| 这个作业的目标 | 完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序 |
| 其他参考文献 | 源代码管理 单元测试和回归测试《码出高效_阿里巴巴Java开发手册》 |
| PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | 10 | 10 |
| • Estimate | • 估计这个任务需要多少时间 | 20 | 20 |
| Development | 开发 | 300 | 300 |
| • Analysis | • 需求分析 (包括学习新技术) | 480 | 470 |
| • Design Spec | • 生成设计文档 | 10 | 10 |
| • Design Review | • 设计复审 | 10 | 15 |
| Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 10 | 30 |
| • Design | • 具体设计 | 10 | 10 |
| • Coding | • 具体编码 | 360 | 480 |
| • Code Review | • 代码复审 | 40 | 20 |
| • Test | • 测试(自我测试,修改代码,提交修改 | 60 | 30 |
| Reporting | 报告 | 30 | 60 |
| • Test Repor | • 测试报告 | 30 | 36 |
| • Size Measurement | • 计算工作量 | 20 | 20 |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 20 | 20 |
| 合计 | 1410 | 1531 |
1.使用BufferedReader读取单行代码
2.在去除首尾及中间的空格后,使用equals函数判断是否等于players
3.使用startsWith函数判断result指令
4.利用replaceFirst函数删除result指令得到时间
5.进行时间判断
共有两个类:AOSearch,Lib
其中Lib定义了功能函数outputPlayers和outputDaily以及一个用来获取json文件中json数据的类:getJsonStr
在main函数内完成输入和判断后调用功能函数内提取数据并输出
static void outputPlayers(BufferedWriter info) throws IOException {
//数据文件路径
String jsonPath ="src/data/players.json";
String jsonStr = getJsonStr(jsonPath);
JSONObject jscs = JSONObject.parseObject(jsonStr);
JSONArray players= jscs.getJSONArray("players");
for(int i=0;i<players.size();i++) {
//输出全名
String fullName ="full_name:" + (String) players.getJSONObject(i).get("full_name") + "\n";
info.write(fullName);
//输出性别
String gender =(String) players.getJSONObject(i).get("gender") + "\n";
if (gender.equals("M")) {
info.write("gender:male\n");
}
else {
info.write("gender:female\n");
}
//输出国家
String nationality ="nationality:"
+ (String)players.getJSONObject(i).getJSONObject("nationality").get("name")+"\n";
info.write(nationality);
info.write("-----\n");
}
}
static void outputDaily(String time, BufferedWriter info) throws IOException {
//数据文件路径
String jsonPath ="src/data/schedule/"+time+".json";
String jsonStr = "";
jsonStr = getJsonStr(jsonPath);
JSONObject jscs = JSONObject.parseObject(jsonStr);
JSONArray matches= jscs.getJSONArray("matches");
for(int i=0;i<matches.size();i++) {
//输出开始时间
String start ="time:" + (String) matches.getJSONObject(i).get("actual_start_time") + "\n";
info.write(start);
JSONArray teams = matches.getJSONObject(i).getJSONArray("teams");
//当天未赛
if (time.equals("0124")&&i == 14) {
continue;
}
boolean judege = (boolean) teams.getJSONObject(0).getJSONArray("score").getJSONObject(0).get("winner");
String teamId1 = "";
int number = 0;
if (judege==true) {
teamId1 = (String)teams.getJSONObject(0).get("team_id");
}else {
teamId1 = (String)teams.getJSONObject(1).get("team_id");
}
JSONArray teamMember = jscs.getJSONArray("teams");
for(;number<teamMember.size();) {
String teamId2 = (String)teamMember.getJSONObject(number).get("uuid");
if (teamId1.equals(teamId2))
break;
number++;
}
//输出胜利者winner 格式如'menber1 & menber2
info.write("winner:");
JSONArray playerIds = teamMember.getJSONObject(number).getJSONArray("players");
for (int k=0;k<playerIds.size();k++) {
String playerId1 = (String)playerIds.get(k);
JSONArray players = jscs.getJSONArray("players");
if (k>0)
info.write(" &");
for (int l=0;l<players.size();l++) {
String playerId2 = (String)players.getJSONObject(l).get("uuid");
if (playerId1.equals(playerId2)) {
String shortName = (String)players.getJSONObject(l).get("short_name");
info.write(shortName);
}
}
}
info.write("\n");
//输出score比赛中每一轮双方的比分,每一轮的格式如'score1 | score2'
info.write("score:");
JSONArray score = teams.getJSONObject(0).getJSONArray("score");
for (int m=0;m<score.size();m++) {
if (m>0)
info.write("|");
info.write((String)teams.getJSONObject(0).getJSONArray("score").getJSONObject(m).get("game"));
info.write(":");
info.write((String)teams.getJSONObject(1).getJSONArray("score").getJSONObject(m).get("game"));
}
info.write("\n");
info.write("-----\n");
}
}
通过保存uuid和对应player或者teams或者match相关的信息来加速查找

通过这次作业让我了解和掌握了许多以往不懂的知识,比如从网页获取Json数据、fastjson解析Json数据、进行程序测试的方法。但也暴露了许多问题,例如基础不扎实导致前期学习和编程浪费了大量时间,以至于后面测试和性能优化草草结束。
博客的编写虽然枯燥繁琐,但是博客分在评分中占据了一半,还希望更加重视