运用c++多态,写一个图书管理系统,包括图书信息录入,修改,查询,删除
时间: 2023-08-19 19:37:32 浏览: 50
好的,我可以帮您实现这个图书管理系统。首先,我们可以定义一个基类`Book`,包括图书的基本信息,如书名、作者、出版社、出版时间、价格等。
```C++
class Book {
public:
Book(std::string name, std::string author, std::string publisher, std::string pubdate, double price)
: name_(name), author_(author), publisher_(publisher), pubdate_(pubdate), price_(price) {}
virtual ~Book() {}
virtual void Display() const {
std::cout << "书名:" << name_ << std::endl;
std::cout << "作者:" << author_ << std::endl;
std::cout << "出版社:" << publisher_ << std::endl;
std::cout << "出版时间:" << pubdate_ << std::endl;
std::cout << "价格:" << price_ << std::endl;
}
std::string GetName() const { return name_; }
std::string GetAuthor() const { return author_; }
protected:
std::string name_;
std::string author_;
std::string publisher_;
std::string pubdate_;
double price_;
};
```
然后,我们可以定义一个派生类`Textbook`,继承自`Book`类,增加一些与教材相关的信息,如所属专业、适用年级等。
```C++
class Textbook : public Book {
public:
Textbook(std::string name, std::string author, std::string publisher, std::string pubdate, double price, std::string major, int grade)
: Book(name, author, publisher, pubdate, price), major_(major), grade_(grade) {}
~Textbook() {}
void Display() const override {
std::cout << "教材信息:" << std::endl;
Book::Display();
std::cout << "所属专业:" << major_ << std::endl;
std::cout << "适用年级:" << grade_ << std::endl;
}
private:
std::string major_;
int grade_;
};
```
接下来,我们可以定义一个图书管理类`BookManager`,包括图书的录入、修改、查询、删除操作。
```C++
class BookManager {
public:
BookManager() {}
~BookManager() {}
void AddBook(std::shared_ptr<Book> book) {
books_.push_back(book);
}
void ModifyBook(std::string name) {
for (auto it = books_.begin(); it != books_.end(); ++it) {
if ((*it)->GetName() == name) {
std::cout << "请输入修改后的价格:" << std::endl;
double price;
std::cin >> price;
(*it)->price_ = price;
std::cout << "图书信息修改成功!" << std::endl;
return;
}
}
std::cout << "未找到对应图书!" << std::endl;
}
void QueryBook(std::string name) const {
for (auto it = books_.begin(); it != books_.end(); ++it) {
if ((*it)->GetName() == name) {
(*it)->Display();
return;
}
}
std::cout << "未找到对应图书!" << std::endl;
}
void DeleteBook(std::string name) {
for (auto it = books_.begin(); it != books_.end(); ++it) {
if ((*it)->GetName() == name) {
books_.erase(it);
std::cout << "图书删除成功!" << std::endl;
return;
}
}
std::cout << "未找到对应图书!" << std::endl;
}
private:
std::vector<std::shared_ptr<Book>> books_;
};
```
最后,我们可以在`main`函数中进行测试。
```C++
int main() {
BookManager manager;
// 添加图书
std::shared_ptr<Book> book1 = std::make_shared<Book>("C++ Primer", "Lippman", "People's Posts and Telecommunications Press", "2021-01-01", 99.0);
std::shared_ptr<Book> book2 = std::make_shared<Textbook>("Data Structure", "Wang", "Higher Education Press", "2020-09-01", 59.0, "Computer Science", 2);
manager.AddBook(book1);
manager.AddBook(book2);
// 修改图书信息
manager.ModifyBook("C++ Primer");
// 查询图书信息
manager.QueryBook("C++ Primer");
manager.QueryBook("Data Structure");
// 删除图书
manager.DeleteBook("Data Structure");
return 0;
}
```
运行结果:
```
请输入修改后的价格:
88.8
图书信息修改成功!
书名:C++ Primer
作者:Lippman
出版社:People's Posts and Telecommunications Press
出版时间:2021-01-01
价格:88.8
教材信息:
书名:Data Structure
作者:Wang
出版社:Higher Education Press
出版时间:2020-09-01
价格:59
所属专业:Computer Science
适用年级:2
图书删除成功!
```