这个作业属于哪个课程 | 软件工程实践2022年春-F班 |
---|---|
这个作业要求在哪里 | 软件工程实践第二次作业——个人实战 |
这个作业的目标 | 完成对赛事数据的爬取,并实现一个能够对国家排名及奖牌个数统计的控制台程序。 |
其他参考文献 | CSDN |
项目地址
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
• Estimate | • 估计这个任务需要多少时间 | 30 | 20 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 300 | 350 |
• Design Spec | • 生成设计文档 | 5 | 5 |
• Design Review | • 设计复审 | 10 | 20 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 15 | 10 |
• Design | • 具体设计 | 20 | 30 |
• Coding | • 具体编码 | 300 | 400 |
• Code Review | • 代码复审 | 60 | 40 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 150 |
Reporting | 报告 | ||
• Test Repor | • 测试报告 | 60 | 80 |
• Size Measurement | • 计算工作量 | 15 | 20 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 5 | 5 |
合计 | 850 | 1130 |
根据提供的网站,审查元素获得相应的数据,并通过转码网站进行转码,获得需要的数据。
利用fastjson.jar的类对数据进行解析,完成对.json文件的解析。
本次程序主要实现——输出奖牌总榜和输出每日赛程这两个基本功能,然后在进行优化。
程序主要进行对数据的处理和对用户指令的处理,程序主要分为两个部分一个是主类OlympicSearch和另外两个接口类schedule和Medal,主类主要进行对用户指令的处理,接口类主要是对奖牌 总榜和每日赛程这两类数据进行处理和输出。
Medal类
int num = 0;
JSONObject jsonObject0 = JSON.parseObject(Total);
String data = jsonObject0.get("data").toString();
JSONObject jsonObject1 = JSONObject.parseObject(data);
num =jsonObject1.getInteger("total");
String medals = jsonObject1.getString("medalsList");
JSONArray medalsList = JSONArray.parseArray(medals);
File f = new File(file);
FileOutputStream fop = new FileOutputStream(f,true);
OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
for (int i = 0; i < num; i++) {
JSONObject jsonObject = JSONObject.parseObject( medalsList.get(i).toString());
String countryid = jsonObject.get("countryid").toString();
int rank = jsonObject.getInteger("rank");
int gold = jsonObject.getInteger("gold");
int silver = jsonObject.getInteger("silver");
int bronze = jsonObject.getInteger("bronze");
int total = jsonObject.getInteger("count");
writer.append("rank"+rank+":"+countryid+"\n");
writer.append("gold:"+gold+"\n");
writer.append("silver:"+silver+"\n");
writer.append("bronze:"+bronze+"\n");
writer.append("total:"+total+"\n");
writer.append("-----"+"\n");
}
writer.close();
fop.close();
}
schedule类与medal类相似
JSONObject jsonObject0 = JSON.parseObject(text);
jsonObject0 = (JSONObject) jsonObject0.get("data");
int total = jsonObject0.getInteger("total");
JSONArray matchList = jsonObject0.getJSONArray("matchList");
File f = new File(file);
FileOutputStream fop = new FileOutputStream(f,true);
OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
for (int i = 0; i < total; i++) {
JSONObject jsonObject = JSONObject.parseObject( matchList.get(i).toString());
String sport = jsonObject.getString("itemcodename");
String time = jsonObject.getString("startdatecn");
String name = jsonObject.getString("title");
String venue = jsonObject.getString("venuename");
writer.append("time:"+time.substring(11,16)+"\n");
writer.append("sport:"+sport+"\n");
writer.append("name:"+name);
if ((jsonObject.get("homename") != null) && (!jsonObject.getString("homename").equals(""))) {
writer.append(" "+jsonObject.getString("homename")+"VS"+jsonObject.getString("awayname"));
}
writer.append("\n");
writer.append("venue:"+venue+"\n");
writer.append("-----\n");
}
writer.close();
OlympicSearch类
File f = new File(file);
FileOutputStream fop = new FileOutputStream(f,true);
OutputStreamWriter writer = new OutputStreamWriter(fop, StandardCharsets.UTF_8);
String[] date = {"0202","0203", "0204","0205","0206","0207","0208","0209","0210","0211","0212","0213","0214","0215","0216","0217","0218","0219","0220"};
if (str.equals("total")) {
Medal.getMedal(file);
}
else if (str.matches("schedule (.*)")) {
if (str.length()!=13) {
writer.append("N/A\n"+"-----\n");
writer.close();
}//判后面空白的情况
else if (useLoop(date,str.substring(9,13))) {
schedule.getSchedule(file,str.substring(9,13));
}
else {
writer.append("N/A\n"+"-----\n");
writer.close();
}
}
else if (str.equals("")) {
}
else {
writer.append("Error\n"+"-----\n");
writer.close();
}
优化了缓存,将已经输入过的文件存起来,减少了多次重复输入的时间。
参数错误
if (args != null && args.length == 2) {
input = args[0];
output = args[1];
}
else {
System.out.println("参数个数错误");
return;
}
这次作业其实完成得挺艰难的,自己对整个项目的把握是很差的,从一开始的解题思路和实际编码都是问题重重,还是感谢同学和舍友的帮助,在我没有思路时,可以帮我找到正确的思路。整个作业完成下来,让我对完成项目的整体规划有了长足进步。最后,还是希望在未来自己的编程能力可以有所增强。