Projekt: Biblioteczka w C# dla początkujących

Prezentuję całkiem fajny projekt do napisania dla wszystkich, którzy uczą się programowania w C#. Będzie to coś w stylu archiwum domowej biblioteczki. W pliku przechowujemy listę książek, którą program wczytuje przy starcie, następnie możemy te książki usuwać z listy, dodawać nowe, wyszukiwać po trzech różnych parametrach, i ostatecznie zapisać zmodyfikowaną listę z powrotem do pliku.

Mamy więc prosty, ale w pełni funkcjonalny program konsolowy. Opcje:

  • wczytanie listy książek z pliku przy starcie
  • dodanie nowej książki
  • usunięcie książki z listy
  • wyświetlenie wszystkich książek
  • wyszukanie książki po tytule, autorze lub gatunku
  • zapisanie zmodyfikowanej listy

Zacznijmy od zdefiniowania naszej książki – tworzymy klasę Book.

Klasa książki ma kilka podstawowych parametrów, które ją opisują (autor, tytuł, liczba stron itp), konstruktor, który te pola inicjalizuje, oraz metodę BookInfo, która po prostu zwraca opis książki w pewnym formacie.

Przejdźmy teraz do początku programu, metody Main() – tu mamy zadeklarowaną zmienną command (będziemy jej używać do obsługi menu) i listę naszych książek (bookList). Następnie z pliku books.txt wczytujemy zawartość, czyli listę książek, na których będziemy mogli operować w programie (format pliku tekstowego poniżej). Opcja ReadAllLines powoduje wczytanie każdego wiersza z pliku do kolejnego elementu tablicy fBooks, dzięki czemu łatwiej potem nimi operować. (Tak po prawdzie, to należałoby sprawdzić czy plik istnieje przed próbą wczytania go… optymistycznie zakładam, że istnieje.) Kolejna rzecz, którą musimy zrobić, to rozbicie wiersza (elementu tablicy) na poszczególne składniki książki, które następnie posłużą nam do utworzenia nowego obiektu typu Book oraz dodania go do listy.

Gdy mamy już załadowane dane, możemy przejść do głównej pętli programu – będzie to pętla do…while, zawierająca całe menu oraz zdarzenia następujące po wybraniu konkretnej opcji.

Do dzieła więc – pierwsze linie kodu wewnątrz pętli to nasze menu (poniżej). Zwracam uwagę na drobny “ficzer” – przy opcji wyświetlania listy książek od razu podaję ile ich mamy na liście.

Teraz przechodzimy do oprogramowania kolejnych opcji.

Na początek dodawanie nowej książki do listy – nic trudnego, wystarczy pobrać od użytkownika informacje, a następnie na ich podstawie utworzyć na liście nowy obiekt książki.

Opcja numer 2 to zwykłe wyświetlenie elementów listy, korzystające z metody bookInfo() klasy Book.

Opcja numer 3 to zapisanie listy do pliku; zanim jednak to zrobimy, musimy “złożyć” dane w odpowiedni format. W tym celu tworzymy nową listę (właściwie to mogłaby być również tablica o ilości elementów bookList.Count), a następnie w pętli przechodzimy przez wszystkie książki, tworząc ciąg danych rozdzielony średnikiem. Opcja WriteAllLines powoduje zapisanie każdego elementu tablicy lub listy w osobnym wierszu (podobnie jak opcja ReadAllLines odczytuje po wierszu do tablicy).

Opcja numer 4 – wyszukiwarka. Najdłuższy kod, ale założenia są dość proste. Prosimy użytkownika o wpisanie szukanego elementu według podanego wzoru, przykładowo jeśli szukamy po tytule to “title Szukany Tytuł”. Następnie dzielimy otrzymany od użytkownika tekst po spacji na dwie części – spodziewamy się w pierwszym członie znaleźć kryterium wyszukiwania (autor, tytuł lub typ).  Tworzymy instrukcję switch, która dopasowuje otrzymany tekst z wytyczonymi przez nas kryteriami. Jeśli znajdzie dopasowanie, przegląda wszystkie książki w poszukiwaniu tych pasujących, i dodaje je do specjalnej listy result (nie wiemy ile tych wyników będzie). Jeśli książka zostanie znaleziona, zwiększamy też licznik count, informujący czy wyszukiwanie przyniosło jakieś rezultaty. Jeśli przyniosło, to wyświetlamy listę znalezionych książek, a jeśli nie (count == 0) to odpowiedni komunikat.

Opcja 5 to usunięcie książki z listy. Prosimy użytkownika o podanie tytułu, odnajdujemy odpowiedni element (lub elementy), a następnie usuwamy z wykorzystaniem metody RemoveAt(), która usuwa element na podstawie indeksu w liście. Liczymy też ile książek zostało usuniętych (count).

I to w zasadzie tyle. Na końcu mamy jeszcze obsługę komendy “exit” oraz klauzulę else, informującą o niepoprawnych danych wejściowych.

 

Można by tu jeszcze dołożyć kilka elementów (np możliwość edycji książki), poprawić to i owo (uodpornić program na użytkowników :)), ale nawet w tej postaci jest to całkiem fajna, działająca aplikacja. W sam raz na pierwszy w miarę kompletny projekt, wykorzystujący podstawowe elementy języka C#.