C
Ödünç verme
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
checkout gövdesini tamamla
int checkout(Book *b) {
if (b->borrowed) return 0;
b->borrowed = ____;
return 1;
}
Cevabı göster
int checkout(Book *b) {
if (b->borrowed) return 0;
b->borrowed = 1;
return 1;
}
-
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)
Cevabı göster
0 (başarısız) — checkout ödünçte kitaba 0 döndürür; işlem başarısızdır.
-
Ödünç durumlarını eşle
- borrowed=0
- Rafta
- borrowed=1
- Ödünçte
- checkout döner 1
- Başarılı ödünç
- return_book döner 0
- Zaten rafta
Sıradaki ders: Arama ve filtreleme