结对项目——四则运算 “软件”之升级版
这个作业的要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2232
我的github远程仓库的地址为:https://github.com/zyd123d/zyd1
一、题目基本要求
从个人项目出发,将程序改装成一个单机带用户界面(不是控制台)的程序,这个程序最基本要达到:
- 生成题目,单个题目最多不能超过4个运算符,操作数小于100。
- 用户可以输入答案
- 若用户输入答案正确,则提示正确;若答案错误,则提示错误,并要提示正确答案是多少。
二、扩展要求
- 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
- 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
- 用户答题结束以后,程序可以显示用户答题所用的时间
- 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
- 用户在第一次答题时,需要用户输入用户名,用户下次启动后,程序需要记住用户前一次输入的用户名
- 程序可以出单个整数阶乘的题目:如:4!=24
- 程序可以设置答题时间,时间设置为整数,单位为秒,最大不能超过120秒,若超过了答题时间未答题,则提示:时间已到,不能答题。
- 程序可以设置皮肤功能,可以改变界面的颜色即可。
三、结对项目详细设计过程
- 使用的编译开发环境:IntelliJ IDEA 2017.2.3 x64
- 使用的编程语言:Java语言
- 实现的扩展要求
- 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.67而非2.66,或保持分数形式:8/3
- 可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
- 用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
- 程序可以出单个整数阶乘的题目:如:4!=24
- 程序可以设置皮肤功能,可以改变界面的颜色即可。
- 源代码 已上传至我的github远程仓库
- 部分主要源代码
- 用户可以选择出题的个数(最多不能超过5个题目且不少于1个)
1 if(n>5||n<1)
2 {
3 //如果题目个数大于5或小于1,会弹出提示框
4 JOptionPane.showMessageDialog(null,"输入的题目个数不能大于5或者小于1","注意",JOptionPane.INFORMATION_MESSAGE);
5 }
2.更换背景颜色
1 if(e.getSource()==B4)//换皮肤
2 {
3 B4.addActionListener(new ActionListener() {
4 @Override
5 public void actionPerformed(ActionEvent cc) {
6 Color ch = JColorChooser.showDialog(p1, "颜色选择器",
7 p1.getBackground());
8 if (ch != null) {
9 p1.setBackground(ch);
10 p1.repaint();
11 }
12 }
13 });
14 }
3.随机生成四则运算题目(包括阶乘的运算及负整数的运算)
1 void star()
2 {
3 a=(int) (Math.random()*200-100);//random出来的数为0-1之间,然后取-99到99的整数
4 b=(int) (Math.random()*200-100);
5 c=(int) (Math.random()*200-100);
6 d=(int) (Math.random()*200-100);
7 j=(int) (Math.random()*4);
8 k=(int) (Math.random()*4);
9 if(d<0)
10 {
11 a=(int) (Math.random()*9+1);//随机产生一个整数 范围是0-9(包括0和9)
12 s1=String.valueOf(a)+String.valueOf(h1[2]);//获取这个数进行阶乘
13 L4.setText(s1);
14 result=1;
15 for(int i=1;i<=a;i++)//从1开始一直乘到这个数字本身
16 {
17 result=result*i;
18 }
19 }
20 else
21 {
22 if(b>=0&&c>=0)
23 {
24 //将变量转换成字符串
25 s1=String.valueOf(a)+String.valueOf(h[j])+String.valueOf(b)+String.valueOf(h[k])+String.valueOf(c);
26 L4.setText(s1);
27 System.out.println(s1);
28 }
29 else if(b<0&&c>=0)
30 {
31 //检测到b小于0,为负数,给b的左右两边加上括号运算
32 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);
33 L4.setText(s1);
34 System.out.println(s1);
35 }
36 else if(b>=0&&c<0)
37 {
38 //检测到c小于0,为负数,给c的左右两边加上括号运算
39 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]);
40 L4.setText(s1);
41 System.out.println(s1);
42 }
43 else
44 {
45 //检测到b、c都小于0,都为负数,给b、c的左右两边都加上括号运算
46 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(h1[0])+String.valueOf(c)+String.valueOf(h1[1]);
47 L4.setText(s1);
48 System.out.println(s1);
49 }
50 if(k>1) //后面的计算符为乘除,先算后面两个数;k=0时为加,k=1时为减
51 {
52 if(k==2)
53 {
54 result=b*c;
55 }
56 else if(k==3)
57 {
58 result=b/c;
59 }
60 if(j==0)
61 {
62 result=result+a;
63 }
64 else if(j==1)
65 {
66 result=a-result;
67 }
68 else if(j==2)
69 {
70 result=a*result;
71 }
72 else if(j==3)
73 {
74 result=a/result;
75 }
76 }
77 else if(k<2)
78 {
79 if(j==0)
80 {
81 result=b+a;
82 }
83 else if(j==1)
84 {
85 result=a-b;
86 }
87 else if(j==2)
88 {
89 result=a*b;
90 }
91 else if(j==3)
92 {
93 result=a/b;
94 }
95 if(k==0)
96 result=result+c;
97 if(k==1)
98 result=result-c;
99 }