⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bookmanage_file.h

📁 用C++写的简单图书馆里源程序
💻 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 + -