软件工程结对作业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="width: 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-width: 0; width: 100%">
                <tr>
                    <td rowspan="3" style="width: 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; width: 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="width: 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>

 

 

运行结果截图

 

编程总结或体会

两个人编程安排的时间不够正确,没有达到理想的合作结果。我的编程能力有待提高,不能拖后腿。

本次结对作业我负责网页部分,因为对jsp语言了解不多,开始编网页时无从下手,慢慢摸索着写出一个简单的网页,但不能同Java程序结合起来。从网上找到的代码可以在本地运行,但没有全部理解。

学会更好的与人合作,正确安排时间才能事半功倍。

 

周活动总结表

        姓名:尤凯丽                            日期 2016 / 4 / 9

 

听   课

编写代码

阅读课本

准备考试

日总计

周日

 

 

 

 

 

周一

 

 

 

 

 

周二

100分钟

 

构建之法7章

 

100分钟

周三

 

 

 

 

 

周四

 

120

 

 

 

周五

 

44

 

 

 

周六

 

 

 

 

 

周总计

100分钟

164

 

 

100分钟

 

                           时间记录日志

          学生:尤凯丽                    日期:2016 / 4 / 9

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

日期

开始时间

结束时间

中断时间

净时间

活动

备注

C

U

4.5

14:00

15:50

14:50-15:00

100

听课

 

(7章)

 

21:00

21:30

 

30

读构建之法

 

4.6

19:30

21:00

19:50-20:10

70

准备网页

 

 

4.7

19:00

10:00

9:20-9:40

160

做网页

 

 

4.5

19:00

8:30

 

90

做网页

 

 

21:00

24:10

23:20-23:45

165

做网页

 

 

4.9

14:40

17:30

15:10-15:20

160

写博客并发表

 

 

同组成员:张雪晴

地址:http://www.cnblogs.com/1443188449qq/

posted @ 2016-04-09 18:55  没有比脚更长的路  阅读(160)  评论(0编辑  收藏  举报