结对第二次作业
结对第二次作业
这个作业属于哪个课程 | 2021春软件工程实践S班 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业目标 | 实现论文增删改查,网络爬虫 |
其他参考文件 | 《构建之法》 |
目录
作业描述
Github仓库地址
PSP表格:
PSP2.1 | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | ||
• Estimate | • 估计这个任务需要多少时间 | 30 | 60 |
Development | 开发 | ||
• Analysis | • 需求分析 (包括学习新技术) | 300 | 240 |
• Design Spec | • 生成设计文档 | 30 | 10 |
• Design Review | • 设计复审 | 30 | 10 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 30 | 20 |
• Design | • 具体设计 | 120 | 60 |
• Coding | • 具体编码 | 1200 | 1400 |
• Code Review | • 代码复审 | 60 | 20 |
• Test | • 测试(自我测试,修改代码,提交修改) | 30 | 60 |
Reporting | 报告 | ||
• Test Report | • 测试报告 | 30 | 10 |
• Size Measurement | • 计算工作量 | 20 | 20 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 1910 | 1940 |
云服务器的访问链接:http://www.wuzinian.top:88/
展示成品:
数据库表结构:
结对讨论过程:
1.刚开始看到题目的要求,还是比较迷茫的,因为我们都没有前端设计的经验(准确的说是从来没做过前端),部署到云服务器也是第一次听说。但是心里也没有很慌,因为时间还比较久,可以边学边做。
2.然后就是分工问题,因为分工明确的话可以快速确定学习方向,我(宋)同学决定试试前端设计,王同学决定设计后端。
3.后端实现使用PHP,因为宋同学没选JAVAEE,所以用我们都会的PHP。
4.前端一开始因为原型设计时设计的比较简单,想自己写HTML,CSS,JAVASCRIPT这些来实现界面,发现自己水平还是不够,设计的不好看,然后去看BootStrap的官方文档。边学边做。
功能结构图:
代码说明:
public static function getPapers(string $title = null,
string $keyword,
string $year = null, string $forum = null,
string $id = null) : array
{
$sqlSelect = "select paper.id, paper.title, paper.abstract, paper.link, paper.year, paper.forum ";
$sqlTables = "from paper ";
if ($keyword != null)
$sqlTables .= ", keyword_paper, keyword ";
$sqlWhere = "where 1 = 1 ";
if ($id != null)
$sqlWhere .= "and paper.id = $id ";
if ($title != null)
$sqlWhere .= "and title like '%$title%' ";
if ($year != null)
$sqlWhere .= "and year = $year ";
if ($forum != null)
$sqlWhere .= "and forum = '$forum' ";
if ($keyword != null)
{
$sqlWhere .= "and paper.id = keyword_paper.paperid and keyword_paper.keyid = keyword.id and keyword.keyword = '$keyword' ";
}
$sqlCount = "select count(*) as count ".$sqlTables.$sqlWhere.";";
$sqlSearch = $sqlSelect.$sqlTables.$sqlWhere."limit 1000".";";
$result = array();
$con = DbUtil::getConnection();
if ($con->multi_query($sqlCount.$sqlSearch))
{
$rs = $con->store_result();
$result['total'] = $rs->fetch_row()[0];
$rs->free();
$con->next_result();
$rs = $con->store_result();
$papers = array();
while ($row = $rs->fetch_assoc())
{
$paper = Paper::InstancePaperFromRow($row);
$paper->keywords = KeywordDao::getKeywordsByPaperID($paper->id);
array_push($papers, $paper);
}
$result['papers'] = $papers;
}
return $result;
}
根据标题,关键词,年份,论坛综合搜索。
static public function getTop10Keywords()
{
$sql = "select * from keyword order by count desc limit 10";
$con = DbUtil::getConnection();
$rs = $con->query($sql);
$popularWords = array();
while ($row = $rs->fetch_assoc())
{
$keyword = $row['keyword'];
$count = intval($row['count']);
$popularWords[$keyword] = $count;
}
return $popularWords;
}
统计出现次数前十的关键词。
public static function renderWords($popularWords)
{
echo '<ul class = "cloud">';
$i = 10;
foreach ($popularWords as $word => $count)
{
echo '<li><a data-weight="'.$i.'" href = "/?keyword='.urlencode($word).'">'.$word.'</a></li>';
$i--;
}
echo '</ul>';
}
ul.cloud {
list-style: none;
padding-left: 0;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
line-height: 2.5em;
}
ul.cloud a {
color: #a33;
display: block;
font-size: 1.5em;
padding: 0.125rem 0.25rem;
text-decoration: none;
position: relative;
--size: 4;
font-size: calc(var(--size) * 0.25rem + 0.5rem);
color: var(--color);
}
ul.cloud a[data-weight="1"] { --size: 1; }
ul.cloud a[data-weight="2"] { --size: 2; }
ul.cloud a[data-weight="3"] { --size: 3; }
ul.cloud a[data-weight="4"] { --size: 4; }
ul.cloud a[data-weight="5"] { --size: 5; }
ul.cloud a[data-weight="6"] { --size: 6; }
ul.cloud a[data-weight="7"] { --size: 7; }
ul.cloud a[data-weight="8"] { --size: 8; }
ul.cloud a[data-weight="9"] { --size: 9; }
ul.cloud a[data-weight="10"] { --size: 10; }
ul.cloud li:nth-child(2n + 1) a { --color: #181; }
ul.cloud li:nth-child(3n + 1) a { --color: #33a; }
ul.cloud li:nth-child(4n + 1) a { --color: #c38; }
ul.cloud a:hover {
outline: 1px dashed;
}
ul.cloud a::before {
content: "";
position: absolute;
top: 0;
left: 50%;
width: 0;
height: 100%;
background: var(--color);
transform: translate(-50%, 0);
opacity: 0.15;
transition: width 0.25s;
}
ul.cloud a:focus::before,
ul.cloud a:hover::before {
width: 100%;;
}
将排前十的关键词显示为标签云。
static public function getTrendOfPopularWords()
{
$forums = ['ECCV', 'CVPR', 'ICCV'];
$keywords = array();
foreach ($forums as $forum)
{
$sql = 'select keyword from paper, keyword_paper, keyword
where paper.id = keyword_paper.paperid and keyword.id = keyword_paper.keyid
and forum = "'.$forum.'"
group by keyword
order by count(keyword) desc limit 1;';
$con = DbUtil::getConnection();
$result = $con->query($sql);
array_push($keywords, $result->fetch_array()[0]);
}
$statistics = array();
for ($i = 0; $i < sizeof($keywords); $i++)
{
$sql = "select count(year) as count, year as num from keyword, keyword_paper, paper
where keyword.id = keyword_paper.keyid and keyword = '".$keywords[$i]."' and paper.id = keyword_paper.paperid and forum = '".$forums[$i]."'
group by year;";
$result = $con->query($sql);
$yearCount = array();
while ($row = $result->fetch_array())
{
$year = $row[1];
$count = intval($row[0]);
$yearCount[$year] = $count;
}
$stat = ['forum' => $forums[$i], 'keyword' => $keywords[$i], 'statistics' => $yearCount];
array_push($statistics, $stat);
}
return $statistics;
}
统计每个定会中出现最多的关键词,并统计这些关键词每年出现的次数。
series : [
<?php
foreach ($result as $forum)
{
echo "{";
echo "name: '".$forum['forum']."--".$forum['keyword']."',";
echo "type: 'line',";
echo "data:[";
for ($i = 2016; $i < 2020; $i++)
if (array_key_exists(strval($i), $forum['statistics']))
echo $forum['statistics'][strval($i)].",";
else
echo "0,";
echo "]";
echo "},";
}
?>
将结果用echart显示出来。
function ondelete(ob){
var child = ob.parentElement.parentElement.parentElement;
var parent = child.parentElement;
parent.removeChild(child);
}
搜索界面上的删除
心路历程和收获:
只要思想不滑坡,办法总比困难多。一开始还是比较困难的,因为很多东西都不会,但是我们都对学习新事物很开心。
宋:了解了前端的各种框架,学习了bootstrap框架,学习与后端的交互,学过PHP,但是是第一次用PHP写程序,对PHP更熟悉了。
王:对PHP和数据库查找增加了掌握度,学习了搭建到服务器上。
评价队友:
宋:王同学和我一样,做事情比较细心,我们都不会计较谁做的多谁做得少,因为做的多肯定收获多,所以我们都尽可能的多做点,合作很舒服。
王:宋同学认真负责,积极学习前端的技术,有问题积极和我交流,合作的很愉快。