AFUTrainer/exam.h
2019-09-28 11:14:53 +02:00

142 lines
5.1 KiB
C++
Raw Permalink Blame History

/***************************************************************************
* Copyright (C) 2003-2007 by Oliver Saal *
* osaal@gmx.de *
* http://www.oliver-saal.de/software/afutrainer/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#ifndef EXAM_H
#define EXAM_H
#include <qstring.h>
#include <qlist.h>
#include <qdom.h>
#include <qdatetime.h>
#include <qstringlist.h>
class CQuestion;
class CExamPart
{
public:
CExamPart() { clear(); }
~CExamPart() {}
void clear();
inline int questionCount() const { return m_iQuestionCount; }
inline void setQuestionCount(int i) { m_iQuestionCount = i; }
inline QString group() const { return m_strGroup; }
inline void setGroup(const QString& str) { m_strGroup = str; }
inline QString regexp() const { return m_strRegExp; }
inline void setRegExp(const QString& str) { m_strRegExp = str; }
bool load (QDomElement elem);
void save (QDomElement& parent, QDomDocument& doc) const;
QList<CQuestion*> createQuestionPool(const QList<CQuestion*>& listAllQuestions) const;
protected:
int m_iQuestionCount;
QString m_strGroup;
QString m_strRegExp;
};
class CExam
{
public:
CExam() { clear(); }
~CExam() {}
//! Zur<75>cksetzen aller Werte
/*! Es werden alle Daten der Pr<50>fung gel<65>scht. */
void clear();
//! ID abfragen
inline QString id() const { return m_strId; }
//! ID setzen
inline void setId(const QString& strId) { m_strId = strId; }
inline QString name() const { return m_strName; }
inline QString comment() const { return m_strComment; }
unsigned duration() const { return m_uDuration; }
unsigned maxErrorPoints() const { return m_uMaxErrorPoints; }
unsigned questionCount() const;
bool load (QDomElement elem);
void save (QDomElement& parent, QDomDocument& doc) const;
QList<CQuestion*> createQuestionPool(const QList<CQuestion*>& listAllQuestions) const;
protected:
QString m_strId; //< ID der Pr<50>fung
QString m_strName; //< Name / Bezeichnung
QString m_strComment; //< Kommentar / Hinweis
unsigned m_uDuration; //< Pr<50>fungsdauer in min
unsigned m_uMaxErrorPoints; //< Max. Anzahl an erlaubten Fehlerpunkten, um die Pr<50>fung zu bestehen
QList<CExamPart> m_listParts; //< Abschnitte, aus denen sich die Pr<50>fung zusammensetzt.
};
class CExamStat
{
public:
CExamStat() { clear(); }
CExamStat(const CExam& exam);
~CExamStat() {}
//! Zur<75>cksetzen aller Werte
/*! Es werden alle Daten dieser Pr<50>fungsstatistik gel<65>scht. */
void clear();
bool load (QDomElement elem);
void save (QDomElement& parent, QDomDocument& doc) const;
//! ID abfragen
inline QString id() const { return m_strId; }
//! ID setzen
inline void setId(const QString& strId) { m_strId = strId; }
inline void setSecs(const unsigned uSecs) { m_uSecs = uSecs; }
void setQuestions(const QList<CQuestion*>& listQuestion, const QList<unsigned>& listAnswerMask);
void setResult (const unsigned uCorrect, const unsigned uWrong, const unsigned uErrorPoints, const bool bPassed);
inline unsigned duration() const { return m_uSecs; }
inline bool passed() const { return m_bPassed; }
inline unsigned correctAnswers() const { return m_uCorrect; }
inline unsigned wrongAnswers() const { return m_uWrong; }
inline unsigned errorPoints() const { return m_uErrorPoints; }
QDateTime datetime() const { return m_dt; }
protected:
QString m_strId; //< ID der Pr<50>fung
QDateTime m_dt; //< Datum/Uhrzeit
unsigned m_uSecs; //< Ben<65>tigte Zeit in sec
QStringList m_strlQuestionId; //< IDs der Fragen
QList<unsigned> m_listAnswer; //< Antworten
unsigned m_uCorrect; //< Anzahl d. richtigen Fragen
unsigned m_uWrong; //< Anzahl d. falschen Fragen
unsigned m_uErrorPoints; //< Fehlerpunkte
bool m_bPassed; //< Bestanden Ja/Nein
};
#endif