结对编程1-基于GUI的四则运算生成器

201421123016郑怀勇     201421123017康建灿

程序代码 / 康建灿

一、需求分析

  1. 记录用户的对错总数。
  2. 程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
  3. 有计时功能,能显示用户开始答题后的消耗时间。
  4. 具有GUI界面

二、功能设计

三、代码展示:

读取记录:

boolean has = false;
        int t=0,f=0;
         File file = new File("D:/text.txt");
         String line =null;
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
             try {
                 while((line = br.readLine()) != null){
                     String[] num = line.split("#");
                     f=Integer.parseInt(num[1]);
                     t=Integer.parseInt(num[3]);
                 }} catch (IOException ex) {
             }
        }catch (Exception e) {
            e.printStackTrace();
        }
        if(!has)
            tagLabel1.setText("无记录");

 

 

 文件数据保存:

public class pro {
    int t = 0, f = 0;

    void file(int d, int count) {
        File file = new File("D:/text.txt");
        String line = null;
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            try {
                while ((line = br.readLine()) != null) {
                    String[] num = line.split("#");
                    t = Integer.parseInt(num[1]);
                    f = Integer.parseInt(num[3]);
                }
            } catch (IOException ex) {
            }
        } catch (FileNotFoundException ex) {
            get(d, count);
        }
        get(d, count);
    }

    public void get(int d, int count) {
        FileOutputStream fop = null;
        File file;
        String content = "错误#" + (d + t) + "#正确#" + (count + f) + "#";
        try {
            file = new File("D:/text.txt");
            fop = new FileOutputStream(file);
            if (!file.exists()) {
                file.createNewFile();
            }
            byte[] contentInBytes = content.getBytes();
            fop.write(contentInBytes);
            fop.flush();
            fop.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fop != null) {
                    fop.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

 

随机生成四则运算及正确答案:

int a[][]=null;
        a=new int [1000][3];
        String[] b=null;
        b=new String [1000];
        String stil[]=null;
        stil=new String[1000];
        int i = 0;
        
        for(;i<m;i++){
            int h=(int)(0+Math.random()*(1-0+1));
            if(h==1){
                Zhengshu(i,b,c);
            }
            else
            {
                Fenshu(i,b,a,c);
            }
            answerEdit[i] = new JTextField();
            panel.add(new JLabel(b[i]));
            panel.add(answerEdit[i]);
        }

```

public static String Fenshu(int i, String b[], int a[][], String c[]) {
        int x = (int) (0 + Math.random() * (9 - 0 + 1));
        int y = (int) (0 + Math.random() * (9 - 0 + 1));
        while (x >= y || y == 0 || x == 0) {
            x = (int) (0 + Math.random() * (9 - 0 + 1));
            y = (int) (0 + Math.random() * (9 - 0 + 1));
        }
        int k = (int) (0 + Math.random() * (9 - 0 + 1));
        int t = (int) (0 + Math.random() * (9 - 0 + 1));
        while (k >= t || t == 0 || k == 0) {
            k = (int) (0 + Math.random() * (9 - 0 + 1));
            t = (int) (0 + Math.random() * (9 - 0 + 1));
        }
        int o = (int) (0 + Math.random() * (3 - 0 + 1));
        if (o == 0) {
            b[i] = "(" + x + "/" + y + ")+(" + k + "/" + t + ")=";
            a[i][0] = x * t + k * y;
            a[i][1] = y * t;
            int n = divisor(a[i][0], a[i][1]);
            c[i] = a[i][0] / n + "/" + a[i][1] / n;
        }
        if (o == 1) {
            b[i] = "(" + x + "/" + y + ")-(" + k + "/" + t + ")=";
            a[i][0] = x * t - k * y;
            a[i][1] = y * t;
            int n = divisor(a[i][0], a[i][1]);
            c[i] = a[i][0] / n + "/" + a[i][1] / n;
        }
        if (o == 2) {
            b[i] = "(" + x + "/" + y + ")*(" + k + "/" + t + ")=";
            a[i][0] = x * k;
            a[i][1] = y * t;
            int n = divisor(a[i][0], a[i][1]);
            c[i] = a[i][0] / n + "/" + a[i][1] / n;
        }
        if (o == 3) {
            b[i] = "(" + x + "/" + y + ")÷(" + k + "/" + t + ")=";
            a[i][0] = x * t;
            a[i][1] = k * y;
            int n = divisor(a[i][0], a[i][1]);
            c[i] = a[i][0] / n + "/" + a[i][1] / n;
        }
        return b[i] + c[i];
    };

    public static String Zhengshu(int i, String b[], String c[]) {
        int x = (int) (0 + Math.random() * (100 - 0 + 1));
        int y = (int) (0 + Math.random() * (100 - 0 + 1));
        int z = (int) (0 + Math.random() * (3 - 0 + 1));
        if (z == 0) {
            b[i] = x + "+" + y + "=";
            c[i] = x + y + "";
        }
        if (z == 1) {
            b[i] = x + "-" + y + "=";
            c[i] = x - y + "";
        }
        if (z == 2) {
            b[i] = x + "*" + y + "=";
            c[i] = x * y + "";
        }
        if (z == 3) {
            b[i] = x + "÷" + y + "=";
            int n = divisor(x, y);
            c[i] = x / n + "/" + y / n;
        }
        return b[i] + c[i];
    }

    public static int divisor(int i, int j)// 最大公约数
    {
        int k = 1, s;
        for (s = 1; s <= i && s <= j; s++) {
            if (i % s == 0 && j % s == 0)
                k = s;
        }
        return k;

    }

 

计时器:

JLabel timeText = new JLabel();

        now.setHours(0);
        now.setMinutes(0);
        now.setSeconds(0);
        final Timer timer = new Timer(1000, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                Date now2 = new Date(now.getTime() + 1000);
                now = now2;
                SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
                timeText.setText(formatter.format(now));
            }
        });
        timer.start();
        timeText.setText("用时  :" + timeText.getText());
        // timeText.setText("time");
        commitBtn = new JButton("确定");
        commitBtn.addActionListener(this);

        commitBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                timer.stop();
```
}

显示结果:

public result(int m2, int count2,double g2,String time2) {
        // TODO Auto-generated constructor stub
        this.setBounds(500, 250, 450, 200);
        this.setResizable(true);
        this.m=m2;
        this.count=count2;
        this.g=g2;
        this.time=time2;
        this.setTitle("四则运算");
        jg();
    }

    private void jg(){
        JPanel mainPanel = new JPanel();
        mainPanel.setLayout(new BorderLayout(5,5));
        
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(2,2));
        panel.add(new JLabel("本次共出"+m+"题,答对"+count+"题,正确率为:"+g+",用时  :"+time));
        JPanel panel2 = new JPanel();
        mainPanel.add("Center",panel);
        mainPanel.add("South",panel2);
        
        add(mainPanel);
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        
    }
}

四、测试运行截图:

主界面:

生成四则运算:

结果:

存储于文本:

五、PSP

PSP2.1Personal Software Process StagesEstimated time(h)actual time(h)
Planning计划11.5
· Estimate估计这个任务需要多少时间2440
Development开发2434
· Analysis需求分析 (包括学习新技术)11.2
· Design Spec生成设计文档710
· Design Review设计复审0.50.5
· Coding Standard代码规范0.50.8
· Design具体设计1.51.5
· Coding具体编码2030
· Code Review代码复审1015
· Test测试(自我测试,修改代码,提交修改)13
Reporting报告2025
·测试报告11.5
·计算工作量0.51
·并提出过程改进计划24

六、总结

   此次与康建灿一起完成结队作业,先对功能进行分析,最后选取了存储功能以及计时器功能,并以康建灿的代码作为基础代码进行扩展延伸。由于2个人的编程能力都不是很强,过程中一直磕磕碰碰,有很多不懂,尤其是在图形界面方面,可以说2个人都很薄弱,一直在巩固以前学习的Java知识。

  而结队无疑提高了我们的效率,俗话说三个臭皮匠顶个诸葛亮,在编程过程中,能够达到互相监督,互相学习的效果。正所谓旁观者清,当其中一个人在编程,另一个人就能在旁边更直观地发现错误。

 

汉堡包点评:

先来一片面包:我们有着共同的目标,都想写好一个代码,能给对方予以依靠;

再把肉放上:就算2个人的编程能力都不是很好,但也不能自暴自弃,更不能嫌弃对方,而是应该互相鼓励,强调我们可以做到更好;

然后再来一片面包:最后,思路与方向都清晰了,这时,更应该互相激励,努力做到更好。

七,综上,附上合照一张

转载于:https://www.cnblogs.com/hy16/p/6550890.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值