软件工程个人作业03

Posted A.G不是飞人

tags:

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

//之前的作业(软件工程个人作业02)由于自己的java出点问题,所以用c++来写

//2016/3/26日由于权限受限无法提交作业导致延时

技术分享

【团队组合】

 张更、陈昌

技术分享

【设计思路】

将程序分成两大部分:简单二元四则运算,复杂多元四则运算

简单二元四则运算:

简单二元四则运算中实现大部分的要求。

  再进行分数运算判断用户输入结果使,判断运算结果是否为整数,若为整数则提示用户输入整数,若不为整,则输入分数判断结果。

复杂多元运算:

  随机生成用户定制数量Cno个多项运算式,使用forint i=0;i<Cnoi++)语句循环,循环体判断运算符是否除号还是乘号,将对应位置的运算数进行相应的运算,并将结果存储到第一个数所在的位置,然后将后面的数向前移一位,长度减一。在使用类似的循环计算加减。最后结果存储在数组的一号位置

【程序源代码】

import java.util.*;

public class Arithmetic 
{
	public static void main(String args[])
	{
		/*Isctm(是否定制),Cno(运算题个数),Isfra(系统选择是否有分数),IsPfra(是否真分数),Lb(取值上界),Ub(取值下界),
		 * ctmType(定制类型),testType(题目类型),Isneg(有无负数),Israd(有无乘除法),Isrem(有无余数),	Isbra(有无括号),
		 * cIsfra(用户选择是否有分数)  
	     */
		int Cno,Isfra,IsPfra,temp,Lb,Ub,Isctm,ctmType,testType,Isneg,Israd,Isrem,Isbra,t,ans,cIsfra,Ismul;
	
		Ismul = 0;
		ctmType = 0;
		Isneg = 1;
		Israd = 1;
		Isrem = 0;
		Isfra = 0;
		IsPfra = 0;
		Lb = 0;
		Ub = 100;
		Cno = 30;
		t=0;
		
		
		Scanner sc = new Scanner(System.in);
		System.out.println("!本程序默认生成30道取值在0-100以内的包含整数及假分数的两个数之间的四则运算题!");
		//选择是否定制
		System.out.println("请选择是否定制:0.不需定制   1.我要定制");
		Isctm = sc.nextInt();
		//非法输入检测并提醒改正
		while(Isctm!=0 && Isctm!=1)
		{
			System.out.println("警告!非法输入!请重新选择是否定制:0.不需定制     1.我要定制");
			Isctm = sc.nextInt();
		}
		if(Isctm==1)
		{
			while(ctmType!=4)
			{
				//若参与定制,执行以下内容
				System.out.println("-----------------------------");
				System.out.println("|**欢迎使用四则运算需求定制**|");
				System.out.println("|**    1.自定义取值范围         **|");
				System.out.println("|**    2.自定义题目数量         **|");
				System.out.println("|**    3.自定义题目类型         **|");
				System.out.println("|**      4.结束定制                   **|");
				System.out.println("-----------------------------");
				
				System.out.println("请输入你要定制的内容:");
				ctmType = sc.nextInt();
				//非法输入检测并提醒改正
				while(ctmType!=1 && ctmType!=2 && ctmType!=3 && ctmType!=4)
				{
					System.out.println("警告!非法输入!请重新输入您要定制的内容:");
					ctmType = sc.nextInt();
				}
				
				switch(ctmType)
				{
				    case 1:
				    	//输入下界值并检验合法性
				    	System.out.println("请输入您要限制的下界数值:");
				    	try{
				    		Lb = sc.nextInt();
				    	}
				    	catch(InputMismatchException e)
				    	{
				    		System.out.println("警告!您的输入不合法!程序退出运行!");
				    		System.exit(0);
				    	}
				    	
				    	//输入上界值并检验合法性
				    	System.out.println("请输入您要限制的上界数值:");
				    	try{
				    		Ub = sc.nextInt();
				    	}
				    	catch(InputMismatchException e)
				    	{
				    		System.out.println("警告!您的输入不合法!程序退出运行!");
				    		System.exit(0);
				    	}
				    	break;
				    	
				    case 2:
				    	//输入Cno并检验合理性
				    	System.out.println("请输入您要生成运算题目的数值:");
				    	Cno = sc.nextInt();
				    	while(Cno<=0)
				    	{
				    		System.out.println("输入值越界,请重新输入您要生成的运算题数目的值:");
				    		Cno = sc.nextInt();
				    	}
				    	break;
				    	
				    case 3:
				    	//定制题目类型
				    	System.out.println("--------------------------------");
						System.out.println("|**欢迎使用四则运算题目类型定制**|");
						System.out.println("|**   1.自定义二元或单元运算      **|");
						System.out.println("|**    2.自定义加减有无负数         **|");
						System.out.println("|**     3.自定义有无乘除法           **|");
						System.out.println("|**      4.自定义有无分数             **|");
						System.out.println("|**      5.自定义有无括号             **|");
						System.out.println("|**        6.结束定制                       **|");
						System.out.println("--------------------------------");
						System.out.println("请输入您要定制的题目类型:");
						testType = sc.nextInt();
						//非法输入检测并提醒改正
						while(testType!=1 && testType!=2 && testType!=3 && testType!=4 && testType!=5 && testType!=6)
						{
							System.out.println("警告!非法输入!请重新输入您要定制的题目类型:");
							testType = sc.nextInt();
						}
						
						switch(testType)
						{
						    case 1:
						    	System.out.println("请定义二元或多元运算:0.二元    1.多元");
						    	Ismul = sc.nextInt();
						    	while(Ismul!=0 && Ismul!=1)
						    	{
						    		System.out.println("警告!非法输入!请重新定义二元或多元运算:0.二元    1.多元");
						    		Ismul = sc.nextInt();
						    	}
						    	break;
						    case 2:
						    	System.out.println("请定义加减有无负数:0.无负数    1.有负数");
						    	Isneg = sc.nextInt();
						    	//非法输入检测并提醒改正
						    	while(Isneg!=0 && Isneg!=1)
						    	{
						    		System.out.println("警告!非法输入!请重新定义加减有无负数:0.无负数    1.有负数");
						    		Isneg = sc.nextInt();
						    	}
						    	break;
						    case 3:
						    	System.out.println("请定义有无乘除法及除法有无余数: 0.无乘除法    1.有乘除法");
						    	Israd = sc.nextInt();
						    	//非法输入检测并提醒改正
						    	while(Israd!=0 && Israd!=1)
						    	{
						    		System.out.println("警告!非法输入!请重新定义有无乘除法:0.无乘除法    1.有乘除法");
						    		Israd = sc.nextInt();
						    	}
						    	if(Israd==1)
						    	{
						    		System.out.println("请定义除法有无余数:0.无余数    1.有余数");
							    	Isrem = sc.nextInt();
							    	//非法输入检测并提醒改正
							    	while(Isrem!=0 && Isrem!=1)
							    	{
							    		System.out.println("警告!非法输入!请重新定义除法有无余数:0.无余数    1.有余数");
							    		Isrem = sc.nextInt();
							    	}
						    	}
						    	break;
						    	//NOTICE
						    case 4:
						    	System.out.println("请定义有无分数:0.有分数    1.无分数");
						    	cIsfra = sc.nextInt();
						    	//非法输入检测并提醒改正
						    	while(cIsfra!=0 && cIsfra!=1)
						    	{
						    		System.out.println("警告!非法输入!请重新定义有无分数:0.无分数    1.有分数");
						    		Isrem = sc.nextInt();
						    	}
						    	if(cIsfra==1)
						    	{
						    		System.out.println("请定义");
						    	}
						    	break;
						    case 5:
						    	System.out.println("请定义有无括号:0.无括号    1.有括号");
						    	Isbra = sc.nextInt();
						    	//非法输入检测并提醒改正
						    	while(Isbra!=0 && Isbra!=1)
						    	{
						    		System.out.println("警告!非法输入!请重新定义有无括号:0.无括号    1.有括号");
						    		Isbra = sc.nextInt();
						    	}
						    	break;
						    case 6:
						    	break;
						}
						break;
				    case 4:
				    	break;
				}
			}
		}
        
		if(Ismul==0)
		{
			int a[] = new int[Cno];
			String b[] = new String[Cno];
			int c[] = new int[Cno];
			
			//生成两个数之间的运算题
			for(int i=0;i<Cno;i++)
			{
				int n1 = (int)(Math.random() * (Ub-Lb)) + Lb;
				int n2 = (int)(Math.random() * (Ub-Lb)) + Lb;
				
				//若无负数,判断生成数是否为负,若为负,乘-1
			    
				if(Isneg==0)
				{
					if(n1<0)
					{
						n1*=-1;
					}
					if(n2<0)
					{
						n2*=-1;
					}
				}
				
				//随机生成运算符
				int Shows = (int)(Math.random() * 4);
				String sign="";
				switch(Shows)
				{  
				    case 0:
				    	sign="+";
				    	break;
				    case 1:
				    	sign="-";
				    	break;
				    case 2:
				    	sign="*";
				    	break;
				    case 3:
				    	sign="/";
				    	break;
				}
				
				a[0] = n1;
				c[0] = n2;
				b[0] = "";
				for(int j=0;j<i;j++)
				{
					
					if(n1==a[j] && n2==c[j] && sign==b[j])
					{
						n1 = (int)(Math.random() * (Ub-Lb)) + Lb;
						n2 = (int)(Math.random() * (Ub-Lb)) + Lb;
					}
				}
				
				if(Israd==0)
				{
					if(sign=="*")
					{
						sign="+";
					}
					if(sign=="/")
					{
						sign="-";
					}
				}
				
				Isfra = (int)(Math.random() * 2);
				if(Isfra==1)
				{
					int n3 = (int)(Math.random() * (Ub-Lb)) + Lb;
				    int n4 = (int)(Math.random() * (Ub-Lb)) + Lb;
				
				    //分数避免出现0
				    if(n1==0)
				    {
				    	n1 += (int)(Math.random() * (Ub-Lb)) + Lb;
				    }
				    if(n2==0)
				    {
				    	n2 += (int)(Math.random() * (Ub-Lb)) + Lb;
				    }
				    
				    //若无负数,使分母均取正值
				    if(Isneg==0)
				    {
				    	if(n3<0)
				    	{
				    		n3*=-1;
				    	}
				    	if(n4<0)
				    	{
				    		n4*=-1;
				    	}
				    }
				    //生成真分数并约分
				    if(IsPfra==1)
				    {
				    	if(n3<n1)
				    	{
				    		temp = n3;
				    		n3 = n1;
				    		n1 = temp;
				    	}
				    	for(int j=n1;j>0;j--)
				    	{
				    		if(n1%j==0 && n3%j==0)
				    		{
				    			n1/=j;
				    			n3/=j;
				    			break;
				    		}
				    	}
				    	
				    	if(n4<n2)
				    	{
				    		temp = n4;
				    		n4 = n2;
				    		n2 = temp;
				    	}
				    	for(int j=n2;j>0;j--)
				    	{
				    		if(n2%j==0 && n4%j==0)
				    		{
				    			n2/=j;
				    			n4/=j;
				    			break;
				    		}
				    	}

				    }  
				    
				    //生成假分数并约分
				    else
				    {
				    	if(n3>n1)
				    	{
				    		temp = n3;
				    		n3 = n1;
				    		n1 = temp;
				    	}
				    	for(int j=n3;j>0;j--)
				    	{
				    		if(n1%j==0 && n3%j==0)
				    		{
				    			n1/=j;
				    			n3/=j;
				    			break;
				    		}
				    	}
				    	
				    	if(n4>n2)
				    	{
				    		temp = n4;
				    		n4 = n2;
				    		n2 = temp;
				    	}
				    	for(int j=n4;j>0;j--)
				    	{
				    		if(n2%j==0 && n4%j==0)
				    		{
				    			n2/=j;
				    			n4/=j;
				    			break;
				    		}
				    	}
				    }
				    
				    if(n1%n3 == 0 || n2%n4==0 || n3%n1 == 0 || n4%n2==0)
				    {
				    	i-=1;
				    	continue;
				    }
				    
				    System.out.println("(" + n1 + "/" + n3 + ")" + sign + "(" + n2 + "/" + n4 + ")" + "=");
				    int ans1,ans2;
				    String ds;
				    int flag = 1;
				    //加法输入运算结果并判断
				    if(sign=="+")
				    {
				    	int n = n1 * n4 + n2 * n3;
				    	int m = n3*n4;
				    	if(n<0)
				    	{
				    		n*=-1;
				    		flag *= -1;
				    	}
				    	if(m<0)
				    	{
				    		m*=-1;
				    		flag *= -1;
				    	}
				    	
				    	int j = m;
				    	if(m>n)
				    	{
				    		j=n;
				    	}
				    	for(j=m;j>0;j--)
				    	{
				    		if(n%j==0 && m%j==0)
				    		{
				    			n/=j;
				    			m/=j;
				    			break;
				    		}
				    	}
				    	if(n%m==0)
				    	{
				    		System.out.println("请输入运算结果:");
				    		ans = sc.nextInt();
				    		if(flag==-1)
				    		{
				    			if(ans==-(n/m))
				    			{
				    				t++;
				    			}
				    		}
				    		else
				    		{
				    			if(ans==(n/m))
				    			{
				    				t++;
				    			}
				    		}
				    	}
				    	else
				    	{
				    		System.out.println("请(以分数形式)输入运算结果:");
				    		ans1 = sc.nextInt();
				    		ds = sc.next();
				    		ans2 = sc.nextInt();
				    		if(flag==-1)
				    		{
				    			if(ds.equals("//") && ((ans1==-n && ans2==m) || (ans1==n && ans2==-m)))
				    			{
				    				t++;
				    			}
				    		}
				    		else
				    		{
				    			if(ans1==n && ans2==m && ds.equals("/"))
				    			{
				    				t++;
				    			}
				    		}
				    	}
				    	
				    }
				    //加法输入运算结果并判断
				    
				    //减法运算结果并判断
				    else if(sign=="-")
				    {
				    	int n = n1 * n4 - n2 * n3;
				     	int m = n3 * n4;  
				     	
				    	if(n<0)
				    	{
				    		n*=-1;
				    		flag *= -1;
				    	}
				    	if(m<0)
				    	{
				    		m*=-1;
				    		flag *= -1;
				    	}
				    	
				    	int j = m;
				    	if(m>n)
				    	{
				    		j=n;
				    	}
				    	for(j=m;j>0;j--)
				    	{
				    		if(n%j==0 && m%j==0)
				    		{
				    			n/=j;
				    			m/=j;
				    			break;
				    		}
				    	}
				    	if(n%m==0)
				    	{
				    		System.out.println("请输入运算结果:");
				    		ans = sc.nextInt();
				    		if(flag==-1)
				    		{
				    			if(ans==-(n/m))
				    			{
				    				t++;
				    			}
				    		}
				    		else
				    		{
				    			if(ans==(n/m))
				    			{
				    				t++;
				    			}
				    		}
				    	}
				    	else
				    	{
				    		System.out.println("请(以分数形式)输入运算结果:");
				    		ans1 = sc.nextInt();
				    		ds = sc.next();
				    		ans2 = sc.nextInt();
				    		if(flag==-1)
				    		{
				    			if((ans1==-n && ans2==m) || (ans1==n && ans2==-m) && ds.equals("//"))
				    			{
				    				t++;
				    			}
				    		}
				    		else
				    		{
				    			if(ans1==n && ans2==m && ds.equals("//"))
				    			{
				    				t++;
				    			}
				    		}
				    	}
				    }
				    //减法运算结果并判断
				    
				    //乘法运算结果并判断
				    else if(sign=="*")
				    {
				    	int n = n1 * n2;
				    	int m = n3 * n4;
				    	
				    	if(n<0)
				    	{
				    		n*=-1;
				    		flag *= -1;
				    	}
				    	if(m<0)
				    	{
				    		m*=-1;
				    		flag *= -1;
				    	}
				    	
				    	int j = m;
				    	if(m>n)
				    	{
				    		j=n;
				    	}
				    	for(j=m;j>0;j--)
				    	{
				    		if(n%j==0 && m%j==0)
				    		{
				    			n/=j;
				    			m/=j;
				    			break;
				    		}
				    	}
				    	if(n%m==0)
				    	{
				    		System.out.println("请输入运算结果:");
				    		ans = sc.nextInt();
				    		if(flag==-1)
				    		{
				    			if(ans==-(n/m))
				    			{
				    				t++;
				    			}
				    		}
				    		else
				    		{
				    			if(ans==(n/m))
				    			{
				    				t++;
				    			}
				    		}
				    	}
				    	else
				    	{
				    		System.out.println("请(以分数形式)输入运算结果:");
				    		ans1 = sc.nextInt();
				    		ds = sc.next();
				    		ans2 = sc.nextInt();
				    		if(flag==-1)
				    		{
				    			if((ans1==-n && ans2==m) || (ans1==n && ans2==-m) && ds.equals("//"))
				    			{
				    				t++;
				    			}
				    		}
				    		else
				    		{
				    			if(ans1==n && ans2==m && ds.equals("/"))
				    			{
				    				t++;
				    			}
				    		}
				    	}
				    }
				    //乘法运算结果并判断
				    
				    //除法运算结果并判断
				    else if(sign=="/")
				    {
				    	int n = n1 * n4;
				    	int m = n2 * n3;
				    	
				    	if(n<0)
				    	{
				    		n*=-1;
				    		flag *= -1;
				    	}
				    	if(m<0)
				    	{
				    		m*=-1;
				    		flag *= -1;
				    	}
				    	
				    	int j = m;
				    	if(m>n)
				    	{
				    		j=n;
				    	}
				    	for(j=m;j>0;j--)
				    	{
				    		if(n%j==0 && m%j==0)
				    		{
				    			n/=j;
				    			m/=j;
				    			break;
				    		}
				    	}
				    	if(n%m==0)
				    	{
				    		System.out.println("请输入运算结果:");
				    		ans = sc.nextInt();
				    		if(flag==-1)
				    		{
				    			if(ans==-(n/m))
				    			{
				    				t++;
				    			}
				    		}
				    		else
				    		{
				    			if(ans==(n/m))
				    			{
				    				t++;
				    			}
				    		}
				    	}
				    	else
				    	{
				    		System.out.println("请(以分数形式)输入运算结果:");
				    		ans1 = sc.nextInt();
				    		ds = sc.next();
				    		ans2 = sc.nextInt();
				    		if(flag==-1)
				    		{
				    			if((ans1==-n && ans2==m) || (ans1==n && ans2==-m) && ds.equals("/"))
				    			{
				    				t++;
				    			}
				    		}
				    		else
				    		{
				    			if(ans1==n && ans2==m && ds.equals("/"))
				    			{
				    				t++;
				    			}
				    		}
				    	}
				    }
				    //除法运算结果并判断
				}
				
				//整数四则运算
				else
				{
					if(sign=="/")
					{
						if(Isrem==0)
						{
							if(n2>n1)
							{
								temp = n2;
								n2 = n1;
								n1 = temp;
							}
							if(n2==0)
							{
								n2 = (int)(Math.random() * (Ub-Lb)) + Lb;
							}
							if(n1%n2==0)
							{
								System.out.println(n1 + sign + n2 + "=");
								a[i] = n1;
								c[i] = n2;
								b[i] = sign;
								System.out.println("请输入运算结果:");
								ans = sc.nextInt();
								if(ans==n1/n2)
								{
									t++;
								}
							}
							else
							{
								System.out.println((n1-n1%n2) + sign + n2 + "=");
								a[i] = n1-n1%n2;
								c[i] = n2;
								b[i] = sign;
								System.out.println("请输入运算结果:");
								ans = sc.nextInt();
								if(ans==n1/n2)
								{
									t++;
								}
							}
						}
					}
					else
					{
						System.out.println(n1 + sign + n2 + "=");
						a[i] = n1;
						c[i] = n2;
						b[i] = sign;
						System.out.println("请输入运算结果:");
						ans = sc.nextInt();
						if(sign=="+")
						{
							if(ans==n1+n2)
							{
								t++;
							}
						}
						else if(sign=="-")
						{
							if(ans==n1-n2)
							{
								t++;
							}
						}
						else
						{
							if(ans==n1*n2)
							{
								t++;
							}
						}
					}
				}
			} 
			
			if(t==Cno)
			{
				System.out.println("你真是个天才!全对!");
		    }
			else
			{
				System.out.println("共做对" + t + "道题,做错了" + (Cno-t) + "道题。");
			}
		}
		
		else
		{
			for(int i=0;i<Cno;i++)
			{
				int Mno = (int)(Math.random() * 7) + 3;
			    int n[] = new int[Mno];
			    for(int j=0;j<Mno;j++)
			    {
			    	n[j] = (int)(Math.random() * (Ub-Lb)) + Lb;
			    }
			    
				String s[] = new String[Mno];
				s[Mno-1] = "=";
				String sign="";
				for(int j=0;j<Mno-1;j++)
				{
					//随机生成运算符
					int Shows = (int)(Math.random() * 4);
					switch(Shows)
					{  
					    case 0:
					    	sign="+";
					    	break;
					    case 1:
					    	sign="-";
					    	break;
					    case 2:
					    	sign="*";
					    	break;
					    case 3:
					    	sign="/";
					    	break;
					}
					s[j] = sign;
				}
				
			    for(int j=0;j<Mno;j++)
			    {
			    	System.out.print(n[j] + s[j]);
			    }
				System.out.println();
				
				int rec = Mno;
				for(int j=0;j<Mno;j++)
				{
					if(s[j].equals("*") || s[j].equals("/"))
					{
						if(s[j].equals("*"))
						{
							n[j] = n[j] * n[j+1];
							rec--;
						}
						else if(s[j].equals("/"))
						{
							n[j] = n[j] / n[j+1];
							rec--;
						}
						
						for(int k=j+1;k<rec;k++)
						{
							n[k] = n[k+1];
							if(k==(rec-1))
							{
								break;
							}
						}
						for(int k=j;k<rec;k++)
						{
							s[k] = s[k+1];
							if(k==(rec-1))
							{
								break;
							}
						}
						j--;
					}
				}
				
				int v = rec;
				for(int j=0;j<v;j++)
				{
					if(s[j].equals("+"))
					{
						n[j] = n[j] + n[j+1];
					}
					else if(s[j].equals("-"))
					{
						n[j] = n[j] - n[j+1];
					}
					v--;
					for(int k=j+1;k<v;k++)
					{
						n[k] = n[k+1];
					}
					for(int k=j;k<v;k++)
					{
						s[k] = s[k+1];
					}
					j--;
				}
				System.out.println("请输入答案:");
				ans = sc.nextInt();
				if(ans==n[0])
				{
					t++;
				}
			}
			//循环
			if(t==Cno)
			{
				System.out.println("你真是个天才!全对!");
		    }
			else
			{
				System.out.println("共做对" + t + "道题,做错了" + (Cno-t) + "道题。");
			}
		}
		//生成多项四则运算
	}
}

 【程序结果截图】

技术分享

技术分享

技术分享

技术分享

【项目计划总结表】

项目计划总结表(2016/3/26)

  任 务

(日 期)

听课 编写程序 阅读课本 准备考试 日总计
周日          
周一 100min       100min
周二     90min   90min
周三          
周四     30min   30min
周五    190min      190min
周六   360min     360min
周总计 100min 450min 120min   670min

【时间记录日志】

日期 开始时间 结束时间 中断时间 净时间 活动 备注
2016/3/21 8:00 8:50   50min 上课  
  9:00 9:50   50min 上课  
             
2016/3/22 15:00 16:10 10min 60min 看书  
  19:00 19:30   30min 看书  
2016/3/24 19:00 19:30   30min 看书  
2016/3/25 18:30 21:50   190min 交流设计思路,编码  
2016/3/26 9:00 11:30 30min 120min 编程序  交流设计思路
  15:00 19:20 30min 240min 编程序

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

软件工程个人作业03-网页版四则运算

软件工程个人作业03

软件工程个人作业03

软件工程个人作业03

软件工程个人作业03

第五次个人作业:个人总结