运用c++封装继承多态,通过多个成员函数实现图书信息管理的录入,修改,删除,查询
时间: 2024-03-24 16:38:09 浏览: 24
以下是一个简单的示例,使用 C++ 的封装、继承和多态特性,实现了图书信息的管理,包括录入、修改、删除和查询功能:
```
#include <iostream>
#include <string>
#include <vector>
using namespace std;
// 图书类
class Book {
public:
Book(string name, string author, string isbn, double price) :
m_name(name), m_author(author), m_isbn(isbn), m_price(price) {}
// 获取图书名称
string getName() {
return m_name;
}
// 获取图书作者
string getAuthor() {
return m_author;
}
// 获取图书 ISBN
string getISBN() {
return m_isbn;
}
// 获取图书价格
double getPrice() {
return m_price;
}
// 设置图书价格
void setPrice(double price) {
m_price = price;
}
// 显示图书信息
virtual void display() {
cout << "Name: " << m_name << endl;
cout << "Author: " << m_author << endl;
cout << "ISBN: " << m_isbn << endl;
cout << "Price: " << m_price << endl;
}
protected:
string m_name; // 图书名称
string m_author; // 图书作者
string m_isbn; // 图书 ISBN
double m_price; // 图书价格
};
// 图书管理类
class BookManager {
public:
// 添加图书
void addBook(Book* book) {
m_books.push_back(book);
}
// 修改图书价格
void modifyBook(string isbn, double price) {
for (auto book : m_books) {
if (book->getISBN() == isbn) {
book->setPrice(price);
break;
}
}
}
// 删除图书
void deleteBook(string isbn) {
for (auto iter = m_books.begin(); iter != m_books.end(); iter++) {
if ((*iter)->getISBN() == isbn) {
m_books.erase(iter);
break;
}
}
}
// 查询图书
void searchBook(string keyword) {
for (auto book : m_books) {
if (book->getName().find(keyword) != string::npos || book->getAuthor().find(keyword) != string::npos) {
book->display();
}
}
}
protected:
vector<Book*> m_books; // 所有图书
};
// 继承自 Book 类的杂志类
class Magazine : public Book {
public:
Magazine(string name, string author, string isbn, double price, int issue) :
Book(name, author, isbn, price), m_issue(issue) {}
// 显示杂志信息(重写父类的 display 函数)
void display() override {
cout << "Name: " << m_name << endl;
cout << "Author: " << m_author << endl;
cout << "ISBN: " << m_isbn << endl;
cout << "Price: " << m_price << endl;
cout << "Issue: " << m_issue << endl;
}
private:
int m_issue; // 杂志期号
};
int main() {
// 创建图书管理对象
BookManager bookManager;
// 创建图书和杂志对象,并添加到管理对象中
Book* book1 = new Book("C++ Primer", "Stanley B. Lippman", "978-7-121-15535-5", 99.99);
Book* book2 = new Book("Effective C++", "Scott Meyers", "978-7-121-15587-4", 88.88);
Magazine* magazine = new Magazine("CSDN", "CSDN", "CN11-5064/G2", 9.99, 202101);
bookManager.addBook(book1);
bookManager.addBook(book2);
bookManager.addBook(magazine);
// 显示所有图书信息
for (auto book : bookManager.m_books) {
book->display();
cout << endl;
}
// 修改图书价格
bookManager.modifyBook("978-7-121-15535-5", 66.66);
// 删除图书
bookManager.deleteBook("CN11-5064/G2");
// 查询图书
bookManager.searchBook("C++");
// 释放内存
delete book1;
delete book2;
delete magazine;
return 0;
}
```
在上面的示例中,我们定义了一个 Book 类,表示图书,其中包括图书的名称、作者、ISBN 和价格等信息。我们还定义了一个 BookManager 类,用于管理所有的图书,包括添加、修改、删除和查询等功能。在 Book 类中,我们使用了虚函数 display,用于显示图书信息,以便在继承后可以重写该函数实现不同的效果。在 BookManager 类中,我们使用了一个 vector 容器来存储所有的图书,通过遍历容器实现了上述的几个功能。在示例中,我们还定义了一个 Magazine 类,继承自 Book 类,表示杂志,其中增加了杂志期号的属性,并重写了 display 函数以显示杂志信息。最后,在 main 函数中,我们创建了若干个图书和杂志对象,并添加到图书管理对象中,进行了一些操作,最后释放了内存。