103
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 软件工程实践2022年春-F班 |
|---|---|
| 这个作业要求在哪里 | 软件工程实践第二次作业 |
| 这个作业的目标 | 完成对冬奥会的赛事数据的爬取,并实现一个能够对国家排名及奖牌个数统计的控制台程序。 |
| 其他参考文献 | 无 |
项目地址:https://gitcode.net/m0_57984482/personalproject-java/-/tree/master/
| PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
|---|---|---|---|
| Planning | 计划 | ||
| • Estimate | • 估计这个任务需要多少时间 | 15 | 10 |
| Development | 开发 | ||
| • Analysis | • 需求分析 (包括学习新技术) | 180 | 135 |
| • Design Spec | • 生成设计文档 | 45 | 15 |
| •Design Review | • 设计复审 | 15 | 5 |
| • Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 10 | 5 |
| • Design | • 具体设计 | 60 | 120 |
| • Coding | • 具体编码 | 180 | 300 |
| • Code Review | • 代码复审 | 30 | 20 |
| • Test | • 测试(自我测试,修改代码,提交修改) | 180 | 240 |
| Reporting | 报告 | ||
| • Test Report | • 测试报告 | 30 | 20 |
| • Size Measurement | • 计算工作量 | 30 | 20 |
| • Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 45 | 60 |
| 合计 | 820 | 950 |

public class OlympicSearch {
public static void main(String[] args) {
}
}
public class Lib {
public static String printOlympicTotal () {
}
public static String printOlympicSchedule (String schedule) {
}
public static void ioFile (String inputPath,String outputPath) {
}
}
public class OlympicJsonString {
}
//解析
OlympicJsonString olympicJsonString = new OlympicJsonString();
JSONObject jsonObject = JSONObject.parseObject(olympicJsonString.getTotal());
String data = jsonObject.getString("data");
JSONObject jsonObject1 = JSONObject.parseObject(data);
JSONArray jsonArray = jsonObject1.getJSONArray("medalsList");
//获取并格式化输出
for (int i=0;i<jsonArray.size();i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
String rank = jsonObject2.getString("rank");
String countryid = jsonObject2.getString("countryid");
String gold = jsonObject2.getString("gold");
String silver = jsonObject2.getString("silver");
String bronze = jsonObject2.getString("bronze");
String total = jsonObject2.getString("count");
totalString = totalString +
"rank" + rank + ":" + countryid + "\n" +
"gold:" + gold + "\n" +
"silver:" + silver + "\n" +
"bronze:" + bronze + "\n" +
"total:" + total + "\n" +
"-----";
if (i+1<jsonArray.size()) {
totalString = totalString + "\n";
}
}
try {
File inputFile = new File(inputPath);
File outputFile = new File(outputPath);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(inputFile), "UTF-8"));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8"));
str = bufferedReader.readLine();
while (true) {
str = str.trim();
//total
if (str.equals("total")) {
bufferedWriter.append(printOlympicTotal());
}
//schedule
else if (str.length()<13) {
bufferedWriter.append(wrong);
}
else if (str.indexOf("schedule")!=-1) {
String mid = "";
mid = mid + str.charAt(8);
//符合格式
if (mid.equals(" ")) {
str = str.replaceAll(" ", "");
String date = "";
date = date + str.charAt(8) + str.charAt(9) + str.charAt(10) + str.charAt(11);
if (date.equals("0202") || date.equals("0203") || date.equals("0204") || date.equals("0205") ||
date.equals("0206") || date.equals("0207") || date.equals("0208") || date.equals("0209") ||
date.equals("0210") || date.equals("0211") || date.equals("0212") || date.equals("0213") ||
date.equals("0214") || date.equals("0215") || date.equals("0216") || date.equals("0217") ||
date.equals("0218") || date.equals("0219") || date.equals("0220")) {
bufferedWriter.append(printOlympicSchedule(date));
}
else {
bufferedWriter.append(outDate);
}
}
//不符合格式
else {
bufferedWriter.append(wrong);
}
}
//wrong
else {
bufferedWriter.append(wrong);
}
//循环条件
if ((str = bufferedReader.readLine()) == null) {
break;
}
else {
bufferedWriter.append("\n");
}
}
bufferedReader.close();
bufferedWriter.close();
}
catch (Exception e) {
e.printStackTrace();
}

total
to tal
totol
sche dule 02 16
schedule
schedu
schedule 0222
schedule 0202
schedule 0203
schedule 0204
schedule 0205
schedule 0206
schedule 0207
schedule 0208
schedule 0209
schedule 0210
schedule 0211
schedule 0212
schedule 0213
schedule 0214
schedule 0215
schedule 0216
schedule 0217
schedule 0218
schedule 0219
schedule 0220
1.总榜数据
2.ERROR
3.ERROR
4.ERROR
5.ERROR
6.ERROR
7.N/A
8.0202赛程数据
9.0203赛程数据
10.0204赛程数据
11.0205赛程数据
12.0206赛程数据
13.0207赛程数据
14.0208赛程数据
15.0209赛程数据
16.0210赛程数据
17.0211赛程数据
18.0212赛程数据
19.0213赛程数据
20.0214赛程数据
21.0215赛程数据
22.0216赛程数据
23.0217赛程数据
24.0218赛程数据
25.0219赛程数据
26.0220赛程数据
//符合预期,全部通过
1.总榜数据
2.ERROR
3.ERROR
4.ERROR
5.ERROR
6.ERROR
7.N/A
8.0202赛程数据
9.0203赛程数据
10.0204赛程数据
11.0205赛程数据
12.0206赛程数据
13.0207赛程数据
14.0208赛程数据
15.0209赛程数据
16.0210赛程数据
17.0211赛程数据
18.0212赛程数据
19.0213赛程数据
20.0214赛程数据
21.0215赛程数据
22.0216赛程数据
23.0217赛程数据
24.0218赛程数据
25.0219赛程数据
26.0220赛程数据

通过这次实践,复习巩固了使用Java字符串操作与文件操作,了解了有关爬虫方面的知识,但没有亲手实践。学会了使用了fastJson解析Json,学习使用Git进行版本控制管理并亲手实践,并培养锻炼自己的自学能力。一次个人实践,多方面的实践锻炼,为之后的团队合作编程打下基础。
性能改进最好贴上代码性能分析工具的截图,另外文件读取的异常处理部分还需要改进。