zoukankan      html  css  js  c++  java
  • 结对项目(简单四则运算升级并实现界面化)

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213

    我的Github:https://github.com/CTqin/CTqin

    一、基本要求

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

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

    二、我做的扩展方向

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

    三、开发环境下调试:IDEA

                                           

    四、实现

         本次实验利用Java实现,用户界面的实现使用的是Javax框架。

    通过产生随机数0-5对应实现随机出题目

    int x=(int)(Math.random()*5);
    int x=(int)(Math.random()*5);
    switch(x)
    {
    case 0:
    function1();//一个运算符,整数,整数
    break;
    case 1:
    function2();//一个运算符,整数,分数
    break;
    case 2:
    function3();//一个运算符,分数,分数
    break;
    case 3:
    function4();//两个运算符
    break;
    case 4:
    function5();//求阶乘
    break;
    case 5:
    function6();//题目出现负数
    break;

    }

                                                                      功能function0-4的逻辑和上次发表的博客逻辑一样,不做详细解析,具体请看代码。

       1. 阶乘功能的实现在function5()方法中

    private void function5()//阶乘
    {
    int a=(int)(Math.random()*10+1);//求1~10的阶乘
    t.setText(a+"!");
    for(int i=1;i<=a;i++)
    {
    answer =1;
    answer = answer *i;
    }
    }

    产生随机产生一到1-10随机数a,利用for语句实现阶乘功能。其中answer为全局变量,计算出answer方便后来用来检验答案是否正确。

    2.功能六题目出现负数的处理

     private void function6()//表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。
        {
            int a=(int)(Math.random()*99+1)*-1;//随机生成-1~-99的负整数
            int b=(int)(Math.random()*10+1);
            int x1=(int)(Math.random()*4);
            switch(x1)
            {
                case 0:
                {
                    t.setText("("+a+") "+String.valueOf(ch[0])+" "+b);
                    answer =a+b;
                }
                break;
                case 1:
                {
                    t.setText("("+a+") "+String.valueOf(ch[1])+" "+b);
                    answer =a-b;
                }
                break;
                case 2:
                {
                    t.setText("("+a+") "+String.valueOf(ch[2])+" "+b);
                    answer =a*b;
                }
                break;
                case 3:
                {
                    t.setText("("+a+") "+String.valueOf(ch[3])+" "+b);
                    answer =(float)a/(float)b;
                }
                break;
            }
    
        }

    通过随机产生的随机数乘(-1)即可产生随机负数。

    3.功能背景颜色的改变

         if(e.getSource()==colorchangebtn)
            {
                if (colorchange==true) {
                    p1.setBackground(Color.red);
                    p2.setBackground(Color.red);
                    colorchange=false;
                }
                else
                {
                    p1.setBackground(Color.white);
                    p2.setBackground(Color.white);
                    colorchange=true;
                }
            }
    利用actionPerformed(ActionEvent e)事件监听器,处理单击鼠标时触发的事件
    判断是否是点击的colorchangebtn按钮,若已经点击则进行背景颜色改变

    4.菜单栏目功能
         JMenuBar menubar = new JMenuBar();
            JMenu LoginMenu = new JMenu("系统登录");
            JMenu UserMangeMenu = new JMenu("用户管理");
            JMenu backColorMenu = new JMenu("背景功能");
            JMenu HelpMenu = new JMenu("关于");
    
            JMenuItem userLoginMenu= new JMenuItem("用户登录");
            userLoginMenu.addActionListener(new LoginActionListener());
            JMenuItem exitLoginMenu= new JMenuItem("退出");
           // JMenuItem myBackgroudColor=new JMenuItem("背景颜色改变");
    
    
    
            exitLoginMenu.addActionListener(new exitmyitem());
            LoginMenu.add(userLoginMenu);
            LoginMenu.add(exitLoginMenu);
           // backColorMenu.add(myBackgroudColor);
            menubar.add(LoginMenu);
            menubar.add(UserMangeMenu);
            menubar.add(backColorMenu);
            menubar.add(HelpMenu);
            //将菜单加入至菜单栏
           p1.add(menubar);

    添加菜单栏不会,百度搜索了下,具体参考了http://blog.sina.com.cn/s/blog_5e94b1030100slkn.html

    5.计时功能的实现

    Timer timertask = new Timer(1000, this);//间隔1秒
            this.tmr = timertask;//添加时间

    定时器,每1000毫秒进行更新

     int m = Integer.parseInt(ShowTime.getText());
                m--;
                ShowTime.setText("" + m);
                if (m <= 0)
                {
                    tmr.stop();
                    JOptionPane.showMessageDialog(null, "超出答题时间!");
                    this.setVisible(false);
                }

    文本框进行显示,超出时间弹出消息框提示。

    ShowTime.setText(String.valueOf(settingtime.getText()));//在显示时间框里显示以获取的时间
    
                    int n1=120,n2=5;
                    if(n1<(Integer.parseInt(ShowTime.getText())))
                    {//当设置时间超过120秒,弹出对话框
                        JOptionPane.showMessageDialog(null, "时间不能超过120秒!");
                        this.setVisible(false);
                    }
                    if(n2<(Integer.parseInt(titlenumber.getText())))
                    {//当选择题目个数超过5个,弹出对话框
                        JOptionPane.showMessageDialog(null, "选择题数不能超过5个!");
                        this.setVisible(false);
    
                    }
                    tmr.start();//开始计时

    通过点击开始按钮事件获取文本框用户输入的时间,若输入的时间大于120s不会被允许。

    
    

    五、问题解决

    在写代码时候的确是遇到问题,在写菜单栏的时候,菜单栏目的子事件不能通过

    actionPerformed(ActionEvent e)的getresource来获取到菜单栏目的事件,本来打算把背景颜色的设置放置菜单栏目,这样子比较好看美观,

    通过观看了几篇博客,发现一下在弄不出来,只能进行简单的处理化,直接定义按钮来进行解决。而后就是阶乘计算答案,还没做的时候可能会觉得比较麻烦,

    动起手来发现简单粗暴,利用一个for循环就能解决到问题。我设置了用户登录界面,现在想怎么把他文本框输入的值传回到主框架中。还没想到解决的方法。

    六、运行效果截图

    1.主界面

     2.背景颜色的改变

    (点击一次)

    (点击第二次)

    3.用户登录功能

     (实际功能未实现)

     4.设置时间和题目

       (合法输入)

                       

                    

                             (非法输入)

    超时间提示

    5.答案判断

    附图:统计表

    PSP2.1

    Personal Software Process Stages

    Time Senior Student(h)

    Time(h)

    Planning

    计划

    0

    0

    · Estimate

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

    7

    8

    Development

    开发

    1

    1.5

    · Analysis

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

    0.1

    0.3

    · Design Spec

    生成设计文档

    0

    0

    · Design Review

    设计复审

    3

    1

    · Coding Standard

    代码规范

    0.1

    0.1

    · Design

    具体设计

    0.5

    1

    · Coding

    具体编码

    1

    1

    · Code Review

    代码复审

    1

    1.1

    · Test

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

    0.5

    1

    Reporting

    报告

    0

    0

    Test Report

    测试报告

    0

    0.5

    ·workload

    计算工作量

    0

    0.5

    ·correction

    并提出过程改进计划

    0

    0

    结对编程分工:

    背景颜色设置,整数相加减乘除,时间更新(何凯江 博客地址:http://www.cnblogs.com/hekairui/

    页面布局,点击时间处理,答案判断,阶乘计算,代码细节等其余是我弄的

    结对同伴:何凯江 201606120010(图右)          20160612003陈廷钦(本人)

    结对照片:

     

  • 相关阅读:
    Java消息队列--JMS概述
    Java消息队列--ActiveMq 初体验
    tomcat 日志禁用
    解决Tomcat catalina.out 不断成长导致档案过大的问题
    CentOS防火墙iptables-config的相关配置参数详解
    关于centos7下/etc/sysconfig/目录没有iptables问题
    死磕nginx系列--nginx 限流配置
    Nginx配置之负载均衡、限流、缓存、黑名单和灰度发布
    Android第一个个人APP(帐号助手)
    HDU 2896 病毒侵袭 (AC自己主动机)
  • 原文地址:https://www.cnblogs.com/Tqin/p/9827836.html
Copyright © 2011-2022 走看看