CodeBlanks Logo Icon CodeBlanks

Ödünç verme

  • C kursu
  • Orta seviye
  • Ders 67/116
  • 6 dk

Checkout ve Return fonksiyonlarıyla ödünç akışını yazarsın.

Ödünç verme akışı

Bir kitabın ödünç durumu borrowed alanındadır: 0 rafta, 1 ödünçte. checkout fonksiyonu kitabı ödünç verir: b->borrowed = 1;. return_book kitabı iade eder: b->borrowed = 0;.

İki fonksiyon da önce mevcut durumu denetler. checkout zaten ödünçteyse 0 döndürür (başarısız); değilse 1 yapar ve 1 döndürür. return_book raftaysa 0 döndürür; değilse 0 yapar ve 1 döndürür. Bu dönüş değerleri, çağıranın sonucu denetlemesini sağlar. Gerçek bir kütüphanede üye kimliği de kaydedilir; burada basit tutuyoruz.

return_book fonksiyonu

return_book, checkout'un tersidir. Önce if (!b->borrowed) ile rafta mı diye bakar; raftaysa 0 döndürür (zaten geri verilmiş). Değilse b->borrowed = 0; yapar ve 1 döndürür.

Bu simetrik tasarım, durum değişimlerini güvenli yapar. Bir kitap yanlışlıkla iki kez iade edilemez; iki kez ödünç verilemez. main'de checkout(&lib.books[0]); çağrısı yapıp printf("%d\n", lib.books[0].borrowed); ile durumu yazdırabilirsin. Aynı şekilde return_book'u test edersin.

Uygulama checkout ve return_book ekle

Var olan koda int checkout(Book *b) ekle; if (b->borrowed) return 0; b->borrowed = 1; return 1;. int return_book(Book *b) ekle; if (!b->borrowed) return 0; b->borrowed = 0; return 1;. main'de checkout(&lib.books[0]);, printf("%d\n", lib.books[0].borrowed);, return_book(&lib.books[0]);, printf("%d\n", lib.books[0].borrowed); çağır.

Başlangıç kodu

main.c
#include <stdio.h>
#include <string.h>

typedef struct {
    char title[64];
    int year;
    int borrowed;
} Book;

typedef struct {
    char name[64];
    int id;
} Member;

typedef struct {
    Book books[10];
    int count;
} Library;

void library_init(Library *lib) {
    lib->count = 0;
}

void library_add(Library *lib, Book b) {
    lib->books[lib->count++] = b;
}

void print_book(Book *b) {
    printf("Book: %s (%d)\n", b->title, b->year);
}

int main(void) {
    Library lib;
    library_init(&lib);
    Book b1 = {"C Tutorial", 2024, 0};
    Book b2 = {"Pointers", 2023, 0};
    library_add(&lib, b1);
    library_add(&lib, b2);
    print_book(&lib.books[0]);
    print_book(&lib.books[1]);
    return 0;
}

// checkout ve return_book fonksiyonlarını yaz
// main'de checkout yap, durumu yazdır, return_book yap, durumu yazdır

Örnek çözüm

main.c
#include <stdio.h>
#include <string.h>

typedef struct {
    char title[64];
    int year;
    int borrowed;
} Book;

typedef struct {
    char name[64];
    int id;
} Member;

typedef struct {
    Book books[10];
    int count;
} Library;

void library_init(Library *lib) {
    lib->count = 0;
}

void library_add(Library *lib, Book b) {
    lib->books[lib->count++] = b;
}

void print_book(Book *b) {
    printf("Book: %s (%d)\n", b->title, b->year);
}

int checkout(Book *b) {
    if (b->borrowed) return 0;
    b->borrowed = 1;
    return 1;
}

int return_book(Book *b) {
    if (!b->borrowed) return 0;
    b->borrowed = 0;
    return 1;
}

int main(void) {
    Library lib;
    library_init(&lib);
    Book b1 = {"C Tutorial", 2024, 0};
    library_add(&lib, b1);
    checkout(&lib.books[0]);
    printf("%d\n", lib.books[0].borrowed);
    return_book(&lib.books[0]);
    printf("%d\n", lib.books[0].borrowed);
    return 0;
}

Beklenen çıktı

1
0

Soru ve cevaplar

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

1 checkout gövdesini tamamla

Soru
int checkout(Book *b) {
    if (b->borrowed) return 0;
    b->borrowed = ____;
    return 1;
}
Cevap
int checkout(Book *b) {
    if (b->borrowed) return 0;
    b->borrowed = 1;
    return 1;
}

Açıklama: b->borrowed = 1; kitabı ödünç verir.

2 checkout zaten ödünçte olan kitaba ne döndürür?

  • 1 (başarılı)
  • 2 (uyarı)
  • -1 (hata)
  • 0 (başarısız) Doğru cevap

Açıklama: checkout ödünçte kitaba 0 döndürür; işlem başarısızdır.

3 Ödünç durumlarını eşle

Kavram Anlamı
borrowed=0 Rafta
borrowed=1 Ödünçte
checkout döner 1 Başarılı ödünç
return_book döner 0 Zaten rafta

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