Skip to content

Instantly share code, notes, and snippets.

@AbduvaliMamatov
Last active July 10, 2025 19:51
Show Gist options
  • Select an option

  • Save AbduvaliMamatov/78e4aaa9cccfac2912ab709d899d68a8 to your computer and use it in GitHub Desktop.

Select an option

Save AbduvaliMamatov/78e4aaa9cccfac2912ab709d899d68a8 to your computer and use it in GitHub Desktop.
My First Console Application Project (QuizApp)

๐ŸŽ“ QuizApp Console - C# Terminal-Based Quiz System

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.


๐Ÿ“‚ Project Structure

๐Ÿ“ 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

๐Ÿ”ง Features

๐Ÿ‘จโ€๐Ÿซ Teacher Mode

  • โœ… 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)

๐Ÿ‘จโ€๐ŸŽ“ Student Mode

  • โœ… 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)

๐ŸŒ Technologies Used

  • 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 .json formatida saqlash va oโ€˜qish uchun ishlatilgan.
  • System.IO โ€“ fayllarni yaratish, oโ€˜chirish, saqlash va oโ€˜qish amallarini bajarish uchun.
  • Polymorphic JSON Serialization โ€“ Question klasining MCQ, TrueFalse, ShortAnswer merosxoโ€˜rlar bilan JsonPolymorphic orqali moslashuvchan serializatsiya.

๐Ÿ“Œ Example Code Snippet

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}[/]");
    }
}

Ushbu kod quyidagilarni oโ€˜z ichiga oladi:

  • โœ… Fayl nomini tozalash: Path.GetInvalidFileNameChars() yordamida fayl nomidan yaroqsiz belgilar olib tashlanadi.
  • โœ… JSON formatga mos ravishda serializatsiya qilish: System.Text.Json.JsonSerializer yordamida QuizMeta obyekt JSON formatga oโ€˜tkaziladi.
  • โœ… Faylga yozish: File.WriteAllText() orqali JSON fayl diskka yoziladi.
  • โœ… Foydalanuvchiga natijani koโ€˜rsatish: Spectre.Console orqali saqlash jarayoni muvaffaqiyatli yoki xato boโ€˜lganini rangli terminal xabarlari orqali bildiriladi.

Bu funksiya QuizBuilder.cs faylining oxirida joylashgan va oโ€˜qituvchi rejimidagi "Save Quiz" jarayonida ishlatiladi.


๐Ÿง  Design Overview

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
Loading

๐Ÿงพ JSON Format

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
    }
  ]
}

๐Ÿ“Œ Example Screenshot (CLI)

Select application mode:
> Teacher Mode
  Student Mode
  Exit

๐Ÿ“ฃ Summary

  • ๐Ÿ”น 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

๐Ÿ’ก Tip

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)?[/]")
    );
}

๐Ÿ Finish

Ushbu loyiha C# asoslari, terminal ilova yaratish va OOP konsepsiyalarini mustahkamlash uchun zoโ€˜r amaliy tajriba beradi. ๐Ÿ‘จโ€๐Ÿ’ป


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment