[Konsolenanwendung] Praktisch dynamische Abfragen

    • VB.NET

      [Konsolenanwendung] Praktisch dynamische Abfragen

      Hallo comm,

      Ich hatte einmal folgendes vor: Ich wollte ein kleines Quiz erstellen. Das ist eigentlich nicht schwierig, aber wirklich saumäßig viel zu schreiben. Daher dachte Ich mir, wie praktisch es wäre, wenn Ich einfach nur Frage und Auswahlmöglichkeit an eine Funktion übergeben müsste, die diese Antworten dann automatisch auswertet. Dabei war mir auch wichtig, dass Ich beliebig viele Fragen übergeben und alle Aktionen die je nach gewählter Option ausgeführt werden, selbst festlegen kann, um das ganze dynamisch zu gestalten. Ich hab das mal ausprobiert und siehe da, es klappt hervorragend :) Da Ich euch das nicht vorenthalten will, heir also das HowTo.

      VB.NET-Quellcode

      1. Module Module1
      2. Sub Main()
      3. Starte()
      4. Console.Clear()
      5. Console.WriteLine("Programmende ...")
      6. Console.ReadLine()
      7. End Sub
      8. Sub Starte()
      9. 'Das hier ist nun der eigentliche Aufruf:
      10. '
      11. 'Gehen wir das mal durch:
      12. '
      13. 'Parameter #1 ist ein String. Hier wird eingegeben, was der Benutzer mehr oder weniger
      14. '"zu tun hat". Zum Beispiel: "Eählen Sie eine Option" oder "Wählen Sie die richtige Antwort" oder
      15. 'dergleichen
      16. '
      17. 'Parameter #2 ist ein Array. Der wichtigste Teil von allen!
      18. 'Hier können beliebig viele Werte eingetragen werden. Sie stellen die einzelnen
      19. 'Auswahlmöglichkeiten dar. Wie zu sehen ist, ist das ein 2-dimensionales Array.
      20. 'In der ersten Dimension werden wie eben gesagt die Auswahlmöglichkeiten eingetragen, also
      21. 'eben eine kurze Beschreibung, was passiert, wenn er diese Option wählt.
      22. 'Und in der 2. Dimension wird's dann richtig spannend. Das sind die Zahlen,
      23. 'die das Programm intern auswertet. Da wir hier im folgenden 3 Auswahlmöglichkeiten haben, können
      24. 'hierfür auch nur 3 Zahlen angegeben werden. Diese werden dann unten über Select case abgefragt.
      25. 'Eigentlich ist es egal was hier für Zahlen stehen, je nachdem, welche Aktion dafür festgelegt
      26. 'ist, wird diese ausgeführt.
      27. 'Dabei ist jedoch die Reihenfolge der Zahlen nicht egal, hier in diesem Fall
      28. 'ist Aktion 8 auszuführen, wenn die erste Option gewählt wird, Aktion 1 bei der zweiten und Aktion 13 bei der dritten.
      29. 'Das ist jetzt wirklich ein wenig schwer zu erklären, das beste wird sein, Ihr testet es ;)
      30. Aufgabe("Was ist zu tun?", {{"Option1", "Option2", "Option3"}, {8, 1, 3}}, False, 1)
      31. 'Praxisbeispiel einfache Antwort
      32. Aufgabe("Gibt es unter Linux den Befehl ""rm""?", {{"Nein, nur unter Windows", "Ja", "Weiß nicht"}, {8, 1, 3}}, False, 1)
      33. 'Praxisbeispiel mehrfachantwort
      34. Aufgabe("Welches davon ist eine Schulnote?", {{"Sehr gut", "gut", "Mies", "Mangelhaft", "Genial"}, {21, 18, 112, 97, 4}}, False, 2)
      35. End Sub
      36. Sub Aufgabe(ByVal ToDo As String, ByVal Aufgaben(,) As String, Optional ByVal MultiAns As Boolean = False, Optional ByVal Nummer As Integer = 0)
      37. 'Erstmal Konsole leeren
      38. Console.Clear()
      39. 'Optional, zeigt lediglich an, ob eine oder mehrere Antworten/Aktionen wählbar sind
      40. 'Kann weggelassen werden, zur Ausgabe aber beim testen praktisch
      41. If MultiAns = False Then
      42. Console.WriteLine("[Aufgabe " & Nummer & " - EINE_ANTWORT]")
      43. Else
      44. Console.WriteLine("[Aufgabe " & Nummer & " - MEHRERE_ANTWORTEN]")
      45. End If
      46. 'Die gestellte Aufgabe ausgeben, oder was auch immer der Benutzer hier zu tun hat
      47. Console.WriteLine(ToDo)
      48. Console.WriteLine()
      49. 'Optionen aus dem Aufgabenarray über die Konsole ausgeben ...
      50. Dim ia As Integer = 0
      51. For Each item As String In Aufgaben
      52. If item.Length = 1 Then Exit For
      53. Console.Write("[" & ia + 1 & "]" & vbTab)
      54. Console.Write(item & vbNewLine)
      55. ia += 1
      56. Next
      57. '...und die Benutzereingaben empfangen
      58. Console.WriteLine()
      59. Console.Write("Wählen Sie Ihre Option> ") 'Eingaberompt
      60. Dim Eingabe As String = Console.ReadLine()
      61. 'Fall Leerzeichen enthalten sind, kommen die raus, damit die Eingaben schön über Komma in's
      62. 'Array eingelesen werden können
      63. Eingabe = Eingabe.Replace(" ", "")
      64. 'Falls es mehrere Optionen waren, in Array einlesen. Bei mehreren Optionen mit Komma trennen
      65. Dim MehrfachEingabe() As String = Eingabe.Split(",")
      66. 'Welche Aktion soll ausgeführt werden?
      67. For Each SOption As String In MehrfachEingabe
      68. If CInt(SOption) > Aufgaben.Length / 2 Then
      69. Console.ForegroundColor = ConsoleColor.Red
      70. Console.WriteLine("Fehlerhafte Eingabe, es standen nicht genügend Optionen zur Verfügung:")
      71. Else
      72. Console.ForegroundColor = ConsoleColor.Green
      73. End If
      74. Select Case SOption
      75. Case 1
      76. Console.WriteLine("Sie haben 1 eingegeben")
      77. Case 2
      78. Console.WriteLine("Sie haben 2 eingegeben")
      79. Case 3
      80. Console.WriteLine("Sie haben 3 eingegeben")
      81. Case Else
      82. Console.WriteLine("Unbekannte Option: " & SOption)
      83. End Select
      84. Next
      85. 'Schließlich das Ende der Abfrage
      86. Console.WriteLine(vbNewLine & vbNewLine & "Drücke Enter um [was auch immer]...")
      87. Console.ReadLine()
      88. 'Aktion...
      89. End Sub
      90. 'Um die Praxisbeispiele von oben direkt zu testen, einfach diese Sub entsprechend wie die obere Anpassen und hineinkopieren
      91. Sub Praxisbeispiel()
      92. 'Praxisbeispiel einfache Antwort
      93. 'Aufgabe("Gibt es unter Linux den Befehl ""rm""?", {{"Nein, nur unter Windows", "Ja", "Weiß nicht"}, {8, 1, 3}}, False, 1)
      94. 'Praxisbeispiel mehrfachantwort
      95. 'Aufgabe("Welches davon ist eine Schulnote?", {{"Sehr gut", "gut", "Mies", "Mangelhaft", "Genial"}, {21, 18, 112, 97, 4}}, False, 2)
      96. For Each SOption As String In "x"
      97. Select Case SOption
      98. Case 1
      99. Console.WriteLine("Richtig")
      100. Case 8
      101. Console.WriteLine("Nein, nicht mal unter Windows")
      102. Case 13
      103. Console.WriteLine("Das ist schlecht ...")
      104. Case 21, 18, 97
      105. Console.WriteLine("Richtig, die gibt es")
      106. Case 112, 5
      107. Console.WriteLine("Die gibt es nicht..")
      108. End Select
      109. Next
      110. End Sub
      111. End Module



      Ihr könnt hier nun noch einige Funktionen mehr einbauen, wie beispielsweise, die Fragen oder dergleichen aus einer Textdatei lesen, um den Nutzer sozusagen sein eigenes Quiz machen zu lassen. Was Ihr damit macht, ist mir egal, es steht jedem frei, den Code wie er lustig ist zu verändern, verbessern oder zu erweitern :)

      PS: Ich werde noch einige Beispielprogramme nachtragen(incl. SourceCode), wenn Ihr möchtet. Wenn nicht ... werde Ich es trotzdem tun xD



      link_275 :thumbup:
      Hello World