前言:
花了一整天时间修修补补写完代码,现在写篇博客,一是希望后来的人有个参考,二是记录下自己的所获方便以后查阅,三是趁众大佬还没做,混点访问量
以前做项目都是自己做,这次是真切的体会到了为别人做事多么麻烦,这次还好,提需求的客户比较专业
设置:
根号为√,如果里面是多项式用括号括起来
平方为^,因为并没有说可以更多次方
输入为
输出
这里有一个小歧义,需求中说的题目至少有一个三角函数到底是一道题还是一套题,从经验上看,应该是一套题
11:03:17
注意点:
构造输出到文件的流
file=new File("D:/java/calculate/"+un+"/"+title+".txt"); FileOutputStream out=new FileOutputStream(file) ; PrintStream printToFile=new PrintStream(out); PrintStream printToConsole=System.out;
将各种难度的功能拆分
public void sqrt() { System.out.print(sign2[0]); } public void square() { System.out.print(sign2[1]); } public void trigonometric() { int temp=random.nextInt(3); System.out.print(sign3[temp]); }
对输出到文件的执行
public void result(FirestProjct f,int n,String g,PrintStream printToFile,PrintStream printToConsole) throws IOException { System.out.println("开始输出到文件"); System.setOut(printToFile); f.calculate(4,n,g); System.setOut(printToConsole); System.out.println("输出成功"); }
其他的就是边写边做,对照着需求来,但是弄了几个小时感觉有一些的需求又费时又学不到东西,so~我选择忽略
因为还有一些更重要的事情做,这种任务只能尽快做完并消化
以下是源代码
package zuoye; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintStream; import java.io.UnsupportedEncodingException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Random; import java.util.Scanner; public class FirestProjct { public static Random random=new Random(); private char[] sign1= {‘+‘,‘-‘,‘*‘,‘/‘};//符号 private char[] sign2= {‘√‘,‘^‘,‘%‘};//根号,平方和,取余(可加可不加) private String[] sign3= {"sin","cos","tan"};//三角函数 private static String [] grade={"小学","初中","高中"}; int p=3;//算式符号出现的概率1/3 //主方法主要负责密码验证,传入参数,递归调用 public static void main(String [] args) throws IOException{ Scanner scanner=new Scanner(System.in); String [] username= {"张三1","张三2","张三3","李四1","李四2","李四3","王五1","王五2","王五3"};//账号 String password="123"; String un,pwd; System.out.println("请输入用户名和密码"); while(true) {//判定密码 boolean input=false; un=scanner.nextLine(); pwd=scanner.nextLine(); for(int i=0;i<9;i++) { if(username[i].equals(un)&&password.equals(pwd))input=true; } if(input)break; else System.out.println("请输入正确的用户名、密码"); } System.out.println("请输入小学、初中和高中三个选项中的一个"); String g=scanner.nextLine(); work(un,pwd,g); } //work方法用以执行整个过程 public static void work(String un,String pwd,String g) throws IOException { Scanner scanner=new Scanner(System.in); FirestProjct f=new FirestProjct(); int n=0;//题目数量 //做计算 while(true) { //创建文件 SimpleDateFormat dFormat=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss"); String title=dFormat.format(new Date()).toString(); File file=new File("D:/java/calculate/"+un+"/"); if(!file.exists()) { file.mkdirs(); } file=new File("D:/java/calculate/"+un+"/"+title+".txt"); FileOutputStream out=new FileOutputStream(file) ; PrintStream printToFile=new PrintStream(out); PrintStream printToConsole=System.out; f.prepare(g); while(true) { n=scanner.nextInt(); if(!f.judgeover(n)) System.out.println("数量应在10~30,请重新输入"); else break; } //第一次题目的输出 f.result(f, n, g, printToFile, printToConsole); System.out.println("请输入“切换为xx”或者“继续输入”"); String command=scanner.next();//nextline不能把式子停下来~ String gra=command.substring(0,3); String de=command.substring(3,5); //切换为后面的输入错误则重新输入 while(command.length()>3&&gra.equals("切换为")&&!(de.equals("小学")||de.equals("初中")||de.equals("高中"))) { System.out.println("请输入小学、初中和高中三个选项中的一个"); command=scanner.next(); gra=command.substring(0,3); de=command.substring(3,5); } if(command=="继续输入")work(un,pwd,g) ; else { for(int i=0;i<3;i++) { if(("切换为"+grade[i]).equals(command)) { g=grade[i]; work(un,pwd,g); } } } } } public void result(FirestProjct f,int n,String g,PrintStream printToFile,PrintStream printToConsole) throws IOException { System.out.println("开始输出到文件"); System.setOut(printToFile); f.calculate(4,n,g); System.setOut(printToConsole); System.out.println("输出成功"); } public void prepare(String g) { Scanner scanner=new Scanner(System.in); System.out.println("当前选择为"+g+"出题"); System.out.println("准备生成"+g+"数学题目,请输入生成题目数量:"); } public boolean judgeover(int n) {//判定题数是否合适 if(n<10||n>30) { return false; } return true; } public void calculate(int si,int n,String g) {//计算过程 si表示sign1用到的符号个数,n表示数字个数 System.out.println(g+"试卷"); boolean [] cou= {false,false,false};//用以判定直到最后是否出现了根号,三角函数,如果没有,就让最后一个数带上 for(int i=0;i<n;i++) { int count=random.nextInt(2)+3; System.out.print(i+1+"、"); for(int j=0;j<count;j++) { int number=random.nextInt(100)+1; int number2=random.nextInt(100)+1; int temp=0; int bracket=random.nextInt(p);//随机出现括号,概率为1/3 int sqrt=random.nextInt(p); int square=random.nextInt(p); int tri=random.nextInt(p); if(bracket==2) {//加括号的情况输出类似于(x+y)- bracket(number, number2, temp, si); System.out.print(sign1[temp]); } if(g.equals(grade[1])&&(sqrt==2)){//只输出根号 sqrt(); cou[1]=true; } if(g.equals(grade[2])&&tri==2) {//只输出三角函数符号 trigonometric(); cou[2]=true; } if(j==count-1&&g.equals(grade[2])&&!cou[2])trigonometric(); System.out.print(number); if(g.equals(grade[1])&&(square==2)){//只输出平方 square(); cou[3]=true; } temp=random.nextInt(si); if(j<count-1) System.out.print(sign1[temp]);//保证最后一个符号是数字 if(j==count-1&&g.equals(grade[1])&&!cou[1]&&!cou[3])square(); } System.out.println("="); System.out.println(); } } public void bracket(int number,int number2,int temp,int sig) { System.out.print("("); System.out.print(number); temp=random.nextInt(sig); System.out.print(sign1[temp]); System.out.print(number2); System.out.print(")"); } //根号和平方位置不同,只能分开,目前不知道怎么办,难受 public void sqrt() { System.out.print(sign2[0]); } public void square() { System.out.print(sign2[1]); } public void trigonometric() { int temp=random.nextInt(3); System.out.print(sign3[temp]); } }
原文地址:https://www.cnblogs.com/chen-song/p/9689672.html
时间: 2024-10-10 12:29:53