前言:
花了一整天时间修修补补写完代码,现在写篇博客,一是希望后来的人有个参考,二是记录下自己的所获方便以后查阅,三是趁众大佬还没做,混点访问量
以前做项目都是自己做,这次是真切的体会到了为别人做事多么麻烦,这次还好,提需求的客户比较专业
设置:
根号为√,如果里面是多项式用括号括起来
平方为^,因为并没有说可以更多次方
输入为
输出
这里有一个小歧义,需求中说的题目至少有一个三角函数到底是一道题还是一套题,从经验上看,应该是一套题
注意点:
构造输出到文件的流
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