Struktura projektu
Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 62 z 70.
Wyzwanie
ŁatwyPrzygotujmy podstawy projektu Library System! Utworzysz podstawową strukturę plików, która w kolejnych lekcjach rozwinie się w kompletną aplikację do zarządzania biblioteką.
Rozmieścisz kod w czterech plikach, z których każdy będzie pełnić określoną funkcję:
Book.cs: Ten plik będzie zawierać model Book. Na razie utwórz klasęBookw przestrzeni nazwLibrarySystemz trzema automatycznie implementowanymi właściwościami:Title(string),Author(string) iIsAvailable(bool, domyślnie ustawioną natrue). Dodaj konstruktor, który przyjmuje tytuł i autora jako parametry.User.cs: Ten plik będzie zawierać model User. Utwórz klasęUserw tej samej przestrzeni nazw, z dwiema właściwościami:Name(string) iMemberId(int). Dodaj konstruktor, który przyjmuje obie wartości.Library.cs: To tutaj będzie znajdować się główna logika. Utwórz klasęLibraryz właściwościąName(string) i konstruktorem, który ją ustawia. Dodaj metodę o nazwieGetInfo(), która zwraca ciąg znaków w formacie"{Name} Library System Initialized".Program.cs: Połącz tutaj wszystkie elementy. To punkt wejścia programu, w którym utworzysz instancje klas i sprawdzisz, czy struktura działa poprawnie.
Otrzymasz trzy dane wejściowe:
- Nazwę biblioteki
- Informacje o książce w formacie
title|author - Informacje o użytkowniku w formacie
name|memberId
Utwórz instancję Library z podaną nazwą, instancję Book z podanym tytułem i autorem oraz instancję User z podanym imieniem i nazwiskiem oraz identyfikatorem użytkownika. Następnie wypisz trzy wiersze:
- Wynik wywołania
GetInfo()dla biblioteki - Informacje o książce w formacie
Book: {Title} by {Author} - Available: {IsAvailable} - Informacje o użytkowniku w formacie
User: {Name} (ID: {MemberId})
Na przykład, jeśli dane wejściowe to:
City Central
The Great Gatsby|F. Scott Fitzgerald
Alice Johnson|1001Wynik powinien być następujący:
City Central Library System Initialized
Book: The Great Gatsby by F. Scott Fitzgerald - Available: True
User: Alice Johnson (ID: 1001)Ta struktura jest zgodna z zasadą pojedynczej odpowiedzialności — każdy plik odpowiada za jeden konkretny zakres. W kolejnych lekcjach rozbudujesz te klasy o logikę wypożyczania, funkcję wyszukiwania i pełny interfejs konsolowy!
Spróbuj swoich sił
using System;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// Odczytaj dane wejściowe
string libraryName = Console.ReadLine();
string bookInput = Console.ReadLine();
string userInput = Console.ReadLine();
// Przeanalizuj dane wejściowe książki (format: title|author)
string[] bookParts = bookInput.Split('|');
string bookTitle = bookParts[0];
string bookAuthor = bookParts[1];
// Przeanalizuj dane wejściowe użytkownika (format: name|memberId)
string[] userParts = userInput.Split('|');
string userName = userParts[0];
int memberId = Convert.ToInt32(userParts[1]);
// TODO: Utwórz instancję Library z nazwą biblioteki
// TODO: Utwórz instancję Book z tytułem i autorem
// TODO: Utwórz instancję User z imieniem i identyfikatorem członka
// TODO: Wyświetl informacje o bibliotece za pomocą GetInfo()
// TODO: Wyświetl informacje o książce w formacie: Book: {Title} by {Author} - Available: {IsAvailable}
// TODO: Wyświetl informacje o użytkowniku w formacie: User: {Name} (ID: {MemberId})
}
}
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Podstawy programowania obiektowego
Pliki zewnętrznePrzestrzenie nazw i dyrektywyWprowadzenie do klas i obiektówSłowo kluczowe „this”Metody i parametryPola a właściwościKonstruktoryInicjalizatory obiektówPodsumowanie — prosty kalkulator4Dziedziczenie
Podstawowa składnia dziedziczenia (:)Słowo kluczowe 'base'Słowa kluczowe virtual i overrideKlasy sealedBazowa klasa 'object'Powtórzenie – hierarchia pracowników7Zaawansowane funkcje
Przeciążanie operatorówIndeksery (this[])Nadpisywanie ToString()Metody rozszerzającePodsumowanie – własna lista2Właściwości i składowe statyczne
Właściwości automatyczneWłaściwości tylko do odczytu i zapisuPola i metody statyczneKlasy statyczneSkładowe z ciałem wyrażeniowym5Polimorfizm i interfejsy
Polimorfizm czasu kompilacji a czasu wykonaniaInterfejs a klasa abstrakcyjnaWiele interfejsówJawne implementowanie interfejsówRzutowanie w górę i w dółPowtórka — kalkulator kształtów8Zaawansowane koncepcje OOP
Kompozycja zamiast dziedziczeniaTypy generyczne (klasy i metody)Delegaty i zdarzeniaAtrybuty i refleksjaIDisposable i instrukcja usingPodstawy wstrzykiwania zależności11Wzorce projektowe, część 2
Wzorzec poleceniaWzorzec adapteraWzorzec dekoratoraWzorzec metody szablonowejWzorzec stanuWzorzec kompozytu3Architektura klas
Dane instancji a dane statyczneSłowa kluczowe 'readonly' i 'const'Pola zapasowePowtórzenie — menedżer kont bankowych6Hermetyzacja
Modyfikatory dostępuWłaściwości w hermetyzacjiImplementacja ukrywania danychWzorce niezmiennościPowtórka — dane studentów9Argumenty zmiennej liczby
Słowo kluczowe „params”Parametry opcjonalneArgumenty nazwanePrzeciążanie metod12Projekt: System biblioteczny
Struktura projektuModele książki i użytkownikaLogika systemu wypożyczeńWyszukiwanie za pomocą LINQInterfejs konsolowy / interfejs administratoraTesty jednostkowe (NUnit/xUnit)Poćwicz samodzielnie: Kompilator C# online