mdagostino/multiplechoiceexams

一组用于管理多项选择考试的PHP类

dev-master 2016-01-20 14:57 UTC

This package is not auto-updated.

Last update: 2024-09-25 15:58:57 UTC


README

#MultipleChoiceExams

Build Status Coverage Status

MultipleChoiceExams 是一组用于管理多项选择考试的PHP类。这些类能够适应不同的内容管理系统,例如 Drupal,因此 CMS 只负责管理数据库中的内容。

#示例

以下是代码的工作方式

<?php
require 'vendor/autoload.php';

use mdagostino\MultipleChoiceExams\Exam\Exam;
use mdagostino\MultipleChoiceExams\Controller\ExamWithTimeController;
use mdagostino\MultipleChoiceExams\Question\Question;
use mdagostino\MultipleChoiceExams\Timer\ExamTimer;
use mdagostino\MultipleChoiceExams\Question\QuestionInfo;
use mdagostino\MultipleChoiceExams\Question\QuestionEvaluatorSimple;
use mdagostino\MultipleChoiceExams\ApprovalCriteria\BasicApprovalCriteria;

// First create a list of Questions
// Each question can use a different evaluator method, for this example,
// all the questions use the simplest evaluation method: "A question is
// considered correct if the user chose only all the right questions".
$question_evaluator = new QuestionEvaluatorSimple();


$question = new Question($question_evaluator, new QuestionInfo());
$question
  ->setTitle('Django language')
  ->setDescription('In which language is written the Django framework');
  ->setChoices(['python' => 'Python', 'php' => 'PHP', 'go' => 'Go', 'java' => 'Java'])
  ->setRightChoices(['python'])
$questions[] = $question;



$question = new Question($question_evaluator, new QuestionInfo());
$question
  ->setTitle('Languages that runs on browsers')
  ->setDescription('Witch programming language can run on web browsers?');
  ->setChoices(['cobol' => 'Cobol', 'javascript' => 'Javascript', 'asm' => 'Assembler'])
  ->setRightChoices(['javascript'])
$questions[] = $question;


$question = new Question($question_evaluator, new QuestionInfo());
$question
  ->setTitle('Planets')
  ->setDescription('Wich planets of the Solar System are considered "giant planets"?');
  ->setChoices([
    'Me' => 'Mercury',
    'Ve' => 'Venus',
    'Ea' => 'Earth',
    'Ma' => 'Mars',
    'Ju' => 'Jupiter',
    'Sa' => 'Saturn',
    'Ur' => 'Uranus',
    'Ne' => 'Neptune'
    ])
  ->setRightChoices(['Ju', 'Sa', 'Ur', 'Ne'])
$questions[] = $question;


// This Exam is approved with 75%, each right question sums 1 point,
// each wrong question rest 0.3 points
$approval_criteria = new BasicApprovalCriteria;
$approval_criteria
  ->setScoreToApprove(75)
  ->setRightQuestionsSum(1)
  ->setWrongQuestionsRest(0.3);

$exam = new Exam();
$exam->setQuestions($questions);

$controller = new ExamWithTimeController($exam, $approval_criteria);

$exam_timer = new ExamTimer();
$exam_timer->setDuration(60); // 60 minutes
$controller->setTimer($exam_timer);
$controller->startExam();

$controller->answerCurrentQuestion(['go']); // Wrong answer
$controller->moveToNextQuestion();
$controller->answerCurrentQuestion(['javascript']); // Right answer
$controller->tagCurrentQuestion('review later');
$controller->moveToNextQuestion();
$controller->answerCurrentQuestion(['Ju', 'Sa']); // Wrong answer (incomplete)
$controller->tagCurrentQuestion('review later');
$controller->tagCurrentQuestion('difficult question');
$controller->untagCurrentQuestion('review later');
$controller->moveToNextQuestion();

$controller->finalizeExam();

echo 'Exam: ' . ($controller->getApprovalCriteria()->isApproved($exam->getQuestions()) ? 'Approved' : ' Not Approved')  . PHP_EOL;
echo 'Exam score: ' . sprintf('%.2f%%', $controller->getApprovalCriteria()->getScore()) . PHP_EOL;
echo 'Questions tagged to review later: ' . count($controller->getQuestionsTagged('review later'))  . PHP_EOL;
echo 'Questions tagged as difficult questions: ' . count($controller->getQuestionsTagged('difficult question'))  . PHP_EOL;