软件工程结对作业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 |
写博客并发表 |
|
✔ |
|
同组成员:张雪晴