一、需求分析:
1,要能随机生成运算式。
2,能对照正确答案。
3,没有重复的。
4,能自选类型题。
5,式子能在txt文档查看打印。
二、 功能设计:
基本功能:随机输出运算式(加减乘除,混合运算,小括号优先级)
扩展功能:
1,给出答案(用户自选)
2,剔除重复
3,打印留出运算空间
3,提供用户选择(两位操作数,三位操作数(小括号);加减法(正负),乘除法(整分);题的个数;题的范围(操作数和结果)...)
三、设计实现:
1,普通加减法
2,加减法混合运算
3,乘除法
四、测试运行(程序的运行截图,题目要求实现功能对应的运行截图):
五、 粘贴自己觉得比较独特的或满意的代码片段,用博客园正确的代码控件来显示。(提示:要有必要的注释说明,提示:不要贴所有代码!不符合规定的要倒扣分)
1,剔除重复代码块
//定义数组 int[] strx = new int[5]; String[]str00 = new String[5]; int[]stry = new int[5]; //存入算式值 strx[i]=x; str00[i]=str0[ran0]; stry[i]=y; //定义判断参数 int ccc = 0; //判断重复 for(int j=i;j>0&&j<5;j--){//从当前位置向前遍历数组元素 if(strx[i]==strx[j-1]){//比较操作数x是否重复 if(str00[i]==str00[j-1]){//如重复比较操作符是否重复 if(stry[i]==stry[j-1]){//如重复比较最后一个操作数是否重复 ccc=1; } } } }
2,操作数范围,题目数量可定制代码块
//定制范围 System.out.println("请输入操作数的范围,100以内请输入100,1000以内请输入1000"); int nc = reader.nextInt(); //定制数量 System.out.println("请输入题的数量"); int num = reader.nextInt(); //循环输出num道随机题 for (int i=0;i<num;i++){ //随机产生范围内随机数和操作符 int a = (int)(0+Math.random()*(nc-0+1)); String[] str = { "+", "-"}; int random = (int) ( Math.random () * 2 ); int b = (int)(0+Math.random()*(nc-0+1)); int c; //给出正确答案 if(random==0){ c = a+b; }else{ c = a-b; }
3,控制运算结果范围,打印方式,答案显示代码块
//运算结果控制在在0-100以内 if(c<=100&&c>=0){ //输出随机式 System.out.println (a+str[random]+b+"="); //控制打印方式 System.out.println("如需留出运算行请输入1"); int nl = reader.nextInt(); if(nl==1){ System.out.println(" "); System.out.println(" "); } //控制查看正确答案 System.out.println("如需显示答案请输入1"); int nd = reader.nextInt(); if(nd==1){ System.out.println(c); } }else{ //不在需求内 重新计算 i=i-1; }
4,正负数可控代码块
//操作数是否含负数(加减有无负数 System.out.println("请选择操作数是否含有负数,是请输入1,否请输入2"); int fs = reader.nextInt(); if(fs==1){ //操作数含有负数 //循环输出5道随机题 for (int i=0;i<5&&i>=0;i++){ //随机产生范围内随机数和操作符 int x = (int)(-100+Math.random()*(2*100+1)); String[] str0 = { "+", "-"}; int ran0 = (int) (Math.random () * 2 ); int y = (int)(-100+Math.random()*(2*100+1));
5,分数可控代码块
//是否支持分数 System.out.println("请选择操作数是否含有分数,是请输入1,否请输入2"); int fs2 = reader.nextInt(); if(fs2==1){ //含有分数 //循环输出num2道随机题 for (int i=0;i<num2;i++) { //产生随机数 double u = (double)(0+Math.random()*(100-0+1)); String[] str2 = { "*", "/"}; int r3 = (int) ( Math.random () * 2 ); double v = (double)(0+Math.random()*(100-0+1)); double ww; //计算正确答案 if(r3==0){ ww = u*v; }else{ ww = u/v; } //输出随机式 System.out.println (u+str2[r3]+v+"="+ww); }
6,小括号混合运算可控代码块
System.out.println("请选择操作数是否含有小括号,是请输入1,否请输入2"); int fsx = reader.nextInt(); if(fsx==1){ //含有小括号 //循环输出num1道随机题 for (int i=0;i<num1;i++) { String[] stra = { "1", "2"}; int aaa = (int) ( Math.random () * 2 ); switch(aaa){ case 0: //1.(a+b)+c //随机产生范围内随机数和操作符 int ll = (int)(0+Math.random()*(100-0+1)); String[] str1 = { "+", "-"}; int rll = (int) ( Math.random () * 2 ); int mm = (int)(0+Math.random()*(100-0+1)); String[] str2 = { "+", "-"}; int rlll = (int) ( Math.random () * 2 ); int nn = (int)(0+Math.random()*(100-0+1));; //定义结果参数 int gg1,gg2; //计算正确答案 if(rll==0){ gg1 = ll+mm; }else{ gg1 = ll-mm; } if(rlll==0){ gg2 = gg1+nn; }else{ gg2 = gg1-nn; } //输出随机式 System.out.println ("("+ll+str1[rll]+mm+")"+str2[rlll]+nn+"="+gg2); break; case 1: //2.a+(b+c) //随机产生范围内随机数和操作符 int ll0 = (int)(0+Math.random()*(100-0+1)); String[] str10 = { "+", "-"}; int rll0 = (int) ( Math.random () * 2 ); int mm0 = (int)(0+Math.random()*(100-0+1)); String[] str20 = { "+", "-"}; int rlll0 = (int) ( Math.random () * 2 ); int nn0 = (int)(0+Math.random()*(100-0+1));; //定义结果参数 int gg10=0,gg20=0; //计算正确答案 if(rlll0==0){ gg20 = mm0+nn0; }else{ gg20= mm0-nn0; } if(rll0==0){ gg10 = ll0+gg20; }else{ gg10 = ll0-gg20; } //输出随机式 System.out.println (ll0+str10[rll0]+"("+mm0+str20[rlll0]+nn0+")"+"="+gg10); break; } }
7,生成的运算题存储到外部文件result.txt中代码块
//生成的运算题存储到外部文件result.txt中 Path debugFile = Paths.get("d:\\result.txt"); try (OutputStream outputStream = Files.newOutputStream(debugFile, StandardOpenOption.CREATE,StandardOpenOption.APPEND); PrintStream printStream = new PrintStream(outputStream, true)) { System.setOut(printStream); System.out.println (x+str0[ran0]+"("+y+")"+"="+z); } catch (IOException e) { e.printStackTrace(); }
六、总结:(设计的程序如何实现软件设计的“模块化”原则)
1,从基础功能做起,逐层递增
2,分工能块编写代码
3,在原有基础上不断增加新的功能,每一个功能都要单独测试,防止找不到错误源。
七、PSP
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
5 |
10 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
5 |
10 |
Development |
开发 |
670 |
810 |
·· Analysis |
需求分析 (包括学习新技术) |
5 |
10 |
· Design Spec |
· 生成设计文档 |
0 |
0 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0 |
0 |
· Coding Standard |
代码规范 (为目前的开发制定合适的规范) |
5 |
10 |
· Design |
具体设计 |
10 |
10 |
· Coding |
具体编码 |
600 |
660 |
· Code Review |
· 代码复审 |
30 |
60 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
20 |
60 |
Reporting |
报告 |
20 |
120 |
·· Test Report |
· 测试报告 |
0 |
0 |
· Size Measurement |
计算工作量 |
0 |
0 |
· Postmortem & Process Improvement Plan |
· 事后总结 ,并提出过程改进计划 |
20 |
120 |
具体编码耗时最多,相差最大是在编写报告上,因为运用不熟练。
原文:https://www.cnblogs.com/wangxiangyue/p/11483374.html