GitHub项目地址:  https://github.com/SmileZhbb/zhaohb

一、需求分析

  • 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
  • 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
  • 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt中,不要输出额外信息文件目录与程序目录一致。
  • 扩展功能可以用:在算式中包含括号,计算存在真分数的式子。

二、功能分析

         (1) 根据提示输入数字m(即要产生的式子个数)。

         (2)输出学号且随机生成m个包含两个运算符的式子,计算结果。

         (3)将运算结果输出到指定文件result.txt中。

三、设计思路和过程

         (1) 键盘接收m,用random方法产生对应运算数的随机数和对应运算符的随机数;

         (2)利用do_whie循环判断生成的随机数是否符合表达式的条件,如果符合准备产生算式,如果不符合重新生成。

         (3)如果产生运算符的随机数为0,产生加法,赋值为question,计算出答案赋值为answer。随机数为1,产生减法,随机数为2,产生乘法,随机数为3,产生除法。

         (4)将question和answer赋值给datasourse,利用WriteToFile write=new WriteToFile("result.txt",datasourse)输出结果。

四、运行结果

     (1)在eclipse中运行代码如图所示:

 

      (2) result.txt中显示如下:

  

五、核心代码

			Scanner num =new Scanner(System.in);
			System.out.print("请输入个数:");  
		        m =num.nextInt();		       
	                ArrayList<String> datasourse=new ArrayList<String>();
	                String question=new String();
			Random r = new Random();
			Scanner in = new Scanner(System.in);
			System.out.println("学号:201571030142");
			for (int i = 1; i <= m; i++) {
				// 随机生成题目question(包括数据和符号),计算答案answer
				//String question = null;
				int answer = 0;
				int a, b, c,d;
				c = r.nextInt(4);
				do {
					a = r.nextInt(100);
					b = r.nextInt(100);
					d = r.nextInt(100);
				} while ((c == 3 && b == 0) 
						|| (c == 3 && a % b != 0)
						|| (c == 2 && a * b > 100) 
						|| (c == 1 && a < b)
						|| (c == 0 && a + b > 100));
				if (c == 0) {
					question = a + "+" + b +"+"+d;
					answer = a + b + d;
				} else if (c == 1) {
					question = a + "-" + b+"+"+d;
					answer = a - b + d;
				} else if (c == 2) {
					question = a + "*" + b+"*"+d;
					answer = a * b * d;
				} else {
					question = a + "/" + b+"*"+d;
					answer = a / b * d;
				}
				// 输出题目question
				datasourse.add(question+"="+answer);
				//System.out.println(i + ")"+ question + "="+answer);				
			}
		

 将question和answer赋值给datasourse,写入result.txt。

			for ( int i = 0; i < datasourse.size(); i++){
				  System.out.println(datasourse.get(i));				 
				}
			WriteToFile write=new WriteToFile(
					"result.txt",datasourse);
			System.out.println("已写入result.txt!");

六、小结

          在本次实验设计中,发现了自己的很多不足:

          (1)java基础知识点掌握不牢固,知识模糊,结构混乱。

          (2)动手能力太差,面对一个问题,不知道如何去实现它,参考大量资料才完成此次作业。

          (3)实验过程设计简单,部分功能不太完善。

          在这次设计实验过程中,遇到了很多问题。这都是值得我反思的。为什么不知道这个结构?为什么老是出现bug?在今后的学习中,应当认真学习,

    重新改进,在下一次的实验设计中,能够更好的完成。

          学到的知识点:

          java写入文件有三种方法:

                     FileWriter fileWritter = new FileWriter();

                     BufferedWriter bw = new BufferedWriter();

                     FileOutputStream写入文件

七、PSP

PSP2.1 任务内容 计划完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划  30 60
Estimate  估计这个任务需要多少时间,并规划大致工作步骤   20 40
Development 开发 240  600
Analysis  需求分析 (包括学习新技术) 20  20
Design Spec 生成设计文档   20  30
Design Review  设计复审 (和同事审核设计文档)  20 30
Coding Standard 代码规范 (为目前的开发制定合适的规范)   30  60
Design 具体设计  40 60
Coding 具体编码 300  400
Code Review 代码复审  20  20
Test 测试(自我测试,修改代码,提交修改)  30  40
 Reporting 报告  30  45
Test Report 测试报告  10  20
Size Measurement 计算工作量  5  5
Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划  5 8
posted on 2018-03-21 09:17  Smile_Zhb  阅读(169)  评论(2编辑  收藏  举报