201421123022 王若凡 201421123026 欧阳勇
a.需求分析:
这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
- 有计时功能,能显示用户开始答题后的消耗时间。
- 界面支持中文简体/中文繁体/英语,用户可以选择一种;
b.功能设计
1.生成自定义数目算术题。
2.支持整数和分数的加减乘除。
3.输入答案判断对错,错误后写出正确答案。
4.集中收集错题。
5.简繁中英文切换。
6.计时功能。
思维导图
c.设计实现与代码展示
计时功能:
B0.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { tishu=Integer.parseInt(T1.getText());//获取总题数 timer = new Timer(); finishtime=System.currentTimeMillis(); starttime=finishtime; timer.schedule(new TimerTask() { public void run() { finishtime=System.currentTimeMillis(); duration=finishtime-starttime; String str=df.format(new Date(duration)); L12.setText(str); if(summary==tishu){ try { Thread.sleep(2000000); } catch (InterruptedException e) { e.printStackTrace(); } } } }, 1000, 1000); } });
出题功能:
B1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { noanswer=tishu-dadui-dacuo;//算出未答题数 L9.setText(""); L8.setText(null); T3.setText(null); if(summary==tishu) { JOptionPane.showMessageDialog(null, "答题已完成,答题总题数:"+tishu+",答对题数:"+dadui+",答错题数:"+dacuo+",未答数:"+noanswer); frame.setVisible(false); } //生成一个随机算术.该处代码由上次作业改成。 if(t==1){summary++;} } });
结果判断与输出
T3.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent d) { if(sum1.equals(T3.getText())) { L9.setText("Right!"); dadui++; L10.setText(String.valueOf(dadui)); } else { L9.setText("Error!answer is:"+sum1); dacuo++; FileWriter fw = null; try { //如果文件存在,则追加内容;如果文件不存在,则创建文件 File f=new File("D:/cuoti.txt"); fw = new FileWriter(f, true); } catch (IOException e) { e.printStackTrace(); } PrintWriter pw = new PrintWriter(fw); pw.println(L8.getText()+"="+T3.getText()+" "+"正确答案:"+sum1 +' '); pw.flush(); try { fw.flush(); pw.close(); fw.close(); } catch (IOException e) { e.printStackTrace(); } L11.setText(String.valueOf(dacuo)); } } });
错题统计收集
FileWriter fw = null; try { //如果文件存在,则追加内容;如果文件不存在,则创建文件 File f=new File("D:/cuoti.txt"); fw = new FileWriter(f, true); } catch (IOException e) { e.printStackTrace(); } PrintWriter pw = new PrintWriter(fw); pw.println(L8.getText()+"="+T3.getText()+" "+"正确答案:"+sum1 +' '); pw.flush(); try { fw.flush(); pw.close(); fw.close(); } catch (IOException e) { e.printStackTrace(); }
B6.addActionListener(new ActionListener(){//错题本打开 public void actionPerformed(ActionEvent d) { try { Runtime.getRuntime().exec("notepad.exe D:/cuoti.txt"); } catch(Exception e) { System.out.println(e.getMessage()); } } });
语言切换
B3.addActionListener(new ActionListener(){//简体中文 public void actionPerformed(ActionEvent e) { L1.setText("题数:"); L2.setText("题目:"); L3.setText("输入答案:"); L4.setText("结果:"); L5.setText("答对题数:"); L6.setText("答错题数:"); L7.setText("答题时间:"); B0.setText("开始"); B1.setText("下一题"); B6.setText("错题集"); //B2.setText("计时"); } }); B4.addActionListener(new ActionListener(){//繁体中文 public void actionPerformed(ActionEvent e) { L1.setText("題數"); L2.setText("題目:"); L3.setText("輸入答案:"); L4.setText("結果:"); L5.setText("答對題數:"); L6.setText("答錯題數:"); L7.setText("答題時間:"); B0.setText("開始"); B1.setText("下一題"); B6.setText("錯題集"); } }); B5.addActionListener(new ActionListener(){//英文 public void actionPerformed(ActionEvent e) { L1.setText("Question number"); L2.setText("Test:"); L3.setText("Enter the answer:"); L4.setText("Result:"); L5.setText("Right number:"); L6.setText("Wrong number:"); L7.setText("Answer times:"); B0.setText("Run"); B1.setText("Next"); B6.setText("WrongTest"); } });
d.测试运行
PSP表格
PSP2.1 |
Personal Software Process Stages |
Estimated time(h) |
actual time(h) |
Planning |
计划 |
16 |
17 |
· Estimate |
估计这个任务需要多少时间 |
16 |
17 |
Development |
开发 |
8 |
9 |
· Analysis |
需求分析 (包括学习新技术) |
1 |
0.5 |
· Design Spec |
生成设计文档 |
0.5 |
0.5 |
· Design Review |
设计复审 |
1 |
1 |
· Coding Standard |
代码规范 |
0.5 |
0.2 |
· Design |
具体设计 |
2 |
1.5 |
· Coding |
具体编码 |
8 |
8 |
· Code Review |
代码复审 |
0.5 |
0.5 |
· Test |
测试(自我测试,修改代码,提交修改) |
1 |
1.5 |
Reporting |
报告 |
1.5 |
1.5 |
· |
测试报告 |
|
|
· |
计算工作量 |
0.5 |
1 |
· |
并提出过程改进计划 |
1 |
1 |
小结
此次代码结对完成,首先我和欧阳勇一起讨论并且决定了程序的总体布局和需要的组件,然后有了明确的目标。此次程序使用我的四则运算算法代码,结对写代码时当出现那种白痴错误时自己没发现而队友在旁边看着马上就能发现然后提醒你,毕竟当局者迷旁观者清。还有就是遇到问题时两个人一起商量或上网搜索然后总结讨论,这样解决问题不仅有效而且省时间。写代码时互相提出建议不断改进。
特别此次在写错题集部分时,出现文本刷新问题,刚开始会替换之前的内容并不能累计错题,然后一起讨论查资料然后综合建议解决了问题。还有就是计时部分解决方案,由于对线程不是很熟悉,然后也是两人一起学习研究解决了困难。
汉堡包式评价?
先来一片面包:两人达成共识使用java和gui实现。而且都认为朱茵是女神~没毛病。
再把肉放上:这次编程中队友的优点很容易发现他对于问题能快速发现并且解决问题的想法思路很清晰快速,做事效率高,当碰到问题时会马上进行处理不会先放那不管;缺点呢可能是编程耐心差了点。耐心点认真点无疑能使他编程水平更上一层楼,对于问题的处理能力也能得到加强。
然后再来一片面包: 两人编程中有领航员和驾驶员关系时确实能使工作更加顺利。也更能发现自己有缺但并更好的改进。