结对第二次作业

结对第二次作业

这个作业属于哪个课程 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和数据库查找增加了掌握度,学习了搭建到服务器上。

评价队友:

宋:王同学和我一样,做事情比较细心,我们都不会计较谁做的多谁做得少,因为做的多肯定收获多,所以我们都尽可能的多做点,合作很舒服。

王:宋同学认真负责,积极学习前端的技术,有问题积极和我交流,合作的很愉快。

posted @ 2021-03-31 23:00  宋大帅  阅读(191)  评论(9编辑  收藏  举报