软件工程概论作业03--将随机产生的表达式导入数据库

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Random;
import java.util.Scanner;
import java.util.Stack;

public class Size {
	public static void main(String[] args) throws ClassNotFoundException, SQLException{
		Scanner sc = new Scanner (System.in);
		System.out.println("请选择    1.整数运算    2.分数运算");
		int t = sc.nextInt();
		switch(t)
		{
			case 1:
			{
				Integer(sc);
				break;
			}
			case 2:
			{
				fenshu(sc);
			}
		}

	}

	public static int simple(int a,int b)    //求最大公约数
	{
		int c=0;
		if(a>b)
		{
			while(a!=b)
			{
				c=a-b;
				if(b>=c)
				{
					a=b;
					b=c;
				}
				if(c>b)
				{
					a=c;
				}
			}
			return a;
		}
		else
		{
			while(a!=b)
			{
				c=b-a;
				if(a>=c)
				{
					b=a;
					a=c;
				}
				if(c>a)
				{
					b=c;
				}

			}
			return a;
		}
	}

	public static int gongbei(int a,int b)      //求最小公倍数
	{
		int t=simple(a,b);
		return a*b/t;
	}			

	public static String liangfenshujisuan(String a,String b,char c)          //两个真分数的计算
	{
		int t=0;
		int t1=0,t2=0;
		int p1=0,p2=0;
		String s="";
		String d[]=a.split("\\/");
		String d1[]=b.split("\\/");
		int da[]=new int [d.length];
		int db[]=new int [d1.length];
		for(int i=0;i<d.length;i++)
		{
			da[i]=Integer.parseInt(d[i]);
		}
		for(int i=0;i<d1.length;i++)
		{
			db[i]=Integer.parseInt(d1[i]);
		}

		if(c==‘+‘)
		{
			t=gongbei(da[1],db[1]);        //两数分母同分
			t1=t/da[1];
			da[0]*=t1;                   //分子与分母相匹配
			t2=t/db[1];
			db[0]*=t2;
			p1=da[0]+db[0];
			s+=p1+"/"+t;
		}
		if(c==‘-‘)
		{
			t=gongbei(da[1],db[1]);        //两数分母同分
			t1=t/da[1];
			da[0]*=t1;                   //分子与分母相匹配
			t2=t/db[1];
			db[0]*=t2;
			p1=da[0]-db[0];
			if(p1<=0)
			{
				return "error";
			}
			else
			{
				s+=p1+"/"+t;
			}
		}
		if(c==‘*‘)
		{
			p1=da[0]*db[0];
			p2=da[1]*db[0];
			s+=p1+"/"+p2;
		}
		if(c==‘/‘)
		{
			p1=da[0]*db[1];
			p2=da[1]*db[0];
			s+=p1+"/"+p2;
		}
		return s;
	}

	public static String fenshujisuan(String a)                       //分数表达式计算
	{
		Stack <String>num=new Stack <String>();
		Stack <String>fuhao=new Stack<String>();
		a+="#";
		fuhao.push("#");
		char ch;
		int i=0;
		int s=0;
		int y=0;
		ch=a.charAt(i);
		while(!(ch+"").equals("#")||(!(fuhao.peek().equals("#"))))
		{
			if(ch==‘ ‘)          //如果ch=" ",则说明接下来是数字
			{
				String rn="";
				while(true)
				{
					ch=a.charAt(++i);
					if(ch==‘ ‘)
					{
						break;
					}
					rn+=ch;
				}
				if((i+1)<a.length())
				{
					ch=a.charAt(++i);
				}
				num.push(rn);
			}
			else           //遇到的是字符
			{
				char comp=youxian(fuhao.peek(),ch+"");  //比较两个字符的优先级
				if(comp==‘=‘)                          //说明遇到右括号
				{
					fuhao.pop();
					if((i+1)<a.length())
					{
						ch=a.charAt(++i);
					}
				}
				else if(comp==‘>‘)                   //优先级高,弹出两个数和一个运算符,进行运算
				{
					String st1=num.pop();
					String st2=num.pop();
					String fuh1=fuhao.pop();
					char fuh2=fuh1.charAt(0);        //将String类型转为char类型
					String sz="";
					sz=liangfenshujisuan(st2,st1,fuh2);
					if(sz.equals("error"))                     //如果运算中有问题,就结束运算
					{
						return "error";
					}
					else
					{
						num.push(sz+"");             //将两数结果压入栈中
					}
				}
				else                                  //优先级比较低,把运算符压入栈中
				{
					fuhao.push(ch+"");
					if((i+1)<a.length())
					{
						ch=a.charAt(++i);
					}
				}
			}
		}
		return num.pop();
	}

	public static String fenshuchansheng(int n1,int t1)           //生成真分数的字符串表达式  n1=2,3,4
	{
		Scanner sc=new Scanner(System.in);
		String s=" ";
		String a[]={"+","-","*","/"};
		int a1[]=new int [n1-1];
		int b[]=new int [2*n1];                  //生成的随机数是操作数的2倍
		for(int i=0;i<2*n1;i=i+2)
		{
			b[i]=(int)(Math.random()*t1);         //随机产生第一个操作数的分子分母
			b[i+1]=(int)(Math.random()*t1);
			if((b[i]>=b[i+1])||(b[i+1]==0)||(b[i]==0))           //如果分子大于分母或分子、分母为0,重新赋值
			{
				i=i-2;
			}
		}
		for(int j=0;j<n1-1;j++)
		{
			a1[j]=(int)(Math.random()*4);          //随机产生运算符的位置
		}
		int i=0;
		for(int j=0;j<2*n1;j+=2)
		{
			int t=simple(b[j],b[j+1]);       //第1,2个数是第一个操作数的分子分母,以此类推
			b[j] /=t;                       //化简分子分母
			b[j+1] /=t;
		}
		for(int j=0;j<2*(n1-1);j+=2)
		{
			s+=b[j]+"/"+b[j+1]+" "+a[a1[i]]+" ";
			i++;
		}
		s+=b[2*(n1-1)]+"/"+b[2*(n1-1)+1]+" ";
		return s;
	}

	public static String fenshuchanshengkuohao(int n1,int t1)     //生成带括号的真分数的字符串表达式  n1=2,3,4
	{
		Scanner sc=new Scanner(System.in);
		String s=" ";
		String a[]={"+","-","*","/"};
		int a3[]=new int [n1];                   //记录括号产生的位置
		String a5[]=new String [n1];
		a3=chansheng(n1);
		int a1[]=new int [n1-1];
		int b[]=new int [2*n1];                  //生成的随机数是操作数的2倍
		for(int i=0;i<2*n1;i=i+2)
		{
			b[i]=(int)(Math.random()*t1);         //随机产生第一个操作数的分子分母
			b[i+1]=(int)(Math.random()*t1);
			if((b[i]>=b[i+1])||(b[i+1]==0))           //如果分子大于分母或分母为0,重新赋值
			{
				i=i-2;
			}
		}
		for(int j=0;j<n1-1;j++)
		{
			a1[j]=(int)(Math.random()*4);          //随机产生运算符的位置
		}
		int i=0;
		for(int j=0;j<2*n1;j+=2)            //化简真分数
		{
			int t=simple(b[j],b[j+1]);       //第1,2个数是第一个操作数的分子分母,以此类推
			b[j] /=t;                       //化简分子分母
			b[j+1] /=t;
		}

		for(int j=0;j<2*(n1-1);j+=2)
		{
			s+=b[j]+"/"+b[j+1]+" "+a[a1[i]]+" ";
			i++;
		}
		s+=b[2*(n1-1)]+"/"+b[2*(n1-1)+1]+" ";
		return s;
	}
	public static char youxian(String f,String s)                //计算两个符号的优先级
	{
		char a1[][]={
				{‘>‘,‘>‘,‘<‘,‘<‘,‘<‘,‘>‘,‘>‘},
				{‘>‘,‘>‘,‘<‘,‘<‘,‘<‘,‘>‘,‘>‘},
				{‘>‘,‘>‘,‘>‘,‘>‘,‘<‘,‘>‘,‘>‘},
				{‘>‘,‘>‘,‘>‘,‘>‘,‘<‘,‘>‘,‘>‘},
				{‘<‘,‘<‘,‘<‘,‘<‘,‘<‘,‘=‘,‘ ‘},
				{‘>‘,‘>‘,‘>‘,‘>‘,‘ ‘,‘>‘,‘>‘},
				{‘<‘,‘<‘,‘<‘,‘<‘,‘<‘,‘ ‘,‘=‘}
		};
		String a="+-*/()#";
		int a11=a.indexOf(f);   //找出运算符在表格中的行坐标
		int a12=a.indexOf(s);   //找出运算符在表格中的行坐标
	//	System.out.println(f+"     "+s);
		return a1[a11][a12];
	}
	public static int [] chansheng(int num)                    //随机产生括号
	{
		int []b=new int[num];
		for(int i=0;i<b.length;i++)
		{
			b[i]=0;
		}
		Random rd=new Random();
		for(int i=2;i<num;i++)
		{
			for(int j=0;j<num-i+1;j++)
			{
				int t=rd.nextInt(2);
				if(t==1)
				{
					if(b[j]>=0&&b[j+i-1]<=0)
					{
						int c=0;
						for(int k=j;k<j+i;k++)
						{
							c+=b[k];
						}
						if(c==0)
						{
							b[j]++;
							b[j+i-1]--;
						}
					}

				}
			}
		}
		return b;
	}

	public static String chanshengbiaodashi(int num,int t1)       //产生带括号的表达式
	{
		int a1[]=new int[num];
		int a2[]=new int[num-1];
		int a3[]=new int[num];
		String[]a5=new String[num];
		String[] a4={"+","-","*","/"};
		for(int i=0;i<num;i++)
		{
			a1[i]=(int) (Math.random()*t1);
		}
		for(int i=0;i<num-1;i++)
		{
			a2[i]=(int) (Math.random()*4);
		}
		a3=chansheng(num);
		for(int i=0;i<num;i++)
		{
			a5[i]="";
			if(a3[i]<0)
			{
				int c=0-a3[i];
				for(int j=0;j<c;j++)
				{
					a5[i]+=")";
				}
			}
			else
			{
				for(int j=0;j<a3[i];j++)
				{
					a5[i]+="(";
				}
			}
		}
		String t="";
		for(int i=0;i<num-1;i++)
		{
			if(a3[i]>0)
			{
				t+=a5[i]+" "+a1[i]+" "+a4[a2[i]];
			}
			else
			{
				t+=" "+a1[i]+" "+a5[i]+a4[a2[i]];
			}
		}
		if(a3[num-1]>0)
		{
			t+=a5[num-1]+" "+a1[num-1]+" ";
		}
		else
		{
			t+=" "+a1[num-1]+" "+a5[num-1];
		}
		return t;
	}

	public static int[] tys(int a,int b,char c)   //两个数的运算
	{
		int []a1=new int [2];            //a1[0]用来记录两数运算结果,a1[1]用来记录两数能否继续算下去
		a1[0]=a1[1]=0;
		int d=0;
		if(c==‘+‘)
		{
			d=a+b;
		}
		else if(c==‘-‘)
		{
			if(a<b)
			{
				a1[1]=1;
			}
			else
			{
				d=a-b;
			}
		}
		else if(c==‘*‘)
		{
			d=a*b;
		}
		else
		{
			if((b==0)||(a%b!=0)||(a<b))
			{
				a1[1]=1;
			}
			else
			d=a/b;
		}
		a1[0] = d;
		return a1;
	}

	public static String jisuan(String a)     //整数表达式的运算
	{
		Stack <String>num=new Stack <String>();
		Stack <String>fuhao=new Stack<String>();
		a+="#";
		fuhao.push("#");
		char ch;
		int i=0;
		int s=0;
		int y=0;
		ch=a.charAt(i);
		while(!(ch+"").equals("#") || !fuhao.peek().equals("#"))
		{
			if(ch==‘ ‘)              //如果遇到字符为空,说明遇到数字
			{
				String rn="";        //用来记录数据
				while(true)
				{
					ch=a.charAt(++i);
					if(ch==‘ ‘)
					{
						break;
					}
					rn+=ch;
				}
				if((i+1)<a.length()){
					ch=a.charAt(++i);
				}
				num.push(rn);
			}
			else//遇到的是字符
			{
				char comp=youxian(fuhao.peek(),ch+"");  //比较两个字符的优先级
				if(comp==‘=‘)                          //说明遇到右括号
				{
					fuhao.pop();
					if((i+1)<a.length()){
						ch=a.charAt(++i);
					}
				}
				else if(comp==‘>‘)                   //优先级高,弹出两个数和一个运算符,进行运算
				{
					String st1=num.pop();
					String st2=num.pop();
					int ai1 = Integer.parseInt(st1);
					int ai2 = Integer.parseInt(st2);
					String fuh1=fuhao.pop();
					char fuh2=fuh1.charAt(0);        //将String类型转为char类型
					int []sz=new int[2];
					sz=tys(ai2,ai1,fuh2);
					if(sz[1]==1)                     //如果运算中有问题,就结束运算
					{
						return "error";
					}
					else
					{
						num.push(sz[0]+"");          //将两数结果压入栈中
					}
				}
				else                                  //优先级比较低,把运算符压入栈中
				{
					fuhao.push(ch+"");
					if((i+1)<a.length())
					{
						ch=a.charAt(++i);
					}
				}
			}
		}
		return num.pop();
	}

	//整数运算
	public static void Integer(Scanner sc) throws ClassNotFoundException, SQLException
	{
		System.out.println("请选择    1.不含括号    2.含有括号");
		int t = sc.nextInt();
		switch(t)
		{
			case 1:
			{
				int numr=0;
				int numw=0;
				System.out.println("请输入操作数的最大范围:");
				int t1 = sc.nextInt();

				System.out.println("请输入题目数量:");
				int n=sc.nextInt();

				String s1[]=new String [n];
				String str[] = new String [n];
				String str1[] = new String [n];
				String a[]={"+","-","*","/"};
				int b[][] = new int [n][];            //用二维表存储操作数
				for(int i=0;i<n;i++)                 //生成表达式并输出
				{
					str[i] = "第"+(i+1)+"题: ";
					str1[i] = " ";
					s1[i]="";
					int n1=(int) (Math.random()*3);            //随机生成操作数的个数
					b[i]=new int[n1+2];
					for(int j=0;j<n1+2;j++)
					    b[i][j]=(int) (Math.random()*t1);
					int d[] = new int [n1+1];                //存储符号在a中的位置
					for(int j=0;j<n1+1;j++)                  //随机产生数映射到运算符
					{
						d[j]=(int) (Math.random()*4);
					}
					for(int j=0;j<n1+1;j++)              //将表达式存储到String类型的字符串中
					{
						str[i]+=b[i][j]+" "+a[d[j]]+" ";
						str1[i] += b[i][j]+" "+a[d[j]]+" ";
					}
					str[i]+=b[i][n1+1]+" =";            //包含括号,用于输出
					str1[i] += b[i][n1+1]+" ";              //不包含括号,方便堆栈过程的计算
					boolean flag=true;
					for(int j=i-1;j>=0;j--)
					{
						if(str1[i]==str1[j])            //判断是否重复
						{
							flag=false;
							break;
						}
						else if((n1==0)&&((d[0]==0)||(d[0]==2))&&           //乘法或加法交换同样重复
								((b[i][0]==b[j][1])&&(b[i][1]==b[j][0])))
						{
							flag = false;
							break;
						}
					}
					for(int z=0;z<n1+1;z++)        //判断有除法时,后边的操作数是否为0
					{
						if(d[z]==3&&b[i][z+1]==0)
						{
							flag=false;
							break;
						}
					}
					if( flag==false)
					{
						i--;
					}
					else
					{

						String s =jisuan(str1[i]);
					    s1[i]+=jisuan(str1[i]);
						if(s.equals("error"))
						{
							i--;
						}
						else
						{
							System.out.print(str[i]);
							String q=sc.next();
							if(q.equals(s))
							{
								System.out.println("恭喜你,回答正确!");
								numr++;
							}
							else
							{
								System.out.println("很遗憾,回答错误!  正确结果为:"+s);
								numw++;
							}
						}
					}
				}
				lianjiezhengshu(str,s1);
				System.out.println("一共"+n+"道题,答对"+numr+"道,错误"+numw+"道,继续努力!");
				break;
			}
			case 2:
			{
				int numr=0;
				int numw=0;
				System.out.println("请输入操作数的最大范围:");
				int t1 = sc.nextInt();
				System.out.println("请输入题目数量:");
				int n=sc.nextInt();
				String str[] = new String [n];
			    String str1[] = new String [n];
				String s1[]=new String [n];
				for(int i=0;i<n;i++)
				{

					str[i]="";
					str1[i]="第"+(i+1)+"题: ";
					s1[i]="";
					int n1=(int) (Math.random()*3);            //随机生成操作数的个数
					str[i]+=chanshengbiaodashi(n1+2,t1);
					str1[i]+=str[i]+" =";
					String s = jisuan(str[i]);
					s1[i]+=jisuan(str[i]);
					if(s.equals("error"))
					{
						i--;
					}
					else
					{
						System.out.print(str1[i]);
						String q=sc.next();
						if(q.equals(s))
						{
							System.out.println("恭喜你,回答正确!");
							numr++;
						}
						else
						{
							System.out.println("很遗憾,回答错误!  正确结果为:"+s);
							numw++;
						}
					}		

				}
				lianjiezhengshu(str1,s1);
				System.out.println("一共"+n+"道题,答对"+numr+"道,错误"+numw+"道,继续努力!");
				break;
			}

		}
	}	

	//分数运算
	public static void fenshu(Scanner sc) throws ClassNotFoundException, SQLException
	{
		System.out.println("请输入题目数量:");
		int n=sc.nextInt();
		System.out.println("请输入操作数范围:");
		int t1=sc.nextInt();
		String str[] = new String [n];
		String str1[]= new String [n];
		String s[]=new String[n];
		String s1[]=new String [n];
		for(int i=0;i<n;i++)
		{
			int n1=(int) (Math.random()*3);
			str1[i]="第"+(i+1)+"道题目:";
			str1[i]+=fenshuchansheng(n1+2,t1);
			str[i]=fenshuchansheng(n1+2,t1);
			s[i]=fenshujisuan(str[i]);
			s1[i]="";
			int z=1;
			for(int j=i-1;j>=0;j--)
			{
				if(str[i].equals(str[j]))
				{
					z=0;
					break;
				}
				//else if()
			}
			if((z==0)||(s[i].equals("error")))
			{
				i--;
			}
			else
			{
				String b1[] =new String [2];                //对运算结果进行化简
			    int b[]=new int [2];
				b1=s[i].split("\\/");
				b[0]=Integer.parseInt(b1[0]);
				b[1]=Integer.parseInt(b1[1]);
				int t=simple(b[0],b[1]);
				b[0] /=t;
				b[1] /=t;
				int a=(int)(b[0]/b[1]);
				int c=b[0]%b[1];

				if(b[0]>b[1])              //判断结果格式
				{
					if(b[0]%b[1]==0)
					{
						s1[i]+=a;
						System.out.println("第"+(i+1)+"道题目:"+str[i]+" ="+a);
					}
					else
					{
						s1[i]+=a+"‘"+c+"/"+b[1];
						System.out.println("第"+(i+1)+"道题目:"+str[i]+" ="+s1[i]);
					}
				}
				if(b[1]>b[0])
				{
					s1[i]+=b[0]+"/"+b[1];
					System.out.println("第"+(i+1)+"道题目:"+str[i]+" ="+s1[i]);
				}
				else if(b[0]==b[1])
				{
					s1[i]+="1";
					System.out.println("第"+(i+1)+"道题目:"+str[i]+" ="+s1[i]);
				}

			}

		}
		lianjiefenshu(str1,s1);             //连接数据库,将表达式和结果导入数据库
		System.out.println("导入成功!");
	}
    //分数连接数据库
	public static void lianjiefenshu(String a[],String b[]) throws ClassNotFoundException, SQLException
    {
		Connection conn = null;
		PreparedStatement pstmt = null;
		String driverName = "com.mysql.jdbc.Driver";
		String userName = "root";
		String userPwd = "123456789";
		String ur11 = "jdbc:mysql://localhost:3306/size03";
		String ur12 = "?user=" + userName + "&password=" + userPwd;
		String ur13 = "&useUnicode=true&characterEncoding=UTF-8";
		String ur1 = ur11 + ur12 + ur13;
		Class.forName(driverName);
		conn = DriverManager.getConnection(ur1);
		String sql = "insert into text03fenshu(表达式,结果) values(?,?)";
		pstmt = conn.prepareStatement(sql);
		for(int i=0;i<a.length;i++)
		{
			pstmt.setString(1,a[i] );
		    pstmt.setString(2, b[i]);
		    pstmt.executeUpdate();
		}
		if(pstmt !=null)
		{
		 pstmt.close();
		}
		if(conn!=null)
		{
		 conn.close();
		}

    }
	//整数连接数据库
	public static void lianjiezhengshu(String a[],String b[]) throws ClassNotFoundException, SQLException
    {
		Connection conn = null;
		PreparedStatement pstmt = null;
		String driverName = "com.mysql.jdbc.Driver";
		String userName = "root";
		String userPwd = "123456789";
		String ur11 = "jdbc:mysql://localhost:3306/size03";
		String ur12 = "?user=" + userName + "&password=" + userPwd;
		String ur13 = "&useUnicode=true&characterEncoding=UTF-8";
		String ur1 = ur11 + ur12 + ur13;
		Class.forName(driverName);
		conn = DriverManager.getConnection(ur1);
		String sql = "insert into text03zhengshu(表达式,结果) values(?,?)";
		pstmt = conn.prepareStatement(sql);
		for(int i=0;i<a.length;i++)
		{
			pstmt.setString(1,a[i] );
		    pstmt.setString(2, b[i]);
		    pstmt.executeUpdate();
		}
		if(pstmt !=null)
		{
		 pstmt.close();
		}
		if(conn!=null)
		{
		 conn.close();
		}

    }
}

  

设计思想:

这次的实验较上次的改进有,整数运算可以随机产生不超过四个的操作数,可以随机产生括号;

分数部分,可以随机产生不超过四个的操作数,对于多于两个操作数的表达式,利用堆栈的方式进行计算,

首先将String类型的表达式利用空格将数字与运算符分开,将数字强制转换为int类型,进行计算。

最后将表达式和结果都导入数据库,调用数据库,与输入的值比较,查看结果是否匹配,最后统计正确和错误的个数。

 运行截图

                                             

                        

                  

时间: 2024-10-10 04:55:56

软件工程概论作业03--将随机产生的表达式导入数据库的相关文章

软件工程概论作业03

这一周,老师有提出了新的要求. 1.生成随机数,整数的和分数的,分数的用字符串表示,单独写一个分数类,分子分母,写出分数加减乘除的方法. 2.生成随机运算符数组,每道题最多有10个运算数,所以最多有9个运算符. 3.生成表达式,用控制语句选择要生成的表达式. 3.结果的处理,是分数的要化简. package demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatem

软件工程概论作业02

这周,我们上了软件工程概论第三节课,终于体会到的程序员的不易,作业一次比一次难,老师提出的要求越来越多,就像未来的客户一样,要求永远无止境. 这次还在上次的要求上提出了新的要求,要求可选择整数还是分数,可指定范围,不可重复. 可怜的二柱子同学,老师又对他的自动出题系统提出了新的要求: 可以控制下列参数: 是否有乘除法: 是否有括号(最多可以支持十个数参与计算): 数值范围: 加减有无负数: 除法有无余数! 日期 开始时间 结束时间 中断时间 净时间 活动 备注 C U 3/10 14:00 16

软件工程个人作业03

package demo; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Random; import java.util.Scanner; import java.util.Stack; public cla

软件工程概论-作业02

1.要求:写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算.题目避免重复.可定制出题的数量. 2.思路: 1)产生随机数choose,1或2,1表示生成整数表达式,2表示生成分数表达式,并用一个字符串数组存储表达式便于打印输出(长度由用户输入): 2)用一个字符数组存储"+ - * ÷"等符号,取符号则生成随机数0-3: 3)若choose为1,random生成两个整数作为表达式的左操作数和右操作数,并随机产生操作符:

软件工程概论作业

设计思路: 1.定义类node,变量有node类型root ,left,right以及string类型weight 2.初始化函数(以一个新节点为当前节点,根节点为null),设置一个计数器flag=0 2.1初始化weight值,随机数字或符号(若i>=3则必为数将算式限定在10个数以内) 2.11若weight值为符号则i++且调用此初始化函数,(以left为当前节点,本函数中节       点为根节点.) 2.12若weight为符号则i++且调用此初始化函数,(以right为当前节点,本

软件工程概论作业三

设计思想:构造如下几个类:试题类(class ShiTi): 属性:运算式.运算式结果.运算式逻辑运算顺序和运算数个数 公共方法:各个属性的set/get方法, setTiMu方法中在设置了题目属性后立即设置运算数的个数并执行计算运算式结果的函数 在计算运算式结果的函数中,利用堆栈将运算式转换为后缀表达式进行计算, 每计算一个子表达式就将该表达式的运算数加上产生该运算数的子表达式的序号用's'分隔(例如运算式为1 + 2 + 4 则第一个子表达式的运算数为1s0,2s0,第二个子表达式为3s1,

软件工程概论作业01

软件工程作业01 写一个能自动生成三十道小学四则运算题目的 "软件",要求:除了整数以外,还要支持真分数的四则运算(需要验证结果的正确性).题目避免重复.可定制出题的数量. 思路:随机生成两个数进行计算,设立一个随机的参量用来判断是生成整数还是分数:生成分数时先生成分母,然后将分子的上限设置为分母,这样就会生成真分数: package demo; import java.util.Random; import java.util.Scanner; public class work {

软件工程概论作业(1)

1.网站系统开发需要掌握的技术 至少掌握asp.asp.net.php.Jsp一种编程语言和MSSQL或者MYSQL数据库 2.课堂测试的源程序代码 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="

软件工程结对作业03

同组成员(尤凯丽):http://www.cnblogs.com/love528/ 设计思想 在有负数的情况下,要保证找出的子数组的和是最大的,那么最小的负数是一定不会在子数组中的,我们将最小的负数作为一个断点,放在非循环数组的第一位,这样它之前的数就不需要先考虑了.例如:当循环数组为1,2,-5,6,-1时,最小的负数是-5,我们就可以将它断成非循环数组-5,6,-1,1,2.这样就可以算出最大和的子数组了.如果没有负数的话,从哪里断开就是无所谓的了,但是为了编程方便,我们还是从最小的数处断开