结对项目-四则运算 “软件”之升级版
作业来源: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
结对同伴照片: