• 软件工程结对作业02


    程序的设计思想

    创建两个二维数组,其中一个命名为number,用来储存随机数,第一行是随机数,第二行作为分母,初始值为1.

    第二个数组命名为symbol,第一行用来储存符号,第二行用来确定运算顺序,加减法标志为1,乘除法标志为2,产生随机数,产生随机数的位置为3,作为加上括号的位置最先运算。

    相应的,第symbol数组中第i个运算符要运算的数字为number数组中第i和第i+1个数,因为分母不能为0,所以当运算第i个运算符时,要分别从i向前和i+1向后找第一个分母不为0的数将位置分别记为a和b,根据分数的运算法则运算出分子和分母,储存在number[0][a]和number[1][a]中,更新b位置的数据全部为0。最后的结果就是number[0][a]和number[1][a]中的数,进行约分就可以了。

    网页的设计思想

    网页包含时间及日期,留言板,五个年级的题目模块,设置用户选择参数的下拉菜单和按钮,目前只做好了五年级的题目模块。Java程序和网页的结合没有做好,不能实现参数的传递。

    功能模块

    功能一:带括号的运算式的正确运算                                                            实际用时:90分钟

    功能二:产生有效算式                                                                             实际用时:3小时

    功能三:运算式结果出现小数时,输出其分数形式                                           实际用时:2小时

    功能四:运算式及其结果不出现负数(难点:如何判断连续的减法)                     实际用时:10分钟

    功能五:判断正确题目的数量给出分数,输出错误的题目个数                             实际用时:20分钟

    功能六:网页的实现                                                                               实际用时:8小时左右

     

    源程序代码

     ceshi.java

    package ceshi;
    
    import java.util.Scanner;
    
    public class ceshi {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            System.out.println("请输入题目的数量:");
            Scanner sc1 = new Scanner(System.in);
            int quantity = sc1.nextInt();
            System.out.println("请输入产生数字的最大值:");
            int max = sc1.nextInt();
            System.out.println("请输入是否有负数:");
            int iffu = sc1.nextInt();
            System.out.println("请输入是否有乘除法:");
            int ifcheng= sc1.nextInt();
            equation(quantity,max,iffu,ifcheng);
        }
        static void equation(int quantity,int max,int iffu,int ifcheng)
        {
            int t=0;
            for(int i=0;i<quantity;i++)
            {
                String result;
                int numberlength=2+(int)(Math.random()*3);
                int number1[]=new int[numberlength];
                int number2[][]=new int[2][numberlength];
                int symbol[][]=new int[2][numberlength-1];
                for(int j=0;j<numberlength;j++)
                {
                    int num=randomNumber(max,iffu);
                    number1[j]=num;
                    number2[0][j]=num;
                    number2[1][j]=1;
                }
                for(int j=0;j<numberlength-1;j++)
                {
                    int sym=randomSymbol(ifcheng);
                    symbol[0][j]=sym;
                    if(sym==1||sym==2)
                    {
                        symbol[1][j]=1;
                    }
                    if(sym==3||sym==4)
                    {
                        symbol[1][j]=2;
                    }
                }
                int kuo=-1;
                if(numberlength>2)
                {
                    kuo=(int)(Math.random()*(numberlength-2));
                    symbol[1][kuo]=3;
                }
                for(int j=0;j<numberlength-1;j++)
                {
                    if(symbol[1][j]==3)
                    {
                        yunsuan(number2,symbol,numberlength,j);
                    }
                        
                }
                for(int j=0;j<numberlength-1;j++)
                {
                    if(symbol[1][j]==2)
                    {
                        yunsuan(number2,symbol,numberlength,j);
                    }
                }
                for(int j=0;j<numberlength-1;j++)
                {
                    if(symbol[1][j]==1)
                    {
                        yunsuan(number2,symbol,numberlength,j);
                    }
                }
                if(number2[1][0]!=1)
                {
                    int a=number2[0][0],b;
                    if(number2[0][0]>number2[1][0])
                        a=number2[1][0];
                    for(int j=a;j>1;j--)
                    {
                        if(number2[0][0]%j==0&&number2[1][0]%j==0)
                        {
                            number2[0][0]=number2[0][0]/j;
                            number2[1][0]=number2[1][0]/j;
                            break;
                        }
                    }
                    result=String.valueOf(number2[0][0])+'/'+String.valueOf(number2[1][0]);
                }
                else
                    result=String.valueOf(number2[0][0]);
                output(number1,symbol,kuo);
                Scanner sc1 = new Scanner(System.in);//
                String re = sc1.next();//
                if(re.equals(result))
                    t=t+1;
                System.out.println("正确结果为:"+result);
                }
            System.out.println("正确题的数目:"+t+"错误题的数目:"+(quantity-t));
            }
    
        static void output(int number[],int symbol[][],int j)
        {
            String a=String.valueOf(number[0]);
            if(j==0)
                a='('+a;
            for(int i=0;i<number.length-1;i++)
            {
                a=a+String.valueOf(fu(symbol[0][i]));
                if(i+1==j)
                    a=a+'(';
                a=a+String.valueOf(number[i+1]);
                if(i+1==j+1)
                    a=a+')';
            }
            System.out.println(a+'=');
        }
        static char fu(int a)
        {
            char c=' ';
            if(a==1)
                c='+';
            if(a==2)
                c='-';
            if(a==3)
                c='*';
            if(a==4)
                c='/';
            return c;
            
        }
        static void yunsuan(int number[][],int symbol[][],int l,int p)
        {
            int a=p,b=p+1;
            for(int i=p;i>=0;i--)
            {
                if(number[1][i]!=0)
                {
                    a=i;
                    break;
                }
            }
            for(int q=p+1;q<l;q++)
            {
                if(number[1][q]!=0)
                {
                    b=q;
                    break;
                }
            }
            if(symbol[0][p]==2)
            {
                if(number[0][a]*number[1][b]-number[1][a]*number[0][b]>=0)
                {
                    number[0][a]=number[0][a]*number[1][b]-number[1][a]*number[0][b];
                    number[1][a]=number[1][a]*number[1][b];
                    number[0][b]=0;
                    number[1][b]=0;
                }
                else
                {
                    symbol[0][p]=1;
                }
            }
            if(symbol[0][p]==1)
            {
                number[0][a]=number[0][a]*number[1][b]+number[1][a]*number[0][b];
                number[1][a]=number[1][a]*number[1][b];
                number[0][b]=0;
                number[1][b]=0;
            }
            
            if(symbol[0][p]==3)
            {
                number[0][a]=number[0][a]*number[0][b];
                number[1][a]=number[1][a]*number[1][b];
                number[0][b]=0;
                number[1][b]=0;
            }
            if(symbol[0][p]==4)
            {
                number[0][a]=number[0][a]*number[1][b];
                number[1][a]=number[1][a]*number[0][b];
                number[0][b]=0;
                number[1][b]=0;
            }
            
        }
        static int randomNumber(int max,int iffu)//产生随机数
        {
            int number=1+(int)(Math.random()*max);
            if(iffu==1)
            {
                number=0-number;
            }
            return number;
        }
        static int randomSymbol(int ifcheng)//产生随机符号
        {
            int symbol;
            if(ifcheng==1)
                {
                    symbol=1+(int)(Math.random()*4);
                }
            else
            {
                symbol=1+(int)(Math.random()*2);
            }
            return symbol;
        }
    
    }

    Index.html

    <!DOCTYPE html>
      <html>
        <head>
          <title>首页</title>
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
          <meta name="keywords" content="keyword1,keyword2,keyword3">
          <meta name="description" content="this is my page">      
         <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
        <style type="text/css">
        #tabDiv 
        {
            width:1000px;
            margin:1em auto;
            padding-bottom: 10px;
            border-right: #b2c9d3 1px solid; 
            border-top: #b2c9d3 1px solid; 
            border-left: #b2c9d3 1px solid; 
            border-bottom: #b2c9d3 1px solid;
            background: #6c6c6c;
        }
         .curtab 
        {
            padding-top: 0px;
            padding-right: 50px; 
            padding-bottom: 0px; 
            padding-left: 10px; 
            border-right: #b2c9d3 1px solid; 
            font-weight: bold; 
            float: left;
            cursor: pointer; 
            background: #4f4f4f; 
        }
        /*未选tab头(超链接)的样式*/
        .tabs 
        {
            border-right: #c1d8e0 1px solid; 
            padding-top: 0px;
            padding-right: 100px; 
            padding-bottom: 0px; 
            padding-left: 20px; 
            font-weight: normal; 
            float: left;
            cursor: pointer; 
            background: #4f4f4f; 
        }
         </style>
       </head>   
       <body background="images/01.gif">
       <span id="localtime"></span>
        <script type="text/javascript">
            function showLocale(objD) {
                var str, colorhead, colorfoot;
                var yy = objD.getYear();
                if (yy < 1900)
                    yy = yy + 1900;
                var MM = objD.getMonth() + 1;
                if (MM < 10)
                    MM = '0' + MM;
                var dd = objD.getDate();
                if (dd < 10)
                    dd = '0' + dd;
                var hh = objD.getHours();
                if (hh < 10)
                    hh = '0' + hh;
                var mm = objD.getMinutes();
                if (mm < 10)
                    mm = '0' + mm;
                var ss = objD.getSeconds();
                if (ss < 10)
                    ss = '0' + ss;
                var ww = objD.getDay();
                if (ww == 0)
                    colorhead = "<font color="#808040">";
                if (ww > 0 && ww < 6)
                    colorhead = "<font color="#949449">";
                if (ww == 6)
                    colorhead = "<font color="#A5A552">";
                if (ww == 0)
                    ww = "星期日";
                if (ww == 1)
                    ww = "星期一";
                if (ww == 2)
                    ww = "星期二";
                if (ww == 3)
                    ww = "星期三";
                if (ww == 4)
                    ww = "星期四";
                if (ww == 5)
                    ww = "星期五";
                if (ww == 6)
                    ww = "星期六";
                colorfoot = "</font>"
                str = colorhead + yy + "-" + MM + "-" + dd + " " + hh + ":" + mm
                        + ":" + ss + "  " + ww + colorfoot;
                return (str);
            }
            function tick() {
                var today;
                today = new Date();
                document.getElementById("localtime").innerHTML = showLocale(today);
                window.setTimeout("tick()", 1000);
            }
            tick();
            </script>
        
        <marquee scrollamount=3 behavior="alternate" FONT style="FONT-SIZE: 30pt; FILTER: shadow(color=black); WIDTH: 100%; 
        COLOR: #808040; LINE-HEIGHT: 150%; FONT-FAMILY: 华文彩云"><B>欢迎进入二柱子小学四则运算</B></marquee>
       
       <!-- 传递参数的值给NewFile.jsp处理 -->
       <form action="NewFile.jsp" method="post">  
       <!-- 互斥选择,值只能有一个 -->
       <div id="tabDiv" style=" 1000px">
    
            <div id="tabsHead">
                <a id="tabs1" class="curtab" href="javascript:showTab('tabs1','tabContent1')">五年级</a>
                <a id="tabs2" class="tabs" href="javascript:showTab('tabs2','tabContent2')">四年级</a>
                <a id="tabs3" class="tabs" href="javascript:showTab('tabs3','tabContent3')">三年级</a>
                <a id="tabs4" class="tabs" href="javascript:showTab('tabs4','tabContent4')">二年级</a>
                <a id="tabs5" class="tabs" href="javascript:showTab('tabs4','tabContent5')">一年级</a>
            </div>
    
            <div id="tabContent1" style="display: block">
                <table style="border- 0;  100%">
                    <tr>
                        <td rowspan="3" style=" 300px;text-align:center">
                          欢迎留下宝贵意见 :<textarea name="mytext" rows="10" cols="30"></textarea>
                        <td colspan="3" rowspan="3">
                            <table border="1" style="border-left-color: aqua;
                                border-bottom-color: aqua;  701px; border-top-style: solid; border-top-color: aqua;
                                border-right-style: solid; border-left-style: solid; height: 380px; border-right-color: aqua;
                                border-bottom-style: solid">
                                <tr>
                                    <td style=" 50%">
       <center>
       <!-- 多项选择,值可以有多个,在jsp中用数组保存 -->
       <br>请选择(默认有括号,有乘除,有余数):
       <p><input type="checkbox" name="function" value=1>有乘除</input></p>
       <p><input type="checkbox" name="function" value=2>无余数</input></p>
       <p><input type="checkbox" name="function" value=3>有括号</input></p>
       <br>
       <br>请选择运算数最大值:
       <select name="TopNumber">
            <option value=20>20</option>
           <option value=30>30</option>
           <option value=50>50</option>
           <option value=80>80</option>
           <option value=100>100</option>                                              
       </select><br>
       <br>请选择运算数最小值:
       <select name="BaseNumber">
           <option value=0>0</option>
           <option value=1>1</option>
           <option value=3>3</option>
           <option value=5>5</option>
           <option value=10>10</option>      
       </select><br>
       <br>
       <input type="submit" name="submit" value="开始答题">
       </td>
       </tr>
       </center>
       </form>
       </body>
     </html>

    运行结果截图

     

    编程总结或体会

    我们两个人的分工不够正确,因为是由我写Java程序,由凯丽写网页,但是在实施过程中发现这样的合作并理想,凯丽对于程序不熟悉,而我对于网页也不了解,导致这次的网页并没有很好的实现出来。

    在之后的合作中小组成员之间应该更多的交流,尽量避免你做你的,我做我的这样的事情发生。

    周活动总结表

            姓名:张雪晴                            日期 2016 / 4 / 9

    听   课

    编写代码

    阅读课本

    撰写博客

    日总计

    周日

    周一

    周二

    100分钟

    100分钟

    周三

    110分钟

    110分钟

    周四

    80分钟

    80分钟

    周五

    30分钟

    30分钟

    60分钟

    周六

    100分钟

    80分钟

    180分钟

    周总计

    100分钟

    220分钟

    100分钟

    110分钟

    530分钟

      

                               时间记录日志

              学生:张雪晴                   日期:2016 / 4 / 9

              教师:王建民                    课程:软件工程

    日期

    开始时间

    结束时间

    中断时间

    净时间

    活动

    备注

    C

    U

    4.5

    8:00

    9:50

    100

    听课

    4.6

    19:00

    21:00

    110

    写程序

    4.7

    19:10

    20:30

    80

    写程序

    4.8

    12:30

    1:30

    60

    写程序+发表博客

    4.9

    7:20

    9:00

    100

    阅读网页制作的书

    17:20

    18:40

    80

    撰写博客

    同组成员:尤凯丽

    地址:http://www.cnblogs.com/love528

  • 相关阅读:
    网络编程
    GUI编程
    Java数组
    Day24
    Day23
    Day22
    Day21
    Day20
    Day19
    Day18
  • 原文地址:https://www.cnblogs.com/1443188449qq/p/5372351.html
Copyright © 2020-2023  润新知