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ści, walidacja 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
- Klasa Expense
- Reprezentuje pojedynczy wydatek z opisem i kwotą.
- Zapewnia niezmienność danych i waliduje wprowadzone wartości.
- 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.
- 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!