1 #1

Merged
hnu202326010305 merged 11 commits from main into develop 1 week ago

@ -0,0 +1 @@
#个人项目:中小学数学卷子自动生成程序

@ -0,0 +1,59 @@
import java.util.Scanner;
public class ExamSystem {
private final Scanner scanner = new Scanner(System.in);
public Users login() {
Users users = null;
while (users == null) {
System.out.print("请输入用户名和密码: ");
String input = scanner.nextLine();
String[] parts = input.split(" ");
if (parts.length == 2) {
users = Users.login(parts[0], parts[1]);
}
if (users == null) {
System.out.println("请输入正确的用户名、密码");
}
}
System.out.println("当前选择为" + users.getType() + "出题");
return users;
}
public void generateProblems(Users users) {
while (true) {
System.out.print("准备生成" + users.getType()
+ "数学题目,请输入生成题目数量(输入-1将退出当前用户重新登录");
String input = scanner.nextLine().trim();
if (input.equals("-1")) {
break;
}
ProblemsGenerator generator = switch (users.getType()) {
case "小学" -> new PrimaryProblem();
case "初中" -> new JuniorProblem();
case "高中" -> new SeniorProblem();
default -> null;
};
if (input.startsWith("切换为")) {
String target = input.replace("切换为", "");
if (target.equals("小学") || target.equals("初中") || target.equals("高中")) {
users = new Users(users.getName(), users.getPassword(), target);
System.out.println("系统提示:准备生成" + users.getType() + "数学题目");
} else {
System.out.println("请输入小学、初中和高中三个选项中的一个");
}
continue;
}
int num = Integer.parseInt(input);
if (num >= 10 && num <= 30 && generator != null) {
Generator.generate(users, num, generator);
} else {
System.out.println("请输入 10-30 之间的数字");
}
}
}
}

@ -0,0 +1,34 @@
import java.io.FileWriter;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class Generator {
public static void generate(Users users, int count, ProblemsGenerator problemsGenerator) {
StringBuilder builder = new StringBuilder();
for (int i = 1; i <= count; i++) {
builder.append(i).append(". ").append(problemsGenerator.generate()).append("\n\n");
}
save(users, builder.toString());
System.out.println("题目生成完成。");
}
private static void save(Users users, String content) {
try {
String folder = "doc/" + users.getType();
java.io.File dir = new java.io.File(folder);
if (!dir.exists()) {
dir.mkdirs();
}
String filename = LocalDateTime.now()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss")) + ".txt";
FileWriter writer = new FileWriter(folder + "/" + filename);
writer.write(content);
writer.close();
} catch (IOException e) {
System.out.println("保存失败:" + e.getMessage());
}
}
}

@ -0,0 +1,23 @@
import java.util.Random;
public class JuniorProblem implements ProblemsGenerator{
private static final Random RANDOM = new Random();
@Override
public String generate() {
int count = RANDOM.nextInt(5) + 1; // 1~5个数
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
int num = RANDOM.nextInt(20) + 1;
if (RANDOM.nextBoolean()) {
sb.append(num).append("^2");
} else {
sb.append("√").append(num);
}
if (i < count - 1) {
sb.append(" + ");
}
}
return sb.toString();
}
}

@ -0,0 +1,9 @@
public class Main {
public static void main(String[] args) {
ExamSystem system = new ExamSystem();
while (true) {
Users users = system.login();
system.generateProblems(users);
}
}
}

@ -0,0 +1,20 @@
import java.util.Random;
public class PrimaryProblem implements ProblemsGenerator {
private static final Random RANDOM = new Random();
private static final char[] OPS = {'+', '-', '*', '/'};
@Override
public String generate() {
int count = RANDOM.nextInt(5) + 1; // 1~5个数
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
int num = RANDOM.nextInt(100) + 1;
sb.append(num);
if (i < count - 1) {
sb.append(" ").append(OPS[RANDOM.nextInt(OPS.length)]).append(" ");
}
}
return sb.toString();
}
}

@ -0,0 +1,3 @@
public interface ProblemsGenerator {
String generate();
}

@ -0,0 +1,21 @@
import java.util.Random;
public class SeniorProblem implements ProblemsGenerator{
private static final Random RANDOM = new Random();
private static final String[] FUNCS = {"sin", "cos", "tan"};
@Override
public String generate() {
int count = RANDOM.nextInt(5) + 1; // 1~5个数
StringBuilder sb = new StringBuilder();
for (int i = 0; i < count; i++) {
int angle = RANDOM.nextInt(90) + 1;
String func = FUNCS[RANDOM.nextInt(FUNCS.length)];
sb.append(func).append("(").append(angle).append("°)");
if (i < count - 1) {
sb.append(" + ");
}
}
return sb.toString();
}
}

@ -0,0 +1,44 @@
public class Users {
private final String name;
private final String password;
private final String type;
private static final Users[] USERS = {
new Users("张三1", "123", "小学"),
new Users("张三2", "123", "小学"),
new Users("张三3", "123", "小学"),
new Users("李四1", "123", "初中"),
new Users("李四2", "123", "初中"),
new Users("李四3", "123", "初中"),
new Users("王五1", "123", "高中"),
new Users("王五2", "123", "高中"),
new Users("王五3", "123", "高中")
};
public Users(String name, String password, String type) {
this.name = name;
this.password = password;
this.type = type;
}
public String getType() {
return type;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public static Users login(String name, String password) {
for (Users users : USERS) {
if (users.getName().equals(name) && users.getPassword().equals(password)) {
return users;
}
}
return null;
}
}
Loading…
Cancel
Save