帮我用C++写一份完整的图书管理系统,需要设计基类和派生类,需要书籍类、图书类型类、图书类,要有代码注释。需要有这些功能:1)建立书籍类、图书类型类、图书类 2)书籍、图书类型、图书信息的初始化 3)书籍、图书类型、图书信息的添加、修改、删除、查找 4)图书信息的输出 5)对图书信息按编号、书名排序 6)将图书信息保存为文件
时间: 2023-07-10 08:30:04 浏览: 76
好的,我可以帮你解答和提供代码示例。首先,我们需要设计三个类:`Book`类、`BookType`类和`BookManager`类。其中,`BookType`类为基类,`Book`类和`BookManager`类为其派生类。
`BookType`类表示图书类型,包括类型编号和类型名称两个成员变量,并且提供了对这两个成员变量的操作函数。`Book`类表示一本书,包括书名、书籍编号、作者、价格、库存数量和所属类型等成员变量,并且提供了对这些成员变量的操作函数。`BookManager`类表示整个图书管理系统,包括对`BookType`和`Book`的管理和操作,以及对图书信息进行排序和文件保存等功能。
以下是示例代码,注释中有详细说明:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
// 图书类型类
class BookType {
public:
BookType(int id, string name) : m_id(id), m_name(name) {}
int getId() const { return m_id; }
string getName() const { return m_name; }
void setName(string name) { m_name = name; }
private:
int m_id; // 类型编号
string m_name; // 类型名称
};
// 书籍类
class Book : public BookType {
public:
Book(int id, string name, string author, double price, int stock, BookType* type)
: BookType(type->getId(), type->getName()), m_id(id), m_name(name), m_author(author),
m_price(price), m_stock(stock) {}
int getId() const { return m_id; }
string getName() const { return m_name; }
void setName(string name) { m_name = name; }
string getAuthor() const { return m_author; }
void setAuthor(string author) { m_author = author; }
double getPrice() const { return m_price; }
void setPrice(double price) { m_price = price; }
int getStock() const { return m_stock; }
void setStock(int stock) { m_stock = stock; }
private:
int m_id; // 书籍编号
string m_name; // 书名
string m_author; // 作者
double m_price; // 价格
int m_stock; // 库存数量
};
// 图书管理类
class BookManager {
public:
// 添加图书类型
void addBookType(BookType* type) {
m_bookTypes.push_back(type);
}
// 添加图书
void addBook(Book* book) {
m_books.push_back(book);
}
// 修改图书
void updateBook(Book* book) {
for (auto& b : m_books) {
if (b->getId() == book->getId()) {
b = book;
break;
}
}
}
// 删除图书
void deleteBook(int id) {
for (auto it = m_books.begin(); it != m_books.end(); ++it) {
if ((*it)->getId() == id) {
m_books.erase(it);
break;
}
}
}
// 按编号查找图书
Book* findBookById(int id) const {
for (auto& b : m_books) {
if (b->getId() == id) {
return b;
}
}
return nullptr;
}
// 按书名查找图书
vector<Book*> findBooksByName(string name) const {
vector<Book*> books;
for (auto& b : m_books) {
if (b->getName() == name) {
books.push_back(b);
}
}
return books;
}
// 对图书按编号排序
void sortBooksById() {
sort(m_books.begin(), m_books.end(), [](Book* b1, Book* b2) { return b1->getId() < b2->getId(); });
}
// 对图书按书名排序
void sortBooksByName() {
sort(m_books.begin(), m_books.end(), [](Book* b1, Book* b2) { return b1->getName() < b2->getName(); });
}
// 输出图书信息
void printBooks() const {
for (auto& b : m_books) {
cout << "编号:" << b->getId() << ",书名:" << b->getName()
<< ",作者:" << b->getAuthor() << ",价格:" << b->getPrice()
<< ",库存:" << b->getStock() << ",类型:" << b->getName() << endl;
}
}
// 将图书信息保存到文件
void saveToFile(string filename) const {
ofstream outfile(filename);
if (outfile.is_open()) {
for (auto& b : m_books) {
outfile << b->getId() << "," << b->getName() << ","
<< b->getAuthor() << "," << b->getPrice() << ","
<< b->getStock() << "," << b->getName() << endl;
}
}
outfile.close();
}
private:
vector<BookType*> m_bookTypes; // 图书类型列表
vector<Book*> m_books; // 图书列表
};
int main() {
// 初始化图书类型
BookType* type1 = new BookType(1, "计算机科学");
BookType* type2 = new BookType(2, "数学");
BookType* type3 = new BookType(3, "物理学");
// 初始化图书
Book* book1 = new Book(1, "C++ Primer", "Lippman", 68.5, 100, type1);
Book* book2 = new Book(2, "计算机网络", "谢希仁", 45.0, 50, type1);
Book* book3 = new Book(3, "高等数学", "王富民", 32.8, 120, type2);
Book* book4 = new Book(4, "大学物理", "吴军", 24.5, 80, type3);
// 初始化图书管理系统
BookManager manager;
manager.addBookType(type1);
manager.addBookType(type2);
manager.addBookType(type3);
manager.addBook(book1);
manager.addBook(book2);
manager.addBook(book3);
manager.addBook(book4);
// 输出图书信息
manager.printBooks();
// 按书名排序
manager.sortBooksByName();
manager.printBooks();
// 按编号查找图书
Book* book5 = manager.findBookById(3);
if (book5 != nullptr) {
cout << "查找结果:" << book5->getName() << endl;
}
else {
cout << "未找到图书!" << endl;
}
// 修改图书信息
book1->setStock(200);
manager.updateBook(book1);
manager.printBooks();
// 删除图书
manager.deleteBook(2);
manager.printBooks();
// 将图书信息保存到文件
manager.saveToFile("books.txt");
return 0;
}
```
以上代码仅供参考,实际开发中可能还需要根据具体需求进行修改和完善。