图书管理系统通过Book、Reader和Library类实现,分别封装图书、读者及借阅行为,体现OOP数据封装与职责分离思想,支持图书增删查借还功能。

在C++中,图书管理系统是一个典型的面向对象编程(OOP)应用实例,能够很好地体现类与对象的设计思想。通过定义合适的类,我们可以对图书、读者、借阅记录等实体进行建模,实现数据封装、信息隐藏和行为抽象。
图书类(Book)设计
图书是系统的核心实体之一,应包含书名、作者、ISBN、出版年份和是否借出等属性。
定义一个Book类,封装图书的基本信息和操作:
私有成员变量:存储图书数据,如title、author、isbn、year、borrowed公有成员函数:构造函数、获取信息函数(getters)、借出和归还操作示例代码:
class Book {private: std::string title; std::string author; std::string isbn; int year; bool borrowed;public:Book(std::string t, std::string a, std::string i, int y): title(t), author(a), isbn(i), year(y), borrowed(false) {}
std::string getIsbn() const { return isbn; }std::string getTitle() const { return title; }std::string getAuthor() const { return author; }bool isBorrowed() const { return borrowed; }void borrow() { borrowed = true; }void ret() { borrowed = false; }void display() const { std::cout << "书名: " << title << " | 作者: " << author << " | ISBN: " << isbn << " | 年份: " << year << " | 状态: " << (borrowed ? "已借出" : "可借阅") << std::endl;}
};
立即学习“C++免费学习笔记(深入)”;
读者类(Reader)设计
读者是图书系统的另一个重要对象,负责借阅和归还图书。
Reader类应包含读者姓名、ID以及当前借阅的图书列表。
使用std::vector存储借阅的图书指针提供借书和还书接口,与Book类交互示例代码:
class Reader {private: std::string name; std::string id; std::vector borrowedBooks;public:Reader(std::string n, std::string rid) : name(n), id(rid) {}
void borrowBook(Book& book) { if (!book.isBorrowed()) { book.borrow(); borrowedBooks.push_back(&book); std::cout << name << " 借阅了: " << book.getTitle() << std::endl; } else { std::cout << "该书已被借阅!" << std::endl; }}void returnBook(Book& book) { auto it = std::find(borrowedBooks.begin(), borrowedBooks.end(), &book); if (it != borrowedBooks.end()) { book.ret(); borrowedBooks.erase(it); std::cout << name << " 归还了: " << book.getTitle() << std::endl; } else { std::cout << "该读者未借此书!" << std::endl; }}void showBorrowedBooks() const { std::cout << name << " 当前借阅的图书:" <display(); }}
};
立即学习“C++免费学习笔记(深入)”;
图书管理类(Library)设计
为统一管理所有图书和读者,引入Library类作为容器和调度中心。
维护std::vector和std::vector提供添加图书、查找图书、显示所有图书等功能示例代码片段:
class Library {private: std::vector books; std::vector readers;public:void addBook(const Book& book) {books.push_back(book);}
void addReader(const Reader& reader) { readers.push_back(reader);}Book* findBookByIsbn(const std::string& isbn) { for (auto& book : books) { if (book.getIsbn() == isbn) { return &book; } } return nullptr;}void displayAllBooks() const { std::cout << "馆藏图书列表:" << std::endl; for (const auto& book : books) { book.display(); }}
};
立即学习“C++免费学习笔记(深入)”;
主函数使用示例
在main()函数中创建对象并模拟借阅流程:
int main() { Library lib;Book b1("C++ Primer", "Lippman", "978-0131103627", 2012);Book b2("Effective C++", "Meyers", "978-0321334879", 2005);lib.addBook(b1);lib.addBook(b2);Reader r("张三", "R001");lib.addReader(r);Book* ptr = lib.findBookByIsbn("978-0131103627");if (ptr) { r.borrowBook(*ptr);}lib.displayAllBooks();return 0;
}
基本上就这些。通过合理设计类与对象,C++图书管理系统能清晰地表达现实逻辑,便于维护和扩展。关键在于职责划分明确,数据安全,接口简洁。不复杂但容易忽略细节,比如指针管理与const正确使用。
以上就是C++图书管理系统设计 类与对象应用实例的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1472833.html
微信扫一扫
支付宝扫一扫