C# :: Aufgabe #67 :: Lösung #2
3 Lösungen

#67
Quiz mittels LINQ in einer Xml-Datei
Fortgeschrittener - C#
von Miako
- 17.09.2014 um 21:13 Uhr
Schreibe ein Quiz-Programm, welches seine Fragen und Antworten durch LINQ (XmlReader-Klasse ist tabu) aus einer Xml-Datei bezieht.
Die Xml-Datei soll frei erweiterbar sein, sofern ein vorgegebenes Schema eingehalten wird.
Das Programm soll die Xml-Datei auslesen und dem Benutzer die Fragen in eine zufällige Reinfolge ausgeben. Bereits verwendete Fragen sollen kein zweites mal an die Reihe kommen. Die Anzahl der möglichen Antworten bleibt euch überlassen. Natürlich soll geprüft werden, ob die Antwort des Benutzers korrekt ist. Zu guter Schluss soll die korrekte Antwort in der Xml-Datei angegeben werden können.
Viel Spaß beim Planen und schreiben. Ich freue mich auf eure Fragen und Lösungen!
Die Xml-Datei soll frei erweiterbar sein, sofern ein vorgegebenes Schema eingehalten wird.
Das Programm soll die Xml-Datei auslesen und dem Benutzer die Fragen in eine zufällige Reinfolge ausgeben. Bereits verwendete Fragen sollen kein zweites mal an die Reihe kommen. Die Anzahl der möglichen Antworten bleibt euch überlassen. Natürlich soll geprüft werden, ob die Antwort des Benutzers korrekt ist. Zu guter Schluss soll die korrekte Antwort in der Xml-Datei angegeben werden können.
Zitat:
Tipps und Hinweise
Am besten benutzt ihr für das Einlesen der Fragen und Antworten, sowie das Entfernen beantworteter Fragen ein Array, oder eine Liste.
Zum bestimmen der korrekten Antwort eignet sich ein Attribut für die jeweiligen Antwort in der Xml-Datei.
Viel Spaß beim Planen und schreiben. Ich freue mich auf eure Fragen und Lösungen!
#2

von daniel59 (4260 Punkte)
- 08.04.2016 um 11:46 Uhr
XML:
C#-Code
<?xml version="1.0" encoding="utf-8"?>
<Quiz>
<Frage Id="0" Richtig="A" Text="Welche Farbe hat der Himmel?" A="Blau" B="Grün" C="Braun" D="Rosa"/>
<Frage Id="1" Richtig="C" Text="Wie viel Räder hat ein Dreirad?" A="1" B="2" C="3" D="4"/>
</Quiz>

using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using System.Xml.Linq; namespace WPFQuiz { /// <summary> /// Interaktionslogik für MainWindow.xaml /// </summary> public partial class MainWindow : Window { static Random rnd = new Random(); XDocument doc; List<Question> questions; Question currentQuestion; public MainWindow() { InitializeComponent(); doc = XDocument.Load(@"Dateipfad"); questions = (from q in doc.Descendants("Frage") select new Question() { Id = Convert.ToInt32(q.Attribute("Id").Value), CorrectAnswer = q.Attribute("Richtig").Value, Text = q.Attribute("Text").Value, AnswerA = q.Attribute("A").Value, AnswerB = q.Attribute("B").Value, AnswerC = q.Attribute("C").Value, AnswerD = q.Attribute("D").Value }).ToList(); NextQuestion(); } private void NextQuestion() { int index = rnd.Next(0, questions.Count); currentQuestion = questions[index]; textBlockCount.Text = currentQuestion.Id.ToString(); textBlockFrage.Text = currentQuestion.Text; buttonA.Content = currentQuestion.AnswerA; buttonB.Content = currentQuestion.AnswerB; buttonC.Content = currentQuestion.AnswerC; buttonD.Content = currentQuestion.AnswerD; } private void EnableAll(bool enabled) { buttonA.IsEnabled = enabled; buttonB.IsEnabled = enabled; buttonC.IsEnabled = enabled; buttonD.IsEnabled = enabled; } private void button_Click(object sender, RoutedEventArgs e) { EnableAll(false); string button = ((Button)sender).Name.Substring(6, 1); if (button == currentQuestion.CorrectAnswer) { MessageBox.Show("Richtig"); } else { MessageBox.Show("Falsch! Richtig ist: " + currentQuestion.CorrectAnswer); } } private void buttonNext_Click(object sender, RoutedEventArgs e) { EnableAll(true); NextQuestion(); } } class Question { public int Id { get; set; } public string CorrectAnswer { get; set; } public string Text { get; set; } public string AnswerA { get; set; } public string AnswerB { get; set; } public string AnswerC { get; set; } public string AnswerD { get; set; } } }
Kommentare:
Für diese Lösung gibt es noch keinen Kommentar
Seite 1 von 0
1