CodeBlanks Logo Icon CodeBlanks

Birleştirme

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

Kütüphane modüllerini menüyle birleştirirsin.

Menü ile birleştirme

Son adımda tüm modülleri bir menüyle birleştirirsin. menu_run(Library *lib, int choice) fonksiyonu choice değerine göre işlem yapar: 1 ise tüm kitapları listeler, 2 ise ödünç verir, 3 ise arar.

switch (choice) ile dallanma yapılır. Her case ilgili fonksiyonu çağırır. Bu yapı, gerçek bir konsol uygulamasının iskeletidir. main'de menüyü sabit seçimlerle çağırıp çıktıyı test ederiz; gerçek bir uygulamada scanf ile kullanıcıdan seçim alırsın. Bu son derste tüm parçalar birleşir: model, koleksiyon, ödünç ve arama.

menu_run uygulaması

void menu_run(Library *lib, int choice) fonksiyonu switch ile dallanır. case 1: for ile tüm kitapları print_book ile yazdırır. case 2: checkout(&lib->books[0]) çağırır. case 3: find_by_title ile arama yapar.

main'de Library lib; ile başla, kitap ekle, sonra menu_run(&lib, 1); çağır. Bu, menünün listeleme seçeneğini çalıştırır. Tüm modüller burada birleşir: print_book, library_add, checkout ve find_by_title. Beş derslik proje tamamlanır; gerçek bir C konsol uygulamasının iskeletine sahipsin.

Uygulama menu_run ile birleştir

Var olan koda void menu_run(Library *lib, int choice) ekle. switch (choice) ile case 1: for (int i = 0; i < lib->count; i++) print_book(&lib->books[i]); ve break;. main'de bir kitap ekle ve menu_run(&lib, 1); ç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 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;
}

Book *find_by_title(Library *lib, const char *title) {
    for (int i = 0; i < lib->count; i++) {
        if (strcmp(lib->books[i].title, title) == 0) return &lib->books[i];
    }
    return NULL;
}

int main(void) {
    Library lib;
    library_init(&lib);
    Book b1 = {"C Tutorial", 2024, 0};
    library_add(&lib, b1);
    Book *found = find_by_title(&lib, "C Tutorial");
    if (found) print_book(found);
    return 0;
}

// menu_run fonksiyonunu yaz: switch ile case 1 listeleme
// main'de menüyü 1 ile çağı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;
}

Book *find_by_title(Library *lib, const char *title) {
    for (int i = 0; i < lib->count; i++) {
        if (strcmp(lib->books[i].title, title) == 0) return &lib->books[i];
    }
    return NULL;
}

void menu_run(Library *lib, int choice) {
    switch (choice) {
        case 1:
            for (int i = 0; i < lib->count; i++) print_book(&lib->books[i]);
            break;
    }
}

int main(void) {
    Library lib;
    library_init(&lib);
    Book b1 = {"C Tutorial", 2024, 0};
    library_add(&lib, b1);
    menu_run(&lib, 1);
    return 0;
}

Beklenen çıktı

Book: C Tutorial (2024)

Soru ve cevaplar

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

1 Menüde 1 seçeneği ne yapar?

  • Ödünç verir
  • Çıkış yapar
  • Arama yapar
  • Kitapları listeler Doğru cevap

Açıklama: 1 tüm kitapları listeler; print_book ile yazdırır.

2 switch case'i tamamla

Soru
switch (choice) {
case 1:
    for (int i = 0; i < lib->count; i++) ____(&lib->books[i]);
    break;
}
Cevap
switch (choice) {
case 1:
    for (int i = 0; i < lib->count; i++) print_book(&lib->books[i]);
    break;
}

Açıklama: case 1 her kitabı print_book ile yazdırır.

3 Menü seçeneklerini eşle

Kavram Anlamı
case 1 Kitapları listeler
case 2 Ödünç verir
case 3 Arama yapar
default Bilinmeyen seçim

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