Ödünç Alma Sistemi Mantığı
Coddy'nin C# Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 64 / 70.
Görev
KolayKütüphane Sistemini, temel ödünç alma mantığını uygulayarak hayata geçirelim! Kitaplar ve kullanıcılar arasındaki koordinasyonu sağlayan merkezi bir sistem oluşturacak, ödünç alma limitleri gibi kütüphane kurallarını uygulayacak ve kitapların yalnızca mevcut olduklarında ödünç alınabilmesini sağlayacaksın.
Mevcut dört dosyalı yapını geliştirmeye devam edeceksin:
Book.cs: Önceki derstekiId,Title,AuthorveIsAvailableözelliklerine, ayrıcaBorrow()veReturn()metotlarına sahip Book sınıfını koru.User.cs:Name,MemberId,BorrowedCountözelliklerine ve ödünç alınan kitapları yönetmeye yarayan metotlara sahip User sınıfını koru. Bir kullanıcının aynı anda ödünç alabileceği maksimum kitap sayısını temsil eden ve 3 değerine ayarlanmışMaxBookssabitini ekle. Yalnızca kullanıcıCanBorrow()değerinden daha az sayıda kitap ödünç aldıysa true döndürenMaxBooksmetodunu ekle.Library.cs: Ödünç alma sistemi mantığının bir araya geldiği yer burasıdır. Library sınıfında kitap ve kullanıcı koleksiyonlarıyla bunları eklemeye yarayan metotlar bulunmalıdır. İki temel metot uygula:BorrowBook(string bookId, int memberId)- Ödünç alma sürecini koordine eder. Kitabın mevcut olup olmadığını, kullanıcının mevcut olup olmadığını, kitabın müsait olup olmadığını ve kullanıcının daha fazla kitap ödünç alıp alamayacağını kontrol etmelidir. Her hata durumu veya başarı için uygun mesajları döndür.ReturnBook(string bookId, int memberId)- İade işlemini gerçekleştirmeden önce kullanıcının ilgili kitaba gerçekten sahip olduğunu doğrulayarak iadeleri yönetir.
Program.cs: Kütüphane işlemlerini gerçekleştir ve sonuçları görüntüle.
BorrowBook metodun duruma göre şu mesajları döndürmelidir:
Book not found- kitap kimliği mevcut olmadığındaUser not found- üye kimliği mevcut olmadığında{Title} is not available- kitap zaten ödünç alınmış olduğunda{Name} has reached the borrowing limit- kullanıcı zaten 3 kitaba sahip olduğunda{Name} borrowed {Title}- başarılı ödünç alma işleminde
ReturnBook metodun şunları döndürmelidir:
Book not foundveyaUser not found- geçersiz kimlikler için{Name} did not borrow {Title}- kullanıcı sahip olmadığı bir kitabı iade etmeye çalıştığında{Name} returned {Title}- başarılı iade işleminde
Şu girdileri alacaksın:
- Kütüphane adı
- Kitap sayısı, ardından
id|title|authorbiçiminde her kitap - Kullanıcı sayısı, ardından
name|memberIdbiçiminde her kullanıcı - İşlem sayısı, ardından
action|bookId|memberIdbiçiminde her işlem
Her işlemin sonucunu kendi satırında yazdır.
Örneğin girdiler şöyleyse:
Central Library
4
B001|The Hobbit|Tolkien
B002|1984|Orwell
B003|Dune|Herbert
B004|Foundation|Asimov
2
Alice|101
Bob|102
6
borrow|B001|101
borrow|B002|101
borrow|B003|101
borrow|B004|101
borrow|B001|102
return|B002|101Çıktı şöyle olmalıdır:
Alice borrowed The Hobbit
Alice borrowed 1984
Alice borrowed Dune
Alice has reached the borrowing limit
The Hobbit is not available
Alice returned 1984Library sınıfının koordinatör olarak nasıl davrandığına dikkat et: işlemlere izin vermeden önce tüm koşulları doğrular ve Book ile User sınıflarını kendi sorumluluklarına odaklı tutar. Bu ayrım, kodunun bakımını ve test edilmesini kolaylaştırır!
Kendin dene
using System;
using System.Collections.Generic;
namespace LibrarySystem
{
class Program
{
public static void Main(string[] args)
{
// Kütüphane adını oku
string libraryName = Console.ReadLine();
// Kütüphane adıyla bir Library örneği oluştur
Library library = new Library(libraryName);
// Kitap sayısını oku
int numBooks = Convert.ToInt32(Console.ReadLine());
// Kitapları oku ve ekle
for (int i = 0; i < numBooks; i++)
{
string bookInput = Console.ReadLine();
string[] bookParts = bookInput.Split('|');
string bookId = bookParts[0];
string bookTitle = bookParts[1];
string bookAuthor = bookParts[2];
Book book = new Book(bookId, bookTitle, bookAuthor);
library.AddBook(book);
}
// Kullanıcı sayısını oku
int numUsers = Convert.ToInt32(Console.ReadLine());
// Kullanıcıları oku ve kaydet
for (int i = 0; i < numUsers; i++)
{
string userInput = Console.ReadLine();
string[] userParts = userInput.Split('|');
string userName = userParts[0];
int memberId = Convert.ToInt32(userParts[1]);
User user = new User(userName, memberId);
library.RegisterUser(user);
}
// İşlem sayısını oku
int numOperations = Convert.ToInt32(Console.ReadLine());
// İşlemleri işle
for (int i = 0; i < numOperations; i++)
{
string operationInput = Console.ReadLine();
string[] opParts = operationInput.Split('|');
string action = opParts[0];
string bookId = opParts[1];
int memberId = Convert.ToInt32(opParts[2]);
if (action == "borrow")
{
string result = library.BorrowBook(bookId, memberId);
Console.WriteLine(result);
}
else if (action == "return")
{
string result = library.ReturnBook(bookId, memberId);
Console.WriteLine(result);
}
}
}
}
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1OOP Temelleri
Harici Dosyalarİsim Alanları ve YönergelerSınıf ve Nesnelere Giriş'this' Anahtar KelimesiMetotlar ve ParametrelerAlanlar ve ÖzelliklerYapıcı MetotlarNesne BaşlatıcılarÖzet - Basit Hesap Makinesi4Kalıtım
Temel Kalıtım (:) Sözdizimi'base' Anahtar KelimesiVirtual ve Override Anahtar KelimeleriSealed Sınıflar'object' Temel SınıfıÖzet - Çalışan Hiyerarşisi7İleri Düzey Özellikler
Operatör Aşırı Yüklemeİndeksleyiciler (this[])ToString() Geçersiz KılmaGenişletme MetotlarıÖzet - Özel Liste10Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişThread-Safe SingletonFactory KalıbıObserver Kalıbı (Olaylar)Strategy Kalıbı2Özellikler ve Statik Üyeler
Otomatik Uygulanan ÖzelliklerSadece Okunur/Yazılır ÖzelliklerStatik Alanlar ve MetotlarStatik Sınıflarİfade Gövdeli Üyeler5Polimorfizm ve Arayüzler
Derleme vs Çalışma Zamanı PolimorfizmiArayüz vs Soyut SınıfÇoklu ArayüzlerBelirgin ArayüzlerUpcasting ve DowncastingÖzet - Şekil Hesaplayıcı8İleri Düzey OOP Kavramları
Kalıtım yerine KompozisyonGenerics (Sınıflar ve Metotlar)Delegates ve EventlerAttributes ve ReflectionIDisposable ve using İfadesiDependency Injection Temelleri11Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit Kalıbı3Sınıf Mimarisi
Örnek vs Statik Veri'readonly' ve 'const' Anahtar KelimeleriDestekleyici Alanlar (Backing Fields)Özet - Banka Hesabı Yöneticisi6Kapsülleme
Erişim BelirleyicilerKapsülleme için ÖzelliklerVeri Gizleme UygulamasıDeğişmezlik KalıplarıÖzet - Öğrenci Kayıtları9Değişken Argümanlar
'params' Anahtar Kelimesiİsteğe Bağlı Parametrelerİsimlendirilmiş ArgümanlarMetot Aşırı Yükleme12Proje: Kütüphane Sistemi
Proje YapısıKitap ve Kullanıcı ModelleriÖdünç Alma Sistemi MantığıArama için LINQKonsol Arayüzü / Yönetici ArayüzüBirim Testi (NUnit/xUnit)Kendi başına pratik yap: Online C# derleyicisi