• 结对编程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.1 Personal Software Process Stages Estimated time(h) actual time(h)
    Planning 计划 1 1.5
    · Estimate 估计这个任务需要多少时间 24 40
    Development 开发 24 34
    · Analysis 需求分析 (包括学习新技术) 1 1.2
    · Design Spec 生成设计文档 7 10
    · Design Review 设计复审 0.5 0.5
    · Coding Standard 代码规范 0.5 0.8
    · Design 具体设计 1.5 1.5
    · Coding 具体编码 20 30
    · Code Review 代码复审 10 15
    · Test 测试(自我测试,修改代码,提交修改) 1 3
    Reporting 报告 20 25
    · 测试报告 1 1.5
    · 计算工作量 0.5 1
    · 并提出过程改进计划 2 4

    六、总结

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

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

    汉堡包点评:

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

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

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

    七,综上,附上合照一张

  • 相关阅读:
    解决: 误将分区的GHO镜像文件恢复到整个硬盘
    腾讯的迷你门户首页新闻用到的Silverlight技术引用
    [转]如何在word文档里面的小方框内打钩
    Microsoft .NET Framework 3.5/4 Client Profile
    Java Web 开发软件下载地址
    tomcat 6.0环境, 网页超链接,文件下载另存为时,不能识别msi文件类型,另存为只能选htm和所有文件。
    英语小记
    去掉WORD文档中向下的小箭头(换行符)
    开个小餐馆要多少成本
    如何租间餐饮店
  • 原文地址:https://www.cnblogs.com/hy16/p/6550890.html
Copyright © 2020-2023  润新知