686
社区成员




这个作业属于哪个课程 | 2023软工W班 |
---|---|
这个作业要求在哪里 | 软件工程实践——个人实战 |
这个作业的目标 | 无 |
其他参考文献 | 无 |
地址: 点击这里
PSP阶段 | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|
Planning(计划) | 25 | 25 |
• Estimate(估计这个任务需要多少时间) | 25 | 25 |
Development(开发) | 710 | 900 |
• Analysis(需求分析,包括学习新技术) | 65 | 95 |
• Design Spec(生成设计文档) | 30 | 35 |
• Design Review(设计复审) | 10 | 15 |
• Coding Standard(代码规范,为目前的开发制定合适的规范) | 15 | 20 |
• Design(具体设计) | 60 | 70 |
• Coding(具体编码) | 450 | 540 |
• Code Review(代码复审) | 50 | 75 |
• Test(测试,自我测试,修改代码,提交修改) | 70 | 70 |
. 使用 Python 爬虫框架,如 requests 和 BeautifulSoup,进行网页爬取
. 找到目标网页的 URL,并向该 URL 发送 GET 请求
. 获取响应内容,并使用 BeautifulSoup 进行 HTML 解析
指令解析:
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";
}
}
}
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();
}
}
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;
//...
}
在开发过程中,文件划分和代码规范性都是非常重要的。一个良好的文件结构和规范的代码可以让程序更易于维护和扩展。因此,在开发前需要先思考如何划分文件,如何组织代码。此外,需要注意代码的规范性,包括变量命名、注释、缩进等方面。这不仅能提高代码的可读性,还能减少出错的概率。
另外,初期开发阶段应该抓住大体,让程序能够跑起来,而不是过于注重细节。当然,这并不意味着可以忽略细节,只是在不确定方向的情况下,应该先实现基本功能,然后再逐步完善。这样可以提高开发效率,并且不容易陷入无限调试的泥潭。
遇到问题时,首先应该自己尝试解决,但如果解决进展不顺,可以考虑与其他同学交流,或者寻求老师的帮助。在交流过程中,可能会得到新的启发,也能够扩展自己的知识面。除此之外,还可以参考一些经典的编程书籍,如《代码大全》、《重构》等,这些书籍可以帮助我们更好地理解编程思想和技巧,提升自己的编程能力。