结对作业(1)----基于GUI的四则运算

小伙伴:201421123031 余洋 201421123044  潘志坚

 

 题目要求:

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

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

 

 题目分析:

    1.GUI实现。

     2.数据提取,保存历史纪录。

     3.计时功能。

     4.多语言的支持。

 

 功能分析:

     1.基本功能

      实现GUI界面。

     2.扩展功能

     计时功能,支持多语言。

     3.用户数据提取,历史纪录。

 

 

 设计实现:

     1.本实验采用JAVA。

     2.编写GUI界面,调整窗口位置。

     3.编写计时器类。

     4.编写多语言支持类。

     5.编写数据提取类。

 

 代码说明:

     1.GUI

public void createComponent() {
        jpMain = new JPanel();
        jpMain.setBackground(Color.gray);
        jpMain.setLayout(null);
        showTime();
        showHistory();
        btnSubmit = new JButton(tips.get(3));
        btnSubmit.setBounds(250, 500, 90, 40);
        btnSubmit.addActionListener(this);
        jpMain.add(btnSubmit);
        btnReset = new JButton(tips.get(4));
        btnReset.setBounds(450, 500, 90, 40);
        btnReset.addActionListener(this);
        jpMain.add(btnReset);
        jpTest = new JPanel();
        jpTest.setLayout(new GridLayout(Background.testNum, 1, 20, 20));
        jpTest.setBackground(Color.gray);
        for (int i = 0; i < Background.testNum; i++) {
            jpQuestions[i] = new JPanel();
            jpQuestions[i].setBackground(Color.gray);
            jpQuestions[i].setLayout(null);
            labQuestions[i] = new JLabel(questions[i], JLabel.CENTER);
            labQuestions[i].setFont(new Font("Consolas", 0, 20));
            jpQuestions[i].add(labQuestions[i]);
            labQuestions[i].setBounds(0, 0, 350, 25);
            tfdAnswer[i] = new JTextField(8);
            tfdAnswer[i].setFont(new Font("Consolas", 0, 12));
            tfdAnswer[i].setBackground(Color.white);
            jpQuestions[i].add(tfdAnswer[i]);
            tfdAnswer[i].setBounds(350, 0, 60, 25);
            jpTest.add(jpQuestions[i]);
        }
        jpMain.add(jpTest).setBounds(100, 60, 500, 400);
        add(jpMain);
    }

 

      2.计时功能的实现。

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();
    }

 

      3.多语言的实现。

public void setLanguage() {
        String[] choiceLanguage = { "简体", "繁体", "Eng" };
        String language = (String) JOptionPane.showInputDialog(null, "选择语言:\n", "Choose language",
                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();
            }
        }
    }

 

      4.数据提取的实现。

public void actionPerformed(ActionEvent e) {
        if (e.getSource() == btnSubmit) {
            isEnd=!isEnd; 
            for (int i = 0; i < Background.testNum; i++) {
                answers[i]=tfdAnswer[i].getText(); 
            }
            wrong= background.checkAnswer(answers); 
            String s=null;
            if(wrong.length==0)
                s=tips.get(5);
            else{
                s=tips.get(6)+"\n";
                String standardAnswer[]=new String[Background.testNum];
                standardAnswer=background.getStandardAnswer();
                for(int i=0;i<wrong.length;i++){
                    s=s+new Integer(wrong[i])+":"+standardAnswer[new Integer(wrong[i])-1];
                    s=s+"\n";
                }
            }
            JOptionPane.showMessageDialog(null, s, "report",JOptionPane.PLAIN_MESSAGE);
            background.upDate(new Integer(his_rightNum+(Background.testNum-wrong.length)),new Integer(his_allNum+Background.testNum));
        }
    }
}

 

 测试运行:

码市:https://coding.net/u/AJIAN044/p/cyuyan/git/tree/%E7%AC%AC%E4%BA%8C%E6%AC%A1%E4%BD%9C%E4%B8%9A/

 

 

 PSP展示:

 

PSP Personal Software Process Stages Time (%) Senior Student Time (%)
Planning  计划 3 2
· Estimate 估计这个任务需要多少时间 78 111.5
Development 开发 10 10
· Analysis 需求分析 (包括学习新技术) 1 1.5
· Design Spec 生成设计文档 5 6
· Design Review 设计复审 4 6
· Coding Standard 代码规范 1 2
· Design 具体设计 5 6
· Coding 具体编码 36 60
· Code Review 代码复审 7 9
· Test 测试(自我测试,修改代码,提交修改) 8 10
Reporting 报告 1 1

 

 小结:

    个人作业1使用的是C语言实现,但不会使用C语言实现GUI,便查阅资料使用JAVA实现此次实验。有一个伙伴,坐在一起,并肩作战,面对着同一台显示器,使用着同一键盘,同一个鼠标,一起思考,一起分析,一起编程是一个有趣的过程,通过此次实验我了解到1+1有时会>2,所谓旁观者清,这样会更好更快速准确的找到错误并修改,事半功倍。

    汉堡包评价:

    第一片面包:潘志坚同学认真,愿意面对困难并设法解决问题,比较耐心,和我性格互补所以选择同他合作,两个人结对编程,可以优势互补,互相学习。

    中间的肉:结对编程优势在于两人有各自擅长的模块,能较高效率。

    中间的青菜:因为不会使用C语言实现GUI,是我们俩共同的短板,所以在新的语言环境下花了较多的时间。

    第二片面包:我本身没有很扎实的编程基础,在编写过程中会有些吃力,而这次结对编程则给我留下了深刻的印象,不仅在一定程度上避免了这些问题,还让我明显体会到了结对编程的优越性。两个人一起编程可以有效避免一些可笑的低级错误,还有可以一起分析、解决问题,就好像是通过两人不断的头脑风暴和知识碰撞来解决问题。

 

posted on 2017-03-14 20:43  活性乳酸君  阅读(269)  评论(2编辑  收藏  举报