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

222200220陈森 2024-09-30 23:50:48
这个作业属于哪个课程https://bbs.csdn.net/forums/2401_CS_SE_FZU
这个作业要求在哪里https://bbs.csdn.net/topics/619333839
结对学号222200220,222000104
这个作业的目标原型设计编程实现,Git协作
其他参考文献

目录

  • 项目和规范地址
  • PSP表格
  • 成果展示
  • 讨论过程
  • 设计实现过程、代码说明
  • 功能结构图
  • 每日赛程部分
  • 赛程的输出
  • 主队显示
  • 客队显示
  • 对阵表布局实现
  • 路由设置
  • 心路历程收获
  • 队友评价

项目和规范地址

CodeArt项目地址
仓库地址:git@codehub.devcloud.cn-north-4.huaweicloud.com:8c6dd6c67e8a40e981f775bc3f152245/222200220_222000104.git

PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划
• Estimate• 估计这个任务需要多少时间3050
Development开发
• Analysis• 需求分析 (包括学习新技术)360480
• Design Spec• 生成设计文档2530
• Design Review• 设计复审1020
• Coding Standard• 代码规范 (为目前的开发制定合适的规范)2030
• Design• 具体设计60120
• Coding• 具体编码400360
• Code Review• 代码复审2030
• Test• 测试(自我测试,修改代码,提交修改)6060
Reporting报告
• Test Repor• 测试报告1010
• Size Measurement• 计算工作量1010
• Postmortem & Process Improvement Plan• 事后总结, 并提出过程改进计划2010
合计10251210

成果展示

  1. 对阵表(女子)鼠标移动到比赛上高亮显示

img

  1. 对阵表(男子)鼠标移动到比赛上高亮显示

img

  1. 点击切换到奖牌榜查看信息

img

  1. 点击切换到赛程表查看信息

img

  1. 选择日期切换到对应日期赛程

img

img

img

  1. 了解更多功能支持中英文切换

img

  1. 点击切换精彩瞬间

img

  1. 点击切换巴黎美景

img

讨论过程

原先想使用html+css+js实现,但发现在界面实现方面无法满足要求,故选择使用vue框架。项目使用Vue 3进行组件化开发,前端页面通过Vue Router进行路由管理,加载不同的页面或组件,如赛程表、奖牌榜、对阵表等。
因为离得比较近,所以有的内容我们直接在线下进行讨论了。

img

img

img

img

设计实现过程、代码说明

功能结构图

img

每日赛程部分

<div class="title">{{ formattedDate }}</div>

        <div class="schedule_item" v-for="item in tableData" :key="item.id">
            <div class="top">
                <div class="date">{{ dayjs(item.startdate).format('HH:mm') }}</div>

                <div class="info">
                    <div class="left">
                        <div style="font-size: 18px; font-weight: bold; margin-bottom: 10px">
                            {{ item.itemcodename }}
                        </div>
                        <div>{{ item.title }}</div>
                    </div>
                </div>
            </div>

            <div class="bottom" v-if="item.homename && item.awayname">
                <div class="top_nation">
                    <div :class="left_border ${item.result == item.homename ? 'win' : ''}">
                        {{ item.homename }}
                        <img
                            v-if="item.result == item.homename"
                            src="https://gstatic.olympics.com/s1/t_original/static/srm/paris-2024/W.svg" />
                    </div>
                    <div class="right_border">{{ item.homescore }}</div>
                </div>

                <div class="bottom_nation">
                    <div :class="left_border ${item.result == item.awayname ? 'win' : ''}">
                        {{ item.awayname }}
                        <img
                            v-if="item.result == item.awayname"
                            src="https://gstatic.olympics.com/s1/t_original/static/srm/paris-2024/W.svg" />
                    </div>
                    <div class="right_border">{{ item.awayscore }}</div>
                </div>
            </div>
        </div>
    </div>
</template>

赛程的输出

<div class="title">{{ formattedDate }}</div>

{{ formattedDate }}
绑定了一个日期格式化后的字符串,它展示在页面的顶部,作为赛程的日期标题。

<div class="schedule_item" v-for="item in tableData" :key="item.id">

v-for="item in tableData" 是一个 Vue 的指令,用来遍历 tableData 数组中的每个对象。

<div class="info">
<div class="left">
    <div style="font-size: 18px; font-weight: bold; margin-bottom: 10px">
        {{ item.itemcodename }}
    </div>
    <div>{{ item.title }}</div>
</div>
item.itemcodename 显示赛事的项目代码名称,例如篮球、足球等。 item.title 展示该赛程的标题,可能包括更详细的信息,如队伍名称、比赛类型等。

主队显示

<div class="top_nation">
<div :class="`left_border ${item.result == item.homename ? 'win' : ''}`">
    {{ item.homename }}
    <img v-if="item.result == item.homename" src="...W.svg" />
</div>
<div class="right_border">{{ item.homescore }}</div>

客队显示

<div class="bottom_nation">
<div :class="`left_border ${item.result == item.awayname ? 'win' : ''}`">
    {{ item.awayname }}
    <img v-if="item.result == item.awayname" src="...W.svg" />
</div>
<div class="right_border">{{ item.awayscore }}</div>

对阵表布局实现

    {
        .content {
            flex: 1;
            display: flex;
            min-height: 810px;

            .item {
                flex: 1;
                display: flex;
                flex-direction: column;
                justify-content: space-evenly;
                position: relative;

                .left_border {
                    height: 200px;
                    border-right: 1px solid black;
                    border-top: 1px solid black;
                    border-bottom: 1px solid black;
                    position: relative;
                }

                .centent_border {
                    position: relative;
                    height: 400px;
                    border-right: 1px solid black;
                    border-top: 1px solid black;
                    border-bottom: 1px solid black;
                }

                .right_border {
                    position: relative;
                    border: 1px solid black;
                }

                .right_bottom {
                    border-radius: 10px;
                    width: 80%;
                    height: 80px;
                    border: 1px solid black;
                    position: absolute;
                    bottom: 180px;
                    right: 0;

                    display: flex;
                    flex-direction: column;
                    justify-content: space-evenly;
                    align-items: center;

                    .nation__title {
                        width: 100%;
                        top: -51px;
                        left: 50%;
                        transform: translateX(-50%);
                    }
                }

                .nation__title {
                    position: absolute;
                    top: -100px;
                    right: 0;
                    height: 50px;
                    width: 80%;
                    text-align: center;
                    border: 1px solid black;
                    border-radius: 10px;
                    line-height: 30px;
                    text-align: left;
                    padding: 10px;
                }

                .nation_top_item,
                .nation_bottom_item {
                    border-radius: 10px;
                    position: absolute;
                    display: flex;
                    flex-direction: column;
                    justify-content: space-evenly;
                    align-items: center;
                    overflow: hidden;
                    cursor: pointer;
                }

                .nation_top_item {
                    top: -50px;
                    width: 80%;
                    height: 80px;
                    border: 1px solid black;
                    background: #fff;

                    &.centent {
                        left: 50%;
                        transform: translateX(-50%);
                    }

                    &.right {
                        right: 0;
                    }
                }

                .nation_bottom_item {
                    bottom: -50px;
                    width: 80%;
                    height: 80px;
                    border: 1px solid black;
                    background: #fff;

                    &.centent {
                        left: 50%;
                        transform: translateX(-50%);
                    }
                }

                .nation {
                    width: 100%;
                    height: 50%;
                    padding: 10px 20px;
                    display: flex;
                    justify-content: space-between;
                    font-weight: bold;

                    .nation__left {
                        display: flex;

                        img {
                            height: 18px;
                            width: 26px;
                            margin-right: 10px;
                        }
                    }
                }
            }
        }
    }

整个样式主要依靠 Flexbox 布局,来实现各个赛程卡片、国家队伍信息等区域的对齐和分布。
为不同区域如 top, bottom, left 设置了边框,并通过 absolute 定位实现各个子元素在页面中的布局。

路由设置

    import { createRouter, createWebHistory } from 'vue-router'
const router = createRouter({
  history: createWebHistory(import.meta.env.BASE_URL),
  routes: [
    {
      path: '/',
      name: 'schedule',
      component: () => import('../views/schedule.vue')
    },
    {
      path: '/medals',
      name: 'medals',
      component: () => import('../views/medals.vue')
    },
    {
      path: '/OppositionTable',
      name: 'OppositionTable',
      component: () => import('../views/OppositionTable.vue')
    },
    {
      path: '/OppositionTable2',
      name: 'OppositionTable2',
      component: () => import('../views/OppositionTable2.vue')
    }
  ]
})

export default router

心路历程收获

222200220:在这次使用Vue 3框架开发巴黎奥运会页面的项目中,我主要负责了奖牌榜和赛程榜的功能实现。这是我第一次深入使用Vue 3,所以一开始我花了不少时间来熟悉Composition API和响应式系统。通过这次实践,我更加熟悉了Vue 3的工作原理和开发模式,学会了如何更有效地使用组件和Vuex进行状态管理,提高了我的调试技巧和解决问题的能力,也让我体会到了团队合作的重要性。
222000104:在这次合作项目中,我主要负责了对阵图的实现。使用Vue 3框架对我来说是一次全新的体验,我从中获得了宝贵的学习和成长机会。通过这次实践,我对Vue 3有了深入的了解,尤其是它的响应式系统和组件化架构。我还学会了如何使用Vue 3构建交互式用户界面,提高了我的代码组织和架构设计能力。同时我体会到了团队合作的力量,以及在团队中沟通和协作的重要性。

队友评价

222200220:我的队友在这次项目中负责对阵图以及拓展的功能。他非常细心和专业,总能及时地解决开发中遇到的问题。我们之间的沟通非常顺畅,他总是能够提供有价值的反馈和建议。
222000104:我的队友在这次项目中负责奖牌榜和赛程榜的开发。他展现出了极高的专业素养和责任感。我们在开发过程中的沟通非常顺畅,他总是能够提供建设性的意见和建议。他的技术能力和解决问题的能力让我印象深刻,我相信这次经历对我们两人都有很大的帮助。

...全文
20 回复 打赏 收藏 转发到动态 举报
写回复
用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,有所帮助。

109

社区成员

发帖
与我相关
我的任务
社区描述
202401_CS_SE_FZU
软件工程 高校
社区管理员
  • FZU_SE_TeacherL
  • 032002124林日臻
  • 助教姜词杰
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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