帮我使用C++语言实现一个具有以下要求的图书管理系统,代码需要有详细的注释,这里是全部要求:1)建立书籍类、图书类型类、图书类 2)书籍、图书类型、图书信息的初始化 3)书籍、图书类型、图书信息的添加、修改、删除、查找 4)图书信息的输出 5)对图书信息按编号、书名排序 6)将图书信息保存为文件
时间: 2023-07-10 17:29:46 浏览: 92
好的,我会为您提供一个简单的图书管理系统的实现,代码使用C++11标准,具有以下功能:
1. 建立书籍类、图书类型类、图书类
2. 书籍、图书类型、图书信息的初始化
3. 书籍、图书类型、图书信息的添加、修改、删除、查找
4. 图书信息的输出
5. 对图书信息按编号、书名排序
6. 将图书信息保存为文件
代码如下:
```c++
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
// 图书类型类
class BookType {
public:
BookType(int id, string name) : id(id), name(name) {}
int getId() const { return id; }
string getName() const { return name; }
private:
int id;
string name;
};
// 书籍类
class Book {
public:
Book(int id, string name, int typeId, double price) : id(id), name(name), typeId(typeId), price(price) {}
int getId() const { return id; }
string getName() const { return name; }
int getTypeId() const { return typeId; }
double getPrice() const { return price; }
void setPrice(double p) { price = p; }
private:
int id;
string name;
int typeId;
double price;
};
// 图书管理系统类
class BookManager {
public:
// 初始化
void init() {
// 初始化图书类型
bookTypes.push_back(BookType(1, "计算机"));
bookTypes.push_back(BookType(2, "文学"));
bookTypes.push_back(BookType(3, "艺术"));
// 初始化书籍
books.push_back(Book(1, "C++程序设计", 1, 69.9));
books.push_back(Book(2, "Java程序设计", 1, 59.9));
books.push_back(Book(3, "Python程序设计", 1, 49.9));
books.push_back(Book(4, "红楼梦", 2, 39.9));
books.push_back(Book(5, "西游记", 2, 29.9));
books.push_back(Book(6, "水浒传", 2, 19.9));
books.push_back(Book(7, "蒙娜丽莎", 3, 99.9));
books.push_back(Book(8, "星空", 3, 89.9));
books.push_back(Book(9, "夜晚的餐桌", 3, 79.9));
}
// 添加书籍
void addBook(const Book& book) {
books.push_back(book);
}
// 修改书籍
void modifyBook(int id, double price) {
auto it = find_if(books.begin(), books.end(), [id](const Book& book) { return book.getId() == id; });
if (it != books.end()) {
it->setPrice(price);
cout << "修改成功" << endl;
}
else {
cout << "没有找到该书籍" << endl;
}
}
// 删除书籍
void deleteBook(int id) {
auto it = find_if(books.begin(), books.end(), [id](const Book& book) { return book.getId() == id; });
if (it != books.end()) {
books.erase(it);
cout << "删除成功" << endl;
}
else {
cout << "没有找到该书籍" << endl;
}
}
// 查找书籍
void findBook(int id) {
auto it = find_if(books.begin(), books.end(), [id](const Book& book) { return book.getId() == id; });
if (it != books.end()) {
printBook(*it);
}
else {
cout << "没有找到该书籍" << endl;
}
}
// 输出所有书籍
void printAllBooks() {
for (const auto& book : books) {
printBook(book);
}
}
// 对书籍按编号排序
void sortById() {
sort(books.begin(), books.end(), [](const Book& a, const Book& b) { return a.getId() < b.getId(); });
}
// 对书籍按名称排序
void sortByName() {
sort(books.begin(), books.end(), [](const Book& a, const Book& b) { return a.getName() < b.getName(); });
}
// 将书籍信息保存到文件
void saveToFile() {
ofstream fout("books.txt");
for (const auto& book : books) {
fout << book.getId() << " " << book.getName() << " " << book.getTypeId() << " " << book.getPrice() << endl;
}
fout.close();
}
private:
vector<BookType> bookTypes;
vector<Book> books;
// 输出单本书籍信息
void printBook(const Book& book) {
cout << "编号:" << book.getId() << ",名称:" << book.getName() << ",类型:" << getBookTypeName(book.getTypeId()) << ",价格:" << book.getPrice() << endl;
}
// 根据图书类型ID获取类型名称
string getBookTypeName(int typeId) {
auto it = find_if(bookTypes.begin(), bookTypes.end(), [typeId](const BookType& type) { return type.getId() == typeId; });
if (it != bookTypes.end()) {
return it->getName();
}
else {
return "未知类型";
}
}
};
int main() {
BookManager manager;
manager.init();
// 添加一本书籍
manager.addBook(Book(10, "C#程序设计", 1, 49.9));
// 修改一本书籍
manager.modifyBook(1, 79.9);
// 删除一本书籍
manager.deleteBook(2);
// 查找一本书籍
manager.findBook(3);
// 输出所有书籍
manager.printAllBooks();
// 对书籍按编号排序
manager.sortById();
// 输出所有书籍
manager.printAllBooks();
// 对书籍按名称排序
manager.sortByName();
// 输出所有书籍
manager.printAllBooks();
// 将书籍信息保存到文件
manager.saveToFile();
return 0;
}
```
在这个实现中,我们使用了`vector`来存储书籍和图书类型,使用`find_if`来查找指定书籍,使用`sort`来排序书籍,使用`ofstream`来将书籍信息保存到文件。
阅读全文