DEV Community

Hussein Mahdi
Hussein Mahdi

Posted on

Building QuizTest — A WPF Quiz Application for Educational Institutions

Building QuizTest — A WPF Quiz Application for Educational Institutions

I'm excited to share QuizTest, a WPF desktop quiz application I built in C# and which is now actively used at Al-Mustaqbal University. What started as a small tool for a sports-college competition has grown into a flexible platform used by the College of Science's AI Department.

🔗 GitHub: github.com/Hu8MA/QuizeTest

The Problem I Wanted to Solve

Most quiz applications I came across fell into one of two categories: either they were heavy web-based platforms that required internet access and accounts, or they were rigid desktop tools where editing questions meant touching the source code. For classroom use and university events in Iraq, I needed something simpler. Instructors should be able to change questions on the fly without asking a developer, and the app should run offline on any Windows machine.

That's how QuizTest was born.

Tech Stack

The application is built on a deliberately minimal stack. It uses C# with WPF on .NET 6.0 for the desktop UI, and relies on ClosedXML for reading the Excel-based question bank. That's essentially it. No database, no server, no cloud dependency.

From v1.0 to v2.0 — A Lesson in Simplification

Version 1.0 was used in an inter-university competition hosted by the College of Sports at Al-Mustaqbal University, involving multiple Iraqi universities. It worked well, but it relied on Entity Framework and SQLite to store questions. Every time a professor wanted to update the question bank, someone had to edit the database or rebuild the project. It felt heavier than it needed to be.

Version 2.0 rethought the architecture. I removed the database entirely and replaced it with two simple files: Questions.xlsx for the question bank and Settings.txt for configuration. Any instructor can now open the Excel file, edit questions, save, and relaunch the app. No developer required. This version is currently in use by the Department of Artificial Intelligence.

How the Question Bank Works

Questions live in a plain spreadsheet with three columns: Id, Text, and Answer. For example:

Id Text Answer
1 Machine learning requires labeled data. FALSE
2 Python is an interpreted language. TRUE

The application loads the workbook at startup through QuestionLoader.cs, which uses ClosedXML to parse the rows into a list of question objects. From there, a random subset is selected based on the configured question count, so every quiz session feels fresh even with the same bank.

Version 1.0 was used for the sports department events at Al-Mustaqbal University, while version 2.0 was used for the artificial intelligence department competition events at the same university in 2026.

Configurable Settings Without Recompiling

The Settings.txt file keeps things refreshingly simple:

QuestionCount=20
TimePerQuestion=15
Enter fullscreen mode Exit fullscreen mode

SettingsLoader.cs reads this file at launch and applies the values to the quiz engine. Want a 10-question quiz with 30 seconds per question? Change two numbers and save. This small design decision has made the tool genuinely usable by non-technical staff.

Project Structure

The codebase stays intentionally flat and readable:

Quize/
├── Images/
├── ModelData.cs
├── QuestionLoader.cs
├── SettingsLoader.cs
├── MainWindow.xaml(.cs)
├── QuizWindow.xaml(.cs)
├── ResultWindow.xaml(.cs)
├── Questions.xlsx
└── Settings.txt
Enter fullscreen mode Exit fullscreen mode

Three windows handle the full user flow. MainWindow is the landing screen, QuizWindow runs the timed question-by-question experience with visual indicators, and ResultWindow displays the final score.

Getting Started

If you want to try it yourself, clone the repo and open Quize.sln in Visual Studio. Install the ClosedXML NuGet package, then build and run. You'll need .NET 6.0 or later on a Windows machine. Swap in your own questions by editing Questions.xlsx, and you're ready to go.

git clone https://github.com/Hu8MA/QuizeTest.git
Enter fullscreen mode Exit fullscreen mode

What's Next

I'd like to extend QuizTest with support for multiple-choice questions (the current version handles true/false), a richer result screen with per-question review, and possibly a simple question-editor UI for instructors who prefer not to work in Excel. I'm also considering a lightweight export feature so results can be saved as a report after each session.

Closing Thoughts

QuizTest is a reminder that sometimes the best upgrade is removing complexity rather than adding it. Dropping the database in v2.0 made the app smaller, faster, and dramatically easier for real users to maintain.

If you find the project useful, have ideas for features, or want to contribute, the repository is open and MIT-licensed. Issues and pull requests are very welcome.

👉 Repository: github.com/Hu8MA/QuizeTest

Thanks for reading — I'd love to hear your thoughts in the comments.

Top comments (0)