• 第二次作业:结对编程,四则运算的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, "选择语言:
    ", "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)+"
    ";
                    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+"
    ";
                    }
                }
                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

     小结:

       第一次作业我用c语言编写,但是c语言编写GUI难度提升我就不会做了。于是我们采用java进行程序的重新编写,同时也对之前的一些缺点进行改进。由于对java比较生疏,这次编写过程中还是遇见了比较多的问题,对函数使用等较为生疏,但是我们一起解决问题,查找资料,分析错误。这次的结对编程让我体会到了合作的优势,之前一个人想要挺久的问题现在大多数都能比以前更快的解决,产生了1+1>2的效果。

        汉堡包评价:

        第一片面包:余洋同学认真,面对我们共同的短板没有气馁。不断传播积极的态度正能量,使我们在这个吃力的过程中任然保持了精神的愉悦。经常指出我犯得低级错误,大大提高了我们的效率。

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

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

        第二片面包:我由于编程基础并不扎实,以前学习都是停留在理论层次,实际操作能力并不强。我们这个学期的软件工程作业能很好地锻炼我们的实际操作能力。而且这次的结对编程也让我意识到很多自己的不足,希望以后能够共同进步。

  • 相关阅读:
    【C++学习】C++中的new VS C语言中的malloc
    【C++学习】多态——解析树实例分析
    【C++错误处理】multiple definition of
    VS.NET控件命名规范
    ASP.NET跨页面传值技巧总结
    marquee+js实现某个区域的“无缝滚动效果”
    vs2008与oracle数据库连接
    C#中HashTable的用法
    1. asp.net实现单点登陆
    GridView实现某列中相同值合并(不规则表)
  • 原文地址:https://www.cnblogs.com/Ajian044/p/6550774.html
Copyright © 2020-2023  润新知