Ö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
KolayTemel ödünç alma mantığını uygulayarak Kütüphane Sisteminizi hayata geçirelim! Kitaplar ve kullanıcılar arasında koordinasyon sağlayan, ödünç alma limitleri gibi kütüphane kurallarını uygulayan ve kitapların yalnızca müsait olduklarında ödünç alınabilmesini sağlayan merkezi bir sistem oluşturacaksınız.
Mevcut dört dosyalı yapınız üzerinden devam edeceksiniz:
Book.cs: Önceki derstekiId,Title,AuthorveIsAvailableözelliklerinin yanı sıraBorrow()veReturn()metotlarını içeren Book sınıfınızı koruyun.User.cs:Name,MemberId,BorrowedCountözelliklerini ve ödünç alınan kitapları yöneten metotları içeren User sınıfınızı koruyun. Bir kullanıcının aynı anda ödünç alabileceği maksimum kitap sayısını temsil eden, değeri 3 olan birMaxBookssabiti ekleyin. Kullanıcının yalnızcaMaxBooksdeğerinden daha az kitap ödünç almış olması durumunda true döndüren birCanBorrow()metodu ekleyin.Library.cs: Ödünç alma sistemi mantığınızın birleştiği yer burasıdır. Library sınıfınız kitap ve kullanıcı koleksiyonlarına ve bunları eklemek için metotlara sahip olmalıdır. İki ana metodu uygulayın:BorrowBook(string bookId, int memberId)- Ödünç alma sürecini koordine eder. Kitabın var olup olmadığını, kullanıcının var 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 başarısızlık durumu veya başarı için uygun mesajları döndürün.ReturnBook(string bookId, int memberId)- İade işlemini gerçekleştirmeden önce kullanıcının gerçekten kitaba sahip olduğunu doğrulayarak iadeleri yönetir.
Program.cs: Kütüphane işlemlerini işleyin ve sonuçları görüntüleyin.
BorrowBook metodunuz duruma göre şu mesajları döndürmelidir:
Book not found- kitap ID'si mevcut olmadığındaUser not found- üye ID'si mevcut olmadığında{Title} is not available- kitap zaten ödünç alınmışsa{Name} has reached the borrowing limit- kullanıcı zaten 3 kitaba sahipse{Name} borrowed {Title}- başarılı ödünç alma durumunda
ReturnBook metodunuz şunları döndürmelidir:
Book not foundveyaUser not found- geçersiz ID'ler 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 durumunda
Aşağıdaki girdileri alacaksınız:
- Kütüphane adı
- Kitap sayısı, ardından
id|title|authorformatında her bir kitap - Kullanıcı sayısı, ardından
name|memberIdformatında her bir kullanıcı - İşlem sayısı, ardından
action|bookId|memberIdformatında her bir işlem
Her işlemin sonucunu kendi satırına yazdırın.
Örneğin, girdiler şunlarsa:
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 nasıl bir koordinatör görevi gördüğüne dikkat edin; işlemlere izin vermeden önce tüm koşulları doğrular, Book ve User sınıflarınızın kendi sorumluluklarına odaklanmasını sağlar. Bu ayrım, kodunuzun 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