首页 > 代码库 > 结对编程1 黄睿(201421123069)周迪(201421123089)
结对编程1 黄睿(201421123069)周迪(201421123089)
黄睿 201421123069 周迪 201421123089
coding.net 地址:https://coding.net/u/H1159650478/p/sizeyunsuanjiaqiang/git
1.a. 需求分析:
(1)实现GUI界面;
(2)实现历史题目对错的统计;
(3)实现用户答题题总共花费的时间。
b. 程序设计:
c. 代码展示:
number这个类主要用于数字的设定,定义分子分母,如果是初级运算则分母直接为1,反之分子分母随机生成并生成为高级运算
class number{ int numerator; int denominator; number(int a,int b){ this.denominator=b; this.numerator=a; } number(){ } public void setNumeratorAndDenominator() { this.denominator=(int)(Math.random()*10) +1; this.numerator=(int)(Math.random()*10)%this.denominator; } public void setNumerator(){ this.numerator=(int)(Math.random()*10); } }
基于上次的作业进行的加减乘除运算
number add(){ int numD,num1N,num2N; int MaxGys=MaxGys(num1.denominator,num2.denominator); numD=num1.denominator*num2.denominator/MaxGys; num1N=numD/num1.denominator*num1.numerator; num2N=numD/num2.denominator*num2.numerator; number result=new number(); result.denominator=numD; result.numerator=num1N+num2N; result=simplification(result); return result; }
这些代码就是在做GUI界面了,我们设置了panel1~panel6来设定每一步的页面设计
public class test extends JFrame implements ActionListener{ testExerciseCreater pMaker=new testExerciseCreater(); JTextArea area1=new JTextArea(1,10); JTextArea area2=new JTextArea(1,10); JPanel panel=new JPanel(); JPanel panel1=new JPanel(); JPanel panel2=new JPanel(); JPanel panel3=new JPanel(); JPanel panel4=new JPanel(); JPanel panel5=new JPanel(); JPanel panel6=new JPanel(); JLabel label=new JLabel("请问你要做几道题目?"); JLabel label1=new JLabel("初级 or 高级?"); JLabel label2=new JLabel(); JLabel label3=new JLabel(); JLabel label4=new JLabel(); JLabel label5=new JLabel(); JButton button =new JButton("确定"); JButton button1 =new JButton("初级"); JButton button2 =new JButton("高级"); JButton button3 =new JButton("下一步"); JButton button4 =new JButton("提交"); JButton button5 =new JButton("重返"); int trueCount=0; String questNum; int easyOrDifficult,i=1; long startTime; long endTime; public test(){ super("简单四则运算"); area1.setText(""); area2.setText(""); button.setActionCommand("确定"); button.addActionListener(this); button1.setActionCommand("初级"); button1.addActionListener(this); button2.setActionCommand("高级"); button2.addActionListener(this); button3.setActionCommand("下一步"); button3.addActionListener(this); button4.setActionCommand("提交"); button4.addActionListener(this); button5.setActionCommand("重返"); button5.addActionListener(this); panel1.add(label); panel1.add(area1); panel1.add(button); getContentPane().add(panel); panel.add(panel1); panel2.add(label1); panel2.add(button1); panel2.add(button2); panel3.add(label2); panel3.add(area2); panel3.add(button4); panel4.add(label3); panel4.add(button3); panel5.add(label4); panel6.add(label5); panel6.add(button5); this.pack(); } @Override
这里我们在D盘建立了一个count.txt文本,使它最初的正确和错误题目数都为0,然后运行一次就统计一次并更新
File file=new File("D:/count.txt"); BufferedReader reader=null; try { reader=new BufferedReader(new FileReader(file)); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } String i=null; String i1=null; try { i=reader.readLine(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { i1=reader.readLine(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } PrintWriter writer=null; try { writer =new PrintWriter(new FileOutputStream(file)); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } writer.println((Integer.parseInt(i)+trueCount)); writer.println((Integer.parseInt(i1)+(Integer.parseInt(questNum)-trueCount))); writer.flush(); try { reader=new BufferedReader(new FileReader(file)); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { i=reader.readLine(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { i1=reader.readLine(); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }
这些代码前半部分是最后界面输出的正确数、错误数、耗时、总正确数和总错误数;
后半部分就是循环出题的一个体现,如果选择2道题,做完一道之后返回到panel2重新做第二题。
label4.setText("正确:"+trueCount +" 错误:"+(Integer.parseInt(questNum)-trueCount) +" 耗时: "+((endTime-startTime)/1000) +" s" +" 总计正确: "+i +" 总计错误: "+i1); panel.remove(panel4); panel.add(panel5); panel.revalidate(); panel.repaint(); } } if(e.getActionCommand().equals("提交")){ if(area2.getText().equals(pMaker.resultStr)){ label3.setText("正确"); trueCount++; area2.setText(""); pMaker=new testExerciseCreater(); pMaker.creatExecercise(easyOrDifficult); label2.setText(pMaker.quesStr); panel.remove(panel3); panel.add(panel4); panel.revalidate(); panel.repaint(); } else{ label3.setText("错误,正确答案是: "+pMaker.resultStr); pMaker=new testExerciseCreater(); area2.setText(""); pMaker.creatExecercise(easyOrDifficult); label2.setText(pMaker.quesStr); panel.remove(panel3); panel.add(panel4); panel.revalidate(); panel.repaint(); } } if(e.getActionCommand().equals("reenter")){ area1.setText(""); panel.remove(panel6); panel.add(panel1); panel.revalidate(); panel.repaint(); } }
d. 程序运行:
初始界面:
选择界面:
选择初级计算:
选择高级计算:
e. 小结感受:这次编程作业用到了以前只接触了一点点的图形界面,刚开始加功能进去觉得还可以,没有非常困难,但当做完功能之后请教别人图形界面如何起步时被告知最好先写GUI,然后就有点崩溃了。然后由于我上次的编程有点简单,所以就用了搭档的上一次作业,我们通过查看以前的书本,百度和请教大神,最后结对作业也完成了,但我们也发现自己还有很多不足需要补救,最明显的就是对于GUI就是小白这方面。对于1+1是否大于2,我们小组而言答案是肯定的,虽然对于老师给出的互换角色的方法没有非常适应,但我们还是觉得比自己一个人强很多,以后也会更好的去适应。最后感谢给予我们帮助的大神和老师们。
2.结对照骗:
3.PSP:
PSP2.1 | Personal Software Process Stages | Time Senior Student | Time |
Planning | 计划 | 5 | 6 |
· Estimate | 估计这个任务需要多少时间 | 7 | 6 |
Development | 开发 | 80 | 77 |
· Analysis | 需求分析 (包括学习新技术) | 3 | 5 |
· Design Spec | 生成设计文档 | 5 | 6 |
· Design Review | 设计复审 | 5 | 9 |
· Coding Standard | 代码规范 | 4 | 3 |
· Design | 具体设计 | 23 | 24 |
· Coding | 具体编码 | 35 | 30 |
· Code Review | 代码复审 | 7 | 9 |
· Test | 测试(自我测试,修改代码,提交修改) | 15 | 25 |
Reporting | 报告 | 10 | 7 |
· | 测试报告 | 5 | 4 |
· | 计算工作量 | 5 | 4 |
· | 并提出过程改进计划 | 2 | 3 |
结对编程1 黄睿(201421123069)周迪(201421123089)