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

222100235熊铃锋 2024-03-26 23:44:43
这个作业属于哪个课程2302软件工程社区
这个作业要求在哪里结对第二次作业——编程实现]
结对学号222100232 222100235
这个作业的目标采用web技术来实现原型中的功能
其他参考文献阿里巴巴Java开发手册

目录

  • 一、Gitcode仓库地址
  • 二、PSP表格
  • 三、访问链接
  • 四、成品展示
  • 五、结对讨论过程描述
  • 六、设计实现
  • 6.1 设计实现过程
  • 6.2 功能结构图
  • 七、代码说明
  • 7.1 关键代码展示
  • 八、心路历程与收获
  • 8.1 结对评价
  • 8.2 收获

一、Gitcode仓库地址

222100232_222100235

二、PSP表格

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

三、访问链接

未部署至云服务器上

四、成品展示

  • 首先是我们的主界面

img

  • 用户点击图片可以进入详情界面

img

  • 用户点击比赛日程,用户可以查看比赛的详细日程

img

  • 用户点击比赛详细信息,可以直接查看详细信息

img

  • 点击任意赛程,就可以查看详细信息

img

  • 点击不同的赛事阶段,如Final就可以查看决赛情况。

img

img

img

  • 可以点击不同赛事,获取不同赛事的详细赛况

img

  • 查看不同的赛事

img

  • 点击运动员界面可以查看所有运动员的相关信息

img

五、结对讨论过程描述

在发布任务之后,我们进行了一系列的项目讨论

  • 首先是对于web框架的选择和其中开发方式的讨论,因为我们两个是同宿舍的舍友,讨论开发过程中的问题主要是通过直接对话。

img

  • 结对讨论过程

img

六、设计实现

6.1 设计实现过程

  • 首先

我们使用maven工具来管理项目,下载Tomcat服务器。我们使用jsp来开发前端,jsp与HTML十分相似,不同的是jsp能够嵌入Java代码并且能够十分轻松地通过servlet来与后端交互信息与数据。

img

  • 接着

我们的前端设计包括5个界面,包括首页信息介绍,比赛日程信息,比赛详细信息,精彩时刻以及运动员信息。我们先开发json解析方法以及输出的Java类,使用gson解析json,输出List,AthleteClass为运动员类,这样可以将所需的运动员的全部信息输出,通过servlet将运动员信息传给jsp,jsp根据所需的输出样式输出数据。

  • 然后

对于比赛赛程信息界面,我们要先解析json获取比赛日程,然后根据时间进行排序输出比赛日程,用户点击任一赛程即可进入比赛详细界面,在详细界面中,我们会将比赛的详细信息输出,对于双人比赛,我们会将双人的详情格合并,方便用户。

6.2 功能结构图

img

七、代码说明

7.1 关键代码展示

  • 使用Gson解析json获取运动员相关数据,输出List,通过AthleteServlet的调用,传输给jsp。
//Gson解析字符串,获得运动员信息
    public List<Athlete2> getAthletes(String filename) {
        Gson gson = new Gson();
        List<AthletesData> athletesData = gson.fromJson(getJsonString(filename), new TypeToken<List<AthletesData>>() {
        }.getType());
        List<Athlete2> athleteList = new ArrayList<>();
        if (athletesData != null) {
            for (AthletesData athletesData1 : athletesData) {
                String country = athletesData1.getCountryName();
                List<Participation> participations = athletesData1.getParticipations();
                for (Participation part : participations) {
                    Athlete2 ath = new Athlete2();
                    String gender = part.getGender() == 0 ? "Male" : "Female";
                    String dob = part.getDOB().substring(0,10);
                    String firstName = part.getPreferredFirstName();
                    String lastName = part.getPreferredLastName();
                    ath.setCountryName(country);
                    ath.setDOB(dob);
                    ath.setGender(gender);
                    ath.setPreferredLastName(lastName);
                    ath.setPreferredFirstName(firstName);
                    athleteList.add(ath);
                }
            }
        }
        return athleteList;
    }
  • AthleteServlet调用getAthletes获取运动员信息,传输给jsp。重写doGet方法,响应jsp的请求
@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{
        DataSourceImpl data = new DataSourceImpl();
        List<Athlete2>list = data.getAthletes(getServletContext().getRealPath("/WEB-INF/data/athletes.json"));
        req.setAttribute("athlete", list);
        req.getRequestDispatcher("athlete.jsp").forward(req,resp);
    }
  • athlete.jsp与AthleteServlet进行请求与响应,将运动员信息输出到表格中
<% List<Athlete2> lists = (List)request.getAttribute("athlete");%>
<div>
    <table class="table-athlete">
        <tr>
            <th>Country</th>
            <th>Athlete</th>
            <th>Gender</th>
            <th>DOB</th>
        </tr>

        <% for(Athlete2 athlete : lists){ %>
        <%="<tr>" %>
        <%="<td>" +athlete.getCountryName() + "</td>"%>
        <%="<td>" +athlete.getPreferredLastName() + " " + athlete.getPreferredFirstName() + "</td>"%>
        <%="<td>" +athlete.getGender() + "</td>"%>
        <%="<td>" +athlete.getDOB() + "</td>"%>
        <%="</tr>" %>
        <% } %>

    </table>

</div>
  • 主界面与跳转的代码展示
<div class="action">
    </form>
    <table>
        <tr>
            <input class="btn" type="button" onclick="window.location.href='index.jsp';" value="OVERVIEW">
        </tr>
        <tr>
            <form action="Schedule">
                <input class="btn" type="submit" value="SCHEDULE">
            </form>
        </tr>
        <tr>
            <input class="btn" type="button" onclick="window.location.href='';" value="THE MOMENT">
        </tr>
        <tr>
            <form action="Result">
                <input type="hidden" name="event" value="empty">
                <input class="btn" type="submit" value="RESULTS">
            </form>
        </tr>
        <tr>
            <form action="Athlete">
                <input class="btn" type="submit" value="ATHLETES">
            </form>
        </tr>
    </table>
</div>

八、心路历程与收获

8.1 结对评价

222100232:222100235同学为整个网页的开发提供了大量的基础代码,本人的工作基本上是在此基础上完成的,该队友提供的代码简单易懂,便于修改和拓展,在开发过程中节省了大量的时间,非常感谢队友的贡献,基础的页面设计也是由对方完成的,本人只是在此基础上填充数据,修复bug,调整页面排版格式,整个开发过程能充分体会到对方开发能力之强和效率之高。

222100235:在本次的原型设计中,我们先是认真地讨论并选择了jsp+servlet技术来开发本次的web项目,分析需求并研究实现方法。我们根据网上已有的视频,博客等学习了Tomcat的安装使用,使用maven工具管理项目,就等进行实际开发。但是在开发过程中却发现了许许多多的问题,比如说jsp与servlet之间的通信问题,servlet使用其他Java类方法,但是通过相对路径无法寻找到相应文件的问题,只能用getServletContext().getRealPath()来进行文件路径定位。
这些问题都需要不断地查找资料来寻找解决方法。
对结对同伴的评价:同伴办事效率很高,业务能力强于我,充满毅力,开发技术实力强。我认为我的同伴是一位优秀的开发人员,愿意与我一同发现,一同讨论开发过程中遇到的问题。

8.2 收获

在本次的结对编程中,我们学会了许多前后端编程的知识,比如说jsp servlet等,在编程过程中我们也遇到了许多的困难,但通过不断的尝试与查找相关资料,终于解决了这些问题。我们相信在未来的学习生活中,我们一定能保持这样的学习热情与解决办法的思考方式,解决我们遇到的生活学习中的问题。

...全文
113 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

122

社区成员

发帖
与我相关
我的任务
社区描述
FZU-SE
软件工程 高校
社区管理员
  • LinQF39
  • 助教-吴可仪
  • 一杯时间
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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