• 大小: 882KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: C/C++
  • 标签: C++  数据库  

资源简介

小型数据库设计系统,通过实验加深对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个文件信息

评论

共有 条评论