好的,那我开始编写代码。以下是完整的代码注释和功能实现。
```C++
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
// 建立书籍类
class Book {
public:
Book() {}
Book(int id, string name, string author, string type, string press, double price, int total, int rest) {
this->id = id;
this->name = name;
this->author = author;
this->type = type;
this->press = press;
this->price = price;
this->total = total;
this->rest = rest;
}
int getId() const {
return id;
}
string getName() const {
return name;
}
string getAuthor() const {
return author;
}
string getType() const {
return type;
}
string getPress() const {
return press;
}
double getPrice() const {
return price;
}
int getTotal() const {
return total;
}
int getRest() const {
return rest;
}
void setName(string name) {
this->name = name;
}
void setAuthor(string author) {
this->author = author;
}
void setType(string type) {
this->type = type;
}
void setPress(string press) {
this->press = press;
}
void setPrice(double price) {
this->price = price;
}
void setTotal(int total) {
this->total = total;
}
void setRest(int rest) {
this->rest = rest;
}
private:
int id; // 书籍编号
string name; // 书籍名称
string author; // 作者
string type; // 类型
string press; // 出版社
double price; // 价格
int total; // 总数
int rest; // 剩余数量
};
// 建立图书类型类
class BookType {
public:
BookType() {}
BookType(int id, string type) {
this->id = id;
this->type = type;
}
int getId() const {
return id;
}
string getType() const {
return type;
}
void setType(string type) {
this->type = type;
}
private:
int id; // 图书类型编号
string type; // 图书类型名称
};
// 建立图书类
class Library {
public:
Library() {}
// 初始化
void init();
// 添加书籍
void addBook();
// 修改书籍
void modifyBook();
// 删除书籍
void deleteBook();
// 查找书籍
void searchBook();
// 输出所有书籍信息
void printBooks();
// 按编号排序
void sortById();
// 按书名排序
void sortByName();
// 保存到文件
void saveToFile();
// 从文件中读取
void readFromFile();
private:
vector<Book> books; // 书籍信息
vector<BookType> bookTypes; // 图书类型信息
};
void Library::init() {
// 初始化图书类型信息
bookTypes.push_back(BookType(1, "计算机"));
bookTypes.push_back(BookType(2, "文学"));
bookTypes.push_back(BookType(3, "历史"));
bookTypes.push_back(BookType(4, "经济"));
bookTypes.push_back(BookType(5, "哲学"));
bookTypes.push_back(BookType(6, "心理学"));
bookTypes.push_back(BookType(7, "教育"));
bookTypes.push_back(BookType(8, "体育"));
bookTypes.push_back(BookType(9, "医学"));
bookTypes.push_back(BookType(10, "法律"));
// 初始化书籍信息
books.push_back(Book(1, "C++程序设计基础", "谭浩强", "计算机", "清华大学出版社", 69.0, 10, 10));
books.push_back(Book(2, "三体", "刘慈欣", "文学", "重庆出版社", 29.0, 20, 20));
books.push_back(Book(3, "明朝那些事儿", "当年明月", "历史", "湖南文艺出版社", 49.0, 15, 15));
books.push_back(Book(4, "经济学原理", "曼昆", "经济", "机械工业出版社", 99.0, 8, 8));
books.push_back(Book(5, "论语", "孔子", "哲学", "中华书局", 9.9, 30, 30));
books.push_back(Book(6, "心理学与生活", "吉列", "心理学", "人民邮电出版社", 39.0, 12, 12));
books.push_back(Book(7, "小学数学竞赛", "王德忠", "教育", "人民教育出版社", 25.0, 18, 18));
books.push_back(Book(8, "篮球技术与战术", "何勇", "体育", "北京体育大学出版社", 59.0, 5, 5));
books.push_back(Book(9, "内科学", "王振英", "医学", "人民卫生出版社", 129.0, 3, 3));
books.push_back(Book(10, "宪法", "钱穆", "法律", "北京大学出版社", 19.9, 25, 25));
}
void Library::addBook() {
int id, total, rest, typeId;
string name, author, type, press;
double price;
cout << "请输入书籍编号:";
cin >> id;
cout << "请输入书籍名称:";
cin >> name;
cout << "请输入作者:";
cin >> author;
cout << "请输入书籍类型(如:计算机):";
cin >> type;
cout << "请输入出版社:";
cin >> press;
cout << "请输入价格:";
cin >> price;
cout << "请输入总数:";
cin >> total;
cout << "请输入剩余数量:";
cin >> rest;
// 查找图书类型
bool found = false;
for (int i = 0; i < bookTypes.size(); i++) {
if (bookTypes[i].getType() == type) {
typeId = bookTypes[i].getId();
found = true;
break;
}
}
if (!found) {
typeId = bookTypes.size() + 1;
bookTypes.push_back(BookType(typeId, type));
}
books.push_back(Book(id, name, author, type, press, price, total, rest));
cout << "添加成功!" << endl;
}
void Library::modifyBook() {
int id;
cout << "请输入需要修改的书籍编号:";
cin >> id;
for (int i = 0; i < books.size(); i++) {
if (books[i].getId() == id) {
string name, author, type, press;
double price;
int total, rest, typeId;
cout << "请输入书籍名称:";
cin >> name;
cout << "请输入作者:";
cin >> author;
cout << "请输入书籍类型(如:计算机):";
cin >> type;
cout << "请输入出版社:";
cin >> press;
cout << "请输入价格:";
cin >> price;
cout << "请输入总数:";
cin >> total;
cout << "请输入剩余数量:";
cin >> rest;
// 查找图书类型
bool found = false;
for (int j = 0; j < bookTypes.size(); j++) {
if (bookTypes[j].getType() == type) {
typeId = bookTypes[j].getId();
found = true;
break;
}
}
if (!found) {
typeId = bookTypes.size() + 1;
bookTypes.push_back(BookType(typeId, type));
}
books[i] = Book(id, name, author, type, press, price, total, rest);
cout << "修改成功!" << endl;
return;
}
}
cout << "未找到该书籍!" << endl;
}
void Library::deleteBook() {
int id;
cout << "请输入需要删除的书籍编号:";
cin >> id;
for (int i = 0; i < books.size(); i++) {
if (books[i].getId() == id) {
books.erase(books.begin() + i);
cout << "删除成功!" << endl;
return;
}
}
cout << "未找到该书籍!" << endl;
}
void Library::searchBook() {
int id;
cout << "请输入需要查找的书籍编号:";
cin >> id;
for (int i = 0; i < books.size(); i++) {
if (books[i].getId() == id) {
cout << "编号\t书名\t作者\t类型\t出版社\t价格\t总数\t剩余数量" << endl;
cout << books[i].getId() << "\t" << books[i].getName() << "\t" << books[i].getAuthor() << "\t"
<< books[i].getType() << "\t" << books[i].getPress() << "\t" << books[i].getPrice() << "\t"
<< books[i].getTotal() << "\t" << books[i].getRest() << endl;
return;
}
}
cout << "未找到该书籍!" << endl;
}
void Library::printBooks() {
cout << "编号\t书名\t作者\t类型\t出版社\t价格\t总数\t剩余数量" << endl;
for (int i = 0; i < books.size(); i++) {
cout << books[i].getId() << "\t" << books[i].getName() << "\t" << books[i].getAuthor() << "\t"
<< books[i].getType() << "\t" << books[i].getPress() << "\t" << books[i].getPrice() << "\t"
<< books[i].getTotal() << "\t" << books[i].getRest() << endl;
}
}
void Library::sortById() {
sort(books.begin(), books.end(), [](Book a, Book b) {
return a.getId() < b.getId();
});
}
void Library::sortByName() {
sort(books.begin(), books.end(), [](Book a, Book b) {
return a.getName() < b.getName();
});
}
void Library::saveToFile() {
ofstream outfile("books.txt");
for (int i = 0; i < books.size(); i++) {
outfile << books[i].getId() << " " << books[i].getName() << " " << books[i].getAuthor() << " "
<< books[i].getType() << " " << books[i].getPress() << " " << books[i].getPrice() << " "
<< books[i].getTotal() << " " << books[i].getRest() << endl;
}
outfile.close();
outfile.open("booktypes.txt");
for (int i = 0; i < bookTypes.size(); i++) {
outfile << bookTypes[i].getId() << " " << bookTypes[i].getType() << endl;
}
outfile.close();
cout << "保存成功!" << endl;
}
void Library::readFromFile() {
ifstream infile("books.txt");
int id, total, rest;
string name, author, type, press;
double price;
while (infile >> id >> name >> author >> type >> press >> price >> total >> rest) {
// 查找图书类型
int typeId;
bool found = false;
for (int i = 0; i < bookTypes.size(); i++) {
if (bookTypes[i].getType() == type) {
typeId = bookTypes[i].getId();
found = true;
break;
}
}
if (!found) {
typeId = bookTypes.size() + 1;
bookTypes.push_back(BookType(typeId, type));
}
books.push_back(Book(id, name, author, type, press, price, total, rest));
}
infile.close();
infile.open("booktypes.txt");
int typeId;
while (infile >> typeId >> type) {
bookTypes.push_back(BookType(typeId, type));
}
infile.close();
cout << "读取成功!" << endl;
}
int main() {
Library library;
library.init();
int choice;
while (true) {
cout << "请选择操作:" << endl;
cout << "1.添加书籍" << endl;
cout << "2.修改书籍" << endl;
cout << "3.删除书籍" << endl;
cout << "4.查找书籍" << endl;
cout << "5.输出所有书籍信息" << endl;
cout << "6.按编号排序" << endl;
cout << "7.按书名排序" << endl;
cout << "8.保存到文件" << endl;
cout << "9.从文件中读取" << endl;
cout << "0.退出" << endl;
cin >> choice;
switch (choice) {
case 1: {
library.addBook();
break;
}
case 2: {
library.modifyBook();
break;
}
case 3: {
library.deleteBook();
break;
}
case 4: {
library.searchBook();
break;
}
case 5: {
library.printBooks();
break;
}
case 6: {
library.sortById();
break;
}
case 7: {
library.sortByName();
break;
}
case 8: {
library.saveToFile();
break;
}
case 9: {
library.readFromFile();
break;
}
case 0: {
cout << "谢谢使用!" << endl;
return 0;
}
default: {
cout << "输入有误,请重新输入!" << endl;
break;
}
}
}
return 0;
}
```
以上就是完整的代码实现了。这个图书管管理系统包含了建立书籍类、图书类型类、图书类,书籍、图书类型、图书信息的初始化、添加、修改、删除、查找,图书信息的输出,对图书信息按编号、书名排序,文件的保存和文件的读取。您可以根据需要进行修改和扩展。