#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() {}; };