菜鸟学IT之四则运算升级版

 

  菜鸟学IT之四则运算升级版

本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213

团队代码github远程仓库的地址:https://github.com/Linagong/ruangong2.git

第一部分:要求

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

  • 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100。
  • 用户可以输入答案
  • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

八个可扩展方向: 

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户答题结束以后,程序可以显示用户答题所用的时间
  4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
  5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
  6. 程序可以出单个整数阶乘的题目:如:4!=24
  7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
  8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

第二部分:开发环境

 

第三部分:实现与统计图

1.统计图

PSP2.1

Personal Software Process Stages

Time Senior Student(h)

Time(h)

Planning

计划

0.2

0.1

· Estimate

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

8

10

Development

开发

1

1.5

· Analysis

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

1

5

· Design Spec

生成设计文档

0

0

· Design Review

设计复审

0

0

· Coding Standard

代码规范

0.1

0.1

· Design

具体设计

0.2

0.2

· Coding

具体编码

3

5

· Code Review

代码复审

0

0

· Test

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

0.5

1

Reporting

报告

0

0

Test Report

测试报告

0

0

·workload

计算工作量

8

10

·correction

并提出过程改进计划

1

 

2.功能实现 

  • 用户登录功能
//字符串记录输入信息
JLabel name=new JLabel("用户名",JLabel.RIGHT);
        pan2.add(name);
        TextField tf_name=new TextField(20);
        pan2.add(tf_name);

        JLabel pass = new JLabel("密   码",JLabel.RIGHT);
        pan3.add(pass);
        TextField password=new TextField(20);
        password.setEchoChar('*');
        pan3.add(password);
b_log.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                //获取用户名和密码,进行校验
                String myUsername=tf_name.getText();
                String myPassword=password.getText();
                if(myUsername.equals("root")&& myPassword.equals("123456")){
                    JOptionPane.showMessageDialog(null, "登陆成功!");
                    frameLogin.dispose();
                    jieMian CK=new jieMian();//跳转到运算界面

                }
                else{
                    JOptionPane.showMessageDialog(null, "账号或密码错误!");
                    name.setText( "");
                    password.setText( "");
                }

            }
        });
  • 阶乘实现
case 4:
//当随机数为4是进行阶乘运算
                        sum=1;
                        T2.setText(d+"!");
                        for (int i = 1; i<=d;i++){
                            sum=sum*i;
                        }
                        
  • 背景修改
boolean backgroundNumber=true;//记录颜色布尔型值转换颜色
B4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (backgroundNumber==true){
                    panel.setBackground(Color.CYAN);//panel组件颜色
                    panel2.setBackground(Color.CYAN);//panel2组件颜色
                    panel1.setBackground(Color.cyan);//panel1组件颜色
                    backgroundNumber=false;
                }else {
                    panel.setBackground(Color.red);
                    panel2.setBackground(Color.red);
                    panel1.setBackground(Color.red);
                    backgroundNumber=true;
                }
            }
        });
  • 负整数运算
//把数字记录到suanshi字符串中
switch (first){
                    case 0:
                        switch (second){
                            case 0:

                                sum=a+b+c;
                                suanshi=fushu(a,suanshi);
                                suanshi=suanshi+"+";
                                suanshi=suanshi+fushu(b,suanshi);
                                suanshi=suanshi+"+";
                                suanshi=suanshi+fushu(c,suanshi);
                                T2.setText(suanshi);

                              break;
//判断随机产生的随机数是否为负数
    private static String fushu(int a,String suanshi) {

        if (a<0) {
            suanshi ="(" + a + ")";
        }
        else {
            suanshi = "" + a;
        }
        return suanshi;
    }
  • 题目数目限定
tishu=Integer.parseInt(T1.getText());//获取总题数
                if(tishu>5){
                    JOptionPane.showMessageDialog(new JFrame().getContentPane(),
                            "题数不能大于5",
                            "四则运算", JOptionPane.INFORMATION_MESSAGE);

                    T1.setText("");
                    tishu=Integer.parseInt(T1.getText());//获取总题数
                }
  • 限定答题时间为120秒
timer.schedule(new TimerTask()
                {
                    public void run() {
                        finishTime =System.currentTimeMillis();
                        duration= finishTime - startTime;
                        if(duration/1000==120 && summary<tishu)
                        {
                            
                            frame.setVisible(false);

                        }
                        String str=df.format(new Date(duration));
                        T5.setText(str);
                    }
                }, 1000, 1000);
  • 答题结束弹出提示答题时间窗口
JOptionPane.showMessageDialog(null,"答题时间已到。答题总题数为"+(dadui+dacuo)+"," +
 "答对题数为"+dadui+",答错题数为"+dacuo+"," +"未答题题数为"+(tishu-dacuo-dadui)+"," +
"答题使用时间:"+(allDuration +duration)/1000+"秒。");

  

第四部分:运行结果

效果1:登录页面

 

效果2:自定义颜色面板

 

效果3:题目限定

 

效果4:负整数运算

 

效果5:阶乘运算

效果6:计算结束结束

 

第五部分:合作伙伴 

        在这次实验中,我与伙伴的合作分工合理,每个人都负责自己擅长的部分。

本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213

团队代码github远程仓库的地址:https://github.com/Linagong/ruangong2.git

第一部分:要求

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

  • 自动生成题目,单个题目最多不能超过4个运算符,操作数小于100。
  • 用户可以输入答案
  • 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。

八个可扩展方向: 

  1. 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
  2. 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
  3. 用户答题结束以后,程序可以显示用户答题所用的时间
  4. 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
  5. 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名 
  6. 程序可以出单个整数阶乘的题目:如:4!=24
  7. 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
  8. 程序可以设置皮肤功能,可以改变界面的颜色即可。

第二部分:开发环境

 

第三部分:实现与统计图

1.统计图

PSP2.1

Personal Software Process Stages

Time Senior Student(h)

Time(h)

Planning

计划

0.2

0.1

· Estimate

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

8

10

Development

开发

1

1.5

· Analysis

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

1

5

· Design Spec

生成设计文档

0

0

· Design Review

设计复审

0

0

· Coding Standard

代码规范

0.1

0.1

· Design

具体设计

0.2

0.2

· Coding

具体编码

3

5

· Code Review

代码复审

0

0

· Test

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

0.5

1

Reporting

报告

0

0

Test Report

测试报告

0

0

·workload

计算工作量

8

10

·correction

并提出过程改进计划

1

 

2.功能实现 

  • 用户登录功能
//字符串记录输入信息
JLabel name=new JLabel("用户名",JLabel.RIGHT);
        pan2.add(name);
        TextField tf_name=new TextField(20);
        pan2.add(tf_name);

        JLabel pass = new JLabel("密   码",JLabel.RIGHT);
        pan3.add(pass);
        TextField password=new TextField(20);
        password.setEchoChar('*');
        pan3.add(password);
b_log.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                //获取用户名和密码,进行校验
                String myUsername=tf_name.getText();
                String myPassword=password.getText();
                if(myUsername.equals("root")&& myPassword.equals("123456")){
                    JOptionPane.showMessageDialog(null, "登陆成功!");
                    frameLogin.dispose();
                    jieMian CK=new jieMian();//跳转到运算界面

                }
                else{
                    JOptionPane.showMessageDialog(null, "账号或密码错误!");
                    name.setText( "");
                    password.setText( "");
                }

            }
        });
  • 阶乘实现
case 4:
//当随机数为4是进行阶乘运算
                        sum=1;
                        T2.setText(d+"!");
                        for (int i = 1; i<=d;i++){
                            sum=sum*i;
                        }
                        
  • 背景修改
boolean backgroundNumber=true;//记录颜色布尔型值转换颜色
B4.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                if (backgroundNumber==true){
                    panel.setBackground(Color.CYAN);//panel组件颜色
                    panel2.setBackground(Color.CYAN);//panel2组件颜色
                    panel1.setBackground(Color.cyan);//panel1组件颜色
                    backgroundNumber=false;
                }else {
                    panel.setBackground(Color.red);
                    panel2.setBackground(Color.red);
                    panel1.setBackground(Color.red);
                    backgroundNumber=true;
                }
            }
        });
  • 负整数运算
//把数字记录到suanshi字符串中
switch (first){
                    case 0:
                        switch (second){
                            case 0:

                                sum=a+b+c;
                                suanshi=fushu(a,suanshi);
                                suanshi=suanshi+"+";
                                suanshi=suanshi+fushu(b,suanshi);
                                suanshi=suanshi+"+";
                                suanshi=suanshi+fushu(c,suanshi);
                                T2.setText(suanshi);

                              break;
//判断随机产生的随机数是否为负数
    private static String fushu(int a,String suanshi) {

        if (a<0) {
            suanshi ="(" + a + ")";
        }
        else {
            suanshi = "" + a;
        }
        return suanshi;
    }
  • 题目数目限定
tishu=Integer.parseInt(T1.getText());//获取总题数
                if(tishu>5){
                    JOptionPane.showMessageDialog(new JFrame().getContentPane(),
                            "题数不能大于5",
                            "四则运算", JOptionPane.INFORMATION_MESSAGE);

                    T1.setText("");
                    tishu=Integer.parseInt(T1.getText());//获取总题数
                }
  • 限定答题时间为120秒
timer.schedule(new TimerTask()
                {
                    public void run() {
                        finishTime =System.currentTimeMillis();
                        duration= finishTime - startTime;
                        if(duration/1000==120 && summary<tishu)
                        {
                            
                            frame.setVisible(false);

                        }
                        String str=df.format(new Date(duration));
                        T5.setText(str);
                    }
                }, 1000, 1000);
  • 答题结束弹出提示答题时间窗口
JOptionPane.showMessageDialog(null,"答题时间已到。答题总题数为"+(dadui+dacuo)+"," +
 "答对题数为"+dadui+",答错题数为"+dacuo+"," +"未答题题数为"+(tishu-dacuo-dadui)+"," +
"答题使用时间:"+(allDuration +duration)/1000+"秒。");

  

第四部分:运行结果

效果1:登录页面

 

效果2:自定义颜色面板

 

效果3:题目限定

 

效果4:负整数运算

 

效果5:阶乘运算

效果6:计算结束结束

 

第五部分:合作伙伴 

        在这次实验中,我与伙伴的合作分工合理,每个人都负责自己擅长的部分。

猜你喜欢

转载自www.cnblogs.com/JGaoLin/p/9846103.html