Compare commits
2 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
30b592507c | 4 months ago |
|
|
35cda96a76 | 4 months ago |
@ -0,0 +1,3 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
Main-Class: Main
|
||||||
|
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package account;
|
||||||
|
|
||||||
|
public class Account {
|
||||||
|
private String userName;
|
||||||
|
private String password;
|
||||||
|
private String userType;
|
||||||
|
|
||||||
|
public Account(String userName, String password,String userType) {
|
||||||
|
this.userName = userName;
|
||||||
|
this.password = password;
|
||||||
|
this.userType = userType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserType() {
|
||||||
|
return userType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUserName() {
|
||||||
|
return userName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPassword() {
|
||||||
|
return password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUserType(String userType) {
|
||||||
|
this.userType = userType;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
package account;
|
||||||
|
|
||||||
|
public interface AccountService {
|
||||||
|
Account login(String username, String password);
|
||||||
|
}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
package account;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class SimpleAccountService implements AccountService {
|
||||||
|
private static final Map<String, Account> accounts = new HashMap<>();
|
||||||
|
|
||||||
|
static {
|
||||||
|
accounts.put("张三1", new Account("张三1", "123", "小学"));
|
||||||
|
accounts.put("张三2", new Account("张三2", "123", "小学"));
|
||||||
|
accounts.put("张三3", new Account("张三3", "123", "小学"));
|
||||||
|
accounts.put("李四1", new Account("李四1", "123", "初中"));
|
||||||
|
accounts.put("李四2", new Account("李四2", "123", "初中"));
|
||||||
|
accounts.put("李四3", new Account("李四3", "123", "初中"));
|
||||||
|
accounts.put("王五1", new Account("王五1", "123", "高中"));
|
||||||
|
accounts.put("王五2", new Account("王五2", "123", "高中"));
|
||||||
|
accounts.put("王五3", new Account("王五3", "123", "高中"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Account login(String username, String password) {
|
||||||
|
Account account = accounts.get(username);
|
||||||
|
if (account != null && account.getPassword().equals(password)) {
|
||||||
|
return account;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,29 @@
|
|||||||
|
package persistence;
|
||||||
|
|
||||||
|
import question.Question;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FileSaver {
|
||||||
|
public static void saveQuestions(String username, List<Question> questions) {
|
||||||
|
File dir = new File(username);
|
||||||
|
if (!dir.exists()) dir.mkdirs();
|
||||||
|
|
||||||
|
String filename = LocalDateTime.now().format(
|
||||||
|
DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")) + ".txt";
|
||||||
|
|
||||||
|
try (FileWriter writer = new FileWriter(new File(dir, filename))) {
|
||||||
|
for (int i = 0; i < questions.size(); i++) {
|
||||||
|
writer.write((i + 1) + ". " + questions.get(i).getQuestion() + "\n\n");
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
System.out.println("题目已生成并保存!");
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package question;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class HighQuestionGenerator implements QuestionGenerator {
|
||||||
|
private static final Random random = new Random();
|
||||||
|
private final QuestionGenerator primaryGenerator = new PrimaryQuestionGenerator();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Question generateQuestion() {
|
||||||
|
Question q = primaryGenerator.generateQuestion();
|
||||||
|
String[] funcs = {"sin", "cos", "tan"};
|
||||||
|
String func = funcs[random.nextInt(funcs.length)];
|
||||||
|
return new Question(func + "(" + q.getQuestion() + ")", evaluate(func, q.getQuestion()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String evaluate(String func, String expr) {
|
||||||
|
try {
|
||||||
|
javax.script.ScriptEngineManager mgr = new javax.script.ScriptEngineManager();
|
||||||
|
javax.script.ScriptEngine engine = mgr.getEngineByName("JavaScript");
|
||||||
|
return String.valueOf(engine.eval("Math." + func + "(Math.toRadians(" + expr + "))"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return "?";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,28 @@
|
|||||||
|
package question;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class MiddleQuestionGenerator implements QuestionGenerator {
|
||||||
|
private static final Random random = new Random();
|
||||||
|
private final QuestionGenerator primaryGenerator = new PrimaryQuestionGenerator();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Question generateQuestion() {
|
||||||
|
Question q = primaryGenerator.generateQuestion();
|
||||||
|
if (random.nextBoolean()) {
|
||||||
|
return new Question(q.getQuestion() + " ^ 2", evaluate(q.getQuestion() + "^2"));
|
||||||
|
} else {
|
||||||
|
return new Question("√" + q.getQuestion(), evaluate("Math.sqrt(" + q.getQuestion() + ")"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private String evaluate(String expr) {
|
||||||
|
try {
|
||||||
|
javax.script.ScriptEngineManager mgr = new javax.script.ScriptEngineManager();
|
||||||
|
javax.script.ScriptEngine engine = mgr.getEngineByName("JavaScript");
|
||||||
|
return String.valueOf(engine.eval(expr.replace("^", "**")));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return "?";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
package question;
|
||||||
|
|
||||||
|
import java.util.Random;
|
||||||
|
|
||||||
|
public class PrimaryQuestionGenerator implements QuestionGenerator {
|
||||||
|
private static final Random random = new Random();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Question generateQuestion() {
|
||||||
|
int numOperands = random.nextInt(5) + 1;
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
int currentValue = random.nextInt(100) + 1;
|
||||||
|
sb.append(currentValue);
|
||||||
|
|
||||||
|
for (int i = 1; i < numOperands; i++) {
|
||||||
|
String[] ops = {"+", "-", "*", "/"};
|
||||||
|
String op;
|
||||||
|
int nextVal;
|
||||||
|
do {
|
||||||
|
op = ops[random.nextInt(ops.length)];
|
||||||
|
nextVal = random.nextInt(100) + 1;
|
||||||
|
} while ((op.equals("-") && currentValue < nextVal) ||
|
||||||
|
(op.equals("/") && (nextVal == 0 || currentValue % nextVal != 0)));
|
||||||
|
|
||||||
|
sb.append(" ").append(op).append(" ").append(nextVal);
|
||||||
|
switch (op) {
|
||||||
|
case "+": currentValue += nextVal; break;
|
||||||
|
case "-": currentValue -= nextVal; break;
|
||||||
|
case "*": currentValue *= nextVal; break;
|
||||||
|
case "/": currentValue /= nextVal; break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String expr = addParentheses(sb.toString());
|
||||||
|
return new Question(expr, evaluate(expr));
|
||||||
|
}
|
||||||
|
|
||||||
|
private String addParentheses(String expr) {
|
||||||
|
String[] tokens = expr.split(" ");
|
||||||
|
if (tokens.length < 3) return expr;
|
||||||
|
|
||||||
|
int start = random.nextInt(tokens.length / 2) * 2;
|
||||||
|
int end = start + 2 + random.nextInt((tokens.length - start) / 2) * 2;
|
||||||
|
end = Math.min(end, tokens.length - 1);
|
||||||
|
|
||||||
|
StringBuilder newExpr = new StringBuilder();
|
||||||
|
for (int i = 0; i < tokens.length; i++) {
|
||||||
|
if (i == start) newExpr.append("(");
|
||||||
|
newExpr.append(tokens[i]);
|
||||||
|
if (i == end) newExpr.append(")");
|
||||||
|
if (i != tokens.length - 1) newExpr.append(" ");
|
||||||
|
}
|
||||||
|
return newExpr.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String evaluate(String expr) {
|
||||||
|
try {
|
||||||
|
javax.script.ScriptEngineManager mgr = new javax.script.ScriptEngineManager();
|
||||||
|
javax.script.ScriptEngine engine = mgr.getEngineByName("JavaScript");
|
||||||
|
return String.valueOf(engine.eval(expr));
|
||||||
|
} catch (Exception e) {
|
||||||
|
return "?";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
package question;
|
||||||
|
|
||||||
|
public class Question {
|
||||||
|
private String question;
|
||||||
|
private String answer;
|
||||||
|
|
||||||
|
public Question(String question, String answer) {
|
||||||
|
this.question = question;
|
||||||
|
this.answer = answer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getQuestion() {
|
||||||
|
return question;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAnswer() {
|
||||||
|
return answer;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
package question;
|
||||||
|
|
||||||
|
public interface QuestionGenerator {
|
||||||
|
Question generateQuestion();
|
||||||
|
}
|
||||||
Loading…
Reference in new issue