亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? bookfind.h

?? 一個海量圖書查詢系統
?? H
字號:
#include "define.h"

class BookFind
{
private:
	book data;              //當前處理的圖書記錄
	int success;           //折半查找標志
    long *HashData;    //申請HASH表的存儲空間
	indexISBN *IndexData;  //保存ISBN索引表
public:
	BookFind(void);
	~BookFind(void);
	book operator=(book c);  //運算符重載
    void DisplayData(void) const;  //顯示當前處理的圖書記錄
	int SeqFind(char ISBN[11]);      //順序查詢與輸入的ISBN相同的所有ISBN(隨機產生的ISBN可能相同),并顯示。
	int IndexSeqFind(char ISBN[11]);  //索引順序查詢與輸入的ISBN相同的所有ISBN(隨機產生的ISBN可能相同),并顯示。
    long BiSearch(char ISBN[11],long start,long end);     //在索引表中折半查找ISBN號,成功則success=1,返回其位置(在索引表中的相對位置)
	int IndexBinFind(char ISBN[11]);  //索引折半查詢與輸入的ISBN相同的所有ISBN(隨機產生的ISBN可能相同),并顯示。
	int HashIndexBinFind(char ISBN[11]);  //哈希索引折半查詢與輸入的ISBN相同的所有ISBN(隨機產生的ISBN可能相同),并顯示。
 };

book BookFind::operator=(book c)
{
	book x;
    strcpy(x.ISBN,c.ISBN);
	x.category=c.category;
	strcpy(x.bookname,c.bookname);
	strcpy(x.authors,c.authors);
	return x;
}

BookFind::BookFind(void)  //構造函數
{  
	success=0;
	IndexData=new indexISBN[RECORDNUMBER];    //保存ISBN索引表
	if(IndexData==NULL) { cout<<endl<<" 索引表內存申請失敗! "<<endl;  exit(0); }
	ifstream indexfile;   //定義輸入的索引文件
    indexfile.open("indexdata.dat",ios::nocreate|ios::binary);
	if(!indexfile) 
	{
       cout<<endl<<"  !! ERROR:Cannot open file 'indexdata.dat'. "<<endl;
	   exit(0);
	} 
    long size=0;
	indexISBN tempINDEX;   //臨時變量
	while(indexfile.good()&&size<RECORDNUMBER)     //讀索引數據文件信息
	{
		indexfile.read((char *)&tempINDEX,sizeof(struct indexISBN));
        IndexData[size++]=tempINDEX;
	}
    indexfile.close();
    HashData=new long[HASHSIZE];    //申請HASH表的存儲空間
	if(HashData==NULL) { cout<<endl<<" HASH表內存申請失敗! "<<endl;  exit(0); }
    ifstream hashfile;
	hashfile.open("hashdata.dat",ios::binary);      //打開HASH表文件hashdata.dat
	if(!hashfile)
	{
       cout<<endl<<"  !! ERROR:Cannot open file: hashdata.dat  "<<endl;
       exit(0);
	} 
 	int hashnum=0;
	while(hashfile.good()&&hashnum<HASHSIZE)     //將HASH表讀入內存
	{
	    hashfile.read((char *)&HashData[hashnum],sizeof(long));    
        hashnum=hashnum+1;
	}
    hashfile.close();
}

BookFind::~BookFind(void)   //統一保存文件頭信息
{ 
     delete []IndexData;
	 delete []HashData;
}

void BookFind::DisplayData(void) const
{
	cout<<data.ISBN<<' '<<data.category<<' '<<data.bookname<<' '<<data.authors<<endl;
}

int BookFind::SeqFind(char ISBN[11])
{   //尋找元素序列號為ISBN的所有圖書記錄,因為可能重復,故需要全程搜索
    int snum=0;
    ifstream myinfile;
	myinfile.open("book.dat",ios::binary);
	if(myinfile)
	{
	    long currptr=0;      //圖書記錄的起始下標
        cout<<endl<<"順序查詢ISBN為: "<<ISBN<<" 的圖書的,請稍候......"<<endl;
        DWORD dwstart,dwend;   
        dwstart=GetTickCount();    //記錄開始時間
        while(myinfile.good()&&currptr<RECORDNUMBER)
		{   
			myinfile.read((char *)&data,sizeof(book));
			if(strcmp(data.ISBN,ISBN)==0) { snum++;  cout<<"第"<<snum<<"條記錄:"; DisplayData();  }   //找到并顯示
			currptr++;
		}
        myinfile.close();
        dwend=GetTickCount();   //記錄結束時間
        cout<<"共耗時約:  "<<dwend-dwstart<<" 毫秒。"<<endl;
        cout<<"共找到 "<<snum<<" 條圖書記錄!"<<endl;
	}
	else
	{
       cout<<endl<<"  !! ERROR:Cannot open file 'book.dat'. "<<endl;  exit(0); 
	} 
    return snum;      
}

int BookFind::IndexSeqFind(char ISBN[11])
{   
    int snum=0;
//在索引表中順序查詢
    ifstream myinfile;
	myinfile.open("book.dat",ios::binary);
	if(!myinfile) {cout<<endl<<"  !! ERROR:Cannot open file 'book.dat'. "<<endl;  exit(0);  };
    cout<<endl<<"索引順序查詢ISBN為: "<<ISBN<<" 的圖書的,請稍候......"<<endl;
    DWORD dwstart,dwend;   
    dwstart=GetTickCount();    //記錄開始時間
    long size=0;
	while(size<RECORDNUMBER)
	{
		if(strcmp(IndexData[size].ISBN,ISBN)==0)    //在索引表中存在
		{
           myinfile.seekg(IndexData[size].serialnumber*sizeof(struct book));      //定位數據在book中的位置
           myinfile.read((char *)&data,sizeof(struct book));            //讀入數據
           snum++; 
		   cout<<"第"<<snum<<"條記錄:"; DisplayData();    //找到并顯示
		}
		if(strcmp(IndexData[size].ISBN,ISBN)>0) break;
		size++;
	}
    myinfile.close();
    dwend=GetTickCount();   //記錄結束時間
    cout<<"共耗時約:  "<<dwend-dwstart<<" 毫秒。"<<endl;
    cout<<"共找到 "<<snum<<" 條圖書記錄!"<<endl;
    return snum;      
}

long BookFind::BiSearch(char ISBN[11],long start,long end)  
 //折半查找ISBN號,成功則success=1,返回其位置(在索引表中的相對位置)。
{  
    success=0;
	long low=start, high=end-1;
    long mid;  
    while(low<=high)
    {
	   mid=(low+high)/2;
	   if(strcmp(IndexData[mid].ISBN,ISBN)==0) { success=1;  return mid; }
	    else if(strcmp(IndexData[mid].ISBN,ISBN)<0) low=mid+1;
		  else high=mid-1;
    }
    return high;
}

int BookFind::IndexBinFind(char ISBN[11])
{   //在索引表中折半查詢
    long Findnumber=0;      //找到的圖書計數
    ifstream mydatafile;
    mydatafile.open("book.dat",ios::binary);  //打開數據源文件
    if(!mydatafile)
    {
      cout<<endl<<"  !! ERROR:Cannot open file 'book.dat'. "<<endl;
      exit(0);
    }
    cout<<endl<<"索引折半查詢ISBN為: "<<ISBN<<" 的圖書的,請稍候......"<<endl;
    DWORD dwstart,dwend;   
    dwstart=GetTickCount();    //記錄開始時間
    long Fpos=BiSearch(ISBN,0,RECORDNUMBER);    //Fpos為在索引表中的相對位置
	if(success==1)
	{
 	   long Fup=Fpos-1;
	   long Fdown=Fpos+1;      //在找到點Fpos分別向上和向下查詢是否有相同的ISBN
	   if(IndexData[Fpos].serialnumber>-1&&IndexData[Fpos].serialnumber<RECORDNUMBER)    //保證數據的正確性
	   {
        mydatafile.seekg(IndexData[Fpos].serialnumber*sizeof(struct book));      //定位數據在book中的位置
        mydatafile.read((char *)&data,sizeof(struct book));       //讀入數據
  		cout<<"第"<<Findnumber<<"條記錄:"; DisplayData();    //找到并顯示  
        Findnumber=Findnumber+1;                             //找到的書計數加1
	   }
      while(Fup>=0&&strcmp(IndexData[Fup].ISBN,ISBN)==0)    //向上查詢
	  {
	   if(IndexData[Fup].serialnumber>-1&&IndexData[Fup].serialnumber<RECORDNUMBER)    //保證數據的正確性
	   {
        mydatafile.seekg(IndexData[Fpos].serialnumber*sizeof(struct book));      //定位數據在book中的位置
        mydatafile.read((char *)&data,sizeof(struct book));       //讀入數據
  		cout<<"第"<<Findnumber<<"條記錄:"; DisplayData();    //找到并顯示  
        Findnumber=Findnumber+1;                             //找到的書計數加1
	   }
       Fup=Fup-1;             //繼續向上
	  }
      while(Fdown<RECORDNUMBER&&strcmp(IndexData[Fdown].ISBN,ISBN)==0)    //向下查詢
	  {
	   if(IndexData[Fdown].serialnumber>-1&&IndexData[Fdown].serialnumber<RECORDNUMBER)    //保證數據的正確性
	   {
        mydatafile.seekg(IndexData[Fpos].serialnumber*sizeof(struct book));      //定位數據在book中的位置
        mydatafile.read((char *)&data,sizeof(struct book));       //讀入數據
  		cout<<"第"<<Findnumber<<"條記錄:"; DisplayData();    //找到并顯示  
        Findnumber=Findnumber+1;                             //找到的書計數加1
	   }
       Fdown=Fdown+1;             //繼續向下
	  }
	}
    mydatafile.close();
    dwend=GetTickCount();   //記錄結束時間
    cout<<"共耗時約:  "<<dwend-dwstart<<" 毫秒。"<<endl;
    cout<<"共找到 "<<Findnumber<<" 條圖書記錄!"<<endl;
    return Findnumber;      
}

int BookFind::HashIndexBinFind(char ISBN[11])
{   //在哈希表查詢和索引表中折半查詢
    long Findnumber=0;      //找到的圖書計數
    ifstream mydatafile;
    mydatafile.open("book.dat",ios::binary);  //打開數據源文件
    if(!mydatafile)
    {
      cout<<endl<<"  !! ERROR:Cannot open file 'book.dat'. "<<endl;
      exit(0);
    }
    cout<<endl<<"哈希索引折半查詢ISBN為: "<<ISBN<<" 的圖書的,請稍候......"<<endl;
    DWORD dwstart,dwend;   
    dwstart=GetTickCount();    //記錄開始時間
    char temp[5];
	int j;
	int hashvalue;
	for(j=0;j<=3;j++)  temp[j]=ISBN[j];     //取ISBN中的第0-3共四位數據
    temp[4]='\0';
	hashvalue=atoi(temp);    //將字符串轉換為記錄對應的HASH數值
    long Fpos=BiSearch(ISBN,HashData[hashvalue],HashData[hashvalue+1]);    //Fpos為在索引表中的相對位置
	if(success==1)
	{
 	   long Fup=Fpos-1;
	   long Fdown=Fpos+1;      //在找到點Fpos分別向上和向下查詢是否有相同的ISBN
	   if(IndexData[Fpos].serialnumber>-1&&IndexData[Fpos].serialnumber<RECORDNUMBER)    //保證數據的正確性
	   {
        mydatafile.seekg(IndexData[Fpos].serialnumber*sizeof(struct book));      //定位數據在book中的位置
        mydatafile.read((char *)&data,sizeof(struct book));       //讀入數據
  		cout<<"第"<<Findnumber<<"條記錄:"; DisplayData();    //找到并顯示  
        Findnumber=Findnumber+1;                             //找到的書計數加1
	   }
      while(Fup>=0&&strcmp(IndexData[Fup].ISBN,ISBN)==0)    //向上查詢
	  {
	   if(IndexData[Fup].serialnumber>-1&&IndexData[Fup].serialnumber<RECORDNUMBER)    //保證數據的正確性
	   {
        mydatafile.seekg(IndexData[Fpos].serialnumber*sizeof(struct book));      //定位數據在book中的位置
        mydatafile.read((char *)&data,sizeof(struct book));       //讀入數據
  		cout<<"第"<<Findnumber<<"條記錄:"; DisplayData();    //找到并顯示  
        Findnumber=Findnumber+1;                             //找到的書計數加1
	   }
       Fup=Fup-1;             //繼續向上
	  }
      while(Fdown<RECORDNUMBER&&strcmp(IndexData[Fdown].ISBN,ISBN)==0)    //向下查詢
	  {
	   if(IndexData[Fdown].serialnumber>-1&&IndexData[Fdown].serialnumber<RECORDNUMBER)    //保證數據的正確性
	   {
        mydatafile.seekg(IndexData[Fpos].serialnumber*sizeof(struct book));      //定位數據在book中的位置
        mydatafile.read((char *)&data,sizeof(struct book));       //讀入數據
  		cout<<"第"<<Findnumber<<"條記錄:"; DisplayData();    //找到并顯示  
        Findnumber=Findnumber+1;                             //找到的書計數加1
	   }
       Fdown=Fdown+1;             //繼續向下
	  }
	}
    mydatafile.close();
    dwend=GetTickCount();   //記錄結束時間
    cout<<"共耗時約:  "<<dwend-dwstart<<" 毫秒。"<<endl;
    cout<<"共找到 "<<Findnumber<<" 條圖書記錄!"<<endl;
    return Findnumber;      
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩的一区二区| 久久综合久久综合久久综合| 久久成人综合网| 中文字幕在线观看不卡视频| 制服视频三区第一页精品| 不卡影院免费观看| 久久99国产精品麻豆| 中文字幕一区二区三区精华液| 欧美成人伊人久久综合网| 91视频国产观看| 国产在线不卡一区| 视频一区二区不卡| 一区二区三国产精华液| 日本一二三四高清不卡| 26uuu久久综合| 91精品一区二区三区在线观看| 972aa.com艺术欧美| 国产精品一区二区在线播放| 秋霞国产午夜精品免费视频| 亚洲国产日韩a在线播放| 国产精品电影一区二区三区| 久久久久久久久久电影| 欧美一级视频精品观看| 欧美三级电影精品| 91精彩视频在线观看| 99riav一区二区三区| 成人综合婷婷国产精品久久蜜臀| 国产乱子轮精品视频| 久久国产麻豆精品| 美女视频黄久久| 日本欧美在线观看| 日韩电影免费在线看| 亚洲电影在线免费观看| 夜色激情一区二区| 一区二区三区在线视频免费| 亚洲青青青在线视频| 亚洲婷婷国产精品电影人久久| 中文字幕不卡在线观看| 国产欧美视频一区二区| 久久久久久免费网| 久久久www免费人成精品| 久久久高清一区二区三区| 久久久久久久久97黄色工厂| 国产亚洲成年网址在线观看| 国产亚洲精品7777| 国产精品成人免费在线| 亚洲欧美国产高清| 一区二区三区精品| 亚洲第一会所有码转帖| 午夜精品福利视频网站| 蜜桃精品视频在线观看| 久草中文综合在线| 成人一区二区视频| 91老师国产黑色丝袜在线| 欧美午夜免费电影| 欧美精品在线视频| 欧美mv日韩mv国产网站| 国产亚洲精品精华液| 国产精品成人在线观看| 亚洲影院在线观看| 五月天激情综合| 狠狠色狠狠色综合系列| 大胆欧美人体老妇| 91传媒视频在线播放| 欧美电影一区二区| 精品国偷自产国产一区| 欧美国产日韩亚洲一区| 亚洲人成亚洲人成在线观看图片| 亚洲第四色夜色| 久久电影网电视剧免费观看| 成人动漫av在线| 欧美吻胸吃奶大尺度电影 | 色综合久久久久| 欧美三级日韩在线| 精品捆绑美女sm三区| 中文无字幕一区二区三区| 亚洲一区二区三区四区五区中文 | 亚洲欧洲精品成人久久奇米网| 亚洲最色的网站| 韩国av一区二区| 色av成人天堂桃色av| 精品女同一区二区| 亚洲视频免费在线观看| 视频一区国产视频| eeuss鲁一区二区三区| 欧美一级生活片| 亚洲欧美另类小说视频| 久久精品国产在热久久| 色欲综合视频天天天| 精品粉嫩aⅴ一区二区三区四区| 国产精品国产三级国产普通话蜜臀| 亚洲超丰满肉感bbw| 高清不卡一区二区| 777xxx欧美| 亚洲精品成人精品456| 狠狠色狠狠色合久久伊人| 91国产视频在线观看| 国产日韩欧美不卡| 日本aⅴ亚洲精品中文乱码| 91亚洲精品乱码久久久久久蜜桃| 欧美精品一区视频| 午夜精品国产更新| 日本福利一区二区| 国产精品区一区二区三| 久久精品国产99国产精品| 欧美性极品少妇| 亚洲六月丁香色婷婷综合久久 | 精品国产免费人成电影在线观看四季 | 精品视频在线免费看| 国产精品青草综合久久久久99| 麻豆一区二区三区| 在线成人高清不卡| 一区二区三区在线影院| av毛片久久久久**hd| 欧美激情一区不卡| 国产美女精品在线| www成人在线观看| 美国毛片一区二区| 日韩欧美亚洲另类制服综合在线| 亚洲成人在线网站| 欧美午夜精品电影| 亚洲国产美女搞黄色| 色婷婷狠狠综合| 亚洲色图一区二区| 91视频精品在这里| 亚洲视频在线一区| 91免费国产在线| 亚洲欧洲另类国产综合| 99精品久久只有精品| 久久99久久久欧美国产| 欧美日韩高清一区二区三区| 亚洲福利视频一区二区| 欧美日韩极品在线观看一区| 天堂一区二区在线免费观看| 91精品国产综合久久蜜臀 | av中文字幕亚洲| 亚洲三级在线播放| 91免费在线视频观看| 日韩毛片高清在线播放| 国产精品青草综合久久久久99| 国产不卡高清在线观看视频| 国产欧美一区二区精品性| 成人av影视在线观看| 国产精品久久免费看| 色综合久久久久综合体| 亚洲国产裸拍裸体视频在线观看乱了| 欧美三级中文字幕| 蜜臀av一区二区| 久久亚洲精品国产精品紫薇| 成人av在线观| 一区二区理论电影在线观看| 欧美美女一区二区三区| 美国一区二区三区在线播放| 久久精品在线免费观看| av一区二区三区在线| 亚洲狠狠爱一区二区三区| 91精品国产综合久久精品麻豆| 久久精品国产精品亚洲精品| 国产欧美日韩综合精品一区二区| 91丨九色丨国产丨porny| 五月婷婷综合在线| 久久蜜臀中文字幕| 色婷婷av一区二区三区之一色屋| 午夜成人免费视频| 久久久久国产精品麻豆| 91麻豆免费观看| 蜜臀精品一区二区三区在线观看 | 成人午夜免费视频| 亚洲精品国产第一综合99久久 | 中文久久乱码一区二区| 一本色道亚洲精品aⅴ| 日本 国产 欧美色综合| 久久精品无码一区二区三区| 91一区二区在线观看| 伦理电影国产精品| 中日韩av电影| 91麻豆精品国产91久久久久| 成人午夜电影网站| 午夜精品久久久久久| 中文一区二区在线观看| 精品视频全国免费看| 国产一区二区影院| 亚洲精品国产成人久久av盗摄| 精品乱码亚洲一区二区不卡| 色综合久久中文综合久久牛| 六月丁香综合在线视频| 亚洲美女视频一区| 精品99一区二区| 欧美性色综合网| 国产aⅴ精品一区二区三区色成熟| 午夜精品久久久久久久99水蜜桃 | 精品一区二区精品| 一卡二卡三卡日韩欧美| 国产蜜臀97一区二区三区| 欧美久久一二区| 91亚洲精品久久久蜜桃| 国产精品一级片| 麻豆国产一区二区| 亚洲自拍偷拍av| 国产精品毛片久久久久久|