软件工程第五次作业

Posted 渴望~向往

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程第五次作业相关的知识,希望对你有一定的参考价值。

1.题目要求

  • 能够自动生成四则运算练习题

  • 可以定制题目数量

  • 用户设置最大数(如十以内、百以内等)

  • 用户选择是否有括号、是否有小数

  • 用户选择输出方式(如输出到文件、打印机等)

  • 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)

2.成员定位

驾驶员(我)

  • 能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中(15分)

  • 能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结(5分)

领航员 来自地球的火星人

  • 能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试(10分)

  • 能够根据上次作业的代码检查表对驾驶员的本次工作进行评价(5分)

  • 能够对本次工作完成500字以上的总结(5分)

3.开发环境

操作系统:Windows7

开发语言:java

开发环境:eclipse

4. 代码

代码地址

涉及的头文件和全局变量

   package softwar;
   import java.io.*;
   import java.util.Random;
   import java.util.Scanner;
   static int Number;//题目数
   static int operator;//是否有乘除运算!
   static int Maxnumber;//最大数
   static int haveBrackets;//是否有括号
   static int haveFloat;//是否有小数

主函数

    public static void main(String[] args) throws Exception{//抛出某种I/O异常
	Print();
	System.out.print("需要屏幕输出,输入1;用文件输出,输入0:");
	Scanner input=new Scanner(System.in);
	int haveFile=input.nextInt();
	if(haveFile==1)
		PrintQuestionsScreen(Number,operator, Maxnumber, haveBrackets, haveFloat);//屏幕输出
	else
		PrintQuestionsFile(Number,operator, Maxnumber, haveBrackets, haveFloat);//文件输出
}

以下是变量输入部分,以完成根据用户需要进行四则运算的生成的目标。

    public static void Print() {
	//功能选择菜单
	Scanner input=new Scanner(System.in);
	
	System.out.print("请输入题目数量: ");
	Number=input.nextInt();
	if(Number<1) {
		System.out.print("输入错误\\n");
		return;
	}
	System.out.println();
	
	System.out.print("是否需要乘除,需要请输入1,不需要请输入0: ");
	operator=input.nextInt();
	if(operator!=1&&operator!=0) {
		System.out.print("输入错误\\n");
		return;
	}
	System.out.println();
	
	System.out.print("请输入最大数: ");
	Maxnumber=input.nextInt();
	if(Maxnumber<1) {
		System.out.print("输入错误\\n");
		return;
	}
	System.out.println();
	
	System.out.print("是否需要小数,需要请输入1,不需要请输入0: ");
	haveFloat=input.nextInt();
	if(haveFloat!=1&&haveFloat!=0) {
		System.out.print("输入错误\\n");
		return;
	}
	System.out.println();
	
	System.out.print("是否需要括号,需要请输入1,不需要请输入0: ");
	haveBrackets=input.nextInt();
	if(haveBrackets!=1&&haveBrackets!=0) {
		System.out.print("输入错误\\n");
		return;
	}
}

使用rand函数进行随机数生成,分别进行小数的生成和整数的生成,以及使用随机数生成产生所需的操作符

    public static void PrintQuestionsScreen(int Number,int operator,int Maxnumber,int haveBrackets,int haveFloat) {
	int[] a=new int[10];//随机整数
	float[] a1=new float[10];//随机小数
	int c;
	long t = System.currentTimeMillis();		
	String[] b={"+","-","*","/"};//运算符
	Random random=new Random(t);//以随机时间作为种子创建一个Random对象
	for(int i=0;i<Number;i++)
	{
		int n=random.nextInt(4)+2;//随机运算个数
		if(haveBrackets==0) {
			for(int j=0;j<n;j++) {
				if(haveFloat==0)
					a[j]=random.nextInt(Maxnumber-1)+1;
				else {
					int d=random.nextInt(2)+1;
					a[j]=random.nextInt(Maxnumber-1)+1;
					a1[j]=(float)(a[j]/Math.pow(10, d));
			
				}
			}
			for(int k=0;k<n-1;k++) {
				if(operator==0)
					c=random.nextInt(2);//随机运算符
				else 
					c=random.nextInt(4);
				if(haveFloat==0)
				    System.out.print(a[k]+b[c]);
				else
					System.out.print(a1[k]+b[c]);
			}
			if(haveFloat==0)
				System.out.println(a[n-1]+"=");
			else
				System.out.println(a1[n-1]+"=");
		}
		if(haveBrackets==1) {
			for(int j=0;j<n;j++) {
				if(haveFloat==0)
					a[j]=random.nextInt(Maxnumber-1)+1;
				else {
					int d=random.nextInt(2)+1;
					a[j]=random.nextInt(Maxnumber-1)+1;
					a1[j]=(float)(a[j]/Math.pow(10, d));
			
				}
			}
			int c1=random.nextInt(n-1);
			int c2=random.nextInt(n-c1-1)+1;
			for(int k=0;k<n-1;k++) {
				if(operator==0)
					c=random.nextInt(2);
				else 
					c=random.nextInt(4);
				if(c1==k)
					System.out.print("(");//随机左括号产生的位置
				if(haveFloat==0)
				    System.out.print(a[k]);
				else
					System.out.print(a1[k]);
				if(c2+c1==k)
					System.out.print(")");//随机右括号产生的位置
				System.out.print(b[c]);
			}
			if(haveFloat==0)
				System.out.print(a[n-1]);
			else
				System.out.print(a1[n-1]);
			if(c1+c2==n-1)
				System.out.print(")");
			System.out.print("=\\n");
		}
	}
}

5. 测试

屏幕输出测试

文件输出测试


6.心得体会

本次作业是第一次真正两人在一起进行结对编程,我的结对搭档张云飞同学尽职尽责地完成了领航员的职责,在我进行编程时在我身边督促我,检查错误,理清思路,并帮助我查找必要的资料,在此予以致意,感谢他对本人的大力支持。二人结对后感觉效率有了显著的提高,思路更加开阔,解决问题的速度也有了明显的提升。虽然在刚开始的时候,由于以前没和他人一起编程过,感觉很变扭,速度也比减慢;但磨合一段时间后,明显感觉编程快了许多。编程是与人合作是一种很新奇的体验,期待合作所能让我看见的更多可能性。

本次作业所要求的的随机生成四则运算题最终采用了随机个随机数的进行加减、加减乘除三种模式的各分为有无括号与有无小数的版本。总体来说用户所需的要求已经基本实现,不过由于技术原因并未完成图形用户界面的方面,只能直接输出到屏幕和文件,这是今后仍需要钻研和提升的部分。

本次结对作业让我意识到了合作的重要性,面对相对复杂的算法能够有人自始至终跟进你的思路,及时找出编程中的漏洞并提出具有建设性的建议是一件非常有意义的事,这提高了编程的效率与准确性,并且他还能时不时提出一个好的想法,让人眼前一亮,这使在编程上花的时间远小于我的预计时间,可见结对编程的重要性,也让我更加期待之后的团队项目。

7. 工作照

以上是关于软件工程第五次作业的主要内容,如果未能解决你的问题,请参考以下文章

软件工程——第五次博客作业

软件工程第五次作业

软件工程第五次作业 - 每周例行汇报

第五次作业

第五次软件测试作业

软件工程第五次作业——例行报告