第二次结对作业:班级成绩表

作业要求 作业要求链接
作业目标 通过网络爬取网页数据并输出成txt格式
作业源代码 码云仓库地址
队员1 211806340
队员2 211808332

结对过程

  • 结对感受

谢菲菲:对于我们编程不是很好的两个人来说,这次结对作业相比上次来说难了很多,但是还是勉强完成了。希望能继续和石云凤同学合作!
石云凤:谢菲菲同学有非常强的抗压能力,即使是在放假期间也加班把任务完成了,虽然道路非常曲折,但和谢菲菲同学合作的过程还是非常愉快的!

  • 结对照片

代码简介

代码行数 239行
需求分析时间 1小时
编码时间 6小时

需求分析

这次的作业主要是对上一次的作业进行优化:

  • 将从本地导入链接改成从网络。

使用Properties的getProperty()方法从配置文件中导入url和cookie。
用Jsoup把用手动设置的cookie登录的url解析成document,并从中提取分数。
Document document = Jsoup.connect(URL).header("Cookie", COOKIE).get();

  • 按分数进行从高到低排序。

这一步新建类Students对分数进行比较排序。

方便建立新的类型Students设置id,姓名,分数并使用pojo类。
添加compare方法对Students中的分数进行排序。

public int compare(Students o1, Students o2) {
		int sort1 = Integer.parseInt(o1.getId()) - Integer.parseInt(o2.getId());
		int sort2 = (int) (o2.getExp() - o1.getExp());
		return sort2==0?sort1:sort2;
	}
  • 将排序、平均分、最高/低分按指定格式输出成txt文件。
		// 确定输出文件的目的地
		File file = new File("score.txt");
		// 创建指向文件的打印输出流
		PrintWriter printWriter = new PrintWriter(new FileOutputStream(file), true);
		// 输出数据
		double ave = 0.0;
		for (int j = 0; j < newStudentList.size(); j++) {
			ave += newStudentList.get(j).getExp();
		}
		ave = ave / newStudentList.size();
		printWriter.println("最高经验值" + newStudentList.get(0).getExp() + ",最低经验值"
				+ newStudentList.get(newStudentList.size() - 1).getExp() + ",平均经验值" + ave);
		for (int i = 0; i < newStudentList.size(); i++) {
			printWriter.println(newStudentList.get(i).toString());
		}
		// 关闭
		printWriter.close();
	}

学习过程

  • cookie的使用

主要学习了cookie的属性和使用,cookie其实是web里一种客户端存储数据的方式(貌似是客户端缓存的一种),根据云班课资源里的链接找到了云班课的cookie。
再通过手动设置cookie获得url里的信息。

  • 文件的打印输出流

是上个学期IO流的内容,但是平时用的很少所以已经快忘了,参考了上个学期的班课中Java高级视频全集的资源里的IO流之字符流的第26个视频

  • commit过程

  • 运行效果

  • 其他

数据的提取虽然是之前作业的内容,但是我们写的不是很熟练,所以这方面主要参考了陈洁同学的代码。
在程序运行时,一直没有出现txt文档,也没有报错信息,后来又突然出现了,原因不明。

参考资料

陈洁同学的代码仓库
jsoup中文使用手册
cookie的手动设置和模拟登录

posted @ 2020-10-04 18:11  艾卡西亚  阅读(40)  评论(0编辑  收藏