zoukankan      html  css  js  c++  java
  • 结对编程1-四则运算(基于GUI)

    林晓芳201421123092、陈惠201421123096

    coding 地址:https://git.coding.net/lianlian/92.96.1.git


    一.题目描述

    我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

    1. 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算;
    2. 有计时功能,能显示用户开始答题后的消耗时间;
    3. 界面支持中文简体/中文繁体/英语,用户可以选择一种。

    二.分析实现

    a.需求分析:

    1.实现GUI界面;

    2.实现历史对错题数记录;

    3.能够显示用户答题时间;

    4.提供中文简体/中文繁体/英语多种语言选择。

    b.功能设计:

    1.基本功能:多种语言选择、显示历史正确率、答题计时;

    2.扩展功能:生成用户错题集。

    c.设计实现:

    • Background//后台事件处理类:

            方法:createTest()//定义一个随机数

                     checkAnswer(String[] answers)//传入一组答案,校验答案

                     getQuestions()//获取完整的题目

                     getStandardAnswer()//获取标准答案

                     upDate(Integer right,Integer all)//上传正确率

    • Client//客户端类:

            方法:Client()//客户端构造器

                     createComponent()//创建面板

                     showTime()//显示答题时间

                     showHistory()//显示历史正确率

                     setLanguage()//设置客户端语言

                     actionPerformed(ActionEvent e)//按钮事件

    • Calculator//计算类:

            方法:add(Fraction a, Fraction b)//加法

                     sub(Fraction a, Fraction b)//减法 

                     mul(Fraction a, Fraction b)//乘法

                     div(Fraction a, Fraction b)//除法

    • Fraction//分数类:

            属性:numerator//分子

                     denominator//分母

            方法:creatfraction()//创建分数   

                     GCD(int m, int n)//计算最大公约数

                     Reduction(int m, int n)//约分

                     compare(String m, String n)//比较输入结果与答案

    • Test//运行类:

            main函数执行

    d.代码说明:

    上传正确率:

    复制代码
        public void upDate(Integer right,Integer all){
            try {
                writer = new BufferedWriter(new FileWriter(new File("history/accuracy.txt")));
                writer.write(right.toString());
                writer.newLine();
                writer.write(all.toString());
                writer.newLine();
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            
        }
    复制代码

    显示答题时间:

    复制代码
    public void showTime() {
            labTime = new JLabel(tips.get(1) + "00:00");
            labTime.setBounds(580, 0, 120, 50);
            jpMain.add(labTime);
            // 启动记时线程
            new Thread() {
                public void run() {
                    while (true) {
                        try {
                            Thread.sleep(1000);
                            seconds++;
                            if (seconds >= 60) {
                                seconds = 0;
                                minutes++;
                            }
                            // 修正分钟数和秒钟数
                            if (seconds < 10)
                                secStr = "0" + seconds.toString();
                            else
                                secStr = seconds.toString();
                            if (minutes < 10)
                                minStr = "0" + minutes.toString();
                            else
                                minStr = minutes.toString();
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        labTime.setText(tips.get(1) + minStr + ":" + secStr);
                        if(isEnd)
                            break;
                    }
                }
            }.start();
        }
    复制代码

    显示历史正确率:

    复制代码
        public void showHistory() {
            labAccuracy = new JLabel();
            labAccuracy.setBounds(150, 0, 120, 50);
            try {
                reader = new BufferedReader(new FileReader(new File("history/accuracy.txt")));
                his_rightNum = reader.readLine();
                his_allNum = reader.readLine();
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            labAccuracy.setText(tips.get(2) + his_rightNum + "/" + his_allNum);
            jpMain.add(labAccuracy);
        }
    复制代码

    设置客户端语言:

    复制代码
    public void setLanguage() {
            String[] choiceLanguage = { "简体中文", "繁体中文", "English" };
            String language = (String) JOptionPane.showInputDialog(null, "请选择客户端的语言:
    ", "Choice a language for client",
                    JOptionPane.PLAIN_MESSAGE, new ImageIcon("icon.png"), choiceLanguage, "简体中文");
            if (language == null) {
                System.exit(-1);
            } else {
                try {
                    reader = new BufferedReader(new FileReader(new File("language/" + language + ".txt")));
                    String s;
                    while ((s = reader.readLine()) != null) {
                        tips.add(s);
                    }
                    reader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    复制代码

    e.测试运行:

    三.PSP展示

    PSP2.1

    Personal Software Process Stages

    Time (%) Senior Student

    Time (%)

    Planning

    计划

    2h

    2.5h

    · Estimate

    估计这个任务需要多少时间

    40h

    42h

    · Analysis

    需求分析 (包括学习新技术)

    3h

    4h

    · Coding Standard

    代码规范

    1h

    1h

    · Design

    具体设计

    3h

    3h

    · Coding

    具体编码

    25h

    30h

    · Test

    测试(自我测试,修改代码,提交修改)

    1.5h

    2h

    Reporting

    报告

    1h

    1h

    四.总结

          不同的两个人在面对同件事情上会产生不一样的想法,这使得我们在刚刚开始合作的时候发生了一些小争执,但是我们俩都属于“说服型”的人,能够按照自己的分析将对方说服并与对方建立共识,最后成功的完成了这次的结对编程作业。对我来说,我认为结对编程是一次有趣的体验,它能够让你发现自身的不足,更能让你体会团队的魅力。但是,两个人在交流的时候一定要敢于提出自己的想法和看法,一定在大致上要达成共识,这样两个人的作用才能发挥到最大。互相影响、互相鞭策,我想这就是结对编程最大的魅力。

     
  • 相关阅读:
    软件工程实践总结
    beta答辩总结
    beta冲刺(6/7)
    beta 冲刺(5/7)
    beta冲刺(4/7)
    beta冲刺(3/7)
    beta冲刺(2/7)
    beta冲刺(1/7)
    CentOS7安装新版git
    NameError: name 'reload' is not defined
  • 原文地址:https://www.cnblogs.com/lianlianya/p/6545368.html
Copyright © 2011-2022 走看看