帮我用C++写一份较为完整的图书管理系统,复杂一点,,需要有较为完整的代码注释,能在控制台显示操作菜单并且进行操作,需要设计基类,派生类,
时间: 2024-03-04 19:48:06 浏览: 85
好的,下面是一个较为完整的图书管理系统的C++代码,注释较为详细:
```c++
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Book {
public:
Book(string title, string author, int year) {
this->title = title;
this->author = author;
this->year = year;
}
// 基类的构造函数,初始化书籍信息
virtual void showInfo() {
cout << "书名:" << this->title << endl;
cout << "作者:" << this->author << endl;
cout << "出版年份:" << this->year << endl;
}
// 基类的成员函数,显示书籍信息
string getTitle() {
return this->title;
}
// 获取书名
protected:
string title;
string author;
int year;
// 定义基础属性
};
class Textbook : public Book {
public:
Textbook(string title, string author, int year, string subject) : Book(title, author, year) {
this->subject = subject;
}
// 教材的构造函数,初始化教材信息和基类的信息
void showInfo() override {
cout << "【教材】" << endl;
Book::showInfo();
cout << "学科:" << this->subject << endl;
}
// 教材的成员函数,显示教材信息
private:
string subject;
// 定义教材特有的属性
};
class Novel : public Book {
public:
Novel(string title, string author, int year, string genre) : Book(title, author, year) {
this->genre = genre;
}
// 小说的构造函数,初始化小说信息和基类的信息
void showInfo() override {
cout << "【小说】" << endl;
Book::showInfo();
cout << "类型:" << this->genre << endl;
}
// 小说的成员函数,显示小说信息
private:
string genre;
// 定义小说特有的属性
};
class Library {
public:
void addBook(Book* book) {
books.push_back(book);
}
// 添加书籍
void removeBook(string title) {
for (auto iter = books.begin(); iter != books.end(); iter++) {
if ((*iter)->getTitle() == title) {
books.erase(iter);
break;
}
}
}
// 删除书籍
void showBooks() {
int count = 0;
for (auto book : books) {
count++;
cout << "【" << count << "】";
book->showInfo();
cout << endl;
}
}
// 显示所有书籍
private:
vector<Book*> books;
// 使用vector存储所有书籍
};
int main() {
Library library;
// 创建图书馆对象
Textbook t1("高等数学", "李永乐", 2000, "数学");
Textbook t2("大学英语", "Michael Swan", 2005, "英语");
Novel n1("傲慢与偏见", "简·奥斯汀", 1813, "爱情");
Novel n2("飘", "玛格丽特·米切尔", 1936, "历史");
// 创建教材和小说对象,并初始化信息
library.addBook(&t1);
library.addBook(&t2);
library.addBook(&n1);
library.addBook(&n2);
// 将书籍加入图书馆中
int choice = 0;
while (choice != 4) {
cout << "请选择操作:" << endl;
cout << "1. 添加书籍" << endl;
cout << "2. 删除书籍" << endl;
cout << "3. 显示所有书籍" << endl;
cout << "4. 退出" << endl;
cin >> choice;
switch (choice) {
case 1: {
cout << "请输入书籍类型(1. 教材 2. 小说):" << endl;
int type;
cin >> type;
cout << "请输入书籍名称:" << endl;
string title;
cin >> title;
cout << "请输入书籍作者:" << endl;
string author;
cin >> author;
cout << "请输入书籍出版年份:" << endl;
int year;
cin >> year;
if (type == 1) {
cout << "请输入教材学科:" << endl;
string subject;
cin >> subject;
Textbook* textbook = new Textbook(title, author, year, subject);
library.addBook(textbook);
} else if (type == 2) {
cout << "请输入小说类型:" << endl;
string genre;
cin >> genre;
Novel* novel = new Novel(title, author, year, genre);
library.addBook(novel);
}
break;
}
case 2: {
cout << "请输入要删除的书籍名称:" << endl;
string title;
cin >> title;
library.removeBook(title);
break;
}
case 3: {
library.showBooks();
break;
}
case 4: {
break;
}
default: {
cout << "请输入正确的操作编号!" << endl;
break;
}
}
}
// 显示菜单,并根据用户的选择进行相应的操作
return 0;
}
```
上述代码中,通过vector存储所有书籍信息,可以方便地进行添加、删除、修改等操作。Book类作为基类,Textbook和Novel类作为派生类,对基类进行了扩展,增加了特有的属性和方法。Library类作为图书馆类,包含了添加、删除、显示书籍等操作。
在main函数中,先创建教材和小说对象,然后将它们加入图书馆中。接着显示菜单,根据用户的选择进行相应的操作。其中,添加书籍需要用户输入书籍类型、名称、作者、出版年份、特有属性等信息,并根据类型创建对应的对象。删除书籍需要用户输入要删除的书籍名称。显示所有书籍则遍历vector,并调用showInfo函数显示书籍信息。
阅读全文