CodeBlanks Logo Icon CodeBlanks

Ödünç verme

checkout ve return metotlarıyla ödünç akışını yazarsın.

Ödünç verme

Kütüphanenin temel işlevi ödünç vermedir. checkout(int idx) metodu belirli bir kitabı ödünç verir: önce indeks geçerli mi ve kitap müsait mi diye bakar, sonra borrowed[idx] değerini true yapar ve true döndürür.

İki koşul kontrol edilir: idx < 0 || idx >= (int)books.size() ile sınırların dışı, borrowed[idx] ile zaten ödünç verilmiş. Her iki durumda da false döner. Bu tasarımla aynı kitap iki kez ödünç verilemez. borrowed vektörü addBook sırasında false olarak başlatılır.

Müsaitlik kontrolü

checkout metodu iki durumda false döndürür: geçersiz indeks veya zaten ödünç verilmiş kitap. Bu sayede çağıran kod sonuca göre davranabilir. if (lib.checkout(0)) ile ödünç verme başarılıysa bir mesaj yazdırırsın.

Önceki dersin Library sınıfını alıp checkout metodunu ekleyeceğiz. borrowed vektörü zaten addBook sırasında false olarak başlatılıyordu. Bu yüzden yeni bir alan eklemeye gerek yok; yalnızca yeni bir metot ekleriz. Bu, birikimli tasarımın gücüdür.

Uygulama checkout metodunu ekle

Önceki dersin Book ve Library sınıflarını al. Library'ye bool checkout(int idx) metodu ekle: geçersiz indekste veya zaten ödünç verilmişse false döndürür, değilse borrowed[idx] = true yapıp true döndürür. main içinde 0. kitabı ödünç ver ve başarılıysa "ödünç" yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>
#include <vector>

class Book {
private:
    std::string title;
    std::string author;
public:
    Book(std::string t, std::string a) : title(t), author(a) {}
    std::string getTitle() const { return title; }
    std::string getAuthor() const { return author; }
};

class Library {
private:
    std::vector<Book> books;
    std::vector<bool> borrowed;
public:
    void addBook(const Book& b) { books.push_back(b); borrowed.push_back(false); }
    size_t count() const { return books.size(); }
    Book getBook(int idx) const { return books[idx]; }
};

int main() {
    Library lib;
    lib.addBook(Book("Tutunamayanlar", "Oğuz Atay"));
    lib.addBook(Book("İnce Memed", "Yaşar Kemal"));
    // 0. kitabı ödünç ver ve sonucu yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>
#include <vector>

class Book {
private:
    std::string title;
    std::string author;
public:
    Book(std::string t, std::string a) : title(t), author(a) {}
    std::string getTitle() const { return title; }
    std::string getAuthor() const { return author; }
};

class Library {
private:
    std::vector<Book> books;
    std::vector<bool> borrowed;
public:
    void addBook(const Book& b) { books.push_back(b); borrowed.push_back(false); }
    size_t count() const { return books.size(); }
    Book getBook(int idx) const { return books[idx]; }
    bool checkout(int idx) {
        if (idx < 0 || idx >= (int)books.size()) return false;
        if (borrowed[idx]) return false;
        borrowed[idx] = true;
        return true;
    }
};

int main() {
    Library lib;
    lib.addBook(Book("Tutunamayanlar", "Oğuz Atay"));
    lib.addBook(Book("İnce Memed", "Yaşar Kemal"));
    if (lib.checkout(0)) {
        std::cout << "ödünç";
    }
    return 0;
}

Beklenen çıktı

ödünç

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Koşulu amacıyla eşle

Kavram Anlamı
idx < 0 Negatif indeks
idx >= books.size() Sınır dışı
borrowed[idx] Zaten ödünç
borrowed[idx] = true İşaretle

2 İşaretleme satırını tamamla

Soru
if (borrowed[idx]) return false;
____[idx] = true;
return true;
Cevap
if (borrowed[idx]) return false;
borrowed[idx] = true;
return true;

Açıklama: borrowed[idx] = true ile ödünç verildi işaretlenir.

3 checkout metodu ne yapar?

main.cpp
bool checkout(int idx);
  • Kitabı ödünç verir Doğru cevap
  • Kitap siler
  • Kitap sayar
  • Kitap ekler

Açıklama: checkout kitabı ödünç verir ve borrowed işaretler.

Orta seviye bölümündeki tüm dersler