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

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

Github地址:  https://github.com/yanyuluu/yanyuluu/tree/master/software

一、基本要求

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

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

用户可以输入答案

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

二、我们做的扩展方向

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

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

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

程序可以设置皮肤功能,可以改变界面的颜色即可(按钮点击实现八种颜色随机切换)

三、开发环境下调试:Intelij IDEA

 

四、估计实现所需时间,记录结对编程时间。

PSP2.1 Personal Software Process Stages Time Senior Student Time
Development 开发 50 60
· Analysis 需求分析 (包括学习新技术) 20 30
· Design Spec 生成设计文档 0 0
· Design Review 设计复审 0 0
· Coding Standard 代码规范 5 8
· Design 具体设计 30 35
· Coding 具体编码 45 60
· Code Review 代码复审 3 5
· Test 测试(自我测试,修改代码,提交修改) 10 8
Reporting 报告 0 0

五、代码实现

1.定义一个面板及其组件

       

class myframe extends JFrame
{
    JLabel L1=new JLabel("题目:");//创建无图像并且其标题为空字符串的 JLabel
    JLabel L2=new JLabel("输入题目个数:");
    JLabel L3=new JLabel("提示:");
    JLabel L4=new JLabel("       ");   //题目
    JLabel L5=new JLabel("题目个数不能大于5");   //提示
    JTextField T1=new JTextField(6);//创建一个6长度的文本框
    JButton B1=new JButton("开始"); //按钮
    JButton B2=new JButton("确认");
    JButton B3=new JButton("下一题");
    JButton B4=new JButton("换皮肤");
    JPanel p1=new JPanel();//JPanel:面板组件,非顶层容器

2.设置面板大小,设置面板内控件的位置和大小 

this.setSize(360,300);//设置面板大小
        this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);//关闭子窗口
        this.add(p1);
        p1.setLayout(null);
        L1.setBounds(50, 20, 90, 30);
        p1.add(L1);
        L4.setBounds(140, 20, 150, 30);
        p1.add(L4);
        L2.setBounds(50, 70, 90, 30);
        p1.add(L2);
        T1.setBounds(150, 70, 90, 30);
        p1.add(T1);
        B4.setBounds(200, 120, 90, 30);//换皮肤
        p1.add(B4);
        B1.setBounds(50, 120, 90, 30);//开始
        p1.add(B1);
        B2.setBounds(80, 170, 90, 30);//确认
        p1.add(B2);
        B2.setEnabled(false);
        B3.setBounds(170, 170,90,30);//下一题
        p1.add(B3);
        L3.setBounds(50, 200, 50, 30);
        B3.setEnabled(false);
        p1.add(L3);
        L5.setBounds(100, 200, 180, 30);
        p1.add(L5);

3.将程序运行界面设置为可见,并显示在屏幕中间,设置为用户不可改变面板大小

 this.setVisible(true);//设置可见窗口
        this.setResizable(false);//设置面板不可改变大小
        this.setLocationRelativeTo(null);//此窗口将置于屏幕的中央

4.产生随机产生-99到99的三个随机数a,b,c,随机生成两个运算符j,k

a=(int) (Math.random()*200-100);//random出来的数为0-1之间,然后取-99到99的整数
        b=(int) (Math.random()*200-100);
        c=(int) (Math.random()*200-100);
        j=(int) (Math.random()*4);
        k=(int) (Math.random()*4);

 5.判断随机产生的数是否为负数,如果是就用括号括起来

else if(b<0&&c>=0)
            {
                //检测到b小于0,为负数,给b的左右两边加上括号运算
                s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(h1[0])+String.valueOf(b)+String.valueOf(h1[1])+String.valueOf(h[k])+String.valueOf(c);
                L4.setText(s1);
                System.out.println(s1);
            }
            else if(b>=0&&c<0)
            {
                //检测到c小于0,为负数,给c的左右两边加上括号运算
                s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(b)+String.valueOf(h[k])+String.valueOf(h1[0])+String.valueOf(c)+String.valueOf(h1[1]);
                L4.setText(s1);
                System.out.println(s1);
            }

 6.实现阶乘的部分代码

 a=(int) (Math.random()*9+1);//随机产生一个整数 范围是0-9(包括0和9)
            s1=String.valueOf(a)+String.valueOf(h1[2]);//获取这个数进行阶乘
            L4.setText(s1);
            result=1;
            for(int i=1;i<=a;i++)//从1开始一直乘到这个数字本身
            {
                result=result*i;
            }

六、运行结果截图

       1.没进行任何操作的主页面

 2.输入题目个数,点击开始随机出题

3.输入大于5的题目数会弹出小窗提示

 4.输入答案,回答正确则提示回答正确,回答错误则显示“回答错误,答案为:”

    

 5.全部答题完毕,会显示答对题数

6.点击换皮肤,会给面板换一个颜色

  

七、分工与合作

 1、结对成员

本人——卢欣余:负责代码整合以及上传代码到Github

队友——黄雨纯:负责代码注释以及撰写博客

  2、扩展方向

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

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

 程序可以出单个整数阶乘的题目:如:4!=24(黄雨纯)

 程序可以设置皮肤功能,可以改变界面的颜色即可(按钮点击实现八种颜色随机切换)(卢欣余)

八、总结心得

这个程序相对来说我们做的比较简陋,里面涉及的内容和以前所学过的知识是有一定的关联的

但是由于我们技术实力还不够硬朗,所以界面还不够美观

扩展方向相对还是有难度的,所以只能做到这程度了。

附录:结对同伴学号及博客地址,结对工作照片

 结对同伴:201606120050黄雨纯    

同伴博客地址:https://www.cnblogs.com/hycolins/p/9837258.html

结对同伴照片:

原文地址:https://www.cnblogs.com/lxyu/p/9842929.html