• 每日日报之一周总结


    本周四则运算各项功能已全部完成。

    源码如下:

    package homework;
    import java.util.*;
    import java.util.Scanner;
    import javax.script.*; 
    import java.io.File;  
    import java.io.InputStreamReader;  
    import java.io.BufferedReader;  
    import java.io.BufferedWriter;  
    import java.io.FileInputStream;  
    import java.io.FileWriter;  
    import java.io.IOException;
    import java.io.*;
    public class math 
    {
    	private static int n,min,max,c,cc,kh=0,xz,zts=0,zcts=0;//题目数,数值范围(最小及最大),操作数个数,乘除,括号,选择菜单,总题数,总错题数
    	private static char[] d={'+','-','*','/'};//运算符
    	private static Scanner sc=new Scanner(System.in);
    	public static void main(String args[]){DZ();}//菜单
    	public static void DZ()//菜单
    	{
    		System.out.println("请选择:");
    		System.out.println(" 1.小学二年级口算题");
    		System.out.println(" 2.小学三年级口算题");
    		System.out.println(" 3.小学四年级口算题");
    		System.out.println(" 4.错题本");
    		xz=sc.nextInt();
    		if(xz==4) {CTB();}//错题本
    		else
    		{
    			System.out.println( "请输入题目总数:" );
    		   n=sc.nextInt();
    		   System.out.println("请输入数值的范围."); 
    		   min=sc.nextInt();
    		   max=sc.nextInt();
    		   switch(xz)
    		   {
    		   case 1:
    			   while(max>100)
    			   {
    				   System.out.println("小学二年级操作数范围不超过100,请重新输入最大值:");
    				   max=sc.nextInt();
    			   }
    			   c=1;
    			   break;
    		   case 2:
    			   while(max>1000)
    			   {
    				   System.out.println("小学三年级操作数范围不超过1000,请重新输入最大值:");
    				   max=sc.nextInt();
    			   }
    			   System.out.println( "输入操作数个数:" );
    		       c=sc.nextInt()-1;
    		       while(c>3)
    			   {
    				   System.out.println("小学三年级操作数不超过4个,请重新输入操作数个数:");
    				   c=sc.nextInt()-1;
    			   }
    		       break;
    		   case 3:
    			   System.out.println( "输入操作数个数:" );
    		       c=sc.nextInt()-1;
    		       while(c>4)
    			   {
    				   System.out.println("小学四年级操作数不超过5个,请重新输入操作数个数:");
    				   c=sc.nextInt()-1;
    			   }
    		       System.out.println( "是否有括号?是请输入1,否请输入0:" );
    		       kh=sc.nextInt();
    		       break;
    		   }
    		   System.out.println( "是否有乘除法?是请输入1,否请输入0:" );
    		   cc=sc.nextInt();
    		   TM();//题目
    		}
    	}
    	public static String Tm()//每题
    	{
    		Random r=new Random();
    		int sz;
    		String ch=null;
    		double a=r.nextInt(max)+min;
    		while(a>max){a=r.nextInt(max)+min;}
    		if(xz==1)
    		{
    			int b;
    			if(cc==0) {sz=r.nextInt(2);}
    	        else{sz=r.nextInt(4);}//乘除法
    			b=r.nextInt(max)+min;
    		    while(b>max){b=r.nextInt(max)+min;}
    		    if(d[sz]=='/')
    		    {
    		    	if(b==0){while(b==0||b>max) {b=r.nextInt(max)+min;}}//防止0为被除数
    		    	if(a%b!=0) 
    		    	{
    		    		while(a%b!=0||a>max||b>max)
    		    		{
    		    			a=r.nextInt(max)+min;
    		    			b=r.nextInt(max)+min;
    		    		}
    		    	}
    		    }
    		    if(d[sz]=='-'&&b>a){while(b>a||b>max) {b=r.nextInt(max)+min;}}
    		    ch=String.valueOf(a);
    		    ch+=String.valueOf(d[sz]);
    		    ch+=String.valueOf(b);
    		}
    		else
    		{
    		    double[] b=new double[c];//操作数个数及数值范围
    		    int k=-1,h=-1,z;//左括号,右括号
    		    if(kh==1)//括号
    	        {
    		    	z=r.nextInt(2);
    		    	if(z==1)//随机增加括号
    		    	{
    		    		k=r.nextInt(c-1);
    		    		if(k==0)//括号由开头起
    		    		{
    		    			ch=String.valueOf('(');
    		    			ch+=String.valueOf(a);
    					    h=r.nextInt(c-1)+k+1;
    					    while(h>c){h=r.nextInt(c-1)+k+1;}
    					}
    		    		if(k>0)//括号在式中 
    		    		{
    		    			ch=String.valueOf(a);
    		    			h=r.nextInt(c)+k+1;
    		    			while(h>c){h=r.nextInt(c)+k+1;}
    		    		}
    		    	}
    			    else{ch=String.valueOf(a);}
    		    }
    		    else{ch=String.valueOf(a);}
    		    for(int i=0;i<c;i++) 
    		    {
    		    	if(cc==0) {sz=r.nextInt(2);}
    		        else {sz=r.nextInt(4);}//乘除法
    			    ch+=String.valueOf(d[sz]);
    			    if(k>0&&i==k-1){ch+=String.valueOf('(');}
    			    b[i]=r.nextInt(max)+min;
    			    while(b[i]>max){b[i]=r.nextInt(max)+min;}
    			    if(d[sz]=='/'&&b[i]==0){while(b[i]==0||b[i]>max) {b[i]=r.nextInt(max)+min;}}//防止0为被除数
    			    ch+=String.valueOf(b[i]);
    			    if(i==h-1){ch+=String.valueOf(')');}//补“)”
    			}
    		}
    		return ch;//以字符串形式定义算式
    	}
    	public static void TM()//总题
    	{
    		zts+=n;
    		int j=0;
    		String[] s=new String[n];
    		while(j<n)//制作题目
    		{
    		    s[j]=Tm();
    		    if(PC(j,s)==0)//是否重复
    		    {
    		    	System.out.println((j+1)+"、"+s[j]+"=");
    		    	j++; 	
    		    }
    		}
    		ScriptEngine se=new ScriptEngineManager().getEngineByName("JavaScript");
    		double[] sum=new double[n];
    		for(int i=0;i<n;i++)
    		{
    			try{sum[i]=(Double)se.eval(s[i]);} 
    			catch(ScriptException e){e.printStackTrace();}
    		}//字符串转算式计算结果
    		DT(s,sum);//答题
    	}
    	public static int PC(int j,String[] s)//判重
    	{
    		for(int i=0;i<j;i++){if(s[i].equals(s[j])) {return 1;}}
    		return 0;
    	}
    	public static void DT(String[] s,double[] sum)//答题
    	{
    		int mint,yd=0,w=0,yn=0;//时间,已答题目,错题数,yes or no
    		double[] da=new double[n];//回答
    		int[] cwcs=new int[n];
    		double[] Da=new double[n];
    		double[] Sum=new double[n];
    		String[] Cw=new String[n];//错误题号
    		System.out.println( "请设置答题时间(分钟)");
    		mint=sc.nextInt();
    		System.out.println( "开始答题 !");
    		long startTime=System.currentTimeMillis();
    		while((System.currentTimeMillis()-startTime)/1000<=mint*60)
    		{
    		    da[yd]=sc.nextDouble();
    		    yd++;
    		    if(yd==n){break;}
    		}
    		if(yd!=n){System.out.println( "时间到!答题结束!");}
    		for(int i=0;i<n;i++)
    		{
    			if(da[i]!=sum[i])//判断答题对错
    		    {
    		    	Cw[w]=s[i];
    		    	Da[w]=da[i];
    		    	Sum[w]=sum[i];
    		    	cwcs[w]=1;
    		    	w++;
    		    	zcts++;
    		    }
    		}
    		try
    		{
    			File f=new File("CTB.txt");
    			try(FileWriter writer = new FileWriter(f,true);BufferedWriter out = new BufferedWriter(writer);)
    			{
    				for(int i=0;i<w;i++){out.write(Cw[i]+"="+Sum[i]+",共做错了"+cwcs[i]+"次。
    ");}
    				out.flush();
    				out.close();
    			}
    		}catch (IOException e) {e.printStackTrace();}
    		double cw=(double)(n-w)*100/n;//正确率
    		System.out.println( "你的正确率为 :" +cw+"%");
    		System.out.println( "你的错题如下 :");//错题
    		for(int i=0;i<w;i++){System.out.println((i+1)+"、"+Cw[i]+"="+Da[i]+" X"+" 正确答案:"+Sum[i]);}
    		do
    		{
    			System.out.println("请选择:");
    			System.out.println(" 1.再做一套题");
    			System.out.println(" 2.错题重练");
    			System.out.println(" 3.退出");
    			yn=sc.nextInt();
    			switch(yn)
    			{
    			case 1:
    				TM();
    				break;
    			case 2:
    				for(int i=0;i<w;i++)
    				{
    					System.out.println((i+1)+"、"+Cw[i]+"=");
    					da[i]=sc.nextDouble();
    					if(da[i]!=Sum[i])
    					{
    						cwcs[i]++;
    						System.out.println((i+1)+"、X 正确答案为:"+Sum[i]);
    						try
    				        {
    							File f=new File("CTB.txt");
    							BufferedReader in=new BufferedReader(new FileReader(f));
    							PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(f,true)));
    					        String line; 
    					        while ((line = in.readLine()) != null)
    					        {
    					        	String[] tokens = line.split(",");
    					        	if(tokens[0].equals(Cw[i]+"="+Sum[i]))
    					        	{
    					        		out.println(line.replace(tokens[1], "共做错了"+cwcs[i]+"次。")); 
    					        	}
    					        }
    					        in.close();
    					        out.close();
    				         }catch (IOException e) {e.printStackTrace();}
    					}
    				}
    				break;
    			case 3:
    				System.out.println( "你今天的正确率为 :" +(zts-zcts)*100/zts+"%"+"
    ");
    				CTB();
    				break;
    			}			
    		}while(yn!=3);
    	}
    	public static void CTB()//错题本
    	{
    		System.out.println("         错题本          ");
    		try 
    		{
    			File f=new File("CTB.txt");
    			InputStreamReader reader = new InputStreamReader(new FileInputStream(f));
    			BufferedReader br = new BufferedReader(reader);
    			String line;  
                while ((line = br.readLine()) != null){System.out.println(line);}
                br.close();
    		}catch (IOException e) {e.printStackTrace();}
    	}
    }
    

    功能记录:

    定制式题、四则运算及括号添加、年级的限定、错题记录及重练、多套试题的限时答题、错题本等。

    问题无(主要是懒。。。)

  • 相关阅读:
    递归部门
    web攻击几种方法
    β版本apk下载地址及源代码github地址
    软件工程第六组U-Helpβ版使用说明
    软件工程第六组(六扇门)β版本最终答辩博客
    alpha版本展示
    用户Bug修补报告
    任务墙最终版
    个人总结-尹童欣
    个人总结-齐天浩
  • 原文地址:https://www.cnblogs.com/hfy717/p/13835879.html
Copyright © 2020-2023  润新知