帮我用C++写一份图书管管理系统,需要有完整的代码注释,能在控制台进行显示操作,需要基类,派生类,还需要这些内容:1.建立书籍类、图书类型类、图书类 2.书籍、图书类型、图书信息的初始化 3.书籍、图书类型、图书信息的添加、修改、删除、查找 4.图书信息的输出 5.对图书信息按编号、书名排序 6.保存和读取
时间: 2023-07-10 12:30:17 浏览: 184
好的,这是一个比较综合的项目,需要一步步来实现。先从最基本的开始:
1. 建立书籍类、图书类型类、图书类
我们可以先建立一个基类 Book,然后派生出 BookType 类和 BookInfo 类:
```cpp
class Book {
public:
Book(int id = 0, std::string name = "") : id(id), name(name) {}
virtual ~Book() {}
int GetID() const { return id; }
std::string GetName() const { return name; }
private:
int id;
std::string name;
};
class BookType : public Book {
public:
BookType(int id = 0, std::string name = "") : Book(id, name) {}
};
class BookInfo : public Book {
public:
BookInfo(int id = 0, std::string name = "", std::string author = "") : Book(id, name), author(author) {}
std::string GetAuthor() const { return author; }
private:
std::string author;
};
```
2. 书籍、图书类型、图书信息的初始化
我们可以在主函数中初始化这些信息,比如:
```cpp
BookType type1(1, "小说");
BookType type2(2, "散文");
BookType type3(3, "诗歌");
BookInfo book1(1, "红楼梦", "曹雪芹");
BookInfo book2(2, "儒林外史", "吴敬梓");
BookInfo book3(3, "岳阳楼记", "范仲淹");
```
3. 书籍、图书类型、图书信息的添加、修改、删除、查找
这里我们可以建立一个类 Library,来管理这些信息:
```cpp
class Library {
public:
void AddBook(Book& book) {
books.push_back(&book);
}
void RemoveBook(int id) {
for (auto it = books.begin(); it != books.end(); ++it) {
if ((*it)->GetID() == id) {
books.erase(it);
break;
}
}
}
Book* FindBook(int id) {
for (auto book : books) {
if (book->GetID() == id) {
return book;
}
}
return nullptr;
}
private:
std::vector<Book*> books;
};
```
这里有一个需要注意的地方,我们在添加书籍的时候需要使用指针,因为不同的 Book 类型大小可能不同。
4. 图书信息的输出
我们可以在 Book 类中添加一个纯虚函数 Display,然后在派生类中实现,用于输出信息:
```cpp
class Book {
public:
virtual ~Book() {}
virtual void Display() const = 0;
// ...
};
class BookType : public Book {
public:
// ...
virtual void Display() const override {
std::cout << "类型编号:" << GetID() << ",类型名称:" << GetName() << std::endl;
}
};
class BookInfo : public Book {
public:
// ...
virtual void Display() const override {
std::cout << "书籍编号:" << GetID() << ",书名:" << GetName() << ",作者:" << GetAuthor() << std::endl;
}
};
```
然后我们可以在 Library 类中添加一个函数来输出所有书籍的信息:
```cpp
class Library {
public:
// ...
void DisplayAllBooks() const {
for (auto book : books) {
book->Display();
}
}
// ...
};
```
5. 对图书信息按编号、书名排序
我们可以使用 STL 中的 sort 函数来排序,只需要在 Book 类中重载小于号运算符,然后调用 sort 函数即可:
```cpp
class Book {
public:
// ...
virtual bool operator<(const Book& other) const {
return id < other.id;
}
// ...
};
// ...
std::sort(books.begin(), books.end(), [](Book* a, Book* b) {
return *a < *b;
});
```
6. 保存和读取
我们可以使用文件来保存和读取图书信息,这里我们使用 CSV 格式,每一行代表一个书籍。具体实现可以参考下面的代码:
```cpp
class Library {
public:
// ...
void SaveBooksToFile(std::string filename) const {
std::ofstream fout(filename);
for (auto book : books) {
fout << book->GetID() << "," << book->GetName() << "," << book->GetAuthor() << std::endl;
}
fout.close();
}
void LoadBooksFromFile(std::string filename) {
std::ifstream fin(filename);
int id;
std::string name, author;
while (fin >> id >> name >> author) {
BookInfo* book = new BookInfo(id, name, author);
AddBook(*book);
}
fin.close();
}
// ...
};
```
这里我们使用了 ifstream 和 ofstream 来读写文件,具体可以查看 C++ 的文件操作文档。
完整代码如下:
阅读全文