结对第二次作业——编程实现

222200103_王智键 2024-09-30 23:08:53

目录

  • 基本内容
  • 部署服务器IP
  • 华为云仓库
  • PSP表格
  • 设计实现过程
  • 功能结构图
  • 奖牌榜
  • 每日赛程
  • 对阵图
  • 首页
  • 具体代码说明
  • 读取数据并创建标签(以奖牌榜为例)
  • 日历功能
  • 首页轮播
  • 成品展示
  • 奖牌榜
  • 每日赛程
  • 跳转详细赛况
  • 日历
  • 切换日期
  • 详细赛况
  • 切换赛况
  • 对阵表
  • 高亮
  • 首页
  • 轮播
  • 跳转
  • 结对讨论过程描述
  • 确定技术栈
  • 统一目录结构
  • 复用对方写好的内容
  • 交流问题
  • 讨论git使用方法
  • 心路历程和收获
  • 评价结对队友

基本内容

软件工程https://bbs.csdn.net/forums/FZU_university?typeId=7757852
作业要求https://bbs.csdn.net/topics/619333588
结对学号<222200103 222100301>
这个作业的目标<fork仓库,通过git协作,制定代码规范,编程实现,基础功能实现,附加功能实现,部署,发布release版本,发起pull request,撰写博客>
git仓库链接<git@codehub.devcloud.cn-north-4.huaweicloud.com:28da75076c274e67a0c3a46ef3c20afd/222200103_222100301.git>
代码规范链接https://developer.aliyun.com/article/850913

部署服务器IP

139.159.247.210

华为云仓库

222200103_222100301

PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划105
• Estimate估计这个任务需要多少时间105
Development开发11951435
• Analysis需求分析(包括学习新技术)300375
• Design Spec生成设计文档6030
• Design Review设计复审3010
• Discuss讨论90130
• Design界面设计3060
• Realize具体编码实现650750
• Size Measurement计算工作量55
• Postmortem & Process Improvement Plan事后总结,并提出过程改进计划3075
合计12051440

设计实现过程

功能结构图

img

奖牌榜

HTML上主要分为4个大的模块,一个是顶部的导航栏,一个是顶栏+标题,一个是主要的内容,一个是底栏。
主要的奖牌排名使用的是table标签,每条排名信息是一行,而具体的排名、国家、金银铜总奖牌数是一列,这样布局非常规整,也比较符合逻辑。
CSS样式上主要是仿照参考网站编写。
因为是使用纯前端开发,所以数据的读取,以及table里组件的创建,都通过JS进行(具体详见代码展示)。

每日赛程

每日赛程的实现比较复杂,有以下几个主要的功能点:

  1. 数据的读取和展示
  2. 日历的显示
  3. 切换日期的功能

其中数据的读取展示依旧是使用类似的方法解析JSON文件,并在JS中创建。
而日历是纯HTML+CSS实现的,具体的实现方式是:日历分为日历按钮和日历体两个部分,分别分装在两个div中。日历按钮可见,而日历体初始设置为不可见,当鼠标停在日历按钮上时,利用伪类选择器显示日历体。同时添加了一些简单的动画。
代码见代码展示。

对阵图

对阵图的设计时,最外层容器主要采用grid布局。其中连接线是通过设计边框样式实现的。

首页

首页有轮播图,每隔3秒自动播放。还能够点击按钮进行左右轮播。

具体代码说明

读取数据并创建标签(以奖牌榜为例)

数据在medalsTable中,使用init函数,创建tbody中的标签。
大部分的数据可以直接读取到,国旗通过国家名拼接成相对路径显示。

function init() {
    tbody.innerHTML = medalsTable.map(function (value, index) {
        return `
     <tr>
              <td><b>${value.rank}</b></td>
              <td><img width="40px" src="../static/pictures/flags/${value.organisation}.png"> ${value.longDescription}</td>
              <td>${value.medalsNumber[getTotal(value.medalsNumber)].gold}</td>
              <td>${value.medalsNumber[getTotal(value.medalsNumber)].silver}</td>
              <td>${value.medalsNumber[getTotal(value.medalsNumber)].bronze}</td>
              <td><b>${value.medalsNumber[getTotal(value.medalsNumber)].total}</b></td>
            </tr>
            `
    }).join(' ')
}

奖牌是以数组形式(medalsNumber)存储在JSON中,而离谱的是total的位置居然是不固定的。所以写了一个简单的函数来帮助定位到total所在的数组下标。

function getTotal(medalsNumber) {
    for (let i = 0; i < medalsNumber.length; i++) {
        if (medalsNumber[i].type === "Total")
            return i;
    }
    return -1;
}

日历功能

日历体分为两个部分,一个是顶栏,一个是日期的部分。这个日历的功能其实比较简单,不需要切换年月之类,所以只是通过表格创建了一个静态的日历。
表格的每个单元格都使用a标签,这样就可以实现点击时跳转到该页面的对应位置。

<div class="calendar-body">
        <div class="shell">
          <header>
            <div><img src="../static/pictures/calendar.svg" width="50px"></div>
          </header>
          <table class="calendar2">
            <thead>
            <tr>
              <td></td>
              <td></td>
              <td></td>
              <td></td>
              <td></td>
              <td></td>
              <td></td>
            </tr>
            </thead>
            <tbody>
            <tr>
              <td> </td>
              <td> </td>
              <td><a href="#july24">24<br>7月</a></td>
              <td><a href="#july25">25<br>7月</a> </td>
              <td><a href="#july26">26<br>7月</a> </td>
              <td><a href="#july27">27<br>7月</a> </td>
              <td><a href="#july28">28<br>7月</a> </td>
            </tr>
            <tr>
              <td><a href="#july29">29<br>7月</a> </td>
              <td><a href="#july30">30<br>7月</a></td>
              <td><a href="#july31">31<br>7月</a></td>
              <td><a href="#aug1">1<br>8月</a></td>
              <td><a href="#aug2">2<br>8月</a></td>
              <td><a href="#aug3">3<br>8月</a></td>
              <td><a href="#aug4">4<br>8月</a></td>
            </tr>
            <tr>
              <td><a href="#aug5">5<br>8月</a></td>
              <td><a href="#aug6">6<br>8月</a></td>
              <td><a href="#aug7">7<br>8月</a></td>
              <td><a href="#aug8">8<br>8月</a></td>
              <td><a href="#aug9">9<br>8月</a></td>
              <td><a href="#aug10">10<br>8月</a></td>
              <td><a href="#aug11">11<br>8月</a></td>
            </tr>
            <tr>
              <td><a href="#aug12">12<br>8月</a></td>
              <td> </td>
              <td> </td>
              <td> </td>
              <td> </td>
              <td> </td>
              <td> </td>
            </tr>

            </tbody>
          </table>
          <div class="ring-left"></div>
          <div class="ring-right"></div>
        </div>

样式上做了简单的美化,鼠标移到日期上会有高亮显示,移开后会渐渐消散。
通过CSS的伪类选择器实现。

.calendar2 tbody td:hover{
  background: #d9d9d9;
  color: #fff;
  font: 600 23px ' ';
}

.ring-left,
.ring-right{
  position: absolute;
  top:265px;
}

.ring-left{
  left: 2em;
}

.ring-right{
  right: 2em;
}

首页轮播

<div class="carousel">  
        <div class="carousel-slides">   
            <div class="carousel-slide"><img src="../static/pictures/2.jpg" alt="Image 2">
                <span class="carousel-text">2024年巴黎奥运会:法兰西体育场见证奥运会告别巴黎,相约洛杉矶2028!</span>
            </div>  
            
            <div class="carousel-slide"><img src="../static/pictures/3.jpg" alt="Image 3">
                <span class="carousel-text">奥运冠军杰西卡·冯·布雷道-韦尔恩德的优雅之旅|ATHLETES TO WATCH</span>
            </div>
            
            <div class="carousel-slide"><img src="../static/pictures/4.jpg" alt="Image 4">
                <span class="carousel-text">基兰·莱利骑上世界舞台|ATHLETES TO WATCH</span>
            </div>           
        </div>  
        <a class="carousel-control prev" onclick="changeSlide(-1)">&#10094;</a>  
        <a class="carousel-control next" onclick="changeSlide(1)">&#10095;</a>
</div>
let slideIndex = 1;  
showSlides(slideIndex);  
setInterval(changeSlide, 3000, 1);

  
// 更改幻灯片  
function changeSlide(n) {  
    showSlides(slideIndex += n);  
}  
  
// 显示幻灯片  
function showSlides(n) {  
    let i;  
    let slides = document.getElementsByClassName("carousel-slide");  
    if (n > slides.length) {slideIndex = 1}      
    if (n < 1) {slideIndex = slides.length}  
    for (i = 0; i < slides.length; i++) {  
        slides[i].style.display = "none";    
    }  
    slides[slideIndex-1].style.display = "block";      
}

成品展示

奖牌榜

img

每日赛程

img

跳转详细赛况

img

日历

img

切换日期

img

详细赛况

img

切换赛况

img

对阵表

img

高亮

img

首页

轮播

img

跳转

img

结对讨论过程描述

确定技术栈

img

统一目录结构

img

复用对方写好的内容

img

交流问题

img

讨论git使用方法

img

心路历程和收获

222100301辛拉面
我之前从来没有研究过前端相关的知识,发现居然必须做网页之后就是一种完蛋了赶紧学的心理。学习上主要是网课+实践+到处查问题的形式,一开始也碰了很多壁,比如还没确定技术框架的时候看了一些springboot/vue之类的内容看得头脑发昏,看懂了和会写了也是完全两回事。好在html和css上手还是很快的,js有编程基础也可以比较快理解(依然很难),熬了两个通宵狂写,家里还刚好有事,在火车上都在想bug怎么改。
要说痛苦肯定是痛苦的,但是也确实是收获颇丰,一个星期前前端三件套只是好像听过的程度,一个星期后已经可以独立写屎山代码。绝对是少有的人生体验,也大概体验了以下以后可能的工作强度。总之加油!!!

222200103wzj

我之前很少进行网页设计的经验。之前写的代码,组件大多是复用别人的组件库,css样式等不会设计。通过本次网页设计,我学习了很多样式的设计,比如如何布局,如何设计对齐等样式。当我能够设计出心中所想的样式时,我感到非常开心,颇有成就感。这次设计收获很多,再接再厉吧。

评价结对队友

222100301辛拉面
一方面要真诚地感谢我的队友不断push,有时候看到消息“代码看一下”“看下内容”马上两眼一黑,但真的是很好地在我焦虑和怀疑人生的时候给予了我足够的激励,毕竟是团队作业不能拖后腿。众所不周知我之前从来没有接触过前端技术,这次作业过程简直如梦似幻可歌可泣,有几个瞬间想把电脑丢进河里报告老师写不了了,想一想不是我一个人的作业就只好继续苦哈哈地学了写写了学。
另一方面感谢队友的包容,由于我惨不忍睹的前端技术相信队友也有很多两眼一黑的瞬间。能够两个人一起讨论研究问题所在真是太好了。很高兴这次可以一起结对完成任务,期待等下次轮到我擅长的技术方向时能一起继续合作~

222200103wzj

队友十分认真,富有责任感。作业布置之后能够快速开始任务。能够积极参与讨论存在的问题,并认真分析。在相互讨论和交流代码时,她也给了我很大的灵感,帮助我更好地完成任务。最重要的是任务总能及时完成,,时间紧张时也能够熬夜加班。呃就是回消息慢了点。
总体合作过程十分愉快,希望下次能够继续合作。

...全文
43 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
AJAX——新手快车道 前言 AJAX是什么? 首先、AJAX是一种很酷的技术,一旦采用了AJAX,就能让你的Web页面, 你的网站,甚至连同你们公司,都变得很酷。在Web2.0的时代里,不使用一点 AJAX技术的网站,就会显得很老土,很落伍。 但是,这样的理解,其实是很肤浅的。仅仅是从一个外行,从一个使用者的 角度出发,来理解AJAX,就像我在本书的第一章AJAX我也行中那样,开发 出很愚蠢,甚至都没有资格被称之为AJAX应用的纯IE、XMLHTTP应用。 AJAX更酷的一点在于,对于传统的Web开发人员来说,AJAX所运用的, 是更加先进的,更加标准化的,更加和谐高效的,完整的Web开发技术体系。 遵循这样的体系开发Web应用,能让你的开发过程变得更加轻松,也能使你们 的开发团队,显得很酷。在Web2.0 的时代里,还在采用过时的技术来开发 Web,会显得很老土,很落伍。 AJAX的相关组成技术,每一个都已经出现了N年以上了,对这些技术的 组合运用,也远远早于AJAX这个名词出现之前。所以,我真正敬佩的,并非提 出 AJAX这个缩写的Jesse James Garrett。而是那些早在N年以前,就已经在探索、 实践的先行者,他们始终在追求的:是更好的用户体验,以及更好的开发体验。 这样的精神,才是最可宝贵的,也是最值得我们学习的。许多年过去以后,当我 们再回头来看当年的这些热门技术,也许早已经变得老土,变得落伍了。在这样 的历程中,哪些人会成长为高手?会成长为大师呢?就是那些永不满足,永远 在追求更好的用户体验,永远在追求更好的开发体验的人! 新手如何上路 软件开发这个领域,永远都在飞速发展,大家都必须不断的学习新的知识、 技能、框架、IDE、甚至新的语言。传说中的骨灰级高手们,就像传说中的大侠, 任何武器、哪怕是一块木头到了他们手里,也能发挥惊人的威力,人家练了几十 年的看家本领,他们随手使来,也竟然像是打娘胎里就开始练了一样。为什么? 就算不吹那么玄的,平常我们能够碰到的那些老手,在学新东西的时候, 也比那些新手学得更快,理解得更深,运用得更熟练。而新手们呢?往往就会漫 无头绪,焦头烂额,以一副张着茫然的大眼睛的经典表情,出现在各大论坛的 新手求助区里。他们欠缺的,究竟是什么呢?为什么老手学新东西,就没遇到那 么多困难呢? 泛泛地说,自然是经验上的欠缺。仔细地说来,又可以分为三个方面: 一、本质,一种技术与另一种技术之间,往往会有本质上的相通之处,当你 对一种技术的理解与思考越来越深入时,学习一种新技术也会更加容易。触类旁 通,举一反三的能力,就是来自于对于技术本质的追寻。 二、地图,本质上或多或少的相通,也提示着我们技术之间的相互关联,当 你了解的技术越多,了解得越是深入,在你的内心,就能建立起越发清晰的技 术地图。各种知识都有一个自然、合理的位置。那么当一个老手要学习一门新技术 的时候,他其实并非在探索一个全新的、未知的领域,而是有很多脉络可寻,也 很多已知可以帮助他们快速了解未知。 三、技巧,面对同样的未知,面对同样的难题,新手们一筹莫展,而老手们 却掌握着更多的技巧和手段,帮助他们试探可能性、缩小问题的范围、迅速定位 问题、不犯明显愚蠢的错误、甚至能够列举出更具命中力的搜索关键词,而这些 技巧,都帮助老手在前进的道路上,更少跌倒,即使跌倒,也能更快的爬起来。 作为一本写给新手的入门书籍,我们希望展现给读者的,是一个老手如何 学习新技术的过程。我们相信,这样的一个学习过程,对于新手来说,是更具有 价值的。 何谓快车道 必须老老实实的承认,我吹牛了!老手虽然会比新手学习得更快一些,但 是也同样会碰到麻烦,遇到障碍,感觉头痛。如果没有真正的专家的指导,我不 可能如此迅速地将AJAX掌握到目前这样的程度,要真是让我自学三个月,然 后就写出书来的话,那真是在骗钱了。 老手能够快速学习的另一个重要的诀窍是:认识很多牛人朋友 如果没有李锟与赵泽欣的专家级指导与帮助,如果没有与李锟AJAX结对 编程的体验,如果没有三个人在MSN上无数次的长聊,我想要在短期内建立起: 对于AJAX本质的理解; 对于整个AJAX以及相关技术地图的理解; 对于AJAX编程开发所需要的很多技巧、手段的掌握; 几乎是不可能的。 如果没有(N多需要感谢的人)的(N多方面的帮助),我们这本书,也 不可能以现在这样的深度,以(N个月)内完成的速度,送到读者的面前。 希望这本书,能够对大家快速学习AJAX,有所帮助。

110

社区成员

发帖
与我相关
我的任务
社区管理员
  • FZU_SE_teacherW
  • 助教赖晋松
  • D's Honey
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧