林晓芳201421123092、陈惠201421123096
coding 地址:https://git.coding.net/lianlian/92.96.1.git
一.题目描述
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算;
- 有计时功能,能显示用户开始答题后的消耗时间;
- 界面支持中文简体/中文繁体/英语,用户可以选择一种。
二.分析实现
a.需求分析:
1.实现GUI界面;
2.实现历史对错题数记录;
3.能够显示用户答题时间;
4.提供中文简体/中文繁体/英语多种语言选择。
b.功能设计:
1.基本功能:多种语言选择、显示历史正确率、答题计时;
2.扩展功能:生成用户错题集。
c.设计实现:
- Background//后台事件处理类:
方法:createTest()//定义一个随机数
checkAnswer(String[] answers)//传入一组答案,校验答案
getQuestions()//获取完整的题目
getStandardAnswer()//获取标准答案
upDate(Integer right,Integer all)//上传正确率
- Client//客户端类:
方法:Client()//客户端构造器
createComponent()//创建面板
showTime()//显示答题时间
showHistory()//显示历史正确率
setLanguage()//设置客户端语言
actionPerformed(ActionEvent e)//按钮事件
- Calculator//计算类:
方法:add(Fraction a, Fraction b)//加法
sub(Fraction a, Fraction b)//减法
mul(Fraction a, Fraction b)//乘法
div(Fraction a, Fraction b)//除法
- Fraction//分数类:
属性:numerator//分子
denominator//分母
方法:creatfraction()//创建分数
GCD(int m, int n)//计算最大公约数
Reduction(int m, int n)//约分
compare(String m, String n)//比较输入结果与答案
- Test//运行类:
main函数执行
d.代码说明:
上传正确率:
public void upDate(Integer right,Integer all){
try {
writer = new BufferedWriter(new FileWriter(new File("history/accuracy.txt")));
writer.write(right.toString());
writer.newLine();
writer.write(all.toString());
writer.newLine();
writer.close();
} catch (IOException e) {
e.printStackTrace();
} }
显示答题时间:
public void showTime() {
labTime = new JLabel(tips.get(1) + "00:00");
labTime.setBounds(580, 0, 120, 50);
jpMain.add(labTime);
// 启动记时线程
new Thread() {
public void run() {
while (true) {
try {
Thread.sleep(1000);
seconds++;
if (seconds >= 60) {
seconds = 0;
minutes++;
}
// 修正分钟数和秒钟数
if (seconds < 10)
secStr = "0" + seconds.toString();
else
secStr = seconds.toString();
if (minutes < 10)
minStr = "0" + minutes.toString();
else
minStr = minutes.toString();
} catch (InterruptedException e) {
e.printStackTrace();
}
labTime.setText(tips.get(1) + minStr + ":" + secStr);
if(isEnd)
break;
}
}
}.start();
}
显示历史正确率:
public void showHistory() {
labAccuracy = new JLabel();
labAccuracy.setBounds(150, 0, 120, 50);
try {
reader = new BufferedReader(new FileReader(new File("history/accuracy.txt")));
his_rightNum = reader.readLine();
his_allNum = reader.readLine();
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
labAccuracy.setText(tips.get(2) + his_rightNum + "/" + his_allNum);
jpMain.add(labAccuracy);
}
设置客户端语言:
public void setLanguage() {
String[] choiceLanguage = { "简体中文", "繁体中文", "English" };
String language = (String) JOptionPane.showInputDialog(null, "请选择客户端的语言:\n", "Choice a language for client",
JOptionPane.PLAIN_MESSAGE, new ImageIcon("icon.png"), choiceLanguage, "简体中文");
if (language == null) {
System.exit(-1);
} else {
try {
reader = new BufferedReader(new FileReader(new File("language/" + language + ".txt")));
String s;
while ((s = reader.readLine()) != null) {
tips.add(s);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
e.测试运行:
三.PSP展示
PSP2.1 |
Personal Software Process Stages |
Time (%) Senior Student |
Time (%) |
Planning |
计划 |
2h |
2.5h |
· Estimate |
估计这个任务需要多少时间 |
40h |
42h |
· Analysis |
需求分析 (包括学习新技术) |
3h |
4h |
· Coding Standard |
代码规范 |
1h |
1h |
· Design |
具体设计 |
3h |
3h |
· Coding |
具体编码 |
25h |
30h |
· Test |
测试(自我测试,修改代码,提交修改) |
1.5h |
2h |
Reporting |
报告 |
1h |
1h |
四.总结
在我们看来,结对编程是能够带来1+1>2的效果。虽然第一次结对编程我们遇到了很多问题,但同时我们也收获了很多。作为“驾驶员”,在编程时就会格外的认真,注意每一段代码的格式,按照统一的规范来写,以便队友审查。作为“领航员”,你会时刻关注你旁边的人写的代码,思维在不停的运作,不仅提高了代码质量,也减少了复审所需要的时间,不用事后再去花大精力去阅读、修改代码。而且当一个人独自写程序时,我们总是容易出现懈怠的情绪,而当两个人结对编程时,通过互相监督、提醒,编程效率大大提高。