Stwórz Prosty Tracker Wydatków w C# – Idealny Projekt dla Początkujących Programistów!

Czy jesteś początkującym programistą i szukasz projektu, który pomoże ci rozwinąć umiejętności kodowania? W tym poradniku pokażemy, jak stworzyć prostą aplikację konsolową do śledzenia wydatków w C#. To doskonały sposób, aby poznać kluczowe koncepcje programistyczne, takie jak separacja odpowiedzialnościwalidacja danych i czytelna organizacja kodu.

Po zakończeniu tego tutoriala będziesz mieć funkcjonalną aplikację, która pozwala użytkownikom:

  • Dodawać wydatki z opisem i kwotą
  • Przeglądać listę wszystkich wydatków
  • Obliczać łączną sumę wydatków

Zaczynajmy!


Dlaczego Ten Projekt Jest Idealny dla Początkujących?

✅ Przejrzysta Struktura: 
Aplikacja jest podzielona na trzy główne klasy, z których każda ma jedno zadanie.
✅ Obsługa Błędów: 
Nauczysz się, jak walidować dane wejściowe i radzić sobie z błędami.
✅ Dobre Praktyki: 
Projekt opiera się na zasadach takich jak Single Responsibility Principle (SRP) i Hermetyzacja.
✅ Czytelny Kod: 
Prosty i dobrze sformatowany kod, który łatwo zrozumieć i modyfikować.


Kluczowe Funkcje Aplikacji

  1. Klasa Expense
    • Reprezentuje pojedynczy wydatek z opisem i kwotą.
    • Zapewnia niezmienność danych i waliduje wprowadzone wartości.
  2. Klasa ExpenseManager
    • Zarządza listą wydatków i odpowiada za logikę biznesową.
    • Hermetyzuje dane i udostępnia metody do dodawania wydatków oraz obliczania sumy.
  3. Klasa ExpenseUI
    • Obsługuje interakcję z użytkownikiem poprzez menu konsolowe.
    • Oddziela interfejs użytkownika od logiki biznesowej.

Krok po Kroku: Implementacja

Krok 1: Tworzymy Klasę Expense

Klasa Expense reprezentuje pojedynczy wydatek. Zapewnia niezmienność danych i waliduje wprowadzone wartości:

class Expense
{
    public string Description { get; }
    public decimal Amount { get; }

    public Expense(string description, decimal amount)
    {
        if (string.IsNullOrWhiteSpace(description))
            throw new ArgumentException("Opis wydatku nie może być pusty.");

        if (amount <= 0)
            throw new ArgumentException("Kwota musi być większa niż zero.");

        Description = description;
        Amount = amount;
    }
}

Krok 2: Implementacja Klasy ExpenseManager

Klasa ExpenseManager zarządza listą wydatków i udostępnia metody do dodawania wydatków oraz obliczania sumy:

class ExpenseManager
{
    private List<Expense> expenses = new List<Expense>();

    public void AddExpense(string description, decimal amount)
    {
        expenses.Add(new Expense(description, amount));
    }

    public decimal GetTotalExpenses()
    {
        return expenses.Sum(expense => expense.Amount);
    }

    public List<Expense> GetExpenses()
    {
        return expenses;
    }
}

Krok 3: Budowa Klasy ExpenseUI

Klasa ExpenseUI odpowiada za interakcję z użytkownikiem i wyświetlanie menu do dodawania oraz przeglądania wydatków:

class ExpenseUI
{
    private ExpenseManager manager = new ExpenseManager();

    public void Run()
    {
        while (true)
        {
            Console.WriteLine("\nWybierz opcję:");
            Console.WriteLine("1 - Dodaj wydatek");
            Console.WriteLine("2 - Pokaż wydatki");
            Console.WriteLine("3 - Wyjście");
            Console.Write("Twój wybór: ");

            string choice = Console.ReadLine();

            switch (choice)
            {
                case "1":
                    AddExpense();
                    break;
                case "2":
                    ShowExpenses();
                    break;
                case "3":
                    Console.WriteLine("Do zobaczenia!");
                    return;
                default:
                    Console.WriteLine("Niepoprawny wybór, spróbuj ponownie.");
                    break;
            }
        }
    }

    private void AddExpense()
    {
        Console.Write("Podaj opis wydatku: ");
        string description = Console.ReadLine();

        Console.Write("Podaj kwotę wydatku: ");
        if (decimal.TryParse(Console.ReadLine(), out decimal amount))
        {
            manager.AddExpense(description, amount);
            Console.WriteLine("Wydatek dodany pomyślnie!");
        }
        else
        {
            Console.WriteLine("Niepoprawna kwota!");
        }
    }

    private void ShowExpenses()
    {
        var expenses = manager.GetExpenses();

        if (expenses.Count == 0)
        {
            Console.WriteLine("Brak zapisanych wydatków.");
            return;
        }

        Console.WriteLine("\nLista wydatków:");
        foreach (var expense in expenses)
        {
            Console.WriteLine($"{expense.Description}: {expense.Amount:C}");
        }

        Console.WriteLine($"Łączna suma wydatków: {manager.GetTotalExpenses():C}");
    }
}

Krok 4: Uruchomienie Programu

Klasa Program jest punktem startowym aplikacji:

class Program
{
    static void Main()
    {
        ExpenseUI ui = new ExpenseUI();
        ui.Run();
    }
}

Dlaczego Ten Kod Jest Przyjazny dla Początkujących?

  • Separacja Odpowiedzialności: Każda klasa ma jedno zadanie, co ułatwia zrozumienie i utrzymanie kodu.
  • Obsługa Błędów: Poprawna walidacja danych wejściowych zapewnia, że aplikacja radzi sobie z nieprawidłowymi danymi.
  • Czytelny i Czysty Kod: Kod jest dobrze zorganizowany i zgodny z najlepszymi praktykami.

Gotowy, aby Stworzyć Własny Tracker Wydatków?

Ten projekt to świetny sposób na praktykę programowania w C# oraz naukę zasad projektowania oprogramowania. Niezależnie od tego, czy jesteś początkującym, czy chcesz odświeżyć swoje umiejętności, ten tutorial zapewnia solidne podstawy do tworzenia bardziej złożonych aplikacji w przyszłości.

Wypróbuj i podziel się swoimi wynikami w komentarzach!


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *