<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      久誠keep

      博客園 首頁 新隨筆 聯系 訂閱 管理

      結對編程隊友代碼分析 - 李林暢li神

      李神代碼演示

      李神個人項目代碼演示網站

      www.UltimateProject.com

      李神個人項目代碼結構

      優點:

      1. 整個工程僅使用一個包,充分體現架構設計中less is more的思想,大道至簡,對于輕量級的應用無需使用過多復雜的項目架構,包結構。使整個工程結構清晰,易于閱讀。
      2. ClassInterface命名規范,采用Java語言規范的大駝峰命名法,使各個類的功能更加清晰,代碼規范性更高。

      缺點:

      1. 題目生成使用絕對路徑,不大方便

      李神源碼

      package org;
      
      import java.util.HashMap;
      import java.util.Scanner;
      import java.io.BufferedReader;
      import java.io.BufferedWriter;
      import java.io.FileReader;
      import java.io.FileWriter;
      import java.io.File;
      import java.io.IOException;
      
      public class MenuImpl implements Menu {
          private String option;
          private User currentUser;
          private Scanner in;
          private GeneratorImpl generatorImpl;
          private HashMap<String, String> namePasswordMap; //map username&password
          private HashMap<String, Integer> nameStatusMap; //map username&status
          private HashMap<String, Integer> gradeStatusMap; //map grade&status
          private String[] statusToGrade = {"", "小學", "初中", "高中"}; //map status&grade
          private boolean quit;
      
          public MenuImpl() throws IOException {
              in = new Scanner(System.in);
              namePasswordMap = new HashMap<>();
              nameStatusMap = new HashMap<>();
              gradeStatusMap = new HashMap<>();
              gradeStatusMap.put("小學", 1);
              gradeStatusMap.put("初中", 2);
              gradeStatusMap.put("高中", 3);
              quit = false;
              defaultUserInit();//add default users
              //create project folder
              String dir = "D:\\A_File\\Documents\\PersonalProject\\";
              File folder = new File(dir);
              if (!folder.exists()) {
                  folder.mkdirs();
              }
              //create account file(if doesn't exit)
              File accounts = new File("D:\\A_File\\Documents\\PersonalProject\\Accounts.txt");
              if (!accounts.exists()) {
                  accounts.createNewFile();
              }
              //get existing accounts
              BufferedReader bufferedReader = new BufferedReader(new FileReader(accounts));
              String line;
              while ((line = bufferedReader.readLine()) != null) {
                  String[] userInfo = line.split("\t");
                  String grade = userInfo[0];
                  if (!namePasswordMap.containsKey(userInfo[1])) {
                      namePasswordMap.put(userInfo[1], userInfo[2]);
                      nameStatusMap.put(userInfo[1], gradeStatusMap.get(grade));
                  }
              }
              bufferedReader.close();
          }
      
          public void defaultUserInit() {
              String defaultPassword = "123";
              int nowStatus = 1;
              namePasswordMap.put("張三1", defaultPassword);
              nameStatusMap.put("張三1", nowStatus);
              namePasswordMap.put("張三2", defaultPassword);
              nameStatusMap.put("張三2", nowStatus);
              namePasswordMap.put("張三3", defaultPassword);
              nameStatusMap.put("張三3", nowStatus);
              nowStatus = 2;
              namePasswordMap.put("李四1", defaultPassword);
              nameStatusMap.put("李四1", nowStatus);
              namePasswordMap.put("李四2", defaultPassword);
              nameStatusMap.put("李四2", nowStatus);
              namePasswordMap.put("李四3", defaultPassword);
              nameStatusMap.put("李四3", nowStatus);
              nowStatus = 3;
              namePasswordMap.put("王五1", defaultPassword);
              nameStatusMap.put("王五1", nowStatus);
              namePasswordMap.put("王五2", defaultPassword);
              nameStatusMap.put("王五2", nowStatus);
              namePasswordMap.put("王五3", defaultPassword);
              nameStatusMap.put("王五3", nowStatus);
          }
      
          public void run() throws IOException {
              while (!quit) {
                  welcomeMessage();
                  if (!tryLogin()) {
                      continue;
                  }
                  tryGenerate();
              }
          }
      
          public void welcomeMessage() {
              System.out.println("歡迎進入題目生成系統");
              System.out.println("登錄請輸入1,注冊請輸入2,退出輸入-1");
              currentUser = null;
          }
      
          public void tryGenerate() throws IOException {
              System.out.println("當前選擇為" + statusToGrade[currentUser.getStatus()] + "出題");
              System.out.println("出題難度為" + currentUser.getStatus());
              System.out.println("開始出題輸入1,若要切換難度請輸入對應年級切換。退出登錄輸入-1");
              int switchTo = 0;
              while (true) {
                  option = in.nextLine();
                  if (option.equals("1")) {
                      while (true) {
                          System.out.println("請輸入題目數量");
                          int num = 0;
                          String numLine = in.nextLine();
                          try {
                              num = Integer.parseInt(numLine);
                          } catch (java.lang.NumberFormatException exception) {
                              System.out.println("請輸入1-30之間的數字");
                              continue;
                          }
                          if (0 >= num || num > 30) {
                              System.out.println("請輸入1-30之間的數字");
                              continue;
                          }
                          int difficulty = (switchTo == 0) ? currentUser.status : switchTo;
                          generatorImpl = new GeneratorImpl(difficulty,num,currentUser);
                          generatorImpl.createPaper();
                          System.out.println("難度" + difficulty + "題目生成成功");
                          String op = "";
                          while (!op.equals("1")) {
                              System.out.println("繼續出題請輸入1,若要切換難度請輸入對應年級切換。退出登陸輸入-1");
                              op = in.nextLine();
                              if (op.equals("-1")) {
                                  return;
                              } else if (gradeStatusMap.containsKey(op)) {
                                  switchTo = gradeStatusMap.get(op);
                                  System.out.println("現在為" + op + "出題");
                              }
                          }
                      }
                  } else if (option.equals("-1")) {
                      return;
                  } else if (gradeStatusMap.containsKey(option)) {
                      switchTo = gradeStatusMap.get(option);
                      System.out.println("當前選擇為" + option + "出題");
                      System.out.println("出題難度為" + switchTo);
                      System.out.println("開始出題輸入1,若要切換難度請輸入對應年級切換。退出登錄輸入-1");
                  } else {
                      System.out.println("指令錯誤,請重新輸入。若想切換難度請輸入小學、初中和高中三個選項中的一個");
                  }
              }
      
          }
      
          public boolean tryLogin() throws IOException {
              while (true) {
                  option = in.nextLine();
                  if (option.equals("1")) {
                      System.out.println("請依次輸入用戶名,密碼,以空格分隔。返回登陸界面請輸入-1");
                      while (true) {
                          String infoLine = in.nextLine();
                          if (infoLine.equals("-1")) {
                              return false;
                          }
                          String[] userInfo = infoLine.split("\\s+");
                          if (userInfo.length != 2) {
                              System.out.println("請以空格分隔輸入用戶名,密碼。返回登陸界面請輸入-1");
                              continue;
                          }
                          if (!namePasswordMap.containsKey(userInfo[0])) {
                              System.out.println("用戶名不存在,請重新輸入");
                          } else if (namePasswordMap.get(userInfo[0]).equals(userInfo[1])) {
                              currentUser = new User(userInfo[0], userInfo[1], nameStatusMap.get(userInfo[0]));
                              return true;
                          } else {
                              System.out.println("密碼錯誤,請重新輸入");
                          }
                      }
                  } else if (option.equals("2")) {
                      System.out.println("請依次輸入年級,用戶名,密碼,以空格分隔。返回登陸界面請輸入-1");
                      while (true) {
                          String infoLine = in.nextLine();
                          if (infoLine.equals("-1")) {
                              return false;
                          }
                          String[] userInfo = infoLine.split("\\s+");
                          if (userInfo.length != 3) {
                              System.out.println("請以空格分隔輸入年級,用戶名,密碼。返回登陸界面請輸入-1");
                              continue;
                          }
                          if (namePasswordMap.containsKey(userInfo[1])) {
                              System.out.println("用戶已存在,請重新輸入");
                          } else if (!gradeStatusMap.containsKey(userInfo[0])) {
                              System.out.println("年級請輸入小學,初中或高中");
                          } else {
                              namePasswordMap.put(userInfo[1], userInfo[2]);
                              nameStatusMap.put(userInfo[1], gradeStatusMap.get(userInfo[0]));
                              currentUser = new User(userInfo[1], userInfo[2], nameStatusMap.get(userInfo[1]));
                              String dir = "D:\\A_File\\Documents\\PersonalProject\\Accounts.txt";
                              FileWriter fileWriter = new FileWriter(dir, true);
                              BufferedWriter writer = new BufferedWriter(fileWriter);
                              String fileInfo = userInfo[0] + "\t" + userInfo[1] + "\t" + userInfo[2];
                              writer.write(fileInfo + "\n");
                              writer.close();
                              fileWriter.close();
                              return true;
                          }
                      }
                  } else if (option.equals("-1")) {
                      quit = true;
                      return false;
                  } else {
                      System.out.println("指令錯誤,請重新輸入");
                  }
              }
          }
      }
      
      
      package org;
      
      import java.io.BufferedReader;
      import java.io.BufferedWriter;
      import java.io.FileReader;
      import java.io.FileWriter;
      import java.io.File;
      import java.io.IOException;
      import java.util.Calendar;
      import java.util.HashSet;
      import java.util.Random;
      
      public class GeneratorImpl implements Generator {
          private User currentUser;
          private int status;
          private int amount;
          private String dir = "D:\\A_File\\Documents\\PersonalProject\\";
          private String[] symbols = {"+", "-", "*", "/", "^(2)", "√", "sin", "cos", "tan"};
          private HashSet<String> prevProblems;
      
          public GeneratorImpl() {
          }
      
          public GeneratorImpl(int status, int amount, User aUser) {
              this.status = status;
              this.amount = amount;
              this.currentUser = aUser;
          }
      
          public User getCurrentUser() {
              return currentUser;
          }
      
          public void setCurrentUser(User currentUser) {
              this.currentUser = currentUser;
          }
      
          public String getDir() {
              return dir;
          }
      
          public void setDir(String dir) {
              this.dir = dir;
          }
      
          public int getStatus() {
              return status;
          }
      
          public void setStatus(int status) {
              this.status = status;
          }
      
          public int getAmount() {
              return amount;
          }
      
          public void setAmount(int amount) {
              this.amount = amount;
          }
      
          public void getPrevProblems() throws IOException {
              prevProblems = new HashSet<>();
              //get problem folder
              String directory = dir + currentUser.name + "\\" + status;
              File folder = new File(directory);
              if (!folder.exists()) {
                  folder.mkdirs();
              }
              //save all problems
              File[] papers = folder.listFiles();
              for (var paper : papers) {
                  BufferedReader reader = new BufferedReader(new FileReader(paper));
                  String thisProblem = reader.readLine().substring(3);
                  prevProblems.add(thisProblem);
                  reader.close();
              }
          }
      
          public String getProblem() {
              String newProblem = "";
              Random random = new Random();
              int problemLength = random.nextInt(4) + 3;
              if ((problemLength & 1) == 0) {
                  problemLength++;
              }
              int haveBraces = 0;//how many braces should be added at the end
              int braces = random.nextInt(4);//how many braces this problem at most can have
              if ((braces & 1) == 1) {
                  braces++;
              }
              int turn = 1;//choose when to add numbers or symbols
              if (status == 1) {
                  while ((problemLength--) > 0) {
                      if (turn == 1) {
                          int number = random.nextInt(100) + 1;
                          if (braces > 0 && (braces & 1) == 0 && random.nextInt(2) == 1) {
                              newProblem += "(";//add left brace before a number
                              braces--;
                              haveBraces++;
                          }
                          newProblem += number;
                          if (braces > 0 && (braces & 1) == 1 && random.nextInt(2) == 1) {
                              newProblem += ")";//add right brace after a number
                              haveBraces--;
                              braces--;
                          }
                          turn = 0;
                      } else {
                          newProblem += symbols[random.nextInt(4)];
                          turn = 1;
                      }
                  }
                  if (haveBraces > 0) {
                      for (int i = 0; i < haveBraces; i++) {
                          newProblem += ")";
                      }
                  }
              } else if (status == 2) {
                  while ((problemLength--) > 0) {
                      if (turn == 1) {
                          int number = random.nextInt(100) + 1;
                          if (braces > 0 && (braces & 1) == 0 && random.nextInt(2) == 1) {
                              newProblem += "(";
                              braces--;
                              haveBraces++;
                          }
                          newProblem += number;
                          if (braces > 0 && (braces & 1) == 1 && random.nextInt(2) == 1) {
                              newProblem += ")";
                              braces--;
                              haveBraces--;
                          }
                          turn = 0;
                      } else {
                          int idx = random.nextInt(6);
                          newProblem += symbols[idx];
                          if (idx == 4) {
                              newProblem += symbols[random.nextInt(4)];
                          }
                          turn = 1;
                      }
                  }
                  if (haveBraces > 0) {
                      for (int i = 0; i < haveBraces; i++) {
                          newProblem += ")";
                      }
                  }
              } else {
                  boolean preTrig = false;//make sure number in trigonometric function surrounded by braces
                  while ((problemLength--) > 0) {
                      if (turn == 1) {
                          int number = random.nextInt(100) + 1;
                          if (!preTrig && braces > 0 && (braces & 1) == 0 && random.nextInt(2) == 1) {
                              newProblem += "(";
                              braces--;
                              haveBraces++;
                          }
                          newProblem += number;
                          if (!preTrig && braces > 0 && (braces & 1) == 1 && random.nextInt(2) == 1) {
                              newProblem += ")";
                              braces--;
                              haveBraces--;
                          }
                          if (preTrig) {
                              newProblem += ")";
                              preTrig = false;
                          }
                          turn = 0;
                      } else {
                          int idx = random.nextInt(9);
                          if (6 <= idx && idx <= 8) {
                              newProblem += symbols[random.nextInt(4)];
                              preTrig = true;
                          }
                          newProblem += symbols[idx];
                          if (idx == 4) {
                              newProblem += symbols[random.nextInt(4)];
                          }
                          if (preTrig) {
                              newProblem += "(";
                          }
                          turn = 1;
                      }
                  }
                  if (haveBraces > 0) {
                      for (int i = 0; i < haveBraces; i++) {
                          newProblem += ")";
                      }
                  }
              }
              return newProblem;
          }
      
          public void createPaper() throws IOException {
              getPrevProblems();
              Calendar calendar = Calendar.getInstance();
              int year = calendar.get(Calendar.YEAR);
              int month = calendar.get(Calendar.MONTH) + 1;
              int day = calendar.get(Calendar.DATE);
              int hour = calendar.get(Calendar.HOUR);
              int minute = calendar.get(Calendar.MINUTE);
              int second = calendar.get(Calendar.SECOND);
              String directory = dir + currentUser.name + "\\" + status + "\\";
              directory = directory + year + "-" + month + "-" + day + "-" + hour + "-" + minute + "-" + second + ".txt";
              FileWriter fileWriter = new FileWriter(directory, true);
              BufferedWriter writer = new BufferedWriter(fileWriter);
              for (int i = 1; i <= amount; i++) {
                  String problem = getProblem();
                  //problem="85-54+(11-95)";
                  if (!prevProblems.contains(problem)) {
                      writer.write(i + ". " + problem + "\n" + "\n");
                      prevProblems.add(problem);
                  } else {
                      writer.write(i + ". Duplicate" + "\n" + "\n");
                  }
              }
              writer.close();
          }
      }
      
      
      posted on 2022-09-13 19:49  jckeep  閱讀(260)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产99视频精品免费视频6| 精品国产大片中文字幕| 亚洲国产精品ⅴa在线观看| 少妇伦子伦精品无吗| 国产精品美女久久久久久麻豆| 中文字幕亚洲中文字幕无码码| 亚洲午夜久久久久久噜噜噜| 亚洲av成人无网码天堂| 日本一区不卡高清更新二区| 一本久道久久综合中文字幕| 亚洲综合精品一区二区三区| 成av免费大片黄在线观看| 欧美精品高清在线观看| 国产中文三级全黄| 国产精品久久久久久久久软件| 亚洲欧美综合中文| 成人激情视频一区二区三区 | 国产特色一区二区三区视频| 亚洲精品综合久中文字幕| 国产va免费精品观看| 少妇人妻偷人免费观看| 宁远县| 国产精品成人久久电影| 特级做a爰片毛片免费看无码| 骚虎三级在线免费播放| 国产精品亚洲精品日韩已满十八小| 波多野结衣久久一区二区| 亚洲色最新高清AV网站| 国内精品视频区在线2021| 亚洲国产欧美一区二区好看电影| 午夜大尺度福利视频一区| 成人影片麻豆国产影片免费观看| 丰满人妻熟妇乱又伦精品软件| 亚洲最大激情中文字幕| 精品无码一区二区三区爱欲 | 国内精品自线在拍| 久久99精品久久久久久9| 美女自卫慰黄网站| 国偷自产一区二区三区在线视频| 欧美z0zo人禽交另类视频| 亚洲国产精品黄在线观看|