软件工程导论个人项目 -- 中小学数学卷子自动生成程序
中小學數學卷子自動生成程序
- 1. 項目需求
- 1.1 項目名稱
- 1.2 用戶
- 1.3 功能
- 2. 程序分析
- 2.1 Teacher類
- 2.2 User類
- 2.2.1 頭文件
- 2.2.2 主函數
- 2.2.3 對9個用戶分別進行相關操作
- 2.2.3.1 張三1
- 2.2.3.2 張三2
- 2.2.3.3 張三3
- 2.2.3.4 李四1
- 2.2.3.5 李四2
- 2.2.3.6 李四3
- 2.2.3.7 王五1
- 2.2.3.8 王五2
- 2.2.3.9 王五3
- 2.2.4 切換難度函數
- 2.2.5 運算符選擇函數
- 2.2.6 出一道小學題目
- 2.2.7 出一道初中題目
- 2.2.8 出一道高中題目
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
//李四1public 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
//王五1public 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-3public 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 tanfor(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;} }總結
以上是生活随笔為你收集整理的软件工程导论个人项目 -- 中小学数学卷子自动生成程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PerfLab(直接在服务器上完成)
- 下一篇: shlab测试笔记