- 作业要求: https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213
- github地址:https://github.com/LiuQSong/learnning
- 同伴姓名学号+博客地址:赵铭杰 201606120026 http://www.cnblogs.com/ChiuMingKit/p/9844922.html
一、程序基本要求如下:
- 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100。
- 用户可以输入答案
- 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。
二、扩展方向(8选4)
1、可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
- 2、用户答题结束以后,程序可以显示用户答题所用的时间
- 3、用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
- 4、程序可以出单个整数阶乘的题目:如:4!=24
三、时间记录表
PSP2.1 |
Personal Software Process Stages |
Time Senior Student(h) |
Time(h) |
Planning |
计划 |
1.5 |
1 |
· Estimate |
估计这个任务需要多少时间 |
16 |
18.1 |
Development |
开发 |
2 |
3 |
· Analysis |
需求分析 (包括学习新技术) |
1.5 |
3 |
· Design Spec |
生成设计文档 |
0 |
0 |
· Design Review |
设计复审 |
0.2 |
0.3 |
· Coding Standard |
代码规范 |
0.4 |
0.2 |
· Design |
具体设计 |
2 |
2.5 |
· Coding |
具体编码 |
3 |
6 |
· Code Review |
代码复审 |
1 |
0.8 |
· Test |
测试(自我测试,修改代码,提交修改) |
0.5 |
0.5 |
Reporting |
报告 |
0 |
0 |
Test Report |
测试报告 |
0.2 |
0.2 |
·workload |
计算工作量 |
0.2 |
0.3 |
·correction |
并提出过程改进计划 |
0.3 |
0.3 |
四、结对过程
1.结对成员
- 刘庆松:把在控制台运行程序转成简单的可视化程序,程序可以出单个整数阶乘的题目:如:4!=24功能,用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数功能
- 赵铭杰:对用户开始进行答题进行计时处理,在最后结束答题后,会提示所用的总时间;对随机生成的负数进行规范化处理,在负数的位置匹配括号。
2.开发环境
调试并编写代码
3. 结对照片
4. 部分代码及运行截图
窗口布局文件代码(start.java)
JFrame frame = new Start();
frame.setTitle("四则运算");
frame.setSize(300, 200);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
随机生成数值和符号的核心代码(start.java)
int sign1 = (int) (Math.random() * 3); //产生0-3的随机数
int sign2 = (int) (Math.random() * 3); //产生0-3的随机数
int x = -(int) (Math.random() * 99)+(int) (Math.random() * 99);
int y = -(int) (Math.random() * 99)+(int) (Math.random() * 99);
int z = -(int) (Math.random() * 99)+(int) (Math.random() * 99);
int j = 1 + (int) (Math.random() * 9);
int sign3 = 1 + (int) (Math.random() * 3);
String result = "";
通过递归计算阶乘的结果功能代码(EasyOperation.java)
public int jiecheng(int number){
if (number <= 1)
return 1;
else
return number * jiecheng(number - 1);
}
}
生成题目计算答案的功能代码(EasyOperation.java)
public double count1(int x,int y,int z,int sign1,int sign2){
double result=0;
if((sign1==0)&&(sign2==0)){ result=x+y+z; }
if((sign1==0)&&(sign2==1)){ result=x+y-z; }
if((sign1==0)&&(sign2==2)){ result=x+y*z; }
if((sign1==0)&&(sign2==3)){ result=x+y/z; }
if((sign1==1)&&(sign2==0)){ result=x-y+z; }
if((sign1==1)&&(sign2==1)){ result=x-y-z; }
if((sign1==1)&&(sign2==2)){ result=x-y*z; }
if((sign1==1)&&(sign2==3)){ result=x-y/z; }
if((sign1==2)&&(sign2==0)){ result=x*y+z; }
if((sign1==2)&&(sign2==1)){ result=x*y-z; }
if((sign1==2)&&(sign2==2)){ result=x*y*z; }
if((sign1==2)&&(sign2==3)){ result=x*y/z; }
if((sign1==3)&&(sign2==0)){ result=x/y+z; }
if((sign1==3)&&(sign2==1)){ result=x/y-z; }
if((sign1==3)&&(sign2==2)){ result=x/y*z; }
if((sign1==3)&&(sign2==3)){ result=x/y/z; }
String test =new DecimalFormat("0.0").format(result);
result = Double.valueOf(test);
return result;
}
生成“题目“”的字符串功能代码(EasyOperation.java)
public String count(int x,int y,int z,int sign1,int sign2){
String result="";
String sign3="";
String sign4="";
String x1 = String.valueOf(x);
String y1 = String.valueOf(y);
String z1 = String.valueOf(z);
if(x<0)x1="("+x1+")";
if(y<0)y1="("+y1+")";
if(z<0)z1="("+z1+")";
switch(sign1){
case 0:sign3="+";break;
case 1:sign3="-";break;
case 2:sign3="x";break;
case 3:sign3="/";break;
default:sign3="+";
}
switch(sign2){
case 0:sign4="+";break;
case 1:sign4="-";break;
case 2:sign4="x";break;
case 3:sign4="/";break;
default:sign4="+";
}
result=x1+sign3+y1+sign4+z1;
return result;
}
运行界面截图(start.java)
用户答案判断提示(EasyOperation.java)
统计用时提示(TimerCount.java)
提示用户答题数已超过五题(start.java)
五、总结与心得
这次最大的难点是把程序可视化,我的步骤是先把程序功能完善,再套入JFrame窗体框架进行可视化,但是难度太大了,我要把每个部分的代码进行重组,还要学会局部刷新,想象如何编程窗体代码才能得到最终运算结果,想了一天一夜才弄了这么一个简陋的窗体。我把原来的两个class拆分成3个class,要把所有方法进行重新构造。这次的困难让我深刻认识要不断练习熟能生巧才能养成编程思维,使程序一开始便有一个方便易写的框架出来。我会继续努力。