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

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

?? analysis.cpp

?? 使用C++編寫的數據庫管理系統; 擁有自定義數據文件格式
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include <stdlib.h>
#include <iostream.h>
#include <fstream.h>

#include "sym.h"
#include "block.h"
#include "allocate.h"
#include "table.h"   


Table * s;
int  findTable(char * tableName)   //if not find return -1
{
	FIELD v,k;
	FIELDREC vl,kr;

	k.name = "Table_Name";
	v.name = "Valid";

	s->findField(k);
	s->findField(v);
	for(int i=0;i<(long)(s->getTotalRec());i++)
	{
		vl = s->getOneFieldRecord(v,i);
		if(atoi(vl.value))
		{
			kr=s->getOneFieldRecord(k,i);
			if(!strcmp(tableName,kr.value))
				return i;
		}
	}
	return -1;

}

void create_databse(char * fileName)
{
	
	f->open(fileName,ios::in|ios::out|ios::binary);
	if(f->fail())
		cout<<"File \""<<fileName<<"\" can not create.";
	else
	{	
			Block::writeEmpty(0,32);  //initial first 32 blocks						
			super=new Block();
			super->write(32,4,0);	//file length initial to 32 block(64k)
			super->write(1,4,4);    //system table located in block 1
			super->write(0x80,1,256);//write bit map  1000 0000 B
			super->save();
			unsigned  long t = allocateBlock();
			systemTableBlock=new Block(t);		//initial system table	
						
			s=new Table(systemTableBlock);
			FIELD v,tableName,node,owner;
			v.valid=1;
			v.length=1;
			v.type = BYTE;
			v.nl=0;
			v.key = 0;
			v.name = "Valid";
			tableName.valid=1;
			tableName.length = 128+1;
			tableName.type = CHAR;
			tableName.nl=0;
			tableName.key = 1;  //Primary key;
			tableName.name = "Table_Name";
			node.valid=1;
			node.length=4;
			node.type = LONG;
			node.nl=0;
			node.key = 0;
			node.name = "Index_Node";
			owner.valid=1;
			owner.length = 128+1;
			owner.type = CHAR;
			owner.nl=0;
			owner.key = 0;
			owner.name = "owner";

			s->addField(v);
			s->addField(tableName);
			s->addField(node);
			s->addField(owner);

			FIELDREC system[4];
			system[0].value="1";
			system[0].type = BYTE;
			system[1].value = "System";
			system[1].type = CHAR;
			system[2].value = "1";
			system[2].type = LONG;
			system[3].value = "FOXAGE";
			system[3].type = CHAR;

			s->addRecord(system);			
			cout<<"File create successfully."<<endl;
			s->listField();
	}
			
}


void create_table(char * input,int & readPointer,char * word)
{
	SYMBOL w;
	char tableName[128];
	FIELDNODE * head,* p,* temp;
	int count=0,i;

	w=getSym(input,readPointer,word);
	if(w!=IDENT)
	{
		cout<<"Eligle table name!"<<endl;
		return;
	}
	strcpy(tableName,word);	
	w=getSym(input,readPointer,word);
	if(w!=LPAREN)
	{
		cout<<"\'(\' expected!"<<endl;
		return;
	}
	
	head = new FIELDNODE;
	head->f.valid =1;
	head->f.name = "Valid";
	head->f.key =0;
	head->f.length =1;
	head->f.nl = 0;
	head->f.type = BYTE;
	head->next =NULL;
	p=head;
	do{
		w=getSym(input,readPointer,word);
		if(w==IDENT){
			count++;
			temp = new FIELDNODE;
			temp->f.name = new char[247];
			strcpy(temp->f.name,word);
			w=getSym(input,readPointer,word);
			temp->f.type=w;
			temp->f.nl = 1;
			temp->f.key = 0;
			temp->f.valid =1;
			switch(w)
			{
			case BYTE:
				temp->f.length = 1;
				w=getSym(input,readPointer,word);
				break;
			case INT:
				temp->f.length = 2;
				w=getSym(input,readPointer,word);
				break;
			case LONG:
				temp->f.length = 4;
				w=getSym(input,readPointer,word);
				break;
			case CHAR:
				w=getSym(input,readPointer,word);
				if(w==LPAREN)
				{
					w=getSym(input,readPointer,word);
					if(w==NUM)
					{
						temp->f.length =atoi(word)+1;
						w=getSym(input,readPointer,word);
						if(w!=RPAREN)
						{
							cout<<"\')\' expected."<<endl;
							return;
						}
						w=getSym(input,readPointer,word);
					}
					else
					{
						cout<<"Number needed to define a CHAR."<<endl;
						return;
					}
					
				}
				else
				{
					cout<<"Field "<<temp->f.name<<" muust specify a length!"<<endl;
					return;
				}
				break;
			default:	
					cout<<"Unknow data type."<<endl;
					return;
			}
			if(w==NOT)
			{
				w=getSym(input,readPointer,word);
				if(w!=NL)
				{
					cout<<"Unknow command."<<endl;
					return;
				}
				temp->f.nl=0;
				w=getSym(input,readPointer,word);
				
			}

			p->next=temp;
			p=p->next;

		}
		else
		{
			if(w==PRIMARY)
			{
				w=getSym(input,readPointer,word);
				if(w!=KEY)
				{
					cout<<"Unkown word!"<<endl;
					return;
				}
				w=getSym(input,readPointer,word);
				FIELDNODE * a;
				a=head->next;
				for(i=0;i<count;i++)
				{
					if(!strcmp(a->f.name,word))
					{
						a->f.key=1;
						break;
					}
					a=a->next;
				}
			}
			w=getSym(input,readPointer,word);
		}
		
	}while(w==COMMA);
	if(w!=RPAREN)
	{
		cout<<"\')\' expected."<<endl;
		return;
	}

	if(findTable(tableName)!=-1)
	{
		cout<<"Table "<<tableName<<" already exist."<<endl;
		return;
	}
	FIELDNODE * a;
	unsigned long newTableIndex=allocateBlock();
	char indexValue[20];
	Block b(newTableIndex);
	Table newTable(&b);
	

	//add record in system table
	FIELDREC system[4];
	system[0].value="1";
	system[0].type = BYTE;
	system[1].value = tableName;
	system[1].type = CHAR;
	itoa((int)newTableIndex,indexValue,10);
	system[2].value = indexValue;
	system[2].type = LONG;
	system[3].value = "FOXAGE";
	system[3].type = CHAR;
	if(s->addRecord(system))
	{
		cout<<"Table already exist."<<endl;
		return;
	}
	
	//analysis ok,begin to write table
	a=head;
	for(i=0;i<=count;i++)
	{
		newTable.addField(a->f);
		a=a->next;
	}

			
	cout<<"Table create successfully."<<endl;
	
}

void alter_table(char * input,int & readPointer,char * word)
{
	SYMBOL w;
	char tableName[128];
	int i;
	FIELD f,indexNode;
	FIELDREC fr;
	Block indexBlock;
	
	
	w=getSym(input,readPointer,word);
	if(w!=TABLE)
	{
		cout<<"Unknow command."<<endl;
		return;
	}
	w=getSym(input,readPointer,word);
	if(w!=IDENT)
	{
		cout<<"Tell me which table!";
		return;
	}
	strcpy(tableName, word);
	w=getSym(input,readPointer,word);
	i=findTable(tableName);
	if(i==-1)
	{
		cout<<"Talbe do not exist."<<endl;
		return;
	}

	indexNode.name="Index_Node";
	s->findField(indexNode);
	fr=s->getOneFieldRecord(indexNode,i);
	indexBlock.load(atoi(fr.value));
	Table thisTable(&indexBlock);
	

	switch(w)
	{
	case ADD:
		w=getSym(input,readPointer,word);
		if(w==IDENT){		
			f.name = new char[247];
			strcpy(f.name,word);
			w=getSym(input,readPointer,word);
			f.type=w;
			f.nl = 1;
			f.key = 0;
			f.valid =1;
			switch(w)
			{
			case BYTE:
				f.length = 1;
				w=getSym(input,readPointer,word);
				break;
			case INT:
				f.length = 2;
				w=getSym(input,readPointer,word);
				break;
			case LONG:
				f.length = 4;
				w=getSym(input,readPointer,word);
				break;
			case CHAR:
				w=getSym(input,readPointer,word);
				if(w==LPAREN)
				{
					w=getSym(input,readPointer,word);
					if(w==NUM)
					{
						f.length =atoi(word)+1;
						w=getSym(input,readPointer,word);
						if(w!=RPAREN)
						{
							cout<<"\')\' expected."<<endl;
							return;
						}
						w=getSym(input,readPointer,word);
					}
					else
					{
						cout<<"Number needed to define a CHAR."<<endl;
						return;
					}					
				}
				else
				{
					cout<<"Field "<<f.name<<" must specify a length!"<<endl;
					return;
				}
				break;
			default:	
					cout<<"Unknow data type."<<endl;
					return;
			}
			thisTable.addField(f);
			cout<<"Filed "<<f.name<<" add successfully."<<endl;
			return;

		}
		else
		{
			if(w==PRIMARY)
			{
				w=getSym(input,readPointer,word);
				if(w!=KEY)
				{
					cout<<"Unkown word!"<<endl;
					return;
				}
				w=getSym(input,readPointer,word);
				if(w==IDENT)
				{
					if(!thisTable.changeKey(word))
					{
						cout<<"No such filed.";
						return;
					}
					cout<<"Primary key changed."<<endl;
				}				
			}
		}
		break;
	case DROP:
		w=getSym(input,readPointer,word);
		if(w!=IDENT)
		{
			cout<<"Can field name like this?"<<endl;
			return;
		}
		FIELD f;
		f.name = new char[247];
		strcpy(f.name,word);
		
		if(thisTable.deleteField(f))
		{
			cout<<"Field "<<f.name<<" delete successfully."<<endl;			
		}
		else
		{
			cout<<"No such field in table "<<tableName<<"."<<endl;
			return;
		}
	}		
}

void drop_table(char * input,int & readPointer,char * word)
{
	SYMBOL w;
	int toDrop;
	FIELD v;
	v.name="Valid";

	w=getSym(input,readPointer,word);
	if(w!=IDENT)
	{
		cout<<"Tell me which table!"<<endl;
		return;
	}
	toDrop=findTable(word);
	if(toDrop==-1)
	{
		cout<<"Table "<<word<<" do not exist.";
		return;
	}
	s->deleteRecord(toDrop);
	cout<<"Table "<<word<<" droped successfully."<<endl;
}



void describe_table(char * tableName){
	int i=findTable(tableName);
	if(i==-1)
		cout<<tableName<<" do not existt.";
	else
	{
		FIELD k;
		FIELDREC rk;
		Block b;
		
		k.name = "Index_Node";
		s->findField(k);
		rk=s->getOneFieldRecord(k,i);
		b.load((unsigned long)atoi(rk.value));
		Table t(&b);
		t.listField();
	}
}

void insert_into(char * input,int & readPointer,char * word)
{
	SYMBOL w;
	int toInsert,i;
	FIELDREC fr,* newValues;
	FIELD node;	
	node.name = "Index_Node";

	w=getSym(input,readPointer,word);
	if(w!=INTO)
	{
		cout<<"\'INTO\' expected after INSERT."<<endl;
		return;
	}
	w=getSym(input,readPointer,word);
	if(w!=IDENT)
	{
		cout<<"Tell me which table!"<<endl;
		return;
	}

	toInsert=findTable(word);
	if(toInsert==-1)
	{
		cout<<"Table "<<word<<" do not exist.";
		return;
	}
	s->findField(node);
	fr=s->getOneFieldRecord(node,toInsert);
	Block indexNode;
	indexNode.load(atoi(fr.value));
	Table thisTable(&indexNode);

	w=getSym(input,readPointer,word);
	if(w!=VALUES)
	{
		cout<<"\'VALUES\' expected."<<endl;
		return;
	}
	w=getSym(input,readPointer,word);
	if(w!=LPAREN)
	{
		cout<<"\'(\' expected after word VALUES."<<endl;
		return;
	}
	
	newValues = new FIELDREC[thisTable.getRealField()];
	newValues[0].value="1";
	newValues[0].type = BYTE;
	for(i=1;i<thisTable.getRealField();i++)
	{
		w=getSym(input,readPointer,word);
		switch(w)
		{
		case RPAREN:
			if(i<thisTable.getRealField()-1)
			{
				cout<<"Not enough data."<<endl;
				return;
			}
		case COMMA:
			newValues[i].value=0;
			newValues[i].type = NL;
			break;
		case TEXT:
			newValues[i].type = CHAR;
			newValues[i].value = new char[1024];
			strcpy(newValues[i].value,word);
			w=getSym(input,readPointer,word);
			break;
		case NUM:
		case FLOAT:
			newValues[i].type = NUM;
			newValues[i].value = new char[40];
			strcpy(newValues[i].value,word);
			w=getSym(input,readPointer,word);
			break;
		default:
			cout<<"Not a supported data type."<<endl;
			return;

		}
		if(i==thisTable.getRealField()-1&&w!=RPAREN)
		{
			cout<<"Too many data or \')\' missing."<<endl;
			return;
		}
		if(i<thisTable.getRealField()-1&&w!=COMMA)
		{
			cout<<"Datas must be seperated by \',\'"<<endl;
			return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区成人在线视频| 欧美制服丝袜第一页| 青青国产91久久久久久| 婷婷久久综合九色国产成人| 亚洲综合成人在线| 午夜成人免费视频| 美美哒免费高清在线观看视频一区二区| 亚洲免费观看高清完整版在线| 美女高潮久久久| 天天综合网 天天综合色| 亚洲精品日韩专区silk| 亚洲色欲色欲www在线观看| 一区二区三区欧美在线观看| 亚洲电影中文字幕在线观看| 视频在线观看91| 久久av资源站| 国产激情视频一区二区三区欧美 | 老司机精品视频在线| 日韩电影在线一区二区| 精品无人码麻豆乱码1区2区| 久久精品免费观看| 国产精品一区二区在线观看不卡| 亚洲国产毛片aaaaa无费看| 夜夜精品浪潮av一区二区三区| 精品国产乱码久久久久久图片 | 亚洲老司机在线| 亚洲综合在线观看视频| 天天亚洲美女在线视频| 日韩精品亚洲专区| 国产成人精品网址| 在线观看亚洲a| 国产亚洲精品精华液| 一区二区三区四区在线免费观看| 久久亚洲一级片| 亚洲欧美一区二区三区久本道91| 欧美久久免费观看| 精品久久久久99| 亚洲国产精品成人综合 | 91丝袜美腿高跟国产极品老师| 五月激情丁香一区二区三区| 国产盗摄视频一区二区三区| 欧美日韩免费一区二区三区视频| 懂色av一区二区三区免费观看 | 欧美v日韩v国产v| 日韩美女视频一区二区 | 国产日韩成人精品| 久久成人久久鬼色| 亚洲国产成人va在线观看天堂| 国产婷婷一区二区| 一区二区国产视频| 免费久久99精品国产| 日本福利一区二区| 欧美激情中文不卡| 久久国产综合精品| 欧美区视频在线观看| 中文字幕日韩一区| 国产精品影视网| 欧美不卡在线视频| 日韩专区在线视频| 在线一区二区观看| 亚洲国产精品成人综合| 国内欧美视频一区二区| 欧美一级在线视频| 天堂资源在线中文精品| 男男成人高潮片免费网站| 午夜在线电影亚洲一区| 91亚洲资源网| 亚洲精品日日夜夜| 99久久精品国产毛片| 国产精品久久二区二区| 国产98色在线|日韩| 国产人成一区二区三区影院| 韩日av一区二区| 久久久不卡网国产精品二区| 国内外成人在线| 久久这里只有精品视频网| 国产一区二区在线影院| 久久久天堂av| 国产成人亚洲综合色影视| 国产精品亲子伦对白| 99久久99久久免费精品蜜臀| 亚洲色图制服诱惑 | 自拍偷自拍亚洲精品播放| 麻豆久久久久久| 丁香婷婷综合五月| 精彩视频一区二区三区| 亚洲最大成人综合| 国产一区二区久久| 欧美不卡一二三| 久久99久久精品| 91精品国产一区二区三区蜜臀| 欧美性猛交xxxx黑人交| 亚洲大片一区二区三区| 欧美精品777| 精品一区二区三区在线播放| 欧美成人女星排行榜| 成人一区二区三区| 一区二区高清免费观看影视大全| 国产真实精品久久二三区| 欧美极品另类videosde| 日本伦理一区二区| 久久精品国产久精国产| 国产三级一区二区| 色综合久久精品| 国产一区在线精品| 欧美一区二区在线观看| 黄色小说综合网站| 中文字幕制服丝袜成人av| 欧美日韩久久一区| 国产在线国偷精品免费看| 亚洲精品乱码久久久久久日本蜜臀| 亚洲制服欧美中文字幕中文字幕| 国产伦精品一区二区三区在线观看 | 欧美色综合网站| 国产一区在线观看麻豆| 亚洲成人精品一区| 国产精品久久久久一区| 91精品国产综合久久久久久漫画| 中文字幕亚洲在| 日韩视频在线你懂得| 91亚洲国产成人精品一区二三| 欧美tickling挠脚心丨vk| 91一区二区在线观看| 国产福利一区二区三区视频| 丝袜亚洲另类欧美| 亚洲欧洲99久久| 久久这里只有精品6| 欧美一区二区三区在| 色成年激情久久综合| 成人a级免费电影| 国产精品一级黄| 蜜桃精品视频在线| 天天综合色天天综合| 亚洲日本成人在线观看| 中文字幕不卡在线| 国产无遮挡一区二区三区毛片日本| 国产专区欧美精品| 成人视屏免费看| 婷婷六月综合网| 亚洲高清免费视频| 亚洲欧美日韩国产另类专区| 国产欧美日韩在线| 久久久99精品免费观看不卡| 精品免费国产二区三区| 日韩视频免费观看高清完整版在线观看| 奇米精品一区二区三区四区| 亚洲精品videosex极品| 亚洲色图欧洲色图婷婷| 中文字幕一区二区三区四区 | 精品毛片乱码1区2区3区 | 中文乱码免费一区二区| 久久久亚洲国产美女国产盗摄| 国产91清纯白嫩初高中在线观看| 国产精品美日韩| 欧美极品另类videosde| 国产丝袜欧美中文另类| 亚洲国产精品99久久久久久久久| 91亚洲精品久久久蜜桃| 91蝌蚪国产九色| 日本乱码高清不卡字幕| 日本韩国一区二区三区视频| 欧美午夜精品电影| 日韩网站在线看片你懂的| 精品国产免费一区二区三区四区 | 日本不卡视频在线观看| 青青草原综合久久大伊人精品| 久久天天做天天爱综合色| 日韩精品在线看片z| 久久亚洲精华国产精华液 | 国产一区二区在线观看视频| 激情文学综合丁香| 成人av在线网站| 91黄视频在线观看| 欧美疯狂性受xxxxx喷水图片| 国产成人av福利| 成人动漫在线一区| 欧美影视一区在线| 精品免费日韩av| 亚洲欧美日韩国产另类专区| 日韩经典一区二区| 丁香五精品蜜臀久久久久99网站| 日本91福利区| 国产成人精品亚洲日本在线桃色| 亚洲动漫第一页| 国产成人av在线影院| 欧美视频在线播放| 久久亚洲精华国产精华液| 亚洲人成伊人成综合网小说| 午夜激情综合网| 国产不卡在线一区| 91精品国产综合久久久久久久久久 | 91麻豆精品国产| 欧美国产禁国产网站cc| 亚洲午夜电影在线| 成人午夜激情在线| 91精品国产品国语在线不卡| 亚洲欧美日韩人成在线播放| 国产一区二区0| 91精品国产入口| 亚洲综合视频在线观看|