campo-sirio/webcgi/formazione/questionnaire.h
luca 8d5786295a Patch level :
Files correlati     :
Ricompilazione Demo : [ ]
Commento            : Modifiche di marco


git-svn-id: svn://10.65.10.50/trunk@8858 c028cbd2-c16b-5b4b-a496-9718f37d4682
2000-03-02 15:26:30 +00:00

80 lines
2.3 KiB
C++
Executable File

#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 è praticamente il primo metodo da
invocare; dove s1 è 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() è 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 è 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() è 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() {};
};