Files correlati : Ricompilazione Demo : [ ] Commento : Modifiche di marco git-svn-id: svn://10.65.10.50/trunk@8858 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			80 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			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() {};
 | 
						|
};
 |