数据库设计(MySQL)

CREATE TABLE `questions` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `question` text NOT NULL,
  `option_a` varchar(255) NOT NULL,
  `option_b` varchar(255) NOT NULL,
  `option_c` varchar(255) NOT NULL,
  `option_d` varchar(255) NOT NULL,
  `correct_answer` char(1) NOT NULL,
  PRIMARY KEY (`id`)
);
-试卷表
CREATE TABLE `papers` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `paper_name` varchar(100) NOT NULL,
  `question_ids` text NOT NULL, -存储题目ID列表(如:1,3,5)
  PRIMARY KEY (`id`)
);
-考试记录表
CREATE TABLE `exam_records` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `paper_id` int(11) NOT NULL,
  `answers` text NOT NULL, -存储用户答案(如:1:A,2:C)
  `score` int(11) DEFAULT NULL,
  `exam_time` timestamp DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
);

核心功能代码示例

(1) 题库管理(添加题目)

// add_question.php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $question = $_POST['question'];
    $options = [
        'A' => $_POST['option_a'],
        'B' => $_POST['option_b'],
        'C' => $_POST['option_c'],
        'D' => $_POST['option_d']
    ];
    $correct = $_POST['correct_answer'];
    // 插入数据库
    $sql = "INSERT INTO questions (question, option_a, option_b, option_c, option_d, correct_answer) 
            VALUES ('$question', '{$options['A']}', '{$options['B']}', '{$options['C']}', '{$options['D']}', '$correct')";
    mysqli_query($conn, $sql);
    echo "题目添加成功!";
}

(2) 试卷生成(随机抽题)

// generate_paper.php
$paper_name = "期末测试";
$question_count = 10; // 10道题
// 随机抽取题目
$sql = "SELECT id FROM questions ORDER BY RAND() LIMIT $question_count";
$result = mysqli_query($conn, $sql);
$question_ids = [];
while ($row = mysqli_fetch_assoc($result)) {
    $question_ids[] = $row['id'];
}
// 存储试卷
$ids_str = implode(',', $question_ids);
mysqli_query($conn, "INSERT INTO papers (paper_name, question_ids) VALUES ('$paper_name', '$ids_str')");

(3) 在线考试界面

// exam.php
$paper_id = $_GET['id'];
$paper = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM papers WHERE id=$paper_id"));
$question_ids = explode(',', $paper['question_ids']);
foreach ($question_ids as $q_id) {
    $q = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM questions WHERE id=$q_id"));
    echo "<div class='question'>";
    echo "<p>{$q['question']}</p>";
    echo "<label><input type='radio' name='answer[$q_id]' value='A'> {$q['option_a']}</label>";
    echo "<label><input type='radio' name='answer[$q_id]' value='B'> {$q['option_b']}</label>";
    // ... 其他选项
    echo "</div>";
}
// 提交表单
echo "<form method='post' action='submit_exam.php'>";
echo "<input type='hidden' name='paper_id' value='$paper_id'>";
echo "<button type='submit'>提交考试</button>";
echo "</form>";

(4) 自动批改与成绩统计

// submit_exam.php
$paper_id = $_POST['paper_id'];
$answers = $_POST['answer'];
$paper = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM papers WHERE id=$paper_id"));
$question_ids = explode(',', $paper['question_ids']);
// 计算得分
$score = 0;
foreach ($question_ids as $q_id) {
    $q = mysqli_fetch_assoc(mysqli_query($conn, "SELECT correct_answer FROM questions WHERE id=$q_id"));
    if ($answers[$q_id] == $q['correct_answer']) {
        $score++;
    }
}
// 保存考试记录
mysqli_query($conn, "INSERT INTO exam_records (user_id, paper_id, answers, score) 
                      VALUES ({$_SESSION['user_id']}, $paper_id, '" . json_encode($answers) . "', $score)");
echo "考试完成!得分:$score/" . count($question_ids);

完整系统获取途径

  1. 开源平台

    php网络考试系统源码下载

    php网络考试系统源码下载

  2. 资源网站

  3. 注意事项

    • 选择源码时注意是否需要授权(避免侵权)。
    • 修改数据库配置文件(如 config.php)中的连接信息。
    • 根据需求调整功能(如添加倒计时、防作弊机制)。

扩展功能建议

  • 用户管理:登录/注册、角色区分(学生/教师)。
  • 考试控制:限时提交、随机题目顺序。
  • 数据可视化:使用ECharts展示成绩分布。
  • 移动端适配:使用Bootstrap或响应式设计。

如果需要更详细的完整代码或具体模块实现,请告知需求方向,我可提供进一步指导!

php网络考试系统源码下载

相关内容

回顶部