80 lines
2.3 KiB
C
80 lines
2.3 KiB
C
|
#include "defines.h"
|
|||
|
|
|||
|
struct Answer_struct
|
|||
|
{
|
|||
|
String text; // Testo dell'item di risposta
|
|||
|
char user_answer; // Risposta data dall'utente (V o F)
|
|||
|
char corrector_answer; // Risposta memorizzata nel correttore
|
|||
|
Rational p; // "Peso" della risposta giusta/sbagliata: 1, 1/4, 1/2, 1/3, -1/3 -1/2 ecc
|
|||
|
};
|
|||
|
|
|||
|
struct Question_struct
|
|||
|
{
|
|||
|
String text; // Testo della domanda
|
|||
|
Answer_struct answers[MAXANSWERS];
|
|||
|
};
|
|||
|
|
|||
|
/*
|
|||
|
|
|||
|
Modo di utilizzo:
|
|||
|
|
|||
|
Questionnaire q;
|
|||
|
|
|||
|
s1 = "Q_1=VFFF;Q_2=VVVV;Q_3=FVFV;..."
|
|||
|
s2 = "Q_1=FFFVF;Q_2=FVFVF;Q_3=VVFFF;..."
|
|||
|
|
|||
|
q.load(s1,s2);
|
|||
|
|
|||
|
Il metodo load() azzera il questionario ed <EFBFBD> praticamente il primo metodo da
|
|||
|
invocare; dove s1 <EFBFBD> il correttore ed s2 sono le risposte fornite dall'utente.
|
|||
|
Questo metodo carica il correttore e le risposte fornite, predisponendo il calcolo
|
|||
|
del punteggio.
|
|||
|
|
|||
|
Dopo aver chiamato load() <EFBFBD> si possono chiamare i metodi dump_html() o calc_score()
|
|||
|
indifferentemente l'uno dall'altro.
|
|||
|
|
|||
|
|
|||
|
Rational r = q.calc_score();
|
|||
|
|
|||
|
il metodo calc_score() ritorna il punteggio calcolato nel test in base al correttore ed alle
|
|||
|
risposte fornite in load()
|
|||
|
|
|||
|
|
|||
|
q.dump_html("volare", 10, 'a');
|
|||
|
|
|||
|
il metodo dump_html() scrive sullo stdout l'html del test eseguito, contrassegnando
|
|||
|
con le "X" i checkbox del correttore e delle risposte fornite dall'utente, evidenziando in
|
|||
|
rosso le risposte errate rispetto al correttore. Si ricorda che tale html non <EFBFBD> una
|
|||
|
pagina completa, per permettere di fare aggiunte prima o dopo di esso.
|
|||
|
|
|||
|
In conclusione prima di usare i 2 metodi dump_html() o calc_score() <EFBFBD> necessario
|
|||
|
aver fatto comunque un load() del correttore.
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
class Questionnaire
|
|||
|
{
|
|||
|
private:
|
|||
|
enum bracket_state { none, open_bracket, close_bracket };
|
|||
|
|
|||
|
enum valid_tags { no_tag, title_tag_begin, title_tag_end, form_tag_begin, form_tag_end,
|
|||
|
paragraph_tag_begin, paragraph_tag_end, input_tag, table_tag_begin,
|
|||
|
table_tag_end, div_tag_begin, div_tag_end, ignored_tag };
|
|||
|
String _title;
|
|||
|
Question_struct _questions[MAXQUESTIONS];
|
|||
|
bool _loaded, _parsed, _computed;
|
|||
|
Rational _score;
|
|||
|
int _max_score;
|
|||
|
|
|||
|
protected:
|
|||
|
void parse_html(const char* name);
|
|||
|
|
|||
|
public:
|
|||
|
void reset();
|
|||
|
Rational calc_score();
|
|||
|
bool load(const String& s1, const String& s2);
|
|||
|
void dump_html(const String& corso, const int modulo, const char testnum);
|
|||
|
Questionnaire() { reset();}
|
|||
|
virtual ~Questionnaire() {};
|
|||
|
};
|