📄 bookmanage_file.h
字号:
#include <iostream>
#include <fstream>
#include <list>
#include <algorithm>
#include <string>
using namespace std;
const char* szDbName = "output.data";
const char* szFileName = "bookinfo.txt";
typedef struct {
char key[14];//要多分配一个单元用来存放'\0'
string BookName;
string Author;
string Publisher;
string PubDate;
} BookRecord;
typedef list<BookRecord> BookList;
//从文本文件中读取图书信息,文本的格式为
//7-05-012050-5|计算机算法|李劲|高等教育出版社|2002-5-1
bool readDataFromFile(BookList& BL);
void genDB(const BookList& BL);
void PrintBookInfo(const BookList& BL);
bool KeyComp(const BookRecord& br1, const BookRecord& br2);
bool NameComp(const BookRecord& br1, const BookRecord& br2);
bool AuthorComp(const BookRecord& br1, const BookRecord& br2);
bool PubDateComp(const BookRecord& br1, const BookRecord& br2);
bool KeyComp(const BookRecord& br1, const BookRecord& br2){
if (br1.key[0] < br2.key[0]) return true;
else return false;
}
bool NameComp(const BookRecord& br1, const BookRecord& br2){
if (br1.BookName < br2.BookName) return true;
else return false;
}
bool AuthorComp(const BookRecord& br1, const BookRecord& br2){
if (br1.Author < br2.Author) return true;
else return false;
}
bool PubDateComp(const BookRecord& br1, const BookRecord& br2){
if (br1.PubDate < br2.PubDate) return true;
else return false;
}
void PrintBookInfo(const BookList& BL){
if( BL.empty() )
cout<<"没有图书信息!";
else{
/*定义遍历链表的迭代子*/
list<BookRecord>::const_iterator iter = BL.begin();
for(int i = 0; i<BL.size(); i++ ){
cout<<(*iter).key<<" | "
<<(*iter).BookName<<" | "
<<(*iter).Author<<" | "
<<(*iter).Publisher<<" | "
<<(*iter).PubDate<<endl;
iter++;
}
cout << endl;
}
}
bool readDataFromFile(BookList& BL){
//打开图书文本文件
ifstream bkFile(szFileName);
if ( !bkFile ) {
cerr << "不能打开文件 -" <<szFileName;
cout<<endl;
return false;
}
//存放一条图书记录
string strBookRec;
BookRecord abookRec;
while( getline(bkFile,strBookRec) ){
/*将strBookRec按'|'进行分解*/
int pos;
pos = strBookRec.find_first_of('|');
strcpy(abookRec.key, strBookRec.substr(0,pos).c_str());
strBookRec = strBookRec.substr(pos+1,strBookRec.length()); // 从中间第n+1字符到未尾的字符串
pos = strBookRec.find_first_of('|');
abookRec.BookName = strBookRec.substr(0,pos); // 前面的n个字符
strBookRec = strBookRec.substr(pos+1,strBookRec.length()); // 从中间第n+1字符到未尾的字符串
pos = strBookRec.find_first_of('|');
abookRec.Author = strBookRec.substr(0,pos); // 前面的n个字符
strBookRec = strBookRec.substr(pos+1,strBookRec.length()); // 从中间第n+1字符到未尾的字符串
pos = strBookRec.find_first_of('|');
abookRec.Publisher = strBookRec.substr(0,pos); // 前面的n个字符
strBookRec = strBookRec.substr(pos+1,strBookRec.length()); // 从中间第n+1字符到未尾的字符串
pos = strBookRec.find_first_of('|');
abookRec.PubDate = strBookRec.substr(0,pos); // 前面的n个字符
strBookRec = strBookRec.substr(pos+1,strBookRec.length()); // 从中间第n+1字符到未尾的字符串
BL.push_back(abookRec);
}
return true;
}
void genDB(const BookList& BL){
ofstream outfile(szDbName);
list<BookRecord>::const_iterator iter = BL.begin();
if(!outfile)
cerr << "无法创建图书信息数据库!";
else {
for(int i = 0; i<BL.size(); i++ ){
outfile <<(*iter).key<<" | "
<<(*iter).BookName<<" | "
<<(*iter).Author<<" | "
<<(*iter).Publisher<<" | "
<<(*iter).PubDate<<endl;
iter++;
} //end for
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -