201421123002 翁珊, 201421123006 黄月梅, 2014211007 徐晓珊
题目描述:
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。
1.记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
2.有计时功能,能显示用户开始答题后的消耗时间。
3.界面支持中文简体/中文繁体/英语,用户可以选择一种;
在软件开发中,我们需要大量使用工具来辅助设计,每个环节大家都要善于学习和使用工具。设计的时候,请使用思维导图设计你的模块之间的关系,
需求分析:
- 除了整数以外,还要支持真分数的四则运算,真分数的运算,例如:1/6 + 1/8 = 7/24
- 运算符为 +, −, ×, ÷
- 并且要求能处理用户的输入,并判断对错,打分统计正确率。
- 要求能处理用户输入的真分数, 如 1/2, 5/12 等。
思维导图:
关键代码分析:
(1)Frames类制作基本框架
flow = new FlowLayout(); flow.setAlignment(FlowLayout.LEFT) flow.setHgap(30); flow.setVgap(15); setTitle(name); setSize(525, 500); setLayout(flow);
(2)界面支持切换语言利用按钮的事件监听器实现(以下只显示繁体部分)
B6.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
B1.setText("生成題目");
B2.setText("查看答案");
B3.setText("清除信息");
B4.setText("提交答案");
L1.setText("題目數");
L2.setText("範圍");
L3.setText("伱的答案");
}
(3)计时功能实现
- ...
- 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;
- }
...
(4)compute类进行+,—, *,÷的运算(以加法为例)
public static String add(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 * s + j * k; n = s * j; p = Answer.getGCD(m, n); return Answer.Reduction(m / p, n / p); }
(5)进行分数的构造及化简
public class Frac { private int Zi; private int Mu; private String fra; public Frac() { }
(6)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); } }
实验结果:
语言切换功能展示:
a.简体:
b.繁体:
c.英语:
结对照片:
coding链接:
https://coding.net/u/watermelon123/p/homework2/git/tree/master
实验小结:
本次实验经我和我的队友黄月梅、徐晓珊讨论一致决定采用我上次的实验为基础来进行图形化的编程。因此,我负责主体的编程,黄月梅和徐晓珊负责代码复审、测试以及提出不足。
我们保持了上次的实验的大体框架及内容,主要的工作是加上了GUI 的框架来实现图形界面。还有两项附加的功能,一是语言的切换,支持中文,繁体以及英文的切换;二是计时器功能的实现,这项功能的实现对我们来说有点困难,但是借助上网,请教同学等方式,最终顺利完成了此项功能。
感觉这次的结对编程,让我深刻地了解到真的是人多力量大,在编程的过程当中,遇到困难,可以一同商讨,查找资料;出现错误也能及时的改正;在最后写报告的时候也分工合作,取长补短,更快更好的完成......总之,这次结对编程的体验不错!
汉堡包式评价?
先来一片面包:三人经过讨论很快达成对编程的共识。并且我们三个是同一个宿舍的,处于一个相对比较安全的环境。
再把肉放上:在这次的编程过程中遇到了不少的问题,后来经过我们的商讨及查找资料等得到了解决。由于我们三个的编程能力都相对比较薄弱,遇到棘手的问题的时候比较缺乏耐心。但是,在不断地实践中,我相信我们会更上一层楼的。
然后再来一片面包:结对编程能提高编程的效率,也能更好地发现自己的不足并改进。
PSP表格:
PSP2.1 |
Personal Software Process Stages |
Estimated Time(hour) |
Actual Time (hour) |
Planning |
计划 |
0.5 |
0.5 |
· Estimate |
估计这个任务需要多少时间 |
10 |
12 |
Development |
开发 |
5 |
4 |
· Analysis |
需求分析 (包括学习新技术) |
0.5 |
1 |
· Design Spec |
生成设计文档 |
1 |
1 |
· Design Review |
设计复审 |
1.5 |
2 |
· Coding Standard |
代码规范 |
0.5 |
0.5 |
· Design |
具体设计 |
1 |
1.5 |
· Coding |
具体编码 |
6 |
6.5 |
· Code Review |
代码复审 |
0.5 |
1/3 |
· Test |
测试(自我测试,修改代码,提交修改) |
0.5 |
2/3 |
Reporting |
报告 |
0.5 |
0.5 |
· |
测试报告 |
1/6 |
1/6 |
· |
计算工作量 |
1/6 |
0.25 |
· |
并提出过程改进计划 |
0.25 |
0.25 |