Menu
Coddy logo textTech

Ö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.

challenge icon

Görev

Kolay

Temel ö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 dersteki Id, Title, Author ve IsAvailable özelliklerinin yanı sıra Borrow() ve Return() 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 bir MaxBooks sabiti ekleyin. Kullanıcının yalnızca MaxBooks değerinden daha az kitap ödünç almış olması durumunda true döndüren bir CanBorrow() 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ığında
  • User 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 found veya User 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|author formatında her bir kitap
  • Kullanıcı sayısı, ardından name|memberId formatında her bir kullanıcı
  • İşlem sayısı, ardından action|bookId|memberId formatı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 1984

Library 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