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

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

?? table.h

?? 使用C++編寫的數據庫管理系統; 擁有自定義數據文件格式
?? H
?? 第 1 頁 / 共 2 頁
字號:
int testCondition(FIELDREC test,FIELDREC expect,SYMBOL op);


class Table
{
	Block * tableIndex;
	int totalField;
	int realField;
	int primaryField;
	unsigned long totalRec;
	unsigned long realRec;

public:
	Table(Block * t);
	unsigned long getTotalRec();
	int getRealField();
	void addField(FIELD k);
	void findField(FIELD & k);
	int addRecord(FIELDREC * values);
	void listField();
	void listRecord(FIELD conditionField,SYMBOL op,FIELDREC expect);
	void listRecord(FIELD conditionField,SYMBOL op,FIELDREC expect,FIELDNODE * head);
	FIELDREC getOneFieldRecord(FIELD  k,int index);  //get record  of the field
	int changeKey(char * newKeyName);
	void deleteRecord(int i);
	void deleteRecord(FIELD conditionField,SYMBOL op,FIELDREC expect);
	int deleteField(FIELD f);
	int update(FIELD setField,FIELDREC setValue,FIELD conditionField,SYMBOL op,FIELDREC expect);

	
};


Table::Table(Block * t)
{
	tableIndex=t;
	totalField = tableIndex->read(2,0);
	realField = tableIndex->read(2,2);
	totalRec = tableIndex->read(4,4);
	realRec = tableIndex->read(4,8);
	primaryField = tableIndex->read(2,12);
}

unsigned long Table::getTotalRec()
{
	return totalRec;
}

int Table::getRealField()
{
	return realField;
}

void Table::addField(FIELD k)
{
	unsigned long fieldBlockP;
	Block fieldBlock;
	int base = (totalField%8)*256;

	if(totalField%8==0)
	{
		fieldBlockP = allocateBlock();
		tableIndex->write(fieldBlockP,4,14+totalField/8*4);
		fieldBlock.clear();
		fieldBlock.setPosition(fieldBlockP);
	
	}
	else
	{
		fieldBlockP = tableIndex->read(4,totalField/8*4+14);
		fieldBlock.load(fieldBlockP);
	}

	k.indexBlock = allocateBlock();
	
	fieldBlock.write(1,1,base);
	fieldBlock.write(k.length,2,1+base);
	fieldBlock.write(k.type,1,3+base);
	fieldBlock.write(k.nl,1,4+base);
	fieldBlock.write(k.indexBlock,4,5+base);
	fieldBlock.write(k.key,1,9+base);
	fieldBlock.writeString(k.name,246,10+base);
	fieldBlock.save();
	
	if(totalField!=0&&totalRec!=0)
	{
		unsigned long totalLength = k.length*totalRec;
		int a1=totalLength/BLOCK_SIZE;
		Block recIndex(k.indexBlock);
		
		for(int i=0;i<=a1;i++)
		{
			recIndex.write(allocateBlock(),4,i*4);
		}
		recIndex.save();
	}


	
	totalField++;
	realField++;
	tableIndex->write(totalField,2,0);
	tableIndex->write(realField,2,2);
	tableIndex->save();

	


}

void Table::findField(FIELD & k)
{
	int i,j;
	Block fieldBlock;
	int base;
	char * name = new char [247];

	for(j=0,i=0;i<realField;i++)
	{
		do{
			if(j%8==0)
				fieldBlock.load(tableIndex->read(4,j/8*4+14));
			base = (j%8)*256;
			j++;
		}while(!fieldBlock.read(1,0+base));
		name[0]=0;		
		if(fieldBlock.read(1,0+base))
		{
			fieldBlock.readString(name,246,10+base);
			if(strcmp(name,k.name)==0)
			{
				k.valid=1;
				k.length = fieldBlock.read(2,1+base);
				k.type =(SYMBOL) fieldBlock.read(1,3+base);
				k.nl = (int)fieldBlock.read(1,4+base);
				k.indexBlock = fieldBlock.read(4,5+base);
				k.key = fieldBlock.read(1,9+base);
				return;
			}
		}

	}
	k.valid = 0;  //if not find valid=0
}	


int Table::addRecord(FIELDREC * values)
{
	int i,j;
	int base;
	FIELD * fields = new FIELD[realField];
	Block fieldBlock;


	for(j=0, i=0;i<realField;i++)     //read out all fields
	{
		do{
			if(j%8==0)
				fieldBlock.load(tableIndex->read(4,j/8*4+14));
			base = (j%8)*256;
			j++;
		}while(!fieldBlock.read(1,0+base));
		
		fields[i].name = new char[247];
		fields[i].valid =1;
		fields[i].length = fieldBlock.read(2,1+base);
		fields[i].type=(SYMBOL) fieldBlock.read(1,3+base);
		fields[i].nl= fieldBlock.read(1,4+base);
		fields[i].indexBlock= fieldBlock.read(4,5+base);
		fields[i].key = fieldBlock.read(1,9+base);
		fieldBlock.readString(fields[i].name,246,10+base);

	}

	int typeFlag;
	for(i=0;i<realField;i++)   //type and null check
	{
		if(fields[i].nl==0&&values[i].value==0)  //can not empty but values not exits
		{
			cout<<"Field "<<fields[i].name<<" can't null!"<<endl;
			return 1;  //report error
		}
		typeFlag = 0;
		if(values[i].type = NUM)
		{
			switch(fields[i].type)
			{
			case BYTE:
				if(atoi(values[i].value)>255||atoi(values[i].value)<0)
					typeFlag=1;
				break;
			case INT:
				if(atoi(values[i].value)<-32768||atoi(values[i].value)>32767)
					typeFlag=1;
				break;
			//case LONG:
			}
			values[i].type = fields[i].type;
		}
		else
		{
			if(values[i].type!=NL&&values[i].type!=fields[i].type)
				typeFlag=1;
		}
		if(typeFlag)
		{
			cout<<"Field "<<fields[i].name<<" type dismatch!"<<endl;
			return 1;
		}			
		if(fields[i].key)  //if primary key,value must be unique
		{
			FIELDREC fr1,fr2;					
					
			for(j=0;j<(long)totalRec;j++)
			{
				fr2=getOneFieldRecord(fields[0],j);
				if(atoi(fr2.value))
				{
					fr1=getOneFieldRecord(fields[i],j);
					if(!strcmp(fr1.value,values[i].value))												
						return 2;
				}
			}
		}
			
	}

	//if no error ,write to database
	Block indexBlock,recBlock;
	unsigned long nextIndexBlockP,nextRecBlockP;
	int a1,a2,b1,b2;
	unsigned char * ucWord =new unsigned char[1024];
	
	for(i=0;i<realField;i++)
	{
		indexBlock.load(fields[i].indexBlock);
		if(totalRec ==0)
		{
			indexBlock.write(allocateBlock(),4,0);
			indexBlock.save();
		}
		a1=(fields[i].length*totalRec)/BLOCK_SIZE;
		a2=(fields[i].length*totalRec)%BLOCK_SIZE;
		b1=a1/(BLOCK_SIZE/4-1);
		b2=a1%(BLOCK_SIZE/4-1);
		for(j=0;j<b1;j++)
			indexBlock.load(indexBlock.read(4,BLOCK_SIZE-4));
		recBlock.load(indexBlock.read(4,b2*4));			
	
		getUcWord(ucWord,fields[i].length,values[i]);

		for(j=0;j<fields[i].length;j++)
		{
			if(a2==BLOCK_SIZE)  //last block is full
			{
				recBlock.save();
				b2++;			
				if(b2==BLOCK_SIZE/4-1)
				{
					nextIndexBlockP=allocateBlock();
					indexBlock.write(nextIndexBlockP,4,BLOCK_SIZE-4);
					indexBlock.save();
					indexBlock.clear();
					indexBlock.setPosition(nextIndexBlockP);
					b2=0;
				}
				nextRecBlockP = allocateBlock();
				indexBlock.write(nextRecBlockP,4,b2*4);
				indexBlock.save();
				recBlock.clear();
				recBlock.setPosition(nextRecBlockP);
				a2=0;
			}
			recBlock.write(ucWord[j],1,a2);
			a2++;
		}
		recBlock.save();
		
	}
	//write finish , modify table imformation
	totalRec++;
	realRec++;
		
	tableIndex->write(totalRec,4,4);
	tableIndex->write(realRec,4,8);
	tableIndex->save();
	return 0;
}

void Table::listField()
{
	Block fieldBlock;
	FIELD k;
	char fieldname[247];
	int i,j,base;
	cout<<setw(15)<<"Name"
			<<setw(8)<<"type"
			<<setw(8)<<"Length"
			<<setw(6)<<"Null"
			<<setw(6)<<"KEY"
			<<setw(12)<<"IndexBlock"<<endl;
	cout<<setfill('-')<<setw(15)<<" "
			<<setw(8)<<" "
			<<setw(8)<<" "
			<<setw(6)<<" "
			<<setw(6)<<" "
			<<setw(12)<<" "<<setfill(' ')<<endl;
	for(j=0, i=0;i<realField;i++)     
	{
		do{
			if(j%8==0)
				fieldBlock.load(tableIndex->read(4,j/8*4+14));
			base = (j%8)*256;
			j++;
		}while(!fieldBlock.read(1,0+base));
		
		k.name = fieldname;
		k.name[0]=0;
		k.valid =1;
		k.length = fieldBlock.read(2,1+base);
		k.type=(SYMBOL) fieldBlock.read(1,3+base);
		k.nl= fieldBlock.read(1,4+base);
		k.indexBlock= fieldBlock.read(4,5+base);
		k.key = fieldBlock.read(1,9+base);
		fieldBlock.readString(k.name,246,10+base);

		cout<<setw(15)<<k.name<<setw(8);
		outType(k.type);
		if (k.type==CHAR)
			cout<<setw(8)<<k.length-1;
		else
			cout<<setw(8)<<k.length;
		cout<<setw(6)<<k.nl
			<<setw(6)<<k.key
			<<setw(12)<<k.indexBlock<<endl;

	}
}

 FIELDREC Table::getOneFieldRecord(FIELD  k,int index)
{
	int a1,a2,b1,b2,j;
	Block indexBlock,recBlock;
	unsigned char * ucWord =new unsigned char[1024];
	unsigned long nextIndexBlockP,nextRecBlockP;
	FIELDREC kr;
	kr.type = k.type;
	kr.value = new char[256];
	indexBlock.load(k.indexBlock);
	a1=(k.length*index)/BLOCK_SIZE;
	a2=(k.length*index)%BLOCK_SIZE;
	b1=a1/(BLOCK_SIZE/4-1);
	b2=a1%(BLOCK_SIZE/4-1);
	for(j=0;j<b1;j++)
			indexBlock.load(indexBlock.read(4,BLOCK_SIZE-4));
	recBlock.load(indexBlock.read(4,b2*4));	
	
	for(j=0;j<k.length;j++)
		{
			if(a2==BLOCK_SIZE)  //last block is full
			{
				
				b2++;			
				if(b2==BLOCK_SIZE/4-1)
				{
					nextIndexBlockP=indexBlock.read(4,BLOCK_SIZE-4);					
					indexBlock.load(nextIndexBlockP);
					b2=0;
				}
				nextRecBlockP = indexBlock.read(4,b2*4);
				recBlock.load(nextRecBlockP);				
				a2=0;
			}
			ucWord[j]=(unsigned char)recBlock.read(1,a2);

			a2++;
		}
	getFieldRec(ucWord,k.length,kr);
	return kr;
}

 int Table::changeKey(char * newKeyName)
 {
	 int i,j,base,flag=0;
	 FIELD readField;
	 Block fieldBlock;

	 readField.name = new char[246];

	for(j=0, i=0;i<realField;i++)     
	{
		do{
			if(j%8==0)		
				fieldBlock.load(tableIndex->read(4,j/8*4+14));
							
			base = (j%8)*256;
			j++;
		}while(!fieldBlock.read(1,0+base));
				
		readField.key = fieldBlock.read(1,9+base);
		if(readField.key)
		{
			fieldBlock.write((int)0,1,9+base);
			fieldBlock.save();
		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美久久久久久久久| 欧美亚洲尤物久久| 麻豆久久一区二区| 亚洲一区在线观看网站| 亚洲在线中文字幕| 亚洲国产sm捆绑调教视频| 亚洲激情中文1区| 亚洲制服丝袜av| 日韩中文字幕不卡| 狂野欧美性猛交blacked| 久久97超碰色| 国产一区二区三区在线看麻豆| 精品无人区卡一卡二卡三乱码免费卡 | 日韩三级精品电影久久久| 在线91免费看| 日韩精品在线一区二区| 日韩欧美视频一区| 欧美激情在线看| 中文字幕欧美一| 亚洲第一电影网| 麻豆91在线看| 99久久婷婷国产综合精品| 欧美揉bbbbb揉bbbbb| 日韩三级.com| 国产精品美女久久久久久久久 | 色综合久久久网| 欧美三级午夜理伦三级中视频| 欧美男男青年gay1069videost | 91国产免费观看| 7777精品伊人久久久大香线蕉超级流畅 | 久久色在线视频| 成人免费一区二区三区视频| 亚洲午夜精品17c| 国产乱码精品一区二区三区av| 99精品偷自拍| 日韩一区二区三区视频在线观看| 久久精品一区蜜桃臀影院| 夜夜亚洲天天久久| 国产一区视频网站| 欧美视频在线一区二区三区| 久久综合色一综合色88| 亚洲一区二区在线观看视频| 国产呦萝稀缺另类资源| 色婷婷综合久久久中文一区二区| 欧美成人bangbros| 有坂深雪av一区二区精品| 国产伦精一区二区三区| 欧美日韩激情在线| 国产精品国产三级国产普通话蜜臀 | 国产精品国产三级国产a| 亚洲第一狼人社区| 99re热视频这里只精品| 精品少妇一区二区三区免费观看| 夜夜揉揉日日人人青青一国产精品 | 蜜桃av噜噜一区| 色哟哟精品一区| 久久久久久久久久久久电影 | 亚洲人成在线观看一区二区| 精品一区二区三区视频在线观看 | 成人白浆超碰人人人人| 日韩欧美电影一二三| 亚洲一区二区三区精品在线| 成人午夜短视频| 久久久久国产精品免费免费搜索| 日韩高清电影一区| 在线不卡中文字幕播放| 亚洲精品菠萝久久久久久久| 99久久99久久精品免费看蜜桃| 久久午夜羞羞影院免费观看| 久久国产精品无码网站| 91麻豆精品久久久久蜜臀| 午夜精品福利一区二区三区av | 3atv一区二区三区| 亚洲成av人**亚洲成av**| 欧洲在线/亚洲| 亚洲一区二区欧美| 欧美色男人天堂| 亚洲一区二区成人在线观看| 在线欧美日韩精品| 亚洲一二三区不卡| 欧美日韩国产天堂| 日韩国产精品久久| 欧美大片日本大片免费观看| 麻豆精品一区二区综合av| 日韩欧美不卡在线观看视频| 青青草原综合久久大伊人精品 | 国产麻豆午夜三级精品| 久久综合色天天久久综合图片| 国产精品91一区二区| 中文字幕 久热精品 视频在线 | 91精品国产综合久久福利| 日本不卡在线视频| 久久天天做天天爱综合色| eeuss鲁片一区二区三区| 亚洲另类一区二区| 欧美区一区二区三区| 国产精品自产自拍| 亚洲裸体在线观看| 欧美日韩aaaaaa| 激情综合色综合久久综合| 国产精品乱码一区二三区小蝌蚪| 色狠狠桃花综合| 青青草精品视频| 国产精品初高中害羞小美女文| 色视频成人在线观看免| 日韩不卡一二三区| 久久久91精品国产一区二区三区| 99久久99久久综合| 免费高清成人在线| 亚洲天堂网中文字| 3atv一区二区三区| av激情综合网| 蜜臀av一区二区| 最新高清无码专区| www欧美成人18+| 欧洲一区在线观看| 大胆亚洲人体视频| 免费成人av资源网| 亚洲综合免费观看高清完整版 | 日韩欧美美女一区二区三区| 成人黄页在线观看| 日韩不卡一二三区| 亚洲欧美国产高清| 久久亚洲二区三区| 欧美一区二区三区视频免费| 91麻豆免费视频| 国产福利91精品一区二区三区| 亚洲国产一区二区三区| 久久久精品国产免费观看同学| 欧美三级午夜理伦三级中视频| 成人午夜av电影| 国产一区二区精品在线观看| 日本美女一区二区三区| 一区二区成人在线观看| 国产精品久久久久久久第一福利| 日韩美女主播在线视频一区二区三区 | 99在线精品视频| 国产乱码一区二区三区| 蜜臀精品一区二区三区在线观看| 一区二区免费视频| 亚洲精选视频免费看| 欧美国产日本韩| 国产网红主播福利一区二区| 欧美电影免费观看高清完整版在 | 中文字幕va一区二区三区| 欧美成人激情免费网| 欧美一区二区免费视频| 欧美欧美欧美欧美首页| 欧美色图12p| 欧美色窝79yyyycom| 91免费看片在线观看| 99re这里只有精品首页| 99久久精品一区| 9人人澡人人爽人人精品| 成人免费观看av| 国产suv精品一区二区883| 岛国av在线一区| 成人精品免费看| 91视视频在线观看入口直接观看www | 精品播放一区二区| 精品日韩一区二区三区| 精品蜜桃在线看| 久久这里都是精品| 国产婷婷一区二区| 国产精品私人自拍| 亚洲色图丝袜美腿| 一区二区三区中文字幕电影| 亚洲综合网站在线观看| 偷窥国产亚洲免费视频| 免费三级欧美电影| 国产美女在线观看一区| www.日韩精品| 欧美在线看片a免费观看| 欧美高清你懂得| 欧美精品一区二区三区一线天视频| 欧美哺乳videos| 国产欧美精品日韩区二区麻豆天美| 中日韩免费视频中文字幕| 亚洲天堂精品在线观看| 亚洲二区在线视频| 久草精品在线观看| av电影在线观看一区| 欧美日韩一区二区三区高清| 日韩欧美的一区| 亚洲欧洲成人自拍| 视频在线观看国产精品| 国产一区二区三区在线观看免费 | 精品久久99ma| 中文字幕中文字幕在线一区 | 亚洲黄色录像片| 日韩成人一区二区三区在线观看| 国产乱子伦一区二区三区国色天香| 成人精品在线视频观看| 67194成人在线观看| 国产色综合一区| 亚洲宅男天堂在线观看无病毒| 国产一区福利在线| 欧美性猛交xxxxxx富婆| 国产亲近乱来精品视频| 日韩不卡一区二区三区|