201421123002翁珊 201421123006黄月梅 201421123007徐晓珊
题目描述:
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
1.记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
2.有计时功能,能显示用户开始答题后的消耗时间。
3.界面支持中文简体/中文繁体/英语,用户可以选择一种;
在软件开发中,我们需要大量使用工具来辅助设计,每个环节大家都要善于学习和使用工具。设计的时候,请使用思维导图设计你的模块之间的关系,
需求分析:
1.除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
2.运算符为 +, −, ×, ÷,可以处理用户的输入。
3.有计时功能,能显示用户开始答题后的消耗时间。
4.界面支持中文简体/中文繁体/英语,用户可以选择一种;
思维导图如下:
关键代码分析:
(1)Frames类制作基本框架
public class Frames extends JFrame {
private static final long serialVersionUID = 1L;
int creat , fw;
JButton B1, B2, B3,B4;
int open=0,M=0,S=0,H=0,num=1,clear=0;
JTextField T1, T2, T3, T4, T5;
JTextArea JT1;
FlowLayout flow;
String S1, S2;
}
(2)Aswer类进行用户结果的正误判断
static boolean compare(String a, String b)
{
if (a.equals(b))
{System.out.println("回答正确");
return true;}
else
{
System.out.println("回答错误,正确答案是" + b);
return false;
}
}
(3)compute类进行+,—, *,÷的运算(以乘法为例)
public static String mul(Frac a, Frac b)//乘法
{
int i, j, k, s, m, n, p;
i = a.getZi();
j = a.getMu();
k = b.getZi();
s = b.getMu();
m = i * k;
n = j * s;
p = Answer.getGCD(m, n);
return Answer.Reduction(m / p, n / p);
}
(4)进行分数的构造及化简
public class Frac {
private int Zi;
private int Mu;
private String fra;
public Frac() {
}
(5)Test类调用四则运算的图形框架
package hw2;
public class Test {
public static void main(String[] args) throws Throwable{
Frac f1 = new Frac();
Frac f2 = new Frac();
new Frames("欢迎来到711制作的四则运算",f1,f2);
}
}
(6)界面支持切换语言利用按钮的事件监听器实现(以下只显示繁体部分)
B6.addActionListener(new ActionListener(){//选择繁体
public void actionPerformed(ActionEvent e) {
B1.setText("生成題目");
B2.setText("查看答案");
B3.setText("清除信息");
B4.setText("提交答案");
L1.setText("題目數");
L2.setText("範圍");
L3.setText("伱的答案");
}
});
(7)计时功能实现
while(true)
{
validate();
if(open==1)
{
Minute.setText(String.valueOf(M));
Second.setText(String.valueOf(S));
if(H==99)
{
H=0;
S++;
}
if(S==60)
{
H=0;
S=0;
M++;
}
if(M==60)
{
M=0;
S=0;
H=0;
}
try{
Thread.sleep(10);
}
catch(Exception e){
}
H++;
}
if(clear==1)
{
M=S=H=0;
Minute.setText(String.valueOf(M));
Second.setText(String.valueOf(S));
clear=0;
}
结对照片:
coding链接:https://git.coding.net/Amber9611/sizeyunsuan2.git
psp表格:
小结:
由于我上次是采用Python语言编程,而我对Python的图形界面比较生疏,晓珊采用的是C++实现图形界面也较难,而大家都学习过Java语言,较易于实现图形界面;所以三人达成共识,本次实验是基于翁珊同学上次的四则运算实验1进行修改。
首先我们一起讨论了总体的布局和分析其需要的功能。也觉得翁珊同学的控制题目范围的这个设计很不错,也继续沿用了下来。主要是增加了GUI框架、计时功能以及语言的切换功能。由于这个实验翁珊比较熟悉,所以主体编程是由翁珊负责的,我和晓珊主要负责代码的复审和测试运行以及提出不足,期间效率得到不小的提升。遇到问题一起讨论,也比之前自己一个人思考解决的速度更快!
对于本次实验我们觉得计时器的那一块比较有挑战性。后来经过讨论查找资料以及请教同学之后也顺利解决了。因为经过这次实验后,觉得结对编程的好处真的很多!
汉堡式评价:
先来一片面包:三人达成结对编程的共识,况且我们是一个宿舍的,相处融洽。
再把肉放上:这次编程过程中,虽然翁珊负责主体编程,但是期间遇到了诸多问题和不足都是大家一起提出来一起想办法解决的。因为我们三个的编程基础相对也比较薄弱,时间成本耗费很大,所以遇到棘手问题也比较难以解决,需要查阅大量资料学习借鉴,请教编程能力较强的同学,弥补不足。但是我相信,通过几次编程实验的努力完成,吸取经验教训后,我们将会做的更好,取得进步。
然后再来一片面包: 这次编程让我们对对方的编程实力有了更深的了解,也发现只要认真努力对待就可以把工作做好,正所谓只要功夫深,铁杵磨成针。