/** * Versucht die Instanz aus dem Parameter dem Vektor hinzuzufuegen. * * Ist die Parameter-Instanz "null" wird nichts hinzugefuegt und FALSE zurueckgegeben. * * @return TRUE wenn die Instanz dem Vektor hinzugefuegt werden konnte, sonst FALSE */ public bool addClsTypAbfrage(clsTypAbfrage pClsTypAbfrage) { /* * Pruefung: Parameterinstanz ungleich "null" ? */ if (pClsTypAbfrage != null) { try { /* * Ist die Parameterinstanz vorhanden, wird diese dem Vektor hinzugefuegt. */ getVektor().Add(pClsTypAbfrage); /* * Der Aufrufder bekommt TRUE zurueck, da die Parameterinstanz hinzugefuegt wurde. */ return(true); } catch (Exception err_inst) { System.Console.WriteLine("Fehler: errAddClsTypAbfrage " + err_inst.Message); } } /* * Vorgaberueckgabe ist FALSE (Fehler oder Parameterinstanz nicht gesetzt) */ return(false); }
/** * Erstellt mit den Parameterangaben eine Fragensitzung mit einer * zufaelligen Reihenfolge der Fragen aus dem Fragenkatalog. * * @return TRUE wenn die Fragensitzung erstellt werden konnte, sonst FALSE */ private bool erstelleZufallsFragenSitzung(int pAnzahlGesamtFragen, int pAnzahlAbfragen, int pUntergrenze, int pObergrenze) { int index_fragen_katalog = 0; int index_lern_fabrik = 0; int zaehler_such_schleife = 0; int zaehler_reset_vorh_string = 0; String str_bereits_vorhandene_ids = ""; bool knz_naechster_wert_gefunden = false; Random inst_zufallsgenerator = new Random(); clsTypAbfrage inst_cls_abfrage = null; zaehler_reset_vorh_string = pAnzahlGesamtFragen; index_lern_fabrik = 1; while ((index_lern_fabrik <= pAnzahlAbfragen) && (index_lern_fabrik < 3212)) { /* * Uebersteigt die Anzahl der Zufallsfragen die Gesamtanzahl aller Fragen, * wird der String mit den bereits aufgenommenen Fragennummern wieder * auf einen Leerstring gestellt. * * Ansonsten wuerde die Funktion 100 mal versuchen eine neue Fragennummer * zu ermitteln, welches nicht gehen wuerde, da schon alle Grundfragen im * String vorhanden waeren. Der Prozess wird beschleunigt. */ if (index_lern_fabrik > zaehler_reset_vorh_string) { str_bereits_vorhandene_ids = ""; zaehler_reset_vorh_string = index_lern_fabrik + pAnzahlGesamtFragen; } /* * Das Kennzeichen fuer die erfolgreiche Ermittlung eines neuen * Fragenindexes wird fuer die neue Suche auf FALSE gestellt. */ knz_naechster_wert_gefunden = false; /* * Der Endlosschleifenverhinderungszaehler wird auf 0 gestellt. */ zaehler_such_schleife = 0; /* * While-Schleife fuer die Ermittlung eines Fragenindexes */ while (((knz_naechster_wert_gefunden == false) && (zaehler_such_schleife < 1000))) { /* * Neuer Fragenindex * * Es wird per Zufall ein Index zwischen der Ober- und Untergrenze ausgewaehlt */ index_fragen_katalog = inst_zufallsgenerator.Next(0, pObergrenze); if ((pUntergrenze > 0) && (index_fragen_katalog < pUntergrenze)) { /* * Einhaltung Untergrenze * * Ist die Untergrenze groesser als 0, darf der Index nicht * kleiner als der Index der Untergrenze sein. * * Ist der Index kleiner als die Untegrenze, ist in diesem * Durchgang kein neuer gueltiger Fragenindex ermittelt worden. */ } else if ((pObergrenze > 0) && (index_fragen_katalog > pObergrenze)) { /* * Einhaltung Obergrenze * * Ist die Obergrenze groesser als 0, darf der Index nicht * groesser als der Index der Obergrenze sein. * * Ist der Index kleiner als die Obergrenze, ist in diesem * Durchgang kein neuer gueltiger Fragenindex ermittelt worden. */ } else { /* * Vermeidung doppelter Fragen * * Es werden alle schon einmal benutzten Indexe in einer Stringvariable * kommasepariert gespeichert. * * Es wird geprueft, ob der aktuelle Index sich bereits in diesem * Stringspeicher befindet. Die Funktion "IndexOf" muss -1 fuer * "nicht gefunden" zurueck liefern. * * Ist der Index enthalten, ist die Variable "knz_naechster_wert_gefunden" FALSE. * Ist der Index nicht enthalten, ist die Variable "knz_naechster_wert_gefunden" TRUE. * * Die Variable "knz_naechster_wert_gefunden" steuert diese Suchschleife. * * Die Pruefung auf "Index schon vorhanden" wird nur 100 mal gemacht. * Beim 101 Durchlauf wird der gefundene Fragenindex ungeprueft uebernommen. * Die Variable "knz_naechster_wert_gefunden" wird dann auf TRUE gestellt. */ if (zaehler_such_schleife < 100) { knz_naechster_wert_gefunden = str_bereits_vorhandene_ids.IndexOf("," + index_fragen_katalog + ",") == -1; } else { knz_naechster_wert_gefunden = true; } } /* * Am Schleifenende wid der Schleifenzaehler um eins hochgezaehlt. */ zaehler_such_schleife = zaehler_such_schleife + 1; } /* * Pruefung: Neuen Frageindex gefunden? */ if (knz_naechster_wert_gefunden) { /* * Ist der aktuelle Fragenindex in Ordnung, wird eine neue Instanz * der Klasse "clsTypAbfrage" erstellt. * * Diese Instanz bekommt den Fragenindex aus dem Fragenkatalog zugewiesen. * * Auf die Zaehlervariablen wird ein Reset gemacht. */ inst_cls_abfrage = new clsTypAbfrage(); inst_cls_abfrage.setIndexFragenKatalog(index_fragen_katalog); inst_cls_abfrage.reset(); /* * Die Instanz wird dem Vektor fuer die Abfragen hinzugefuegt. */ addClsTypAbfrage(inst_cls_abfrage); /* * Der neu aufgenommene Fragenindex wird in der Speichervariablen * fuer die schon benutzten Fragenindexe aufgenommen. */ str_bereits_vorhandene_ids = str_bereits_vorhandene_ids + "," + index_fragen_katalog + ","; } /* * Der Index fuer die Lernfabrik wird um 1 erhoeht */ index_lern_fabrik++; } return(true); }
/** * Erstellt mit den Parameterangaben eine Fragensitzung nach * Reihenfolge der Fragen im Fragenkatalog. * * @return TRUE wenn die Fragensitzung erstellt werden konnte, sonst FALSE */ private bool erstelleFragenSitzungReihenfolge(int pAnzahlGesamtFragen, int pAnzahlAbfragen, int pUntergrenze, int pObergrenze) { bool fkt_ergebnis = false; int index_fragen_katalog = 0; int index_ab = 0; int index_bis = 0; bool knz_rueckwaerts = false; if (pUntergrenze > pObergrenze) { index_ab = pObergrenze; index_bis = pUntergrenze; } else { index_ab = pUntergrenze; index_bis = pObergrenze; } if (index_ab < 0) { index_ab = 0; } if (index_bis > pAnzahlGesamtFragen) { index_bis = pAnzahlGesamtFragen - 1; } clsTypAbfrage inst_cls_abfrage = null; if (knz_rueckwaerts) { index_fragen_katalog = index_bis; while (index_fragen_katalog >= index_ab) { inst_cls_abfrage = new clsTypAbfrage(); inst_cls_abfrage.setIndexFragenKatalog(index_fragen_katalog); inst_cls_abfrage.reset(); addClsTypAbfrage(inst_cls_abfrage); index_fragen_katalog--; } } else { index_fragen_katalog = index_ab; while (index_fragen_katalog <= index_bis) { inst_cls_abfrage = new clsTypAbfrage(); inst_cls_abfrage.setIndexFragenKatalog(index_fragen_katalog); inst_cls_abfrage.reset(); addClsTypAbfrage(inst_cls_abfrage); index_fragen_katalog++; } } fkt_ergebnis = true; return(fkt_ergebnis); }