中小学数学卷子自动生成程序
1. 项目需求
1.1 项目名称
中小学数学卷子自动生成程序。
1.2 用户
小学、初中、高中老师。
1.3 功能
-
命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入 正确的用户名、密码”,重新输入用户名、密码;
-
登录后,系统提示“准备生成XX数学题目,请输入生成题目数量(输入-1将退出当前用户,重新登录):”,XX为小学、初中和高中三个选项中的一个,用户输入所需出的卷子的题目数量,系统默认将根据账号类型进行出题。每道题目的操作数在1-5个之间,操作数取值范围为1-100;
-
目数量的有效输入范围是“10-30”(含10,30,或-1退出登录),程序根据输入的题目数量生成符合小学、初中和高中难度的题目的卷子(具体要求见附表)。同一个老师的卷子中的题目不能与以前的已生成的卷子中的题目重复(以指定文件夹下存在的文件为准,见5);
-
登录状态下,如果用户需要切换类型选项,命令行输入“切换为XX”,XX为小学、初中和高中三个选项中的一个,输入项不符合要求时,程序控制台提示“请输入小学、初中和高中三个选项中的一个”;输入正确后,显示“”系统提示“准备生成XX数学题目,请输入生成题目数量”,用户输入所需出的卷子的题目数量,系统新设置的类型进行出题;
-
生成的题目将以“年-月-日-时-分-秒.txt”的形式保存,每个账号一个文件夹。每道题目有题号,每题之间空一行;
-
附录
(1)附表1:用户名及密码;
(2)附表2:小学、初中、高中题目难度要求;
2. 程序分析
2.1 Teacher类
package Math_score;
public class Teacher
{
private String name; //用户名
private String password; //密码
public String GetName() //获取用户名
{
return name;
}
public String GetPassword() //获取密码
{
return password;
}
public void SetName(String Str) //设置用户名
{
this.name=Str;
}
public void SetPassword(String Str) //设置密码
{
this.password=Str;
}
public boolean CompareObject(Teacher teacher) //比较两个用户是否用户名和密码均相同
{
if(teacher.GetName().equals(this.GetName())&&teacher.GetPassword().equals(this.GetPassword()))
{
return true;
}
else
{
return false;
}
}
}
2.2 User类
2.2.1 头文件
package Math_score;
import java.util.Scanner;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.util.Random;
(从主函数开始,下面所有代码在class类中,public class User{ 下面所有代码在这里 })
2.2.2 主函数
public static void main(String[] args)
{
Teacher [] teacher1 = new Teacher[3]; //提前定义三个小学老师用户名和密码
Teacher [] teacher2 = new Teacher[3]; //提前定义三个初中老师用户名和密码
Teacher [] teacher3 = new Teacher[3]; //提前定义三个高中老师用户名和密码
for(int i=1;i<=3;i++)
{
teacher1[i-1]=new Teacher();
teacher1[i-1].SetName("张三"+i);
teacher1[i-1].SetPassword("123");
teacher2[i-1]=new Teacher();
teacher2[i-1].SetName("李四"+i);
teacher2[i-1].SetPassword("123");
teacher3[i-1]=new Teacher();
teacher3[i-1].SetName("王五"+i);
teacher3[i-1].SetPassword("123");
}
System.out.println("请输入用户名和密码(用户名和密码之间请用一个空格隔开)"); //开始登录系统
Scanner input=new Scanner(System.in);
while(true)
{
Teacher teacher=new Teacher(); //创建一个临时对象
String name=input.next(); //输入的用户名
teacher.SetName(name);
String Password=input.next(); //输入的密码
teacher.SetPassword(Password);
boolean flag=false;
for(int i=0;i<3;i++)
{
if(teacher.CompareObject(teacher1[i])) //如果用户名是小学老师,则进入选择哪位小学老师,调用不同函数
{
flag=true;
switch(i)
{
case 0: ChoosePrimary1();break;
case 1: ChoosePrimary2();break;
case 2: ChoosePrimary3();break;
}
}
else if(teacher.CompareObject(teacher2[i])) //如果用户名是初中老师,则进入选择哪位小学老师,调用不同函数
{
flag=true;
switch(i)
{
case 0: ChooseMiddle1();break;
case 1: ChooseMiddle2();break;
case 2: ChooseMiddle3();break;
}
}
else if(teacher.CompareObject(teacher3[i])) //如果用户名是高中老师,则进入选择哪位小学老师,调用不同函数
{
flag=true;
switch(i)
{
case 0: ChooseHigh1();break;
case 1: ChooseHigh2();break;
case 2: ChooseHigh3();break;
}
}
}
if(flag==true) //如果用户名和密码均正确则不再次输入
{
break;
}
else //如果用户名和密码错误,则重新输入
{
System.out.println("请输入正确的用户名、密码");
}
}
input.close();
}
2.2.3 对9个用户分别进行相关操作
2.2.3.1 张三1
//张三1
public static void ChoosePrimary1()
{
//登录界面+出题数量
System.out.println("当前选择为小学出题");
System.out.println("准备生成小学数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
//输入-1则退出系统
if(num==-1)
{
System.out.println("您已退出登录");
}
//输入数字超出有效范围重新输入
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChoosePrimary1();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\张三1");
if(file.mkdirs())
{
System.out.println("成功创建文件夹张三1");
}
else
{
System.out.println("文件夹张三1已存在");
}
//出题
String []primaryQuestion=new String [num];
System.out.println("正在出题,请稍候");
for(int i=0;i<num;i++)
{
String question=CreatePrimaryQuestion(i); //随机生成一道题目
//查重
boolean flagFind=true; //查找标记
String[] files = file.list(); //返回文件夹下所有文件名
for (String f : files)
{
try
{
FileReader fr = new FileReader(".\\张三1\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
while ((str = bf.readLine()) != null)
{
if(str.length()>3) //
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
if(flagFind==true)
{
primaryQuestion[i]=question;
}
else
{
i--;
}
}
//将确认不重复的题目写入文件中
try
{
FileWriter writer=new FileWriter(".\\张三1\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(primaryQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//命令提示+切换难度功能
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
```java
}
input.close();
}
2.2.3.2 张三2
public static void ChoosePrimary2() //张三2
{
//初始登录界面+题目数量
System.out.println("当前选择为小
学出题");
System.out.println("准备生成小学数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
if(num==-1)
{
System.out.println("您已退出登录");
}
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChoosePrimary2();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\张三2");
if(file.mkdirs())
{
System.out.println("成功创建文件夹张三2");
}
else
{
System.out.println("文件夹张三2已存在");
}
//出题
String []primaryQuestion=new String [num];
System.out.println("正在出题,请稍候");
for(int i=0;i<num;i++)
{
String question=CreatePrimaryQuestion(i); //出一道题
boolean flagFind=true;
String[] files = file.list();
for (String f : files) //查重
{
try
{
FileReader fr = new FileReader(".\\张三2\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
// 按行读取字符串
while ((str = bf.readLine()) != null) {
if(str.length()>3)
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
if(flagFind==true)
{
primaryQuestion[i]=question;
}
else
{
i--;
}
}
//将已确认不重复的题目写入文件
try
{
FileWriter writer=new FileWriter(".\\张三2\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(primaryQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//切换难度+退出
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
}
input.close();
}
2.2.3.3 张三3
//张三3
public static void ChoosePrimary3()
{ //登录界面+出题数量
System.out.println("当前选择为小学出题");
System.out.println("准备生成小学数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
if(num==-1)
{
System.out.println("您已退出登录");
}
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChoosePrimary3();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\张三3");
if(file.mkdirs())
{
System.out.println("成功创建文件夹张三3");
}
else
{
System.out.println("文件夹张三3已存在");
}
//出题
String []primaryQuestion=new String [num];
System.out.println("正在出题,请稍候");
for(int i=0;i<num;i++)
{
String question=CreatePrimaryQuestion(i);
//查重
boolean flagFind=true;
String[] files = file.list();
for (String f : files){
try
{
FileReader fr = new FileReader(".\\张三3\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
while ((str = bf.readLine()) != null) {
if(str.length()>3)
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
if(flagFind==true)
{
primaryQuestion[i]=question;
}
else
{
i--;
}
}
//已确认不重复的题目写入文件
try
{
FileWriter writer=new FileWriter(".\\张三3\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(primaryQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//切换难度+退出功能
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
}
input.close();
}
2.2.3.4 李四1
//李四1
public static void ChooseMiddle1()
{
//登录界面+出题数量
System.out.println("当前选择为初中出题");
System.out.println("准备生成初中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
if(num==-1)
{
System.out.println("您已退出登录");
}
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChooseMiddle1();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\李四1");
if(file.mkdirs())
{
System.out.println("成功创建文件夹李四1");
}
else
{
System.out.println("文件夹李四1已存在");
}
//出题
System.out.println("正在出题,请稍候");
String []middleQuestion=new String [num];
for(int i=0;i<num;i++)
{
String question=CreateMiddleQuestion(i);
//查重
boolean flagFind=true;
String[] files = file.list();
for (String f : files){
try
{
FileReader fr = new FileReader(".\\李四1\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
while ((str = bf.readLine()) != null) {
if(str.length()>3)
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
//不重复的题目组
if(flagFind==true)
{
middleQuestion[i]=question;
}
else
{
i--;
}
}
//不重复的题目组写入文件
try
{
FileWriter writer=new FileWriter(".\\李四1\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(middleQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//切换难度+退出功能
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
}
input.close();
}
2.2.3.5 李四2
//李四2
public static void ChooseMiddle2()
{
//登录界面+题目数量
System.out.println("当前选择为初中出题");
System.out.println("准备生成初中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
if(num==-1)
{
System.out.println("您已退出登录");
}
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChooseMiddle2();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\李四2");
if(file.mkdirs())
{
System.out.println("成功创建文件夹李四2");
}
else
{
System.out.println("文件夹李四2已存在");
}
System.out.println("正在出题,请稍候");
String []middleQuestion=new String [num];
for(int i=0;i<num;i++)
{
String question=CreateMiddleQuestion(i);
boolean flagFind=true;
String[] files = file.list();
for (String f : files){
try
{
FileReader fr = new FileReader(".\\李四2\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
// 按行读取字符串
while ((str = bf.readLine()) != null)
{
if(str.length()>3)
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
//确认不重复的题目组
if(flagFind==true)
{
middleQuestion[i]=question;
}
else
{
i--;
}
//不重复的题目组写入文件
}
try
{
FileWriter writer=new FileWriter(".\\李四2\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(middleQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//难度切换+退出功能
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
}
input.close();
}
2.2.3.6 李四3
//李四3
public static void ChooseMiddle3()
{
//登录界面+出题数量
System.out.println("当前选择为初中出题");
System.out.println("准备生成初中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
if(num==-1)
{
System.out.println("您已退出登录");
}
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChooseMiddle3();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\李四3");
if(file.mkdirs())
{
System.out.println("成功创建文件夹李四3");
}
else
{
System.out.println("文件夹李四3已存在");
}
//出题
System.out.println("正在出题,请稍候");
String []middleQuestion=new String [num];
for(int i=0;i<num;i++)
{
String question=CreateMiddleQuestion(i);
//查重
boolean flagFind=true;
String[] files = file.list();
for (String f : files){
try
{
FileReader fr = new FileReader(".\\李四3\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
// 按行读取字符串
while ((str = bf.readLine()) != null) {
if(str.length()>3)
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
//不重复的题目组
if(flagFind==true)
{
middleQuestion[i]=question;
}
else
{
i--;
}
}
//不重复的题目组写入文件
try
{
FileWriter writer=new FileWriter(".\\李四3\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(middleQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//切换难度+退出功能
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
}
input.close();
}
2.2.3.7 王五1
//王五1
public static void ChooseHigh1()
{
//登录界面+出题数量
System.out.println("当前选择为高中出题");
System.out.println("准备生成高中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
if(num==-1)
{
System.out.println("您已退出登录");
}
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChooseHigh1();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\王五1");
if(file.mkdirs())
{
System.out.println("成功创建文件夹王五1");
}
else
{
System.out.println("文件夹王五1已存在");
}
//出题
String []highQuestion=new String [num];
System.out.println("正在出题,请稍候");
for(int i=0;i<num;i++)
{
String question=CreateHighQuestion(i);
//查重,重复则重新生成一个随机题目
boolean flagFind=true;
String[] files = file.list();
for (String f : files){
try
{
FileReader fr = new FileReader(".\\王五1\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
// 按行读取字符串
while ((str = bf.readLine()) != null) {
if(str.length()>3)
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
} catch (IOException e) {
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
//不重复的题目组
if(flagFind==true)
{
highQuestion[i]=question;
}
else
{
i--;
}
}
//不重复的题目组写入文件
try
{
FileWriter writer=new FileWriter(".\\王五1\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(highQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//切换难度+退出功能
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
}
input.close();
}
2.2.3.8 王五2
//王五2
public static void ChooseHigh2()
{
//登录界面+出题数量
System.out.println("当前选择为高中出题");
System.out.println("准备生成高中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
if(num==-1)
{
System.out.println("您已退出登录");
}
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChooseHigh2();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\王五2");
if(file.mkdirs())
{
System.out.println("成功创建文件夹王五2");
}
else
{
System.out.println("文件夹王五2已存在");
}
//出题
String []highQuestion=new String [num];
System.out.println("正在出题,请稍候");
for(int i=0;i<num;i++)
{
String question=CreateHighQuestion(i);
//查重
boolean flagFind=true;
String[] files = file.list();
for (String f : files){
try
{
FileReader fr = new FileReader(".\\王五2\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
// 按行读取字符串
while ((str = bf.readLine()) != null)
{
if(str.length()>3)
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
//不重复的题目组
if(flagFind==true)
{
highQuestion[i]=question;
}
else
{
i--;
}
}
//不重复的题目组写入文件中
try
{
FileWriter writer=new FileWriter(".\\王五2\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(highQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//切换难度+退出功能
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
}
input.close();
}
2.2.3.9 王五3
//王五3
public static void ChooseHigh3()
{
//登录界面+出题数量
System.out.println("当前选择为高中出题");
System.out.println("准备生成高中数学题目,请输入生成题目数量(有效范围[10,30],超出范围无效,输入-1则退出当前用户)");
Scanner input=new Scanner(System.in);
int num=input.nextInt();
if(num==-1)
{
System.out.println("您已退出登录");
}
else if(num<10||num>30)
{
System.out.println("请输入正确的题目数量[10,30]或者-1");
ChooseHigh3();
}
else
{
//创建文件夹
String time = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss").format(new Date().getTime());
File file=new File(".\\王五3");
if(file.mkdirs())
{
System.out.println("成功创建文件夹王五3");
}
else
{
System.out.println("文件夹王五3已存在");
}
//出题
String []highQuestion=new String [num];
System.out.println("正在出题,请稍候");
for(int i=0;i<num;i++)
{
String question=CreateHighQuestion(i);
//查重,重复则重新随机生成一道题目
boolean flagFind=true;
String[] files = file.list();
for (String f : files){
try
{
FileReader fr = new FileReader(".\\王五3\\"+f);
BufferedReader bf = new BufferedReader(fr);
String str,tempString;
// 按行读取字符串
while ((str = bf.readLine()) != null)
{
if(str.length()>3)
{
tempString=str.substring(3);
}
else
{
tempString=str;
}
if(tempString.equals(question))
{
flagFind=false;
break;
}
}
bf.close();
fr.close();
}
catch (IOException e)
{
e.printStackTrace();
}
if(flagFind==false)
{
break;
}
}
//不重复的题目组
if(flagFind==true)
{
highQuestion[i]=question;
}
else
{
i--;
}
}
//不重复的题目组写入文件
try
{
FileWriter writer=new FileWriter(".\\王五3\\"+time+".txt");
for(int tem=0;tem<num;tem++)
{
writer.write(highQuestion[tem]);
writer.write("\n");
writer.write("\n");
}
writer.close();
}
catch (IOException e)
{
e.printStackTrace();
}
//切换难度+退出登录
System.out.println("题目已出完,存放在文件"+time+".txt中");
System.out.println("切换难度请输入切换为XX(XX为小学、初中或高中),退出登录请输入-1");
String chooice=input.next();
if(chooice.equals("-1"))
{
System.out.println("您已退出登录");
}
else
{
ExchangeChooice(chooice);
}
}
input.close();
}
2.2.4 切换难度函数
//切换难度函数,参数为选择的用户编号
//进入函数后,先正确输入“切换为XX”,然后进入切换难度后的用户编号1-3
public static void ExchangeChooice(String chooice)
{
Scanner input=new Scanner(System.in);
String temp=chooice;
String primary="切换为小学";
String middle="切换为初中";
String high="切换为高中";
if(temp.equals(primary))
{
System.out.println("请选择生成的小学题目记录到哪个用户名的文件夹下,请输入一位数字: 1-张三1 2-张三2 3-张三3");
int chooseName=input.nextInt();
switch(chooseName)
{
case 1:ChoosePrimary1();break;
case 2:ChoosePrimary2();break;
case 3:ChoosePrimary3();break;
}
}
else if(temp.equals(middle))
{
System.out.println("请选择生成的初中题目记录到哪个用户名的文件夹下,请输入一位数字: 1-李四1 2-李四2 3-李四");
int chooseName=input.nextInt();
switch(chooseName)
{
case 1:ChooseMiddle1();break;
case 2:ChooseMiddle2();break;
case 3:ChooseMiddle3();break;
}
}
else if(temp.equals(high))
{
System.out.println("请选择生成的高中题目记录到哪个用户名的文件夹下,请输入一位数字: 1-王五1 2-王五2 3-王五3");
int chooseName=input.nextInt();
switch(chooseName)
{
case 1:ChooseHigh1();break;
case 2:ChooseHigh2();break;
case 3:ChooseHigh3();break;
}
}
else
{
System.out.println("请输入小学、初中和高中三个选项中的一个");
String tempChooice=input.next();
ExchangeChooice(tempChooice);
}
input.close();
}
2.2.5 运算符选择函数
//运算符选择函数,将传入参数对应的符号返回
public static String WriteSign(int signNum)
{
String str=" ";
switch(signNum)
{
case 0: str="+";break;
case 1: str="-";break;
case 2: str="*";break;
case 3: str="/";break;
case 4: str="^2";break;
case 5: str="√";break;
case 6: str="(";break;
case 7: str=")";break;
case 8: str="sin";break;
case 9: str="cos";break;
case 10: str="tan";break;
}
return str;
}
2.2.6 出一道小学题目
//出一道小学题目
public static String CreatePrimaryQuestion(int for_i )
{
Random rand=new Random();
String question=for_i+1+"、";
if(for_i<=8)
{
question=question+" ";
}
int flag1=0; //前括号数量
int temp1=rand.nextInt(11)+0; //在第一个操作数之前先生成一个符号,是括号则根据条件判断是否写入
if(temp1==6) //生成的是前括号,则前括号数加1
{
question=question+WriteSign(temp1);
flag1++;
}
temp1=rand.nextInt(100)+1; //生成第一个操作数
question=question+temp1;
temp1=rand.nextInt(11)+0; //在第一个操作数之后生成一个符号,是括号则根据条件判断是否写入
if(temp1==7&&flag1!=0)
{
question=question+WriteSign(temp1);
flag1--;
}
int signNum=rand.nextInt(4)+1; //随机生成本题的运算符数量
for(int j=0;j<signNum;j++)
{
temp1=rand.nextInt(4)+0; //随机生成+ - * /
question=question+WriteSign(temp1);
temp1=rand.nextInt(11)+0; //在操作数之前先生成一个符号,是括号则根据条件判断是否写入
if(temp1==6)
{
question=question+WriteSign(temp1);
flag1++;
}
temp1=rand.nextInt(100)+1; //随机生成操作数[1,100]
question=question+temp1;
temp1=rand.nextInt(11)+0; //在操作数之后生成一个符号,是括号则根据条件判断是否写入
if(temp1==7&&flag1!=0)
{
question=question+WriteSign(temp1);
flag1--;
}
}
for(int t=0;t<flag1;t++) //补全缺少的后括号
{
question=question+WriteSign(7);
}
question=question+"=";
return question;
}
2.2.7 出一道初中题目
//出一道初中题,参数是题目的编号
public static String CreateMiddleQuestion(int for_i)
{
Random rand=new Random();
int flag1=0; //前括号数量
String question=for_i+1+"、";
if(for_i<=8)
{
question=question+" ";
}
int temp1=rand.nextInt(11)+0; //在第一个操作数之前先生成一个符号,是括号则根据条件判断是否写入
if(temp1==6)
{
question=question+WriteSign(temp1);
flag1++;
}
temp1=rand.nextInt(100)+1; //生成第一个操作数
question=question+temp1;
temp1=rand.nextInt(11)+0; //在第一个操作数之后生成一个符号,是括号则根据条件判断是否写入
if(temp1==7&&flag1!=0)
{
question=question+WriteSign(temp1);
flag1--;
}
int signNum=rand.nextInt(4)+1; //随机生成符号的数量[1,4]
int flagPlace=rand.nextInt(signNum)+0; //选择平方或者根号的位置
int flagSign=rand.nextInt(2)+4; //选择平方或者根号
for(int j=0;j<signNum;j++)
{
temp1=rand.nextInt(4)+0; //随机生成+ - * /
question=question+WriteSign(temp1);
temp1=rand.nextInt(11)+0; //在操作数之前先生成一个符号,是括号则根据条件判断是否写入
if(temp1==6)
{
question=question+WriteSign(temp1);
flag1++;
}
if(j==flagPlace&&flagSign==5) //如果是根号写在操作数前,符号后
{
question=question+WriteSign(5);
}
temp1=rand.nextInt(100)+1; //随机生成操作数[1,100]
question=question+temp1;
if(j==flagPlace&&flagSign==4)
{
question=question+WriteSign(4); //如果是平方写在操作数后
}
temp1=rand.nextInt(11)+0; //在操作数之后生成一个符号,是括号则根据条件判断是否写入
if(temp1==7&&flag1!=0)
{
question=question+WriteSign(temp1);
flag1--;
}
}
for(int t=0;t<flag1;t++) //补全后括号
{
question=question+WriteSign(7);
}
question=question+"=";
return question;
}
2.2.8 出一道高中题目
//随机生成一道高中题目
public static String CreateHighQuestion(int for_i)
{
Random rand=new Random();
int flag1=0; //前括号数量
String question=for_i+1+"、";
if(for_i<=8)
{
question=question+" ";
}
int temp1=rand.nextInt(11)+0; //在第一个操作数之前先生成一个符号,是括号则根据条件判断是否写入
if(temp1==6)
{
question=question+WriteSign(temp1);
flag1++;
}
temp1=rand.nextInt(11)+0; //在第一个操作数之前先生成一个符号,是sin cos tan则根据条件判断是否写入
if(temp1==5||temp1==8||temp1==9||temp1==10)
{
question=question+WriteSign(temp1);
}
temp1=rand.nextInt(100)+1; //生成第一个操作数
question=question+temp1;
temp1=rand.nextInt(11)+0; //在第一个操作数之前先生成一个符号,是平方则根据条件判断是否写入
if(temp1==4)
{
question=question+WriteSign(temp1);
}
temp1=rand.nextInt(11)+0; //在第一个操作数之后生成一个符号,是括号则根据条件判断是否写入
if(temp1==7&&flag1!=0)
{
question=question+WriteSign(temp1);
flag1--;
}
int signNum=rand.nextInt(4)+1; //随机生成符号的数量[1,4]
int flagPlace=rand.nextInt(signNum)+0; //选择sin cos tan的位置
int flagSign=rand.nextInt(3)+8; //选择sin cos tan
for(int j=0;j<signNum;j++)
{
temp1=rand.nextInt(4)+0; //随机生成+ - * /
question=question+WriteSign(temp1);
temp1=rand.nextInt(11)+0; //在操作数之前先生成一个符号,是括号则根据条件判断是否写入
if(temp1==6)
{
question=question+WriteSign(temp1);
flag1++;
}
if(j==flagPlace) //sin cos tan 的位置
{
question=question+WriteSign(flagSign);
}
if(j!=flagPlace)
{
temp1=rand.nextInt(11)+0;
if(temp1==5||temp1==8||temp1==9||temp1==10)
{
question=question+WriteSign(temp1);
}
}
temp1=rand.nextInt(100)+1; //随机生成操作数[1,100]
question=question+temp1;
temp1=rand.nextInt(11)+0; //在第一个操作数之前先生成一个符号,是括号则根据条件判断是否写入
if(temp1==4) //生成了平方则写入
{
question=question+WriteSign(temp1);
}
temp1=rand.nextInt(11)+0; //在操作数之后生成一个符号,是括号则根据条件判断是否写入
if(temp1==7&&flag1!=0)
{
question=question+WriteSign(temp1);
flag1--;
}
}
for(int t=0;t<flag1;t++)
{
question=question+WriteSign(7);
}
question=question+"=";
return question;
}
}