结对项目-四则运算 “软件”之升级版

结对项目-四则运算 “软件”之升级版

作业文件上传的github地址为:https://github.com/2392030179/work.git

作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232

结伴同学:黄健科,201606120094,http://www.cnblogs.com/huangjianke123/p/9860721.html

 

一、从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:

①生成题目,单个题目最多不能超过4个运算符,操作数小于100。

②用户可以输入答案

③若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

 

二、下面附有 8 个相互独立的可以扩展的方向。 

①程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3

②可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8

③用户答题结束以后,程序可以显示用户答题所用的时间

④用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数

⑤用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 

⑥程序可以出单个整数阶乘的题目:如:4!=24

⑦程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。

⑧程序可以设置皮肤功能,可以改变界面的颜色即可。


 

 三、开发环境

工具:intellij  idea

语言:java

 

四、团队分工

黄建科094:界面代码编写

黄观国075:部分核心算法代码书写


五、运行情况

①输入错误答案时:

②输入答案正确时:


 六、实验总结

首先呢,在这次的实验任务中,我组完成了实验的基本需求,也就是建造一个有可视界面的四则运算练习器,其中的无论时设计或编写界面代码,核心算法代码时,我们都碰到了不少的问题(这里就不赘述了),也获得了不少经验。

但事实上,由于时间的关系我们本来的实验计划并不能完整实施,就比如我组原计划在拓展功能上选择:

③用户答题结束以后,程序可以显示用户答题所用的时间

④用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数

⑦程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。

⑧程序可以设置皮肤功能,可以改变界面的颜色即可。

四个拓展功能加以实现的,但直到博客发布之前我组只完成了基本的需求,⑧号功能已经接近解决,而其他的三个功能也有了初步的眉目,所以在拓展功能实现方面,我组表示遗憾,望谅解。


核心代码展示

public  int question(){

        Random random=new Random();
        int ramNumber1=(int) (Math.random()*100);
        int ramNumber2=(int) (Math.random()*100);
        int ramNumber3=(int) (Math.random()*100);
        String[] operator={"+","-","*","/"};
        int operatorIndex1=(int) (Math.random()*4);
        int operatorIndex2=(int) (Math.random()*4);
        int resultFirst=0;
        if (operatorIndex1<operatorIndex2){
            resultFirst= arithmetic(ramNumber2,ramNumber3,operator[operatorIndex2]);
            resultLast= arithmetic(ramNumber1,resultFirst,operator[operatorIndex1]);
        }
        else {
            resultFirst= arithmetic(ramNumber1,ramNumber2,operator[operatorIndex1]);
            resultLast= arithmetic(resultFirst,ramNumber3,operator[operatorIndex2]);
        }

       // System.out.println(ramNumber1+operator[operatorIndex1]+ramNumber2+operator[operatorIndex2]+ramNumber3+"=");

        question=Integer.toString(ramNumber1)+operator[operatorIndex1]+Integer.toString(ramNumber2)
                +operator[operatorIndex2]+Integer.toString(ramNumber3)+"=";

        return resultLast;
    }

界面代码展示

public void mainFram(){
        Container container=getContentPane();
        setLayout(null);
        setBounds(100,100,1200,700);


        JButton setQuestion=new JButton("出题");
        setQuestion.setFocusPainted(false);
        setQuestion.setBounds(350,310,100,50);
        setQuestion.setFont(new Font("宋体",Font.BOLD,20));

        JButton submitAnswer=new JButton("提交");
        submitAnswer.setFocusPainted(false);
        submitAnswer.setBounds(750,310,100,50);
        submitAnswer.setFont(new Font("宋体",Font.BOLD,20));

        JTextField question=new JTextField();
        question.setFont(new Font("宋体",Font.BOLD,50));
        question.setBounds(350,0,500,250);

        JTextField answer=new JTextField();
        answer.setFont(new Font("宋体",Font.BOLD,50));
        answer.setBounds(350,260,500,50);

        JLabel jLabel=new JLabel("答题区:");
        jLabel.setFont(new Font("宋体",Font.BOLD,50));
        jLabel.setBounds(170,260,500,50);

        container.add(setQuestion);
        container.add(submitAnswer);
        container.add(question);
        container.add(answer);
        container.add(jLabel);
        setVisible(true);


        ariOperation=new AriOperation();
        result=ariOperation.question();
        question.setText(ariOperation.question);

        submitAnswer.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String judge1="回答正确";
                String judge2="回答错误,正确答案是:"+Integer.toString(result);


                if (Integer.parseInt(answer.getText()) == result)
                    new Judge(judge1).setVisible(true);
                else
                    new Judge(judge2).setVisible(true);
            }
        });

        setQuestion.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                ariOperation=new AriOperation();
                result=ariOperation.question();
                question.setText(ariOperation.question);
            }
        });


    }
}

 


七、结对软件过程耗时估计与统计表

PSP2.1 Personal Software Process Stages Time Senior Student(h) Time(h)
Planning 计划 3 3
· Estimate 估计这个任务需要多少时间 8 18
Development 开发 10 12
· Analysis 需求分析 (包括学习新技术) 2 3
· Design Spec 生成设计文档 2 1
· Design Review 设计复审 1 1
· Coding Standard 代码规范 1 3
· Design 具体设计 4 5
· Coding 具体编码 12 16
· Code Review 代码复审 1 2
· Test 测试(自我测试,修改代码,提交修改) 1 1
Reporting 报告 1 2
· 测试报告 0 0
· 计算工作量 1 1
· 并提出过程改进计划 0 1

 

posted @ 2018-10-28 16:19  黄观国  阅读(207)  评论(1编辑  收藏  举报