帮我用C++写一份图书管管理系统,需要有完整的代码注释,能在控制台进行显示操作,需要设计基类和派生类,还需要这些内容:1.建立书籍类、图书类型类、图书类 2.书籍、图书类型、图书信息的初始化 3.书籍、图书类型、图书信息的添加、修改、删除、查找 4.图书信息的输出 5.对图书信息按编号、书名排序 6.文件的保存 7.文件的读取
时间: 2023-12-04 18:05:39 浏览: 35
好的,我可以帮您实现这个系统。首先,我们需要设计三个类:`Book`(书籍类)、`BookType`(图书类型类)和`Library`(图书管理类)。
`Book`类包含以下成员变量:
```cpp
string bookName; // 书名
string author; // 作者
string ISBN; // ISBN编号
double price; // 价格
BookType type; // 图书类型
```
`BookType`类包含以下成员变量:
```cpp
string typeName; // 图书类型名称
int days; // 可借天数
```
`Library`类包含以下成员变量:
```cpp
vector<Book> books; // 图书列表
vector<BookType> bookTypes; // 图书类型列表
```
接下来,我们需要实现对于这三个类的初始化、添加、修改、删除、查找、排序和文件读写等功能。
首先是图书类型和图书信息的初始化:
```cpp
void Library::init() {
// 初始化图书类型
BookType type1("计算机", 30);
BookType type2("文学", 20);
BookType type3("历史", 15);
bookTypes.push_back(type1);
bookTypes.push_back(type2);
bookTypes.push_back(type3);
// 初始化图书信息
Book book1("C++程序设计基础", "谭浩强", "9787302393836", 59.0, type1);
Book book2("三体", "刘慈欣", "9787536692930", 29.0, type2);
Book book3("中国历史大全", "陈寅恪", "9787020015581", 39.0, type3);
books.push_back(book1);
books.push_back(book2);
books.push_back(book3);
}
```
接下来是添加图书和修改图书信息的功能:
```cpp
void Library::addBook() {
string name, author, isbn, typeName;
double price;
int days;
cout << "请输入书名:";
cin >> name;
cout << "请输入作者:";
cin >> author;
cout << "请输入ISBN编号:";
cin >> isbn;
cout << "请输入价格:";
cin >> price;
cout << "请输入图书类型:";
cin >> typeName;
cout << "请输入可借天数:";
cin >> days;
// 查找图书类型
BookType type(typeName, days);
auto iter = find(bookTypes.begin(), bookTypes.end(), type);
if (iter == bookTypes.end()) {
bookTypes.push_back(type);
iter = bookTypes.end() - 1;
}
// 添加图书
Book book(name, author, isbn, price, *iter);
books.push_back(book);
cout << "添加成功!" << endl;
}
void Library::modifyBook() {
cout << "请输入要修改的图书编号:";
int id;
cin >> id;
if (id < 1 || id > books.size()) {
cout << "无效的图书编号!" << endl;
return;
}
Book& book = books[id - 1];
cout << "请选择要修改的信息:" << endl;
cout << "1.书名" << endl;
cout << "2.作者" << endl;
cout << "3.ISBN编号" << endl;
cout << "4.价格" << endl;
cout << "5.图书类型" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1: {
string name;
cout << "请输入新的书名:";
cin >> name;
book.bookName = name;
break;
}
case 2: {
string author;
cout << "请输入新的作者:";
cin >> author;
book.author = author;
break;
}
case 3: {
string isbn;
cout << "请输入新的ISBN编号:";
cin >> isbn;
book.ISBN = isbn;
break;
}
case 4: {
double price;
cout << "请输入新的价格:";
cin >> price;
book.price = price;
break;
}
case 5: {
string typeName;
int days;
cout << "请输入新的图书类型名称:";
cin >> typeName;
cout << "请输入新的可借天数:";
cin >> days;
// 查找图书类型
BookType type(typeName, days);
auto iter = find(bookTypes.begin(), bookTypes.end(), type);
if (iter == bookTypes.end()) {
bookTypes.push_back(type);
iter = bookTypes.end() - 1;
}
book.type = *iter;
break;
}
default: {
cout << "无效的选项!" << endl;
break;
}
}
cout << "修改成功!" << endl;
}
```
接下来是删除图书和查找图书的功能:
```cpp
void Library::deleteBook() {
cout << "请输入要删除的图书编号:";
int id;
cin >> id;
if (id < 1 || id > books.size()) {
cout << "无效的图书编号!" << endl;
return;
}
books.erase(books.begin() + id - 1);
cout << "删除成功!" << endl;
}
void Library::findBook() {
cout << "请选择查找方式:" << endl;
cout << "1.按编号查找" << endl;
cout << "2.按书名查找" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1: {
cout << "请输入图书编号:";
int id;
cin >> id;
if (id < 1 || id > books.size()) {
cout << "无效的图书编号!" << endl;
return;
}
printBookInfo(books[id - 1]);
break;
}
case 2: {
cout << "请输入书名:";
string name;
cin >> name;
for (auto& book : books) {
if (book.bookName == name) {
printBookInfo(book);
return;
}
}
cout << "未找到该书籍!" << endl;
break;
}
default: {
cout << "无效的选项!" << endl;
break;
}
}
}
```
接下来是对图书信息进行排序的功能:
```cpp
void Library::sortBooks() {
cout << "请选择排序方式:" << endl;
cout << "1.按编号排序" << endl;
cout << "2.按书名排序" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1: {
sort(books.begin(), books.end(), [](const Book& a, const Book& b) { return a.ISBN < b.ISBN; });
break;
}
case 2: {
sort(books.begin(), books.end(), [](const Book& a, const Book& b) { return a.bookName < b.bookName; });
break;
}
default: {
cout << "无效的选项!" << endl;
break;
}
}
cout << "排序成功!" << endl;
}
```
最后是文件的读取和保存功能:
```cpp
void Library::loadFromFile() {
ifstream fin("library.txt");
if (!fin.is_open()) {
cout << "文件不存在!" << endl;
return;
}
books.clear();
bookTypes.clear();
int bookCount, typeCount;
fin >> bookCount >> typeCount;
// 读取图书类型
for (int i = 0; i < typeCount; i++) {
string typeName;
int days;
fin >> typeName >> days;
BookType type(typeName, days);
bookTypes.push_back(type);
}
// 读取图书信息
for (int i = 0; i < bookCount; i++) {
string bookName, author, ISBN, typeName;
double price;
int typeIndex;
fin >> bookName >> author >> ISBN >> price >> typeIndex;
BookType type = bookTypes[typeIndex];
Book book(bookName, author, ISBN, price, type);
books.push_back(book);
}
fin.close();
cout << "读取成功!" << endl;
}
void Library::saveToFile() {
ofstream fout("library.txt");
int bookCount = books.size();
int typeCount = bookTypes.size();
// 写入图书类型
fout << bookCount << " " << typeCount << endl;
for (auto& type : bookTypes) {
fout << type.typeName << " " << type.days << endl;
}
// 写入图书信息
for (auto& book : books) {
int typeIndex = find(bookTypes.begin(), bookTypes.end(), book.type) - bookTypes.begin();
fout << book.bookName << " " << book.author << " " << book.ISBN << " " << book.price << " " << typeIndex << endl;
}
fout.close();
cout << "保存成功!" << endl;
}
```
完整的代码如下: