Dokumentierter Code
authorAndreas Bilke <andreas@bilke.org>
Fri, 28 Jul 2017 14:47:09 +0000 (16:47 +0200)
committerAndreas Bilke <andreas@bilke.org>
Fri, 28 Jul 2017 14:47:09 +0000 (16:47 +0200)
Quiz/cpp/quiz.cpp

index baeb7b7..f3f37cf 100644 (file)
 #include <string>
 #include <vector>
 
-
+/*!
+ * \brief Klasse um eine Frage, die korrekte Antwort und Antwortmöglichkeiten zu speichern.
+ *
+ * Die Klasse speichert die Frage, die position der korrekten Antwortund verschiedene
+ * Antwortmöglichkeiten.
+ */
 class FrageAntworten {
     private:
+        /*! Die zu stellende Frage */
         std::string frage;
-        std::vector<std::string> antworten;
+        /*! Die Position der korrekten Antwort in \ref antworten */
         unsigned int korrekteantwort;
+        /*! Eine Liste von Antwortmöglichkeiten */
+        std::vector<std::string> antworten;
 
     public:
+        /*!
+         * \brief der Konstruktor
+         *
+         * \param pFrage Die zu stellende Frage
+         * \param pAntworten Ein std::vector mit den Antwortmöglichkeiten
+         * \param pKorrekteAntwort Die Position in \ref pAntworten mit der korrekten Antwort
+         */
         FrageAntworten(std::string pFrage, std::vector<std::string> pAntworten, int pKorrekteAntwort) : frage(pFrage), antworten(pAntworten), korrekteantwort(pKorrekteAntwort) { }
 
+        /*!
+         * \brief Stellt die Frage an den Benutzer
+         *
+         * Gibt die Frage und alle Antwortmöglichkeiten aus.
+         *
+         * Das Format der Antworten ist:
+         * a) Antwort 1
+         * b) Antwort 2
+         * etc.
+         */
         void stelleFrage() {
             std::cout << "> " << frage << std::endl << std::endl;
 
@@ -34,6 +59,14 @@ class FrageAntworten {
             }
         }
 
+        /*!
+         * \brief Nimmt die Antwort des Benutzers an
+         *
+         * Liest die Antwort (als Buchstabe der Auswahlmöglichkeiten) ein und
+         * prüft ob es sich um die korrekte Antwort handelt.
+         *
+         * \return true, falls die Antwort korrekt war, false anonsten
+         */
         bool liesAntwort() {
             std::string zeilenpuffer;
 
@@ -93,6 +126,19 @@ int main(int argc, char** argv) {
     return EXIT_SUCCESS;
 }
 
+/*!
+ * \brief Liest die Datei zeilenweise und extrahiert die Fragen/Antworten
+ *
+ * Öffnet die Datei und liest die Datei zeilenweise. Das Format
+ * der Datei ist dabei
+ *
+ * Frage;korrekte Antwort als Position;Antwortmöglichkeit 1;Antwortmöglichkeit 2 etc
+ *
+ * Das Format ist dabei eine CSV Datei mit ";" als Trennzeichen.
+ *
+ * \param dateiname Der Dateiname (mit Pfad) zur Datei mit den Fragen/Antworten
+ * \return Ein std::vector mit FrageAntworten Objekten.
+ */
 std::vector<FrageAntworten> liesDatei(std::string& dateiname) {
     std::ifstream dateistream(dateiname);
     if (!dateistream.good()) {
@@ -108,6 +154,8 @@ std::vector<FrageAntworten> liesDatei(std::string& dateiname) {
             throw std::logic_error("Das Dateiformat stimmt nicht. Es muss pro Zeile Eine Frage, eine korrekte Antwort und mindestens eine Antwortmöglichkeit geben.");
         }
 
+        // Dreht den vector mit den Spalten um, damit Frage und korrekte Antwort
+        // von hinten mittels back (und dann mit pop_back gelöscht) werden können.
         std::reverse(getrennteElemente.begin(), getrennteElemente.end());
 
         std::string frage = getrennteElemente.back();
@@ -119,6 +167,8 @@ std::vector<FrageAntworten> liesDatei(std::string& dateiname) {
             throw std::logic_error("Das Dateiformat stimmt nicht. Die Angabe der korrekten Antwort referenziert auf eine nicht existierende Antwortmöglichkeit in der Datei.");
         }
 
+        // Stellt die ursprüngliche Reihenfolge wieder her, damit die
+        // Position der korrekten Antwort passt.
         std::reverse(getrennteElemente.begin(), getrennteElemente.end());
         FrageAntworten frageantwort = FrageAntworten(frage, getrennteElemente, korrekteantwort);
 
@@ -128,6 +178,11 @@ std::vector<FrageAntworten> liesDatei(std::string& dateiname) {
     return frageantworten;
 }
 
+/*!
+ * \brief Trennt einen String am ";" Zeichen und erstellt daraus einen std::vector
+ *
+ * \return Die einzelnen Spalten aus dem CSV std::string
+ */
 std::vector<std::string> teileZeile(std::string& zeile) {
     std::string::size_type letztePos = zeile.find_first_not_of(";", 0);
     std::string::size_type pos = zeile.find_first_of(";", letztePos);