返回

c语言图书管理系统源代码:include

来源:网络   作者:   日期:2025-11-02 14:29:02  

基于C语言的图书管理系统源代码实现与功能解析

c语言图书管理系统源代码:include


图书管理系统是现代图书馆管理中不可或缺的工具,它能够高效地实现图书的录入、查询、借阅、归还等操作,本文将通过一个基于C语言开发的图书管理系统源代码,详细解析其设计思路与实现方法,该系统采用文件存储数据,界面简洁,功能完整,适合初学者学习和实际应用。


系统功能设计

该图书管理系统具备以下核心功能:

c语言图书管理系统源代码:include

  1. 图书录入:输入图书信息并保存到文件中。
  2. 图书查询:按书名、作者或ISBN号查询图书。
  3. 借阅管理:记录读者借阅图书信息。
  4. 归还管理:记录图书归还信息。
  5. 图书显示:显示当前所有图书信息。
  6. 数据存储:使用文件存储图书和借阅记录,确保数据持久化。

源代码实现

以下是完整的C语言图书管理系统源代码,代码中包含详细注释,便于理解。

#include <string.h>
#include <ctype.h>
#define MAX_BOOKS 100  // 最大图书数量
#define MAX_AUTHORS 50  // 最大作者长度
#define MAX_TITLE 100   // 最大书名长度
#define MAX_ID 20      // 最大ISBN长度
// 图书结构体
typedef struct {
    char id[MAX_ID];      // 图书ID
    char title[MAX_TITLE]; // 书名
    char author[MAX_AUTHORS]; // 作者
    int available;        // 是否可借(1表示可借,0表示已借出)
} Book;
// 借阅记录结构体
typedef struct {
    char book_id[MAX_ID];  // 图书ID
    char reader_name[50];  // 读者姓名
    char borrow_date[20];  // 借阅日期
    char return_date[20];  // 归还日期
} BorrowRecord;
// 全局变量
Book books[MAX_BOOKS];   // 存储图书信息
BorrowRecord borrow_records[100]; // 存储借阅记录
int book_count = 0;      // 当前图书数量
int record_count = 0;    // 当前借阅记录数量
// 函数声明
void add_book();          // 添加新图书
void display_books();     // 显示所有图书
void search_book();       // 查询图书
void borrow_book();       // 借阅图书
void return_book();       // 归还图书
void save_books();        // 保存图书数据到文件
void load_books();        // 从文件加载图书数据
void save_records();      // 保存借阅记录到文件
void load_records();      // 从文件加载借阅记录
// 主函数
int main() {
    int choice;
    load_books();
    load_records();
    while (1) {
        printf("\n===== 图书管理系统 =====\n");
        printf("1. 添加图书\n");
        printf("2. 显示所有图书\n");
        printf("3. 查询图书\n");
        printf("4. 借阅图书\n");
        printf("5. 归还图书\n");
        printf("6. 退出系统\n");
        printf("请选择操作(1-6):");
        scanf("%d", &choice);
        getchar(); // 清除缓冲区
        switch (choice) {
            case 1:
                add_book();
                save_books();
                break;
            case 2:
                display_books();
                break;
            case 3:
                search_book();
                break;
            case 4:
                borrow_book();
                save_records();
                break;
            case 5:
                return_book();
                save_records();
                break;
            case 6:
                printf("退出系统...\n");
                save_books();
                save_records();
                exit(0);
            default:
                printf("无效的选择,请重新输入!\n");
        }
    }
    return 0;
}
// 添加新图书
void add_book() {
    if (book_count >= MAX_BOOKS) {
        printf("图书数量已达上限!\n");
        return;
    }
    Book new_book;
    printf("\n添加新图书:\n");
    printf("图书ID: ");
    fgets(new_book.id, MAX_ID, stdin);
    new_book.id[strcspn(new_book.id, "\n")] = '\0'; // 去除换行符
    printf("书名: ");
    fgets(new_book.title, MAX_TITLE, stdin);
    new_book.title[strcspn(new_book.title, "\n")] = '\0';
    printf("作者: ");
    fgets(new_book.author, MAX_AUTHORS, stdin);
    new_book.author[strcspn(new_book.author, "\n")] = '\0';
    new_book.available = 1; // 默认可借
    books[book_count++] = new_book;
    printf("图书添加成功!\n");
}
// 显示所有图书
void display_books() {
    printf("\n===== 图书列表 =====\n");
    printf("ID\t\t书名\t\t作者\t\t状态\n");
    for (int i = 0; i < book_count; i++) {
        printf("%s\t%s\t%s\t%s\n", 
               books[i].id, 
               books[i].title, 
               books[i].author, 
               books[i].available ? "可借" : "已借出");
    }
    printf("===== 图书列表结束 =====\n");
}
// 查询图书
void search_book() {
    char search_id[MAX_ID];
    printf("\n输入要查询的图书ID:");
    fgets(search_id, MAX_ID, stdin);
    search_id[strcspn(search_id, "\n")] = '\0';
    for (int i = 0; i < book_count; i++) {
        if (strcmp(books[i].id, search_id) == 0) {
            printf("\n图书信息:\n");
            printf("ID: %s\n", books[i].id);
            printf("书名: %s\n", books[i].title);
            printf("作者: %s\n", books[i].author);
            printf("状态: %s\n", books[i].available ? "可借" : "已借出");
            return;
        }
    }
    printf("未找到该图书!\n");
}
// 借阅图书
void borrow_book() {
    char book_id[MAX_ID];
    char reader_name[50];
    printf("\n借阅图书:\n");
    printf("图书ID: ");
    fgets(book_id, MAX_ID, stdin);
    book_id[strcspn(book_id, "\n")] = '\0';
    printf("借阅人姓名: ");
    fgets(reader_name, 50, stdin);
    reader_name[strcspn(reader_name, "\n")] = '\0';
    for (int i = 0; i < book_count; i++) {
        if (strcmp(books[i].id, book_id) == 0 && books[i].available) {
            BorrowRecord new_record;
            strcpy(new_record.book_id, book_id);
            strcpy(new_record.reader_name, reader_name);
            // 获取当前日期作为借阅日期
            time_t t = time(NULL);
            struct tm *tm = localtime(&t);
            char date[20];
            sprintf(date, "%d-%02d-%02d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday);
            strcpy(new_record.borrow_date, date);
            // 归还日期暂设为30天后
            tm->tm_mon += 30;
            t = mktime(tm);
            strftime(date, sizeof(date), "%Y-%m-%d", tm);
            strcpy(new_record.return_date, date);
            borrow_records[record_count++] = new_record;
            books[i].available = 0; // 更新图书状态为已借出
            printf("借阅成功!归还日期为:%s\n", new_record.return_date);
            return;
        }
    }
    printf("未找到该图书或图书已借出!\n");
}
// 归还图书
void return_book() {
    char book_id[MAX_ID];
    printf("\n归还图书:\n");
    printf("图书ID: ");
    fgets(book_id, MAX_ID, stdin);
    book_id[strcspn(book_id, "\n")] = '\0';
    for (int i = 0; i < book_count; i++) {
        if (strcmp(books[i].id, book_id) == 0 && !books[i].available) {
            books[i].available = 1; // 更新图书状态为可借
            printf("图书归还成功!\n");
            // 这里可以添加超期处理逻辑
            return;
        }
    }
    printf("未找到该图书或图书未借出!\n");
}
// 保存图书数据到文件
void save_books() {
    FILE *file = fopen("books.dat", "wb");
    if (file == NULL) {
        printf("保存图书数据失败!\n");
        return;
    }
    fwrite(&book_count, sizeof(int), 1, file);
    fwrite(books, sizeof(Book), book_count, file);
    fclose(file);
}
// 从文件加载图书数据
void load_books() {
    FILE *file = fopen("books.dat", "rb");
    if (file == NULL) {
        // 文件不存在,初始化为空
        return;
    }
    fread(&book_count, sizeof(int), 1, file);
    fread(books, sizeof(Book), book_count, file);
    fclose(file);
}
// 保存借阅记录到文件
void save_records() {
    FILE *file = fopen("records.dat", "wb");
    if (file == NULL) {
        printf("保存借阅记录失败!\n");
        return;
    }
    fwrite(&record_count, sizeof(int), 1, file);
    fwrite(borrow_records, sizeof(BorrowRecord), record_count, file);
    fclose(file);
}
// 从文件加载借阅记录
void load_records() {
    FILE *file = fopen("records.dat", "rb");
    if (file == NULL) {
        // 文件不存在,初始化为空
        return;
    }
    fread(&record_count, sizeof(int), 1, file);
    fread(borrow_records, sizeof(BorrowRecord), record_count, file);
    fclose(file);
}

代码解析

  1. 数据结构

    • Book 结构体存储图书的基本信息,包括ID、书名、作者和借阅状态。
    • BorrowRecord 结构体记录借阅信息,包括图书ID、借阅人姓名、借阅日期和归还日期。
  2. 文件操作

    • 系统使用文件 books.datrecords.dat 存储图书和借阅记录,确保程序关闭后数据不丢失。
  3. 功能实现

    • 添加图书:通过 add_book() 函数实现,输入图书信息并保存到数组中。
    • 显示图书:通过 display_books() 函数遍历数组并打印所有图书信息。
    • 查询图书:通过 search_book() 函数根据ID查找图书。
    • 借阅/归还:通过 borrow_book()return_book() 函数实现,更新图书状态并记录借阅信息。

扩展建议

  1. 用户登录:可以添加用户登录功能,区分读者和管理员权限。
  2. 超期提醒:在归还时检查是否超期,并计算罚款。
  3. 图形界面:使用 GTK、Qt 等库开发图形界面,提升用户体验。
  4. 数据库支持:使用 MySQL 或 SQLite 替代文件存储,提高数据管理能力。

c语言图书管理系统源代码:include

分类:编程
责任编辑:今题网
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。

相关文章:

文章已关闭评论!