结对编码-软件开发与创新课程设计

这篇具有很好参考价值的文章主要介绍了结对编码-软件开发与创新课程设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、题目及运行环境
1.小组成员

2252331 与 2252336

2.题目

小学老师要每周给同学出300道四则运算练习题。
这个程序有很多种实现方式:

  • C/C++
  • C#/VB.net/Java
  • Excel
  • Unix Shell
  • Emacs/Powershell/Vbscript
  • Perl
  • Python
    两个运算符,100以内的数字,不需要写答案。
    需要检查答案是否正确,并且保证答案在0..100之间
    尽可能地多设置一些条件
    请两位同学以结对编码

我们组选择使用Java的JSP完成这个题目。

3.运行环境

Windows 11 23H2
OpenJDK 21.0.2
IntelliJ IDEA 2023.3.4
Tomcat 10

二、运行截图及功能展示
项目运行成功截图
结对编码-软件开发与创新课程设计

1.主页 - index.jsp
结对编码-软件开发与创新课程设计
2.练习页面 - Exercises.java
随机生成20道练习题
结对编码-软件开发与创新课程设计
可以刷新练习题
结对编码-软件开发与创新课程设计
练习结果 - mark.jsp
全对
结对编码-软件开发与创新课程设计
如有错误题目则列出
结对编码-软件开发与创新课程设计

2.点击用户查看练习数据 - account.jsp
结对编码-软件开发与创新课程设计

项目代码展示

MathProblem.java
package com.example.demo20240418;

public class MathProblem {
    public int frontNum;
    public int behindNum;
    public double answer;
    public String symbol;
    MathProblem(){}
    MathProblem(int a,int b,String s){
        frontNum=a;
        behindNum=b;
        symbol=s;
        CreatResult();
    }
    public void CreatResult(){
        switch (this.symbol) {
            case "+":
                this.answer=frontNum+behindNum;
                break;
            case "-":
                this.answer=frontNum-behindNum;
                break;
            case "x":
            case "*":
                this.answer=frontNum*behindNum;
                break;
            case "%":
            case "/":
                double temp= (double) frontNum /behindNum;
                String  str = String.format("%.2f",temp);
                this.answer = Double.parseDouble(str);
                break;
            default:
                break;
        }
    }
}


Exercises.java
package com.example.demo20240418;

import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import java.io.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;
import com.example.demo20240418.MathProblem;
@WebServlet(name = "exercises", value = "/make-exercise")
public class Exercises extends HttpServlet {

     public String randomSymbol(){
         String s= "";
         double num= Math.random();
         if(num<0.25){
             s= "+";
         }
         if(num>=0.25 && num <0.5){
             s="-";
         }
         if(num>=0.5 ){
             s="*";
         }
        if(num>=0.75 ){
            s="/";
        }
         return s;
     }
     public MathProblem[] randomExercise(int num){
         MathProblem[] array = new MathProblem[num];
         for(int i =0;i<num;i++){
             //限制一些条件 除法分母不能为0
            String symbol = randomSymbol();
             int fNum = (int)(Math.random()*10);
             int bNum = (int)(Math.random()*10);
             while(Objects.equals(symbol, "/") && bNum==0){
                 bNum = (int)(Math.random()*10);
             }

            array[i]=new MathProblem(fNum,bNum,symbol);
         }
         return array;
     }
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        MathProblem[] exeArray = new MathProblem[20];
        exeArray = randomExercise(20);

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.println("<html>" +
                "<style>\n" +
                        "    *{\n" +
                        "        width: 100%;\n" +
                        "        height: auto;\n" +
                        "        background: bisque;\n" +
                        "        transition: all 0.3s ease-in-out;\n" +
                        "    }\n" +
                        ".resultBox{\n" +
                        "    position: relative;\n" +
                        "    width: 10em;\n" +
                        "    height: 1.2em;\n" +
                        "    text-align: center;\n" +
                        "    font-size: 1.1em;\n" +
                        "    color: darkslategray;\n" +
                        "}\n" +
                        "#resultSubmit{\n" +
                        "    width: 10em;\n" +
                        "    height: 4em;\n" +
                        "    background: darkcyan;\n" +
                        "    position: relative;\n" +
                        "    align-content: center;\n" +
                        "    left:50%\n" +
                        "}\n" +"a{\n" +
                        "        font-size: 40px;\n" +
                        "        text-decoration: none;\n" +
                        "        border: 20px solid #fff\n" +
                        "        width: 30px;\\n\" +"+
                        "    }"+
                        "</style>"+
                "<body>" +

                "<a href=\"make-exercise\">刷新练习题</a>"+
                "<h1>如不能整除,请保留两位小数 </h1>"
        );
        out.println("<form action=\"mark.jsp\" method=\"GET\">");
        //表单存用户答案
        for(int i=0;i<20;i++){
            out.println("<h1>"+ (i+1)+"、 " + exeArray[i].frontNum+" "+exeArray[i].symbol+" "+exeArray[i].behindNum+" = "+"<input type=\"text\" name="+i+" class= resultBox></h1>");
        }


        //session存正确答案
        out.println("<input type=\"submit\" value=\"提交答案\" id=resultSubmit /></form></body></html>");
        for(int i=0;i<20;i++){
            HttpSession session=request.getSession();
            session.setAttribute(Integer.toString(i),exeArray[i]);
        }


    }
}

index.jsp
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
    <title>主页</title>
</head>
<style>
    *{
        width: 100%;
        height: 100%;
        background: bisque;
        transition: all 0.3s ease-in-out;
        position: relative;
        overflow: hidden;
    }
    a{
        width: 100%;
        font-size: 200px;
        text-align: center;
        text-decoration: none;
        display: flex;
        color: dimgrey;
    }

    .user{
        float: left;
        width: 50%;
        background: aliceblue;
        align-items: center;
        justify-content: center;
    }
    .exercise{
        float: right;
        width: 50%;
        align-items: center;
        justify-content: center;
        background: bisque;
    }
</style>
<body>


<a href="account.jsp" class="user">用户</a>
    <a href="make-exercise" class="exercise">练习</a>




</body>
</html>
mark.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="com.example.demo20240418.MathProblem"%>
<%@ page import="java.util.*"%>
<%@ page import="java.math.BigDecimal" %>
<html>

<head>
    <title>您的最终得分</title>
</head>
<style>
    *{
        width: 100%;
        height: auto;
        background: bisque;
        transition: all 0.3s ease-in-out;
        overflow: hidden;
    }
    h1{
    color: indianred;
    }
    #score{
        text-align: center;
        font-size: 70px;
        color: cornflowerblue;
    }
    .container{
        font-size: 1.5em;
    }
    .number{
        font-size: 0.7em;
        color: darkslategrey;
    }
    button{
        width: 20%;
        height: 10%;
        position: relative;
        color: darkslategray;
        font-size: 30px;
        left: 40%;
    }
</style>
<body>
<h1>您的错误题目为:</h1>
<%
    int mark=0;
    double[] result = new double[20];
    double[] c_result = new double[20];
    MathProblem[] c_answer=new MathProblem[20];
    for (int i =0;i<20;i++){
    String answer = request.getParameter(Integer.toString(i)) ;
    //让正确答案和用户答案转换成Double对比
     c_answer[i]= (MathProblem) session.getAttribute(Integer.toString(i));
     c_result[i] = c_answer[i].answer;
     if(!answer.isEmpty()){
         result[i]= Double.parseDouble(answer);
     }
     else {result[i]=999999.9;}
    %>
<%-- <%=result[i]%> <%=c_result[i]%><br/>--%>
<%
    if(result[i] == c_result[i]){
        mark++;
    }
    else {
        %>

<div class="container"> <span class="number">第<%=i+1%>题 </span>   <%=c_answer[i].frontNum%> <%=c_answer[i].symbol%> <%=c_answer[i].behindNum%> = <%=c_answer[i].answer%> </br></div>
<%
    }
    }
%>

<h1 id="score">本次得分:<%=mark%> / 20 </h1>
<%
    //将分数记录进session
    int curMark = 0;
    if(session.getAttribute("mark") != null){
        curMark = (int)session.getAttribute("mark");
        mark = curMark +mark;
        session.setAttribute("mark",mark);
    }
    else {
        session.setAttribute("mark",mark);
    }

    //记录完成题目次数
    //从session对象中获取number
    int number=1;
    Object obj=session.getAttribute("number");
    if(obj==null){
        //设定session对象中的number变量
        session.setAttribute("number", number);
    }else{
        //取得session对象中的number变量
        number=(int) obj;
        //统计页面的访问次数
        number+=1;
        //设定session对象中的number变量
        session.setAttribute("number", number);
    }
%>
<button onclick='window.open("index.jsp")' >返回主页</button>
</body>
</html>

account.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>用户页</title>
</head>
<style>
    *{
        width: 100%;
        height: auto;
        background: aliceblue;
        transition: all 0.3s ease-in-out;
        overflow: hidden;
    }
.container{
    width: 100%;
    height: 70%;
    display: flex;
    text-align: center;
    font-size: 80px;
}

    button{
        width: 20%;
        height: 10%;
        position: relative;
        color: darkslategray;
        font-size: 30px;
        left: 40%;
    }

</style>
<body>
<%
    int number=0;
    int mark =0;
    if(session.getAttribute("number") != null) {
        number  = (int) session.getAttribute("number");

    }
    int e_number = 20 * number;
    if(session.getAttribute("mark") != null) {
        mark  = (int) session.getAttribute("mark");
    }
%>
<div class="container">
    <div class="header">同学,您的做题数量为: <strong><%=e_number%> </strong></br>
    正确数量为: <strong><%=mark%> </strong>
    </div>
    <% if(number !=0){
    %>
    <div class="a">正确率高达 <strong><%=(Double.parseDouble(String.valueOf(mark))/e_number)*100.0000%> %</strong> </div>
    <%
        }
        %>
</div>

<button onclick='window.open("index.jsp")' >返回主页</button>
</body>
</html>

三、体会
2252331:
在完成结对编码的过程中,我们选择了Java的JSP来实现随机生成20道四则运算练习题的需求。主要是因为JSP用来开发与用户互动的应用更加方便,并且比较的美观,而且Java代码嵌入HTML页面中,这样可以方便地生成动态网页。
在项目里,我们创建了MathProblem类来处理数学问题的生成和结果计算。我们实现了一个随机符号生成器和一个随机练习生成器,以确保练习题的多样性。我们还确保了除法操作时分母不为零,以避免除以零的错误。在Exercises类中,我们处理了HTTP请求,并生成了20道随机练习题,展示给用户。我们使用了HTML表单来收集用户的答案,并使用了session来存储正确答案,以便于之后的评分。
整个开发过程中,我们遇到了一些挑战,比如如何有效地生成随机但符合条件的练习题,以及如何设计一个用户友好且直观的界面。通过结对编程,我们能够相互讨论、解决问题,并从中学习。这种协作方式不仅提高了代码质量,也加深了我们对Java和JSP的理解。
总的来说,这次结对编码的经历是非常宝贵的。它不仅提升了我们的编程技能,也加强了我们的团队合作能力,我深知以后的项目大多都是团队性的合作编程,所以我期待将这些合作编程的经验应用到未来的项目中。

2252336:
我与我的同学一同参与了一个生成四则运算程序的项目,我们采用了结对编程的方式来完成这一任务。这次体验让我对结对编程有了更深入的了解,也感受到了它在编程过程中的独特优势。
结对编程是一种由两个程序员并排坐在一起,共同面对同一台计算机,一起设计、开发、测试程序的编程方法。这种方式强调沟通和协作,使得代码的质量得到了很大的提升。
在开始编写四则运算程序时,我们首先对程序的功能进行了讨论和规划。我们确定了要生成的运算题目的范围、难度以及数量,并明确了程序的输入格式。这一过程中,我们不断交流想法,相互补充,很快就形成了一个完整的方案。
接下来,我们开始编写代码。我们采用分工合作的方式,一个人负责编写主要逻辑,另一个人负责检查代码质量和编写测试用例。在编写过程中,我们不断地进行代码审查,确保每一行代码都符合规范,没有错误。同时,我们还一起解决了遇到的一些技术难题,如如何保证生成的运算题目不重复、如何控制题目的难度等。
通过结对编程,我深刻体会到了沟通的重要性。在编程过程中,我们需要不断地交流想法和进度,以确保程序的正确性和可维护性。此外,结对编程还能够互相学习和提升。在编写代码的过程中,我们可以从对方身上学到一些新的编程技巧和方法,从而提高自己的编程水平。
同时,我也意识到了团队协作的力量。在结对编程中,我们需要相互信任、相互支持,共同面对问题和挑战。这种团队精神不仅有助于我们更好地完成任务,还能够增强我们的凝聚力和归属感。
这次结对编程的体验让我收获颇丰。我不仅学到了很多新的编程技巧和方法,还提高了自己的沟通能力和团队协作能力。我相信,在未来的学习和工作中,我会更加珍惜这种团队协作的机会,不断提升自己的能力和水平。文章来源地址https://www.toymoban.com/news/detail-855547.html

到了这里,关于结对编码-软件开发与创新课程设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据时代的软件开发实践:利用云计算和AI赋能创新

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:大数据系列 ✨文章内容:软件开发实践 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 在大数据时代,软件开发实践正面临着前所未有的

    2024年02月11日
    浏览(48)
  • AI驱动的大数据创新:探索软件开发中的机会和挑战

    🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:大数据系列 ✨文章内容: 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 随着人工智能(AI)和大数据技术的迅速发展,软件开发领域正

    2024年02月11日
    浏览(43)
  • 案例分享 | 3D开发工具HOOPS加速「全球知名矿业软件」可视化创新与突破!

    近日,某全球知名的三维矿业软件公司(以下简称“客户”)与慧都科技携手合作,慧都将联合数字化合作伙伴Tech Soft 3D-HOOPS,为客户注入3D渲染及可视化核心动力,赋能客户产品实现在地质勘探、地质模型可视化等方向的创新与突破,构建强劲的产品竞争力,为矿业发展提

    2024年02月03日
    浏览(46)
  • 生成式AI在软件开发中的革新:自动化、效率、理解、创新与安全的综合考察

    本论文研究生成式AI在软件开发中的多个方面的影响,重点关注自动化和效率、理解和解决问题、创新和创造力、写作和沟通,以及安全和隐私。通过深入分析这些方面,我们可以更好地理解生成式AI对开发流程和工具的重塑。 人工智能(AI)在软件开发领域发挥着越来越重要

    2024年01月18日
    浏览(60)
  • 润和软件鸿蒙全场景开发与教学创新解决方案赋能高校ICT人才培养

    2022年11月4日-6日,一年一度的华为开发者大会2022(HDC)在东莞松山湖举办。本次大会汇聚智能家居、智慧办公、影音娱乐、智慧出行、运动健康五大场景下的创新体验,基于新的HarmonyOS开发技术给开发者构筑更加高效便捷的开发平台,并呈现了丰富的开发者活动。 2022年11月

    2024年02月09日
    浏览(47)
  • 开源软件允许任何人自由查看、修改和使用源代码,这激发了更多的开发者参与到软件的创新和改进中来

    开源软件的影响力主要体现在以下几个方面: 促进技术创新:开源软件允许任何人自由查看、修改和使用源代码,这激发了更多的开发者参与到软件的创新和改进中来。很多新的想法和技术都得到了开发和推广,从而推动了整个技术领域的发展。 提升软件质量:开源软件通

    2024年02月20日
    浏览(44)
  • 设计模式: 软件设计的分层与软件开发注意事项

    软件设计的分层 系统级设计架构 应用级架构 模块级架构 代码级架构 1) 系统级设计架构 应用在整个系统内,如与后台服务如何通信,与第三方系统如何集成 包括业务的关系和协作的机制 设计后端:与后台数据传递的机制 包括:api设计规则,访问授权的一个开放标准(OAuth

    2024年02月07日
    浏览(44)
  • 软件架构设计(八) 基于架构的软件开发方法

    ABSD虽然在日常生活中并不常见,但是在考试中却是极为常见的,因此仍然是我们的重点学习知识点。 特点 基于架构的软件设计(Architecture-Based Software Design,ABSD),这个开发方法是 架构驱动 。 即 强调由业务、质量和功能需求的组合驱动架构设计 。就是会考虑到业务的情况

    2024年02月09日
    浏览(46)
  • 软件开发、设计、架构的其他原则

    LOD:迪米特法则(Law of Demeter) CRP:合成复用原则(Composite Reuse Principle) DRY:不要重复你自己原则 (Don’t Repeat Yourself Principle) KISS:KISS原则 (Keep It Simple and Stupid Principle) YAGNI:你不需要它原则 (You aren\\\'t gonna need it Principle) 又叫最少知识原则(Least Knowledge Principle)。只和你的直接朋友交

    2024年02月02日
    浏览(77)
  • 软件开发:面向对象设计的七大原则!

    开闭原则、里氏代换原则、迪米特原则(最少知道原则)、单一职责原则、接口分隔原则、依赖倒置原则、组合/聚合复用原则。 开闭原则(The Open-Closed Principle ,OCP) 开闭原则:软件实体(模块,类,方法等)应该对扩展开放,对修改关闭。 概念理解 开闭原则是指在进行面

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包