1999-10-20 15:27:08 +00:00
|
|
|
|
#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);
|
2000-03-02 15:26:30 +00:00
|
|
|
|
void dump_html(const String& corso, const int modulo, const char testnum);
|
|
|
|
|
Questionnaire() { reset();}
|
1999-10-20 15:27:08 +00:00
|
|
|
|
virtual ~Questionnaire() {};
|
|
|
|
|
};
|