个人项目-四则运算2
题目:可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求: 可以控制下列参数: 是否有括号(最多可以支持十个数参与计算); 是否有乘除法; 数值范围; 加减有无负数;除法有无余数!
设计思想:在四则运算一的基础上,通过添加if条件,增加所要求的功能(有无乘除法、有无负数);通过随机生成多个数,增加括号的功能。
源程序代码:
import java.util.*; public class yunsuan { public static Scanner in=new Scanner(System.in); public static void main(String[] args) { // TODO Auto-generated method stub int s; while(true) { System.out.println("请输入要进行的运算:"); System.out.println("1.整数四则运算:"); System.out.println("2.真分数四则运算:"); System.out.println("3.退出:"); s=in.nextInt(); if(s==1) { System.out.println("请输入要生成题目的个数:"); int n=in.nextInt(); System.out.println("请输入数值范围:"); int p=in.nextInt(); int q=in.nextInt(); System.out.println("是否有括号? 1:有 2:否"); int k=in.nextInt(); if(k==1) { parentheses(n,p,q); } else { IntYuan(n,p,q); } continue; } if(s==2) { System.out.println("请输入要生成题目的个数:"); int m=in.nextInt(); for(int j=0;j<m;j++) { TrueNum(); } continue; } if(s==3) { break; } else { System.out.println("输入错误,请重新输入:"); s=in.nextInt(); } } in.close(); } public static void IntYuan(int n,int p,int q) { int a1=0; int a2=0; int result1; char ch; System.out.print("是否有乘除法? 1:有 2:否"); int c=in.nextInt(); System.out.print("加减有无负数? 1:有 2:否"); int f=in.nextInt(); System.out.print("除法有无余数? 1:有 2:否"); int y=in.nextInt(); for(int i=0;i<n;i++) { a1=ranNum(a1,p,q); a2=ranNum(a2,p,q); if(c==1) { ch=ranChar1(); } else { ch=ranChar2(); } //当加减不能出现负数时执行此操作 if(f==2 &&((a1<0||a2<0)||(a1<a2 && ch=='-'))) { i--; } //当除法不能有余数时执行此操作 else if(y==2 && ch=='/' && a1%a2!=0) { i--; } else { System.out.print(a1); System.out.print(ch); System.out.println(a2+"="); System.out.print("请输入答案:"); result1=in.nextInt(); if(ch=='+'&&(result1==a1+a2)) { System.out.println("计算正确!"); } else if(ch=='-'&&(result1==a1-a2)) { System.out.println("计算正确!"); } else if(ch=='*'&&(result1==a1*a2)) { System.out.println("计算正确!"); } else if(ch=='/'&&(result1==a1/a2)) { System.out.println("计算正确!"); } else { System.out.println("计算错误!"); } } } } public static void parentheses(int n,int p,int q)//带括号运算 { int num=(int)(Math.random()*11+2); int[] a={0,0,0,0,0,0,0,0,0,0}; for(int i=0;i<n;i++) { int a1=0; a1=ranNum(a1,p,q); System.out.print(a1); System.out.print(ranChar1()+"("); for(int j=0;j<num-4;j++) { System.out.print(ranNum(a[j],p,q)); System.out.print(ranChar1()); } System.out.println(ranNum(a[num-3],p,q)+")="); } } public static int ranNum(int a,int b,int c) { a=(int)(Math.random()*(c-b+1)+b);//随机数值范围为从b到c return a; } public static char ranChar1() { char[] b={'+','-','*','/'}; int c=(int)(Math.random()*4); return b[c]; } public static char ranChar2() { char[] b={'+','-'}; int c=(int)(Math.random()*2); return b[c]; } public static void TrueNum() { int b1,b2,b3,b4; b1=(int)(Math.random()*100); b2=(int)(Math.random()*100); b3=(int)(Math.random()*100); b4=(int)(Math.random()*100); yuefen(b1,b2); yuefen(b3,b4); if(b1<b2 && b3<b4) { System.out.print(b1+"/"+b2); System.out.print(ranChar1()); System.out.println(b3+"/"+b4+"="); } else { TrueNum(); } } public static void yuefen(int a1,int a2) { int min=Math.abs(a1)<Math.abs(a2)?Math.abs(a1):Math.abs(a2); int yueshu=1; for(int i=min;i>=1;i++) { if(a1/i==0 && a2/i==0) { yueshu=i; break; } } a1/=yueshu; a2/=yueshu; } }
运行结果截图 :
项目计划日志:
周活动总结表
学生:曹婷婷 日期:2017.3.13
日期 | 听课(min) | 编写程序(min) | 查阅资料(min) | 日总计(min) |
周一3.6 | 20 | 10 | 30 | |
周二3.7 | ||||
周三3.8 | 30 | 30 | ||
周四3.9 | ||||
周五3.10 | 60 | 180 | 60 | 240 |
周六3.11 | 120 | 30 | 150 | |
周日3.12 | 60 | 60 | ||
周总计: | 60 | 410 | 100 | 510 |
时间记录日志:
时间记录日志
学生:曹婷婷 日期:2017.3.13
教师:王建民 课程:软件工程概论
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3.10 | 14:00 | 16:00 | 10min | 110min | 上课 | 休息 |
18:10 | 19:00 | 0 | 50min | 在“二柱子01”基础上做改动 | ||
20:24 | 21:10 | 10min | 36min | 写“二柱子02”添加“数值范围;加减有无负数”两个功能 | 休息 | |
3.11 | 10:00 | 11:35 | 13min | 82min | 写“二柱子02”添加“是否有乘除法;除法有无余数”两个功能 | 休息 |
16:15 | 18:36 | 30min | 111min | 写“二柱子02”添加括号功能 | 玩儿手机 | |
3.12 | 9.35 | 11.42 | 30min | 97min | 写“二柱子02”添加括号功能 | 休息 |
缺陷记录日志:
缺陷记录日志
学生:曹婷婷 教师:王建民
程序:“二柱子02” 日期:2017/3/13
日期 | 编号 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3.10 | 1 | 编码 | 编译 | 15min | 控制随机数范围 |
3.11 | 2 | 编码 | 编译 | 30min | 控制不符合条件的重新生成 |
3.12 | 3 | 编码 | 编译 | 40min | 括号的随机生成 |