🎃个人专栏:
🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客
🐳Java基础:Java基础_IT闫的博客-CSDN博客
🐋c语言:c语言_IT闫的博客-CSDN博客
🐟MySQL:数据结构_IT闫的博客-CSDN博客
🐠数据结构:数据结构_IT闫的博客-CSDN博客
💎C++:C++_IT闫的博客-CSDN博客
🥽C51单片机:C51单片机(STC89C516)_IT闫的博客-CSDN博客
💻基于HTML5的网页设计及应用:基于HTML5的网页设计及应用_IT闫的博客-CSDN博客
🥏python:python_IT闫的博客-CSDN博客
🐠离散数学:离散数学_IT闫的博客-CSDN博客
欢迎收看,希望对大家有用!
目录
🎯功能简介:
代码中使用了MySQL数据库进行数据存储,通过JDBC连接数据库。主要包括以下几个功能:
- 题库管理:可以查询题库中的试题和添加新的试题。
- 生成试卷:随机从题库中选择指定数量的试题生成试卷。
- 答题判分:按顺序抽取试题,用户输入答案后进行判分,并生成答题记录。
在题库管理中,可以通过输入题号、题目、选项和答案添加新的试题。查询题库会将题库中的试题信息打印出来。
在生成试卷中,用户输入想要生成的试题数量,系统会随机从题库中选择相应数量的试题,并打印出来。
在答题判分中,用户需要输入学号和试题的数量,系统会按顺序抽取试题,用户输入答案后进行判分,并生成答题记录保存到对应的文件中。
🎯分段解析:
🎃题库管理部分:
//题库管理
private static void questionManage(Connection conn) {
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("============题库管理=============");
System.out.println("1.查询题库");
System.out.println("2.添加试题");
System.out.println("3.返回上一级菜单");
System.out.print("请选择您要进行操作的编号:");
int choice = scan.nextInt();
switch (choice) {
case 1:
selectQuestion(conn);
break;
case 2:
addQuestion(conn);
break;
case 3:
return;
default:
System.out.println("无效操作,请重新输入");
break;
}
}
}
这部分代码实现了题库管理的功能,用户可以选择查询题库或添加试题。其中
selectQuestion(Connection conn)
函数用于查询题库,从数据库中获取题目信息并输出。addQuestion(Connection conn)
函数用于添加试题,通过用户输入的信息插入到数据库中。
🎃生成试卷部分:
//随机生成考试试卷
private static void gettest(Connection conn) {
Random rand = new Random();
Scanner scan = new Scanner(System.in);
System.out.print("请输入考试数量:");
int num = scan.nextInt();
try {
Statement sta = conn.createStatement();
HashSet<question> set1 = new HashSet<question>();
while (true) {
int r = rand.nextInt(4) + 1;
ResultSet rs = sta.executeQuery("select * from shitibiao where q_deflag=0 and q_no=" + r);
while (rs.next()) {
int q_no = rs.getInt("q_no");
int q_deflag = rs.getInt("q_deflag");
String q_name = rs.getString("q_name");
String q_a = rs.getString("q_a");
String q_b = rs.getString("q_b");
String q_c = rs.getString("q_c");
String q_d = rs.getString("q_d");
String q_answer = rs.getString("q_answer");
question q = new question(q_name, q_a, q_b, q_c, q_d, q_answer);
set1.add(q);
}
rs.close();
if (set1.size() >= num) {
break;
}
}
System.out.println("==========生成试卷===========");
for (question q : set1) {
System.out.println(q);
System.out.println();
}
sta.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
这部分代码实现了随机生成考试试卷的功能。用户需要输入考试的数量,程序会从数据库中随机选取题目,并输出生成的试卷。
🎃答题判分部分:
//顺序抽题答题
private static void answertest(Connection conn) {
Scanner scan = new Scanner(System.in);
System.out.print("请输入您的学号:");
String studentId = scan.next();
System.out.println("请输入试题数量");
int num = scan.nextInt();
System.out.println("==========开始答题==========");
int score = 0;
try {
Statement sta = conn.createStatement();
ResultSet rs = sta.executeQuery("select * from shitibiao");
PrintStream out = new PrintStream(new FileOutputStream(studentId + ".txt"));
for (int i = 0; i < num && rs.next(); i++) {
int q_no = rs.getInt("q_no");
String q_name = rs.getString("q_name");
String q_a = rs.getString("q_a");
String q_b = rs.getString("q_b");
String q_c = rs.getString("q_c");
String q_d = rs.getString("q_d");
String q_answer = rs.getString("q_answer");
int q_deflag = rs.getInt("q_deflag");
if (q_deflag == 0) {
System.out.println(q_no + q_name);
System.out.println("a. " + q_a);
System.out.println("b. " + q_b);
System.out.println("c. " + q_c);
System.out.println("d. " + q_d);
System.out.print("\n请输入答案:");
String answer = scan.next();
if (answer.equals(q_answer)) {
System.out.println("回答正确!");
score++;
} else {
System.out.println("回答错误, 正确答案为:" + q_answer);
}
out.println(q_no + ". " + q_name);
out.println("a. " + q_a);
out.println("b. " + q_b);
out.println("c. " + q_c);
out.println("d. " + q_d);
out.println("你的答案:" + answer + " 正确答案:" + q_answer);
}
}
System.out.println("该试卷的总分为: " + num + ", " + "您的得分为" + score);
out.print("该试卷的总分为: " + num + ", " + "您的得分为" + score);
out.close();
rs.close();
sta.close();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
这部分代码实现了顺序抽题答题的功能。用户需要输入学号和试题数量,程序会从数据库中顺序获取试题,要求用户输入答案并进行判分,最后输出得分和试题答案。
🎯源代码:
package one;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.HashSet;
import java.util.Random;
import java.util.Scanner;
import javax.naming.spi.DirStateFactory.Result;
public class One {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
// 注册数据库的驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
// 通过DriverManger获取数据库连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shitiku", "root", "200454");
while (true) {
Scanner scan = new Scanner(System.in);
System.out.println("===============考试系统菜单==========");
System.out.println("1.题库管理");
System.out.println("2.生成试卷");
System.out.println("3.答题判分");
System.out.println("4.退出系统");
System.out.print("请选择您要进行操作的编号:");
int choice = scan.nextInt();
switch (choice) {
case 1:
questionManage(conn);
break;
case 2:
gettest(conn);
break;
case 3:
answertest(conn);
break;
case 4:
System.out.println("感谢使用,再见!");
conn.close();
System.exit(0);
default:
System.out.println("无效操作,请重新选择");
}
}
} catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//题库管理
private static void questionManage(Connection conn) {
Scanner scan = new Scanner(System.in);
while (true) {
System.out.println("============题库管理=============");
System.out.println("1.查询题库");
System.out.println("2.添加试题");
System.out.println("3.返回上一级菜单");
System.out.print("请选择您要进行操作的编号:");
int choice = scan.nextInt();
switch (choice) {
case 1:
selectQuestion(conn);
break;
case 2:
addQuestion(conn);
break;
case 3:
return;
default:
System.out.println("无效操作,请重新输入");
break;
}
}
}
//查询试题
private static void selectQuestion(Connection conn) {
// TODO Auto-generated method stub
try {
// 通过Connection对象获取Statement对象
Statement sta = conn.createStatement();
// 通过Statement对象执行sql语句
ResultSet rs = sta.executeQuery("select * from shitibiao");
while (rs.next()) {
int q_no = rs.getInt("q_no");
String q_name = rs.getString("q_name");
String q_a = rs.getString("q_a");
String q_b = rs.getString("q_b");
String q_c = rs.getString("q_c");
String q_d = rs.getString("q_d");
String q_answer = rs.getString("q_answer");
int q_deflag = rs.getInt("q_deflag");
if (q_deflag == 0) {
System.out.println(q_no + ". " + q_name);
System.out.println("a. " + q_a);
System.out.println("b. " + q_b);
System.out.println("c. " + q_c);
System.out.println("d. " + q_d);
System.out.println("正确答案: " + q_answer);
}
}
rs.close();
sta.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//添加试题
private static void addQuestion(Connection conn) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.print("请输入题号(不要与题库中重复):");
int x = scan.nextInt();
System.out.println("请输入题目");
String name = scan.next();
System.out.println("请输入a选项");
String a = scan.next();
System.out.println("请输入b选项");
String b = scan.next();
System.out.println("请输入c选项");
String c = scan.next();
System.out.println("请输入d选项");
String d = scan.next();
System.out.println("请输入答案");
String answer = scan.next();
try {
// 通过Connection对象获取Statement对象
Statement sta = conn.createStatement();
// 通过Statement对象执行sql语句
String sql = "insert into shitibiao(q_no,q_name,q_a,q_b,q_c,q_d,q_answer) values('" + x + "','" + name
+ "','" + a + "','" + b + "','" + c + "','" + d + "','" + answer + "')";
sta.executeUpdate(sql);
sta.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("试题添加成功!");
}
//随机生成考试试卷
private static void gettest(Connection conn) {
Random rand = new Random();
Scanner scan = new Scanner(System.in);
System.out.print("请输入考试数量:");
int num = scan.nextInt();
try {
Statement sta = conn.createStatement();
HashSet<question> set1 = new HashSet<question>();
while (true) {
int r = rand.nextInt(4) + 1;
ResultSet rs = sta.executeQuery("select * from shitibiao where q_deflag=0 and q_no="+r);
while(rs.next()) {
int q_no = rs.getInt("q_no");
int q_deflag = rs.getInt("q_deflag");
String q_name = rs.getString("q_name");
String q_a = rs.getString("q_a");
String q_b = rs.getString("q_b");
String q_c = rs.getString("q_c");
String q_d = rs.getString("q_d");
String q_answer = rs.getString("q_answer");
question q = new question(q_name, q_a, q_b, q_c, q_d, q_answer);
set1.add(q);
}
rs.close();
if(set1.size()>=num) {
break;
}
}
System.out.println("==========生成试卷===========");
for (question q : set1) {
System.out.println(q);
System.out.println();
}
sta.close();
}catch(
SQLException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//顺序抽题答题
private static void answertest(Connection conn) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.print("请输入您的学号:");
String studentId = scan.next();
System.out.println("请输入试题数量");
int num = scan.nextInt();
System.out.println("==========开始答题==========");
int score = 0;
try {
// 通过Connection对象获取Statement对象
Statement sta = conn.createStatement();
// 通过Statement对象执行sql语句
ResultSet rs = sta.executeQuery("select * from shitibiao");
PrintStream out = new PrintStream(new FileOutputStream(studentId + ".txt"));
for (int i = 0; i < num && rs.next(); i++) {
int q_no = rs.getInt("q_no");
String q_name = rs.getString("q_name");
String q_a = rs.getString("q_a");
String q_b = rs.getString("q_b");
String q_c = rs.getString("q_c");
String q_d = rs.getString("q_d");
String q_answer = rs.getString("q_answer");
int q_deflag = rs.getInt("q_deflag");
if (q_deflag == 0) {
System.out.println(q_no + q_name);
System.out.println("a. " + q_a);
System.out.println("b. " + q_b);
System.out.println("c. " + q_c);
System.out.println("d. " + q_d);
System.out.print("\n请输入答案:");
String answer = scan.next();
if (answer.equals(q_answer)) {
System.out.println("回答正确!");
score++;
} else {
System.out.println("回答错误, 正确答案为:" + q_answer);
}
out.println(q_no +". "+ q_name);
out.println("a. " + q_a);
out.println("b. " + q_b);
out.println("c. " + q_c);
out.println("d. " + q_d);
out.println("你的答案:" + answer + " 正确答案:" + q_answer);
}
}
System.out.println("该试卷的总分为: " + num + ", " + "您的得分为" + score);
out.print("该试卷的总分为: " + num + ", " + "您的得分为" + score);
out.close();
rs.close();
sta.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//问题类
class question {
String name;
String a;
String b;
String c;
String d;
String answer;
public question(String name, String a, String b, String c, String d, String answer) {
super();
this.name = name;
this.a = a;
this.b = b;
this.c = c;
this.d = d;
this.answer = answer;
}
@Override
public String toString() {
return name + "\n a:" + a + "\n b:" + b + "\n c:" + c + "\n d:" + d ;
}
}
🎯总结分析:
这是一个简单的考试系统程序,可以进行题库管理、生成试卷和答题判分等功能。
程序的主要逻辑如下:
- 注册数据库的驱动程序,并通过DriverManager获取数据库连接。
- 进入一个无限循环,根据用户选择执行相应的操作。
- 题库管理:用户可以选择查询题库或添加试题。
- 查询题库:通过执行SQL语句查询数据库中的试题信息,并将结果打印输出。
- 添加试题:用户输入题号、题目、选项和答案等信息,然后将试题信息插入数据库中。
- 生成试卷:用户输入考试数量,程序随机从数据库中选取指定数量的试题,并打印输出。
- 答题判分:用户输入学号和试题数量,程序顺序从数据库中选取指定数量的试题,用户输入答案并进行判分,最后将答题情况写入文件中。
在代码中使用了Java的JDBC API来连接和操作数据库。数据库使用的是MySQL,并需要提前安装MySQL数据库并创建名为"shitiku"的数据库,以及一个名为"shitibiao"的表来存储试题信息。
代码中的
question
类表示试题对象,其中包含题目、选项和答案等属性。在生成试卷时,程序随机选择试题,并将选择的试题存储在HashSet集合中,确保试题不重复。请注意,在使用代码之前,需要根据实际情况修改数据库连接的URL、用户名和密码等信息。