结对编程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

原文地址:https://www.cnblogs.com/23hr/p/6551053.html