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

📄 record.h

📁 our homework big project
💻 H
字号:
#ifndef _RECORD_H_
#define _RECORD_H_

#pragma warning(disable: 4786)
#include "CatalogManager.h"
#include "Exception.h"
#include <string>
#include <fstream>
#include <vector>
#include "stdafx.h"
using namespace std;

class RecordHead
{

public:
	bool m_valid;				//有效无效的标志
	int m_recordID;				//记录的序号
	int m_nextRecordID;			//记录链中下一条记录的序号
	
	RecordHead(bool valid = false, int recordID = -1, int nextID = -1);
   

};


class RecordManager
{
	int m_recordAmount;						//记录条数
	int m_firstBlank;						//第一条空白记录的序号
 
	CatalogFile m_cataFile;
	int m_attrAmount;						//属性个数
	
	fstream m_recdFile;						//记录文件流
	fstream m_cataIn;						//日志文件流

public:	
	RecordManager(const string & tableName);
	~RecordManager();

	int GetRecordAmount();					//获取属性个数
	int GetFirstBlank();							//获取第一个空白位置
	void WriteFileHead(int amount, int first);		//写入recd文件头信息
	
	int GetSize();									//获取一条记录大小
	
	RecordHead GetRecordHead(int id);				//获取记录头信息
	void WriteRecordHead(int id, RecordHead head);	//写入记录头信息
	
	
	void EnValid(int id, bool flag);				//置Valid为有效活无效
	
	bool  IsEnd(int id);							//判断是否最后一条记录
	
	void   WriteRecord(int id,const vector<string> & v_str,int line); //写入记录
	string GetRecord(int id);						//获取记录字符串
	

	template <class T>								//读写属性值(flag==‘i’为读
													//            flag=='o' 为写)
    
		bool RecordAtrrIO(T &attr, int recdID, int attrID, char flag,int size){
		
		RecordHead head;
		CatalogFile catatmp;
		int pos=0;									//属性再记录中的位置

		if(attrID>=m_attrAmount) 
			return false;
		
		m_cataIn.seekg(20, ios::beg);
		for(int i=0;  i<attrID; i++)
		{
			m_cataIn.read((char*)&catatmp, sizeof(catatmp));
			pos+=catatmp.size;
	
		}

		if(flag=='i')
		{
            m_recdFile.seekg((sizeof(int)*2+sizeof(RecordHead)), ios::beg);
            m_recdFile.seekg((sizeof(RecordHead)+GetSize())*recdID, ios::cur);
			 m_recdFile.seekg(pos, ios::cur);
			 m_recdFile.read((char *)&attr,size);
			 
			 
		}
		else
            if(flag=='o')
			{
				m_recdFile.seekp((sizeof(int)*2+sizeof(RecordHead)), ios::beg);
				m_recdFile.seekp((sizeof(RecordHead)+GetSize())*recdID, ios::cur);
				m_recdFile.seekp(pos, ios::cur);
				m_recdFile.write((char *)&attr,size);

			}
		return true;	
            
	}

};

#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -