QuizApp - bu C# tilida yozilgan va Spectre.Console kutubxonasi yordamida terminal interfeysga ega boโlgan interaktiv quiz (test) tizimidir. Ushbu dastur ikki asosiy muhitda ishlaydi: Teacher Mode va Student Mode.
๐ Models
โ โโโ Question.cs
โ โโโ McqQuestion.cs
โ โโโ TrueFalseQuestion.cs
โ โโโ ShortAnswerQuestion.cs
โ โโโ QuizMeta.cs
๐ Services
โ โโโ QuizBuilder.cs
โ โโโ QuizManager.cs
โ โโโ QuizRunner.cs
๐ Helpers
โ โโโ InputHelper.cs
๐ Data
โ โโโ Quizzes/
โ โโโ *.json
๐ Program.cs
- โ
Yangi test yaratish (
Create Quiz) - โ Savollar qoโshish (MCQ, True/False, Short Answer)
- โ Savollarga vaqt chegarasi oโrnatish
- โ JSON formatda saqlash
- โ
Testni koโrish, faollashtirish/yopish, oโchirish (
Manage Quizzes)
- โ Faol testlar roโyxatidan tanlash
- โ Har bir savolga javob berish (interaktiv)
- โ Savol turi boโyicha ball baholash
- โ Vaqt tugaganda yarim ball berish
- โ Umumiy bahoni koโrsatish (% va Pass/Fail)
- C# 10 / .NET 6+ โ zamonaviy C# sintaksisi va .NET platformasi asosida qurilgan.
- Spectre.Console โ foydalanuvchiga interaktiv va rangli konsol interfeysi taqdim etish uchun ishlatilgan.
- System.Text.Json โ quiz va savollarni
.jsonformatida saqlash va oโqish uchun ishlatilgan. - System.IO โ fayllarni yaratish, oโchirish, saqlash va oโqish amallarini bajarish uchun.
- Polymorphic JSON Serialization โ
QuestionklasiningMCQ,TrueFalse,ShortAnswermerosxoโrlar bilanJsonPolymorphicorqali moslashuvchan serializatsiya.
Quyidagi kod yangi QuizMeta obyektini JSON faylga saqlash jarayonini koโrsatadi. Fayl nomi avtomatik tarzda sarlavhaga asoslanadi va mavjud boโlsa, ustiga yoziladi:
public static void SaveQuiz(QuizMeta quiz, string quizzesDirectory)
{
if (quiz == null || string.IsNullOrWhiteSpace(quiz.Title))
{
AnsiConsole.MarkupLine("[red]Invalid quiz data![/]");
return;
}
string sanitizedTitle = string.Join("_", quiz.Title.Split(Path.GetInvalidFileNameChars()));
string filePath = Path.Combine(quizzesDirectory, sanitizedTitle + ".json");
var options = new JsonSerializerOptions
{
WriteIndented = true,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull,
Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
try
{
string json = JsonSerializer.Serialize(quiz, options);
File.WriteAllText(filePath, json);
AnsiConsole.MarkupLine("[green]Quiz saved successfully![/]");
}
catch (Exception ex)
{
AnsiConsole.MarkupLine($"[red]Error saving quiz: {ex.Message}[/]");
}
}- โ
Fayl nomini tozalash:
Path.GetInvalidFileNameChars()yordamida fayl nomidan yaroqsiz belgilar olib tashlanadi. - โ
JSON formatga mos ravishda serializatsiya qilish:
System.Text.Json.JsonSerializeryordamidaQuizMetaobyekt JSON formatga oโtkaziladi. - โ
Faylga yozish:
File.WriteAllText()orqali JSON fayl diskka yoziladi. - โ
Foydalanuvchiga natijani koโrsatish:
Spectre.Consoleorqali saqlash jarayoni muvaffaqiyatli yoki xato boโlganini rangli terminal xabarlari orqali bildiriladi.
Bu funksiya
QuizBuilder.csfaylining oxirida joylashgan va oโqituvchi rejimidagi "Save Quiz" jarayonida ishlatiladi.
flowchart LR
subgraph Teacher_Mode
Program --> QuizBuilder
QuizBuilder --> QuizManager
end
subgraph Student_Mode
Program --> QuizRunner
end
QuizBuilder -->|Creates| QuizMeta
QuizManager -->|Manages| QuizMeta
QuizRunner -->|Runs| QuizMeta
QuizMeta --> Question
Question --> McqQuestion
Question --> TrueFalseQuestion
Question --> ShortAnswerQuestion
Har bir test fayli Data/Quizzes/ papkada .json formatda saqlanadi. Savollar type maydoni bilan aniqlanadi:
{
"Title": "C# Basics",
"IsActive": true,
"Questions": [
{
"type": "MCQ",
"Prompt": "Which keyword defines a constant in C#?",
"Options": {
"A": "static",
"B": "const",
"C": "readonly",
"D": "final"
},
"Answer": "B",
"TimeLimitSeconds": 15
}
]
}Select application mode:
> Teacher Mode
Student Mode
Exit
- ๐น Interaktiv quiz yaratish va bajarish imkoniyati
- ๐น JSON asosida test saqlash va oโqish
- ๐น Vaqtli savollar va baholash tizimi
- ๐น C# OOP, fayl bilan ishlash, Spectre.Console tajribasi
InputHelper.cs sinfi foydalanuvchi kirituvlarini validatsiya qilish, tanlovlar kiritish, vaqt soโrash, va matn uzunligini cheklash funksiyalarini bajaradi. Masalan:
public static bool AskConfirmation(string message)
{
return AnsiConsole.Prompt(
new ConfirmationPrompt($"[yellow]{message} (Yes/No)?[/]")
);
}Ushbu loyiha C# asoslari, terminal ilova yaratish va OOP konsepsiyalarini mustahkamlash uchun zoโr amaliy tajriba beradi. ๐จโ๐ป