首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言數據結構實現圖書借閱管理系統(鏈表版)

     編輯:程式設計綜合問答

系統設計

  • 語言:純 C (C99),無 C++ 特性。
  • 核心數據結構:雙向鏈表管理圖書/會員,支持增刪改查、借還書邏輯。
  • 文件持久化:退出保存至二進制文件,啟動載入。

核心結構體

// 圖書節點
typedef struct Book {
    char isbn[20], title[100], author[50], publisher[50];
    int total, available; // 總量、可借量
    struct Book *prev, *next;
} Book;

// 會員節點
typedef struct Member {
    char id[20], name[50], phone[20];
    int borrowed_count;
    struct Member *prev, *next;
} Member;

// 借閱記錄
typedef struct Record {
    char book_isbn[20], member_id[20];
    time_t borrow_date, due_date, return_date; // 0=未歸還
    struct Record *next;
} Record;

// 系統上下文
typedef struct {
    Book *book_head, *book_tail;
    Member *mem_head, *mem_tail;
    Record *rec_head;
} LibrarySys;

關鍵函數原型

// 初始化/銷毀
void sys_init(LibrarySys *sys);
void sys_destroy(LibrarySys *sys);

// 文件持久化
void sys_load(LibrarySys *sys, const char *dir);
void sys_save(LibrarySys *sys, const char *dir);

// 圖書操作
Book* book_add(LibrarySys *sys, const Book *b);
Book* book_find_by_isbn(LibrarySys *sys, const char *isbn);
void book_remove(LibrarySys *sys, const char *isbn);
void book_list(LibrarySys *sys);

// 會員操作
Member* mem_add(LibrarySys *sys, const Member *m);
Member* mem_find_by_id(LibrarySys *sys, const char *id);
void mem_remove(LibrarySys *sys, const char *id);
void mem_list(LibrarySys *sys);

// 借還書
int borrow_book(LibrarySys *sys, const char *isbn, const char *mid);
int return_book(LibrarySys *sys, const char *isbn, const char *mid);
void list_borrowed(LibrarySys *sys, const char *mid);

借書邏輯

int borrow_book(LibrarySys *sys, const char *isbn, const char *mid) {
    Book *b = book_find_by_isbn(sys, isbn);
    Member *m = mem_find_by_id(sys, mid);
    if (!b || !m) return -1; // 不存在
    if (b->available <= 0) return -2; // 無庫存
    if (m->borrowed_count >= 5) return -3; // 限借 5 本
    
    Record *r = malloc(sizeof(Record));
    strcpy(r->book_isbn, isbn);
    strcpy(r->member_id, mid);
    r->borrow_date = time(NULL);
    r->due_date = r->borrow_date + 30*24*3600; // 30 天
    r->return_date = 0;
    r->next = sys->rec_head;
    sys->rec_head = r;
    
    b->available--;
    m->borrowed_count++;
    return 0;
}

主菜單循環

int main() {
    LibrarySys sys;
    sys_init(&sys);
    sys_load(&sys, "data");
    
    int choice;
    while (1) {
        printf("\n1.圖書管理 2.會員管理 3.借書 4.還書 5.查詢借閱 0.退出\n選擇: ");
        scanf("%d", &choice);
        switch(choice) {
            case 1: book_menu(&sys); break;
            case 2: member_menu(&sys); break;
            case 3: { char isbn[20], mid[20]; scanf("%s%s", isbn, mid); borrow_book(&sys, isbn, mid); } break;
            case 4: { char isbn[20], mid[20]; scanf("%s%s", isbn, mid); return_book(&sys, isbn, mid); } break;
            case 5: { char mid[20]; scanf("%s", mid); list_borrowed(&sys, mid); } break;
            case 0: sys_save(&sys, "data"); sys_destroy(&sys); return 0;
        }
    }
}

完整代碼獲取

完整可編譯代碼(含文件讀寫、輸入驗證、錯誤處理)約 400 行,可參考百度文庫資源:C語言圖書管理系統源碼,或自行按上述架構實現。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved