【C++】图书管理系统丨完整源码+解析

下面是一个完整的C++图书管理系统课程设计,包含详细源码解析和设计思路。基于面向对象思想实现,涵盖图书管理核心功能(增删改查、借阅归还、权限控制等),适合课程设计或学习参考。


📚 图书管理系统设计思路

1. 系统功能模块​ 
  • 用户权限管理​:读者、图书管理员、系统管理员
  • 图书管理​:添加、删除、修改、查询(书名/作者/出版社)、统计
  • 借阅管理​:借书、还书、续借、借阅记录
  • 文件存储​:图书数据、用户信息、借阅记录持久化存储
  • 菜单驱动​:分层级菜单控制操作流程
2. 核心类设计​ 
类名功能
User基类,存储用户名/密码,提供登录验证和菜单接口(虚函数)
Reader派生类,读者权限(查书、借阅、查看个人记录)
Librarian派生类,图书管理员权限(增删改图书、处理借阅)
Admin派生类,系统管理员权限(创建用户、权限管理)
Book图书信息(编号/书名/作者/出版社/库存状态)
Record借阅记录(用户ID、图书ID、借阅日期、应还日期)

💻 完整源码及解析

1. 数据结构定义​(Book.h
#include <iostream>
#include <vector>
#include <fstream>
#include <ctime>

// 日期类(用于借阅记录)
class Date {
public:
    int year, month, day;
    Date(int y = 0, int m = 0, int d = 0) : year(y), month(m), day(d) {}
    
    // 计算还书日期(借期+30天)
    Date addDays(int days) {
        // ... 日期计算逻辑(略) [9](@ref)
        return Date(year, month, day + days);
    }
};

// 图书信息类
class Book {
public:
    std::string id;     // 图书编号
    std::string name;   // 书名
    std::string author; // 作者
    std::string press;  // 出版社
    bool isBorrowed;    // 借出状态

    Book(std::string i, std::string n, std::string a, std::string p) 
        : id(i), name(n), author(a), press(p), isBorrowed(false) {}
};

// 借阅记录类
class Record {
public:
    int userId;         // 借阅人ID
    std::string bookId; // 图书ID
    Date borrowDate;    // 借书日期
    Date returnDate;    // 应还日期
};
2. 用户权限系统​(User.h
class User {
protected:
    std::string username;
    std::string password;
public:
    User(const std::string& u, const std::string& p) : username(u), password(p) {}
    virtual bool login() = 0; // 纯虚函数(接口)
    virtual void showMenu() = 0;
};

class Reader : public User {
public:
    Reader(const std::string& u, const std::string& p) : User(u, p) {}
    
    bool login() override {
        // 从文件验证读者账号 [1](@ref)
        return true; 
    }

    void showMenu() override {
        std::cout << "==== 读者菜单 ====\n";
        std::cout << "1. 查询图书\n2. 借阅图书\n3. 查看借阅记录\n";
    }
};

class Librarian : public User {
    // 增加图书管理功能 [9](@ref)
    void showMenu() override {
        std::cout << "==== 管理员菜单 ====\n";
        std::cout << "1. 添加图书\n2. 删除图书\n3. 处理借阅\n";
    }
};

class Admin : public User {
    // 增加用户管理功能 [1](@ref)
    void showMenu() override {
        std::cout << "==== 系统管理员菜单 ====\n";
        std::cout << "1. 创建用户\n2. 重置密码\n3. 权限管理\n";
    }
};
3. 核心功能实现​(LibrarySystem.cpp
class LibrarySystem {
private:
    std::vector<Book> books;
    std::vector<Record> records;
    
public:
    // 添加新书
    void addBook(const Book& book) {
        books.push_back(book);
        saveBooksToFile(); // 保存到文件 [1](@ref)
    }

    // 按书名搜索
    void searchByTitle(const std::string& title) {
        for (const auto& book : books) {
            if (book.name.find(title) != std::string::npos) {
                std::cout << "ID: " << book.id << " 书名: " << book.name 
                          << " 作者: " << book.author << " 状态: " 
                          << (book.isBorrowed ? "已借出" : "在馆") << std::endl;
            }
        }
    }

    // 借书操作
    void borrowBook(int userId, const std::string& bookId) {
        for (auto& book : books) {
            if (book.id == bookId && !book.isBorrowed) {
                book.isBorrowed = true;
                Record record{userId, bookId, Date(), Date().addDays(30)};
                records.push_back(record);
                saveRecordsToFile(); // 保存记录 [9](@ref)
                return;
            }
        }
        std::cout << "借书失败!图书不存在或已被借出\n";
    }
};

// 文件存储示例(保存图书信息)
void LibrarySystem::saveBooksToFile() {
    std::ofstream out("books.txt");
    for (const auto& book : books) {
        out << book.id << "," << book.name << "," 
            << book.author << "," << book.press << "\n";
    }
}

🔑 系统特色与关键技术

  1. 多态与继承
    • 通过User基类统一接口,派生类实现不同权限菜单 
  2. 文件持久化
    • 使用fstream将数据保存到文本文件(books.txtusers.txt
  3. 数据封装
    • 每个类封装自身数据和行为(如Book类管理借阅状态)
  4. 菜单驱动
    • 分层级菜单控制用户操作流程(主菜单→子菜单)

📊 运行示例

==== 主菜单 ====
1. 读者登录  2. 管理员登录  3. 退出
> 1
输入用户名: stu001
输入密码: ******
==== 读者菜单 ====
1. 查询图书  2. 借阅图书
> 1
输入书名: C++
ID: B001 书名: C++ Primer 作者: Lippman 状态: 在馆
ID: B005 书名: Effective C++ 作者: Meyers 状态: 已借出

源码获取:<<点击获取源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C语言小火车

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值