结对项目——四则运算 “软件”之升级版
这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232
我的github远程仓库的地址为:https://github.com/zyd123d/zyd1
一、题目基本要求
从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:
- 生成题目,单个题目最多不能超过4个运算符,操作数小于100。
- 用户可以输入答案
- 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。
二、扩展要求
- 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
- 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
- 用户答题结束以后,程序可以显示用户答题所用的时间
- 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
- 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名
- 程序可以出单个整数阶乘的题目:如:4!=24
- 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
- 程序可以设置皮肤功能,可以改变界面的颜色即可。
三、结对项目详细设计过程
- 使用的编译开发环境:IntelliJ IDEA 2017.2.3 x64
- 使用的编程语言:Java语言
- 实现的扩展要求
- 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
- 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
- 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
- 程序可以出单个整数阶乘的题目:如:4!=24
- 程序可以设置皮肤功能,可以改变界面的颜色即可。
- 源代码
已上传至我的github远程仓库 - 部分主要源代码
- 用户可以选择出题的个数(最多不能超过5个题目且不少于1个)
1 if(n>5||n<1) 2 { 3 //如果题目个数大于5或小于1,会弹出提示框 4 JOptionPane.showMessageDialog(null,"输入的题目个数不能大于5或者小于1","注意",JOptionPane.INFORMATION_MESSAGE); 5 }
- 更换背景颜色
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 }
- 随机生成四则运算题目(包括阶乘的运算及负整数的运算)
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 }
四、结对同伴
姓名:麦家滢
她的博客地址:https://www.cnblogs.com/makky1116/
结对学习照片:
五、程序运行结果演示
- 四则运算系统初始用户界面
- 输入题目个数(大于5小于1是弹窗提示错误)
- 随机出现阶乘与带括号的负数运算
- 运算结束显示正确与错误个数
-
更换背景颜色
六、总结
在本次结对编程的过程中,真实的体会到了结对编程的实际意义。再开始接触这个结对任务的时候,我和我的结对同伴原本是打算使用C语言编写程序,并且已经编写好了代码,但是由于C语言的用户界面需要用到MFC的相关知识,导致我们的进度停滞了很久,最终决定使用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 |