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

C語言實現圖書管理系統完整指南

     編輯:C 語言問答

C語言實現圖書管理系統完整指南

圖書管理系統是C語言教學與實踐中的經典專案,能夠全面鍛煉結構體、檔案操作、鏈表、模組化程式設計等核心技能。本文提供一個完整的設計思路與核心代碼框架,幫助你從零構建功能完善的圖書管理系統。

一、系統需求分析

根據題目要求,系統需實現以下核心功能:

  1. 圖書信息管理:書號、書名、作者、定價、數量的增刪改查
  2. 入庫登記:記錄書號、單價、數量、小計、入庫日期
  3. 入庫統計:按書號統計入庫數量與明細
  4. 數據聯動:入庫時自動更新圖書數量
  5. 持久化存儲:使用兩個檔案分別存儲圖書信息與入庫記錄

二、資料結構設計

// 圖書信息結構體
typedef struct Book {
    char id[20];        // 書號
    char title[50];     // 書名
    char author[30];    // 作者
    float price;        // 定價
    int quantity;       // 館藏數量
    struct Book *next;  // 鏈表指針
} Book;

// 入庫記錄結構體
typedef struct StockIn {
    char bookId[20];    // 書號
    float unitPrice;    // 單價
    int amount;         // 數量
    float subtotal;     // 小計
    char date[15];      // 入庫日期 (YYYY-MM-DD)
    struct StockIn *next;
} StockIn;

三、核心模組功能設計

模組函數原型功能描述
初始化void initSystem(Book **head, StockIn **stockHead)從檔案載入數據,建立鏈表
圖書增刪改查void addBook(Book **head)
void deleteBook(Book **head, char *id)
void modifyBook(Book *head, char *id)
Book* findBook(Book *head, char *id)
實現圖書信息的完整CRUD操作
入庫登記void stockIn(Book *bookHead, StockIn **stockHead)輸入書號驗證存在性,記錄入庫信息,更新圖書數量
入庫統計void queryStockIn(StockIn *stockHead, char *bookId)按書號統計總入庫量,顯示明細記錄
數據保存void saveBooks(Book *head)
void saveStockIn(StockIn *head)
程式退出時將鏈表數據寫入檔案
主選單void showMenu()
int main()
提供文字介面交互,調用上述功能

四、關鍵技術點解析

1. 檔案操作策略
採用二進制檔案(wb/rb)存儲結構體數組,或文本檔案(fprintf/fscanf)按行存儲。建議程式啟動時一次性讀入記憶體鏈表,退出時統一寫回,平衡效能與數據安全。

2. 入庫與庫存聯動
在stockIn函數中,首先遍歷圖書鏈表驗證書號是否存在,若存在則修改quantity字段,同時創建入庫記錄節點插入入庫鏈表,最後調用保存函數持久化兩個鏈表。

3. 日期處理
使用time.h庫獲取系統時間,格式化為YYYY-MM-DD字符串存入入庫記錄。

五、完整代碼框架示例

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

// 結構體定義見上文

// 函數聲明
void initSystem(Book **head, StockIn **stockHead);
void addBook(Book **head);
void deleteBook(Book **head, char *id);
void modifyBook(Book *head, char *id);
Book* findBook(Book *head, char *id);
void stockIn(Book *bookHead, StockIn **stockHead);
void queryStockIn(StockIn *stockHead, char *bookId);
void saveBooks(Book *head);
void saveStockIn(StockIn *head);
void showMenu();
void freeList(Book *head);
void freeStockList(StockIn *head);

int main() {
    Book *bookHead = NULL;
    StockIn *stockHead = NULL;
    
    initSystem(&bookHead, &stockHead);
    
    int choice;
    while(1) {
        showMenu();
        scanf("%d", &choice);
        switch(choice) {
            case 1: addBook(&bookHead); break;
            case 2: {
                char id[20];
                printf("請輸入要刪除的書號: ");
                scanf("%s", id);
                deleteBook(&bookHead, id);
                break;
            }
            case 3: {
                char id[20];
                printf("請輸入要修改的書號: ");
                scanf("%s", id);
                modifyBook(bookHead, id);
                break;
            }
            case 4: {
                char id[20];
                printf("請輸入要查詢的書號: ");
                scanf("%s", id);
                Book *b = findBook(bookHead, id);
                if(b) printf("書號:%s 書名:%s 作者:%s 價格:%.2f 數量:%d\n", 
                    b->id, b->title, b->author, b->price, b->quantity);
                else printf("未找到該圖書\n");
                break;
            }
            case 5: stockIn(bookHead, &stockHead); break;
            case 6: {
                char id[20];
                printf("請輸入要統計的書號: ");
                scanf("%s", id);
                queryStockIn(stockHead, id);
                break;
            }
            case 7: 
                saveBooks(bookHead);
                saveStockIn(stockHead);
                freeList(bookHead);
                freeStockList(stockHead);
                printf("感謝使用,再見!\n");
                return 0;
            default: printf("輸入錯誤,請重新選擇\n");
        }
    }
    return 0;
}

// 具體函數實現略...

六、進階優化方向

  • 引入sqlite3替代平檔存儲,支援SQL查詢
  • 實現圖書分類、借閱管理、讀者管理等擴展功能
  • 使用ncurses庫構建文本介面(TUI)提升交互體驗
  • 添加數據備份與恢復機制
  • 移植至嵌入式平台(如STM32)實現實體圖書管理終端

通過完成這個專案,你將掌握C語言中結構體鏈表、檔案IO、模組化設計、記憶體管理等核心技能,為後續學習數據結構、作業系統、嵌入式開發打下堅實基礎。

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