資源簡介
小型數據庫設計系統,通過實驗加深對DBMS及其內部實現技術的理解。
實踐系統軟件開發的工程化方法。

代碼片段和文件信息
/******************************************************************?
**?文件名:?Buffer.cpp
**?Copyright?(c)?2001-2002?計算機99F?MiniSQL開發小組其一?
**?創建人:?郭振宇
**?日??期:?2001-11-28
**?修改人:?郭振宇
**?日??期:?2002-01-05
**?描??述:?定義了MiniSQL?buffer模塊所有類和結構
**?版??本:?1.00
******************************************************************/
#include“Buffer.h“
//-------------------------------------------------------
_M_Buffer?Buffer;
unsigned?int?SizeOfPageHead?=?sizeof(_TB_PAGEHEAD);
unsigned?int?BTreeNodeSize?=?(FILE_PAGESIZE?-?SizeOfPageHead)/4;
//-------------------------------------------------------
//?初始化
void?_TB_PAGEHEAD::Initial(unsigned?long?mypageidbool?myisfixed)
{
????this->ulPageID?=?mypageid;
????this->bIsFixed?=?myisfixed;
}
//-------------------------------------------------------
//?初始化
void?_TB_FILECOND::InitialFileCond()
{
????this->ulPageTotal?=?1;
????this->DelFirst.Initialize();
????this->DelLast.Initialize();
????this->NewInsert.ulFilePageID?=?1;
????this->NewInsert.uiOffset?=?SizeOfPageHead;
}
//-------------------------------------------------------
//?文件頭信息(若頁PageID==0則有,否則返回空)
_TB_FILECOND*?_M_Page::Ptr2FileCond()
{
????return?(_TB_FILECOND*?)((char*)this->Ptr2PageBegin?+?SizeOfPageHead);
}
//-------------------------------------------------------
//?成員初始化,開辟內存空間
_M_Page::_M_Page()
{
this->Ptr2PageBegin?=?malloc(FILE_PAGESIZE);
????if(!this->Ptr2PageBegin)??throw?1000;???//?內存開辟失敗
this->Ptr2Head?=?(_TB_PAGEHEAD*)this->Ptr2PageBegin;
this->ulFilePageID?=?0;
this->uiFileID?=?0;
}
//-------------------------------------------------------
//?釋放內存空間
_M_Page::~_M_Page()
{
????this->ulFilePageID?=?0;
this->uiFileID?=?0;
free(this->Ptr2PageBegin);
????this->Ptr2Head?=?0;
????this->Ptr2PageBegin?=?0;
}
//-------------------------------------------------------
//**從文件中調入頁至開辟好的內存空間中
void?_M_Page::LoadFromFile(unsigned?int?fileidunsigned?long?filepageid)
{
????this->uiFileID?=?fileid;
????this->ulFilePageID?=?filepageid;
????if(?Buffer.GetIsNew(fileid)?)???//??文件新建
????{
????????this->Ptr2Head->Initial(filepageid1);???//?初始化頁頭信息
????????this->Ptr2FileCond()->InitialFileCond();?//?初始化文件頭信息
????????Buffer.SetIsNew(fileid0);???????????????//?設置使文件不再為新建狀態(以免下次訪問這個內存頁又要進行頭信息初始化)
????}
????else?if(?filepageid?>=?Buffer.GetPageTotal(fileid)?)?//?比現有文件總頁面要多那么開辟新的頁面加到文件末尾
????{
????????if(?filepageid?-?Buffer.GetPageTotal(fileid)?>?0)?throw?1004;?//?頁編號比現有文件最后一個頁編號+1?還要大(浪費磁盤空間)
????????this->Ptr2Head->Initial(filepageid0);???//?初始化頁頭信息
????????Buffer.AddPageTotal(fileid1);???????????//?使文件總頁數加1
????}
????else?????//?其他情況
????{
????lseek(Buffer.GetPtr2File(fileid)filepageid*FILE_PAGESIZE0);??//?定位到將要取出的文件頁的首地址
????int?temp?=?read(Buffer.GetPtr2File(fileid)this->Ptr2PageBeginFILE_PAGESIZE);?//?讀到內存中
????????if(?temp!=?FILE_PAGESIZE?)??throw?1031;?//?讀失敗
????}
}
//-------------------------------------------------
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄??????????0??2002-06-13?22:03??MiniSQL
?????文件?????205824??2002-09-02?20:33??MiniSQL\MiniSQL.ncb
?????文件??????23522??2002-06-13?22:03??MiniSQL\ctrl_center.cpp
?????文件??????12558??2002-06-13?22:03??MiniSQL\BUFFER.H
?????文件???????3971??2002-06-13?22:03??MiniSQL\CATALOG.H
?????文件??????25765??2002-06-13?22:03??MiniSQL\Buffer.cpp
?????目錄??????????0??2002-06-13?22:03??MiniSQL\Docs
?????文件????2479104??2002-06-13?22:03??MiniSQL\Docs\mini?sql?系統詳細設計說明書.doc
?????文件?????139264??2002-06-13?22:03??MiniSQL\Docs\SQLReadMe.doc
?????文件????????821??2002-06-13?22:03??MiniSQL\Docs\COMMAND.TXT
?????文件??????43998??2002-06-13?22:03??MiniSQL\Docs\新建?文本文檔.txt
?????文件????????308??2002-06-13?22:03??MiniSQL\Docs\test.txt
?????文件????????610??2002-06-13?22:03??MiniSQL\Docs\attention.txt
?????目錄??????????0??2002-06-13?22:03??MiniSQL\DATA
?????目錄??????????0??2002-06-13?22:03??MiniSQL\DATA\BookTest
?????文件??????57344??2002-06-13?22:03??MiniSQL\DATA\BookTest\d.idx
?????文件??????40960??2002-06-13?22:03??MiniSQL\DATA\BookTest\d.dbf
?????文件???????8192??2002-06-13?22:03??MiniSQL\DATA\BookTest\a.idx
?????文件???????4096??2002-06-13?22:03??MiniSQL\DATA\BookTest\a.dbf
?????文件???????1236??2002-06-13?22:03??MiniSQL\ctrl_center.h
?????文件??????38112??2002-06-13?22:03??MiniSQL\CATALOG.CPP
?????文件???????1156??2002-06-13?22:03??MiniSQL\SHOW.H
?????文件???????5986??2002-06-13?22:03??MiniSQL\SHOW.CPP
?????文件???????8874??2002-06-13?22:03??MiniSQL\RECORD.CPP
?????文件???????1788??2002-06-13?22:03??MiniSQL\RECORD.H
?????文件????????250??2002-09-02?20:33??MiniSQL\MiniSQL.plg
?????文件????????208??2002-06-13?22:03??MiniSQL\MiniSQL.h
?????文件???????4388??2002-06-13?22:03??MiniSQL\MiniSQL.dsp
?????文件????????537??2002-06-13?22:03??MiniSQL\MiniSQL.dsw
?????文件??????14997??2002-06-13?22:03??MiniSQL\intepretor.h
............此處省略14個文件信息
- 上一篇:C++ Primer Plus第6版中文版源代碼
- 下一篇:車輛管理系統C++
評論
共有 條評論