第一次个人编程作业:我的分数我做主
博客班级 | https://edu.cnblogs.com/campus/fzzcxy/2018SE2?page=3 |
---|---|
作业要求 | https://edu.cnblogs.com/campus/fzzcxy/2018SE2/homework/11169 |
作业目标 | 熟悉git的初步使用,养成做随笔的习惯,以及分享自己写的代码 |
作业源代码 | https://gitee.com/chenbartender/personal/tree/master/ |
学号 | 211806306 |
一.完成记录
代码行数:84行 需求分析时间:1小时 编码时间:3小时
二.分析
1.需求分析
把云班课上的得分提取出来,按照算法将得分换算成总成绩
2.思路分析
分为三个大块
- 把云班课网页保存成html文件,再解析文件把经验提取出来。
- 把提取出来的成绩按照要求进行计算。
- 把Java文件转化成exe文件,并上传git仓库分享。
优势:使要求变得清晰,分块完成提高效率
三.编码过程
- 首先保存云班课网页,保存后思考怎样将代码解析出来,通过csdn查询,可用Jsoup包把HTML文件解析成doument从而进一步对网页解析
File htmlsmall = new File("small.htm");
File htmlall = new File("all.htm");
Document small = Jsoup.parse(htmlsmall, "UTF-8");
Document all = Jsoup.parse(htmlall, "UTF-8");
2.第二步,对网页源代码的观察,发现有关题目的链接,类名都为interaction-row,因此我用类选择器将所有类名带interaction-row的提取出来,生成一个Element数组Elements
Elements smallelem = small.getElementsByClass("interaction-row");
Elements allelem = all.getElementsByClass("interaction-row");
3.第三步,对页面进一步观察,发现有关分数的代码都为,第二步提取的集合的子类,以此用方法.child()来确定题目名称显示的代码,以及有关分数显示的代码。
String mz = smallzhang.child(1).child(0).text();
4.第四步,通过对题目名称代码的定位成功,我将题目名称转化成String字符串,用indexOf()判断字符串中是否含有指定字符串,如判断是否含有“编程题”字符串,从而将题目分为5种题目
if (mz.indexOf("编程题")>=0) {}
5.第五部,由于得到分数的题目,会显示“已参与”字样,因此我将“已参与”作为筛选条件,成功的将得到分的分数字符串筛选出来,并通过字符串的相关函数,把字符串中的分数数字提取出来,并转换成double类型,进行同类型题目的相加
String canyu = smallzhang.child(1).child(2).child(0).child(7).text().replaceAll("经验", "").replaceAll("互评","").replaceAll(" ", "");
int cy = Integer.parseInt(canyu);
String huping = smallzhang.child(1).child(2).child(0).child(9).text().replaceAll("经验", "").replaceAll("互评","").replaceAll(" ", "");
int hp = Integer.parseInt(huping);
FS+=cy+hp;
6.第六步,由于粗心大意,忘记考虑若分数中有互评价的情况,因此重新编写提取分数的相关代码
7.第七步,其他题目提取分数方式如上,不再赘述
8.第八步,取得5种题型的总分,将总分按照要求进行计算,并且与配置的分数进行相除得出总分。
9.第九步,配置应得总分文件,并且按照要求换算
完善:通过观察,发现各种题型提取分数的核心代码几乎相同,因此我将提取方式写成行数,分别调用行数来获取题型的到的分数。
public Double Smallfenshu(Elements smallelem,String leixing) {
Double FS=0.0;
for (int i = 0; i < smallelem.size(); i++) {
Element smallzhang = smallelem.get(i);
String mz = smallzhang.child(1).child(0).text();
String fs = smallzhang.child(1).child(2).child(0).text();
if (mz.indexOf(leixing)>=0) {
if (fs.indexOf("已参与")>=0) {
if (fs.indexOf("互评")>=0) {
String canyu = smallzhang.child(1).child(2).child(0).child(7).text().replaceAll("经验", "").replaceAll("互评","").replaceAll(" ", "");
int cy = Integer.parseInt(canyu);
String huping = smallzhang.child(1).child(2).child(0).child(9).text().replaceAll("经验", "").replaceAll("互评","").replaceAll(" ", "");
int hp = Integer.parseInt(huping);
FS+=cy+hp;
}
else {
String canyu = smallzhang.child(1).child(2).child(0).child(7).text().replaceAll("经验", "").replaceAll("互评","").replaceAll(" ", "");
int cy = Integer.parseInt(canyu);
FS+=cy;
}
}
}
}
return FS;
}
四.查阅文献
- https://blog.csdn.net/zhanglei500038/article/details/74858395?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160001263419725264608583%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=160001263419725264608583&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-1-74858395.first_rank_ecpm_v3_pc_rank_v2&utm_term=Java%E5%A6%82%E4%BD%95%E8%A7%A3%E6%9E%90html&spm=1018.2118.3001.4187
- https://jsoup.org/
- https://jsoup.org/apidocs/