假设图书类CBook的属性信息包括(书名,作者,书号,出版社,出版年月等),构建CBooks类,由CBook组成,存放文件名、不同书信息以及排序及查找功能。试用所学的面向对象技术编程实现类似实习3的功能,用一个以上cpp文件,将主调用函数和类实现功能放在不同的cpp文件中。 1) 在Excel表格中输入相关书名信息,一行一本书,然后输出CSV格式数据; 2) 编写程序排序上述文件; 3) 输出排序结果到文件中,与原文件Excel排序结果对比; 4) 任意输入书名,进行查找
时间: 2024-03-22 15:37:46 浏览: 208
1.图书类.cpp
好的,这是一个比较复杂的问题,需要多个类和函数协同完成。下面是一个简单的实现方式,我们将主调用函数放在 main.cpp 文件中,将类的实现放在 book.cpp 和 book.h 文件中。
首先,我们需要定义 CBook 类,包含书的基本信息,如书名、作者、书号、出版社、出版年月等。同时,我们需要定义 CBooks 类,由 CBook 组成,用于存放文件名、不同书信息以及排序及查找功能。
book.h 文件定义如下:
```cpp
#ifndef BOOK_H
#define BOOK_H
#include <string>
#include <vector>
using namespace std;
// CBook 类,用于存储单个书的信息
class CBook {
private:
string m_title; // 书名
string m_author; // 作者
string m_bookNo; // 书号
string m_publisher; // 出版社
string m_publishDate; // 出版年月
public:
CBook(string title, string author, string bookNo, string publisher, string publishDate);
string getTitle();
string getAuthor();
string getBookNo();
string getPublisher();
string getPublishDate();
void print();
};
// CBooks 类,由多个 CBook 组成,用于存储文件名、不同书信息以及排序及查找功能
class CBooks {
private:
string m_fileName; // 文件名
vector<CBook> m_books; // 书的信息
public:
CBooks(string fileName);
void loadData(); // 从文件中读取数据
void saveData(); // 将数据保存到文件中
void addBook(CBook book); // 添加一本书
void removeBook(int index); // 删除一本书
void sortBooks(); // 对书进行排序
void findBook(string title); // 查找一本书
void printBooks(); // 输出所有书的信息
};
#endif
```
book.cpp 文件实现如下:
```cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include "book.h"
using namespace std;
// CBook 类的实现
CBook::CBook(string title, string author, string bookNo, string publisher, string publishDate)
: m_title(title), m_author(author), m_bookNo(bookNo), m_publisher(publisher), m_publishDate(publishDate) {}
string CBook::getTitle() {
return m_title;
}
string CBook::getAuthor() {
return m_author;
}
string CBook::getBookNo() {
return m_bookNo;
}
string CBook::getPublisher() {
return m_publisher;
}
string CBook::getPublishDate() {
return m_publishDate;
}
void CBook::print() {
cout << "书名:" << m_title << endl;
cout << "作者:" << m_author << endl;
cout << "书号:" << m_bookNo << endl;
cout << "出版社:" << m_publisher << endl;
cout << "出版年月:" << m_publishDate << endl;
}
// CBooks 类的实现
CBooks::CBooks(string fileName) : m_fileName(fileName) {}
void CBooks::loadData() {
ifstream inFile(m_fileName);
string line;
while (getline(inFile, line)) {
istringstream ss(line);
string title, author, bookNo, publisher, publishDate;
getline(ss, title, ',');
getline(ss, author, ',');
getline(ss, bookNo, ',');
getline(ss, publisher, ',');
getline(ss, publishDate, ',');
CBook book(title, author, bookNo, publisher, publishDate);
m_books.push_back(book);
}
inFile.close();
}
void CBooks::saveData() {
ofstream outFile(m_fileName);
for (int i = 0; i < m_books.size(); i++) {
CBook book = m_books[i];
outFile << book.getTitle() << ",";
outFile << book.getAuthor() << ",";
outFile << book.getBookNo() << ",";
outFile << book.getPublisher() << ",";
outFile << book.getPublishDate() << endl;
}
outFile.close();
}
void CBooks::addBook(CBook book) {
m_books.push_back(book);
}
void CBooks::removeBook(int index) {
m_books.erase(m_books.begin() + index);
}
void CBooks::sortBooks() {
sort(m_books.begin(), m_books.end(), [](CBook& a, CBook& b) {
return a.getTitle() < b.getTitle();
});
}
void CBooks::findBook(string title) {
for (int i = 0; i < m_books.size(); i++) {
CBook book = m_books[i];
if (book.getTitle() == title) {
book.print();
return;
}
}
cout << "没有找到书籍:" << title << endl;
}
void CBooks::printBooks() {
for (int i = 0; i < m_books.size(); i++) {
CBook book = m_books[i];
book.print();
cout << endl;
}
}
```
接下来,我们在 main.cpp 文件中调用 CBooks 类的函数,实现对文件的读取、排序、保存、查找等功能。
```cpp
#include <iostream>
#include "book.h"
using namespace std;
int main() {
// 创建一个 CBooks 对象
CBooks books("books.csv");
// 从文件中读取数据
books.loadData();
// 输出所有书的信息
books.printBooks();
// 添加一本新书
CBook newBook("C++ Primer", "Lippman", "978-7-121-15535-2", "电子工业出版社", "2012-08-01");
books.addBook(newBook);
// 删除一本书
books.removeBook(0);
// 排序所有书
books.sortBooks();
// 输出所有书的信息
books.printBooks();
// 查找一本书
books.findBook("C++ Primer");
// 将数据保存到文件中
books.saveData();
return 0;
}
```
这样,我们就完成了对文件的读取、排序、保存、查找等功能的实现。如果你需要在 Excel 中输入相关书名信息,一行一本书,然后输出 CSV 格式数据,可以将 Excel 文件另存为 CSV 格式,然后使用我们的程序对其进行读取和操作即可。
希望这个回答能够解决你的问题,如果你还有其他问题,请继续提问。
阅读全文