结对项目——四则运算 “软件”之升级版

这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232

我的github远程仓库的地址为:https://github.com/zyd123d/zyd1

一、题目基本要求

      从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

  • 生成题目,单个题目最多不能超过4个运算符,操作数小于100。
  • 用户可以输入答案
  • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

二、扩展要求

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户答题结束以后,程序可以显示用户答题所用的时间
  4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
  5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
  6. 程序可以出单个整数阶乘的题目:如:4!=24
  7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
  8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

三、结对项目详细设计过程

  • 使用的编译开发环境:IntelliJ IDEA 2017.2.3 x64
  • 使用的编程语言:Java语言
  • 实现的扩展要求
  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
  4. 程序可以出单个整数阶乘的题目:如:4!=24
  5. 程序可以设置皮肤功能,可以改变界面的颜色即可。
  • 源代码 已上传至我的github远程仓库
  • 部分主要源代码
  1. 用户可以选择出题的个数(最多不能超过5个题目且不少于1个)
1  if(n>5||n<1)
2                 {
3 //如果题目个数大于5或小于1,会弹出提示框 4 JOptionPane.showMessageDialog(null,"输入的题目个数不能大于5或者小于1","注意",JOptionPane.INFORMATION_MESSAGE); 5 }

       2.更换背景颜色

复制代码
 1  if(e.getSource()==B4)//换皮肤
 2  {  3 B4.addActionListener(new ActionListener() {  4  @Override  5 public void actionPerformed(ActionEvent cc) {  6 Color ch = JColorChooser.showDialog(p1, "颜色选择器",  7  p1.getBackground());  8 if (ch != null) {  9  p1.setBackground(ch); 10  p1.repaint(); 11  } 12  } 13  }); 14 }
复制代码

      3.随机生成四则运算题目(包括阶乘的运算及负整数的运算)

复制代码
  1 void star()
  2     {
 3 a=(int) (Math.random()*200-100);//random出来的数为0-1之间,然后取-99到99的整数  4 b=(int) (Math.random()*200-100);  5 c=(int) (Math.random()*200-100);  6 d=(int) (Math.random()*200-100);  7 j=(int) (Math.random()*4);  8 k=(int) (Math.random()*4);  9 if(d<0)  10  {  11 a=(int) (Math.random()*9+1);//随机产生一个整数 范围是0-9(包括0和9)  12 s1=String.valueOf(a)+String.valueOf(h1[2]);//获取这个数进行阶乘  13  L4.setText(s1);  14 result=1;  15 for(int i=1;i<=a;i++)//从1开始一直乘到这个数字本身  16  {  17 result=result*i;  18  }  19  }  20 else  21  {  22 if(b>=0&&c>=0)  23  {  24 //将变量转换成字符串  25 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(b)+String.valueOf(h[k])+String.valueOf(c);  26  L4.setText(s1);  27  System.out.println(s1);  28  }  29 else if(b<0&&c>=0)  30  {  31 //检测到b小于0,为负数,给b的左右两边加上括号运算  32 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(h1[0])+String.valueOf(b)+String.valueOf(h1[1])+String.valueOf(h[k])+String.valueOf(c);  33  L4.setText(s1);  34  System.out.println(s1);  35  }  36 else if(b>=0&&c<0)  37  {  38 //检测到c小于0,为负数,给c的左右两边加上括号运算  39 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(b)+String.valueOf(h[k])+String.valueOf(h1[0])+String.valueOf(c)+String.valueOf(h1[1]);  40  L4.setText(s1);  41  System.out.println(s1);  42  }  43 else  44  {  45 //检测到b、c都小于0,都为负数,给b、c的左右两边都加上括号运算  46 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(h1[0])+String.valueOf(b)+String.valueOf(h1[1])+String.valueOf(h[k])+String.valueOf(h1[0])+String.valueOf(c)+String.valueOf(h1[1]);  47  L4.setText(s1);  48  System.out.println(s1);  49  }  50 if(k>1) //后面的计算符为乘除,先算后面两个数;k=0时为加,k=1时为减  51  {  52 if(k==2)  53  {  54 result=b*c;  55  }  56 else if(k==3)  57  {  58 result=b/c;  59  }  60 if(j==0)  61  {  62 result=result+a;  63  }  64 else if(j==1)  65  {  66 result=a-result;  67  }  68 else if(j==2)  69  {  70 result=a*result;  71  }  72 else if(j==3)  73  {  74 result=a/result;  75  }  76  }  77 else if(k<2)  78  {  79 if(j==0)  80  {  81 result=b+a;  82  }  83 else if(j==1)  84  {  85 result=a-b;  86  }  87 else if(j==2)  88  {  89 result=a*b;  90  }  91 else if(j==3)  92  {  93 result=a/b;  94  }  95 if(k==0)  96 result=result+c;  97 if(k==1)  98 result=result-c;  99  } 100  } 101  System.out.println(result); 102 n--; 103  } 104 105 }
复制代码

四、结对同伴

 姓名:郑永达

他的博客地址:

 http://www.cnblogs.com/zyd1234/

 结对学习照片:

 


五、程序运行结果演示

  • 四则运算系统初始用户界面

  • 输入题目个数(大于5小于1是弹窗提示错误)

  • 随机出现阶乘与带括号的负数运算


  • 运算结束显示正确与错误个数

  • 更换背景颜色

  •   


六、总结

        这次的结对项目比上次的个人项目要难很多。一开始的时候是用了c语言写,已经写完了发现要将程序改装成一个单机带用户界面的程序,当时就懵了,问了老师后,了解到可以用mfc来实现。那时候查了很多很多资料,但是因为mfc需要用C#语言,但我们没有学过这个语言,而且没有办法在那么短的时间内学完一个新的语言,并且做出一个项目,后来不得已的情况下之内放弃用C环境。后来选择了用java,因为他能比较容易地实现框体结构。不过java有一些知识点已经忘记了,所以也费了不少功夫。


七、结对软件过程耗时估计与统计表

PSP2.1 Personal Software Process Stages Time Senior Student(h) Time(h)
Planning 计划 3 1.5
· Estimate 估计这个任务需要多少时间 10 15
Development 开发 8 10
· Analysis 需求分析 (包括学习新技术) 2 1
· Design Spec 生成设计文档 2 1
· Design Review 设计复审 1 1
· Coding Standard 代码规范 0.5 1.5
· Design 具体设计 4 4.5
· Coding 具体编码 12 13
· Code Review 代码复审 1 2
· Test 测试(自我测试,修改代码,提交修改) 1 1.5
Reporting 报告 1 3
· 测试报告 0 0
· 计算工作量 1 1
· 并提出过程改进计划 0 0

猜你喜欢

转载自www.cnblogs.com/makky1116/p/9856365.html
今日推荐