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
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
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
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)