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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? analysis.cpp

?? 使用C++編寫(xiě)的數(shù)據(jù)庫(kù)管理系統(tǒng); 擁有自定義數(shù)據(jù)文件格式
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
		}
	}

	i=thisTable.addRecord(newValues);
	if(i)	
		cout<<"Data insert failed."<<endl;
	else
		cout<<"Data insert successfully."<<endl;

	
}

void select_record(char * input,int & readPointer,char * word)
{
	SYMBOL w,condition;
	int i=0;
	char tableName[128];
	FIELDNODE * head,*p,* temp;
	FIELD conditionField;
	FIELDREC expect;
	head = new FIELDNODE;
	head->next = 0;
	p=head;
	
	do{
		w=getSym(input,readPointer,word);		
		if(i==0&&w==TIMES)
		{
			w=getSym(input,readPointer,word);
			break;		
		}				
		if(w!=IDENT)
		{
			cout<<"Eligle field name."<<endl;
			return;
		}		
		temp = new FIELDNODE;
		temp->f.name = new char [246];
		strcpy(temp->f.name,word);
		temp->next = 0;
		p->next = temp;
		p=p->next;
		w=getSym(input,readPointer,word);
		i++;	
	}while(w==COMMA);

	if(w!=FROM)
	{
		cout<<"Word \'FROM\' expected."<<endl;
		return;
	}
	w=getSym(input,readPointer,word);
	if(w!=IDENT)
	{
		cout<<"Tell me which table!"<<endl;
		return;
	}
	strcpy(tableName,word);
	w=getSym(input,readPointer,word);
	if(w==END)
	{
		conditionField.valid =0;
	}
	else
	{
		if(w!=WHERE)
		{
			cout<<"Un interprut end of select clause."<<endl;
			return;
		}
		
		w=getSym(input,readPointer,word);
		if(w!=IDENT)
		{
			cout<<"Eligle field name in where."<<endl;
			return;
		}
		conditionField.valid=1;
		conditionField.name = new char[247];
		strcpy(conditionField.name,word);
		w=getSym(input,readPointer,word);
		if(w==EQL||w==NEQ||w==LSS||w==LEQ||w==GTR||w==GEQ)			
			condition=w;
		else
		{
			cout<<"Unknow  operate."<<endl;
			return;
		}
		w=getSym(input,readPointer,word);
		if(w==NUM)
		{
			expect.value = new char[40];
			strcpy(expect.value,word);
			expect.type  =NUM;
		}
		else
			if(w==TEXT)
			{
				expect.value = new char[1024];
				strcpy(expect.value,word);
				expect.type = CHAR;
			}
			else
			{
				cout<<"Only for numbers and string."<<endl;
				return;
			}
		w=getSym(input,readPointer,word);
		if(w!=END)
		{
			cout<<"Too many words."<<endl;
			return;
		}
	}

			//input analysis ok,logincal check
		int tableIndex = findTable(tableName);
		if(tableIndex ==-1)
		{
			cout<<tableName<<" do not existt."<<endl;
			return;
		}
			
		FIELDREC fr;
		FIELD node;	
		node.name = "Index_Node";
		s->findField(node);
		fr=s->getOneFieldRecord(node,tableIndex);
		Block indexNode;
		indexNode.load(atoi(fr.value));
		Table thisTable(&indexNode);
		if(conditionField.valid)
		{
			thisTable.findField(conditionField);
			if(conditionField.valid==0)
			{
				cout<<"Field "<<conditionField.name<<" can not find in table "<<tableName<<endl;
				return;
			}
			if(expect.type==NUM&&conditionField.type==CHAR)
			{
				cout<<"Field type is a NUM ,but test condition is CHAR."<<endl;
				return;
			}
			if(expect.type==CHAR&&conditionField.type!=CHAR)
			{
				cout<<"Field tyoe is CHAR ,but test condition is NUM."<<endl;
				return;
			}
		}		
		p=head;
		while(p->next)   //check fields  and read out fileds imformations
		{
			p=p->next;
			thisTable.findField(p->f);
			if(!p->f.valid)
			{
				cout<<"Table "<<tableName<<" do not have field named "<<p->f.name<<"."<<endl;
				return;
			}
		}
		if(!head->next)
			thisTable.listRecord(conditionField,condition,expect);
		else
			thisTable.listRecord(conditionField,condition,expect,head);
		
}

void delete_record(char * input,int & readPointer,char * word)
{
	SYMBOL w,condition;
	FIELD conditionField;
	FIELDREC expect;
	char tableName[128];

	w=getSym(input,readPointer,word);
	if(w!=FROM)
	{
		cout<<"\'FROM\' expected."<<endl;
		return;
	}
	w=getSym(input,readPointer,word);
	if(w!=IDENT)
	{
		cout<<"Tell me which talbe."<<endl;
		return;
	}
	
	strcpy(tableName,word);
	w=getSym(input,readPointer,word);
	if(w!=WHERE)
	{
		cout<<"Tell me which record."<<endl;
		return;
	}		
	w=getSym(input,readPointer,word);
	if(w!=IDENT)
	{
		cout<<"Eligle field name in where."<<endl;
		return;
	}
	conditionField.valid=1;
	conditionField.name = new char[247];
	strcpy(conditionField.name,word);
	w=getSym(input,readPointer,word);
	if(w==EQL||w==NEQ||w==LSS||w==LEQ||w==GTR||w==GEQ)			
		condition=w;
	else
	{
		cout<<"Unknow  operate."<<endl;
		return;
	}
	w=getSym(input,readPointer,word);
	if(w==NUM)
	{
		expect.value = new char[40];
		strcpy(expect.value,word);
		expect.type  =NUM;
	}
	else
		if(w==TEXT)
		{
			expect.value = new char[1024];
			strcpy(expect.value,word);
			expect.type = CHAR;
		}
		else
		{
			cout<<"Only for numbers and string."<<endl;
			return;
		}
	w=getSym(input,readPointer,word);
	if(w!=END)
	{
		cout<<"Too many words."<<endl;
		return;
	}

	int tableIndex = findTable(tableName);
	if(tableIndex ==-1)
	{
		cout<<tableName<<" do not existt."<<endl;
		return;
	}
			
	FIELDREC fr;         //create talbe object;
	FIELD node;	
	node.name = "Index_Node";
	s->findField(node);
	fr=s->getOneFieldRecord(node,tableIndex);
	Block indexNode;
	indexNode.load(atoi(fr.value));
	Table thisTable(&indexNode);
	thisTable.findField(conditionField);
	if(!conditionField.valid)
	{
		cout<<"Table "<<tableName<<" do not have field named "<<conditionField.name<<"."<<endl;
		return;
	}
	thisTable.deleteRecord(conditionField,condition,expect);
	cout<<"Delete successfully."<<endl;


}

void update_table(char * input,int & readPointer,char * word)
{
	SYMBOL w,condition;
	FIELD conditionField,setField;
	FIELDREC expect,setValue;
	char tableName[128];

	w=getSym(input,readPointer,word);
	if(w!=IDENT)
	{
		cout<<"Tell me which table."<<endl;
		return;
	}
	strcpy(tableName,word);
	w=getSym(input,readPointer,word);
	if(w!=SET)
	{
		cout<<"\'SET\' expect."<<endl;
		return;
	}	
	w=getSym(input,readPointer,word);   //set field name
	if(w!=IDENT)
	{
		cout<<"Tell me which field."<<endl;
		return;
	}
	setField.name = new char[247];
	strcpy(setField.name,word);
	w=getSym(input,readPointer,word);
	if(w!=EQL)
	{
		cout<<"\'=\' expected."<<endl;
		return;
	}
	w=getSym(input,readPointer,word);  //set value
	if(w==NUM)
	{
		setValue.value = new char[40];
		strcpy(setValue.value,word);
		setValue.type  =NUM;
	}
	else
		if(w==TEXT)
		{
			setValue.value = new char[1024];
			strcpy(setValue.value,word);
			setValue.type = CHAR;
		}
		else
		{
			cout<<"Only for numbers and string."<<endl;
			return;
		}
	w=getSym(input,readPointer,word);   //where clause
	if(w==END)
	{
		conditionField.valid =0; //no where clause
	}
	else
	{
		if(w!=WHERE)
		{
			cout<<"Un interprut end of select clause."<<endl;
			return;
		}
		
		w=getSym(input,readPointer,word);
		if(w!=IDENT)
		{
			cout<<"Elligle field name in where."<<endl;
			return;
		}
		conditionField.valid=1;
		conditionField.name = new char[247];
		strcpy(conditionField.name,word);
		w=getSym(input,readPointer,word);
		if(w==EQL||w==NEQ||w==LSS||w==LEQ||w==GTR||w==GEQ)			
			condition=w;
		else
		{
			cout<<"Unknow  operate."<<endl;
			return;
		}
		w=getSym(input,readPointer,word);
		if(w==NUM)
		{
			expect.value = new char[40];
			strcpy(expect.value,word);
			expect.type  =NUM;
		}
		else
			if(w==TEXT)
			{
				expect.value = new char[1024];
				strcpy(expect.value,word);
				expect.type = CHAR;
			}
			else
			{
				cout<<"Only for numbers and string."<<endl;
				return;
			}
		w=getSym(input,readPointer,word);
		if(w!=END)
		{
			cout<<"Too many words."<<endl;
			return;
		}
	}

	//input analysis ok,begin check
	int tableIndex = findTable(tableName);
	if(tableIndex ==-1)
	{
		cout<<tableName<<" do not existt."<<endl;
		return;
	}
	FIELDREC fr;         //create talbe object;
	FIELD node;	
	node.name = "Index_Node";
	s->findField(node);
	fr=s->getOneFieldRecord(node,tableIndex);
	Block indexNode;
	indexNode.load(atoi(fr.value));
	Table thisTable(&indexNode);

	thisTable.findField(setField);  //check fields
	if(setField.valid==0)
	{
		cout<<"Can not find "<<setField.name<<". No such field in table "<<tableName<<"."<<endl;
		return;
	}
	if(conditionField.valid)
		{
			thisTable.findField(conditionField);
			if(conditionField.valid==0)
			{
				cout<<"Field "<<conditionField.name<<" can not find in table "<<tableName<<endl;
				return;
			}
			if(expect.type==NUM&&conditionField.type==CHAR)
			{
				cout<<"Field type is a NUM ,but test condition is CHAR."<<endl;
				return;
			}
			if(expect.type==CHAR&&conditionField.type!=CHAR)
			{
				cout<<"Field tyoe is CHAR ,but test condition is NUM."<<endl;
				return;
			}
		}	
	


	//basic check ok,call table fuction
	int result=thisTable.update(setField,setValue,conditionField,condition,expect);
	if(result==2)
		cout<<"Primary key's value must be unique."<<endl;
	else
		if(result==1)
			cout<<"Update failed."<<endl;
		else
			cout<<"Update successfully."<<endl;
	
	


	
}

void expression(char * input)
{
	int readPointer=0;
	char word[1024];
	SYMBOL w;
	w=getSym(input,readPointer,word);
	switch(w)
	{
	 
	case OPEN:
				w=getSym(input,readPointer,word);
				if(w==IDENT||w==TEXT)
				{
					f->open(word,ios::in|ios::out|ios::nocreate|ios::binary);
					if(f->fail())
					{
						cout<<"File \""<<word<<"\" can not open.";	
					}
					else{
						//initial Block * super and Block * systemTable;
						super = new Block();
						super->load(0ul);
						
						systemTableBlock=new Block();
						systemTableBlock->load(super->read(4,4));
						s=new Table(systemTableBlock);

					}
					
				}
				break;
	case CREATE:
				w=getSym(input,readPointer,word);
				switch(w)
				{
				case DATABASE:
					w=getSym(input,readPointer,word);
					if(w==IDENT||w==TEXT)
						create_databse(word);
					break;
				case TABLE:					
						create_table(input,readPointer,word);						


					break;
				case USER:
					cout<<"Do not finish yet."<<endl;
					break;
				default:
					cout<<"Syntax error.Unexpected word after create"<<endl;
				}				
				break;
	case DESCRIBE:
				w=getSym(input,readPointer,word);
				if(w==IDENT||w==TEXT)
				{
					describe_table(word);
				}
				else
				{
					cout<<"Must a table name!";
				}
				break;
	case ALTER:
				alter_table(input,readPointer,word);
				break;
	case DELETE:
				delete_record(input,readPointer,word);
				break;
	case DROP:
				w=getSym(input,readPointer,word);
				switch(w)
				{
				case TABLE:
						drop_table(input,readPointer,word);
						break;
				case USER:
						cout<<"Do not finish yet."<<endl;
						break; 
				default:
						cout<<"Unknow command."<<endl;

				}
				break;
	case INSERT:
				insert_into(input,readPointer,word);
				break;
	case SELECT:
				select_record(input,readPointer,word);
				break;
	case UPDATE:
				update_table(input,readPointer,word);
				break;
	case QUIT:				
				if(f)
					f->close();
				exit(0);
				break;
	default:
		cout<<"Unrecogonized command"<<endl;


		
	}
}

int main()
{
    	
	for(int i=0;i<RESERVE;i++)
		lowerString(RSYMS[i],lowerRSYMS[i]);

	char input_buffer[BUFFER_SIZE]="";	
	f=new fstream();

	cout<<"###Please input sql language,end with ';'###";
	while(true)
	{
				
		input_buffer[0]=0;
		cout<<"\n>>>>";
		getinput(input_buffer);
		expression(input_buffer);
		
	}
	return 0;
}


?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲天堂a在线| 一本久久精品一区二区| 日韩va亚洲va欧美va久久| 一个色综合网站| 久久久久久久综合色一本| 欧美xxxx在线观看| 日韩欧美卡一卡二| 欧美成人精品二区三区99精品| 日韩欧美一卡二卡| 精品国产免费久久| 国产三级欧美三级日产三级99 | 色综合色狠狠综合色| 99久久精品国产一区二区三区| 国产福利一区在线观看| 成人中文字幕电影| 91激情五月电影| 欧美人狂配大交3d怪物一区| 欧美日韩精品一区二区在线播放| 欧美日韩在线播放三区四区| 555www色欧美视频| 精品少妇一区二区三区免费观看| 91精品国产综合久久福利| 欧美一区二区三区在线观看 | 一区二区三区中文字幕精品精品| 一区二区三区中文免费| 视频一区中文字幕| 精品一区二区三区的国产在线播放| 国产精品自在在线| 99精品视频在线播放观看| 欧洲av一区二区嗯嗯嗯啊| 欧美一级一区二区| 国产日本欧美一区二区| 亚洲日穴在线视频| 免费高清成人在线| 成人av电影在线| 欧美日韩国产另类一区| 久久综合九色综合久久久精品综合 | 欧美一级在线免费| 国产欧美日韩不卡| 亚洲福利电影网| 国产在线视频不卡二| 色婷婷综合久色| 精品久久人人做人人爱| 亚洲色欲色欲www在线观看| 日韩高清在线一区| 国产98色在线|日韩| 欧美日韩高清一区| 亚洲国产精品99久久久久久久久| 亚洲无线码一区二区三区| 国产一二三精品| 欧美日韩国产中文| 国产精品婷婷午夜在线观看| 亚洲国产乱码最新视频| 国产成人免费视频网站| 欧美日韩情趣电影| 《视频一区视频二区| 蜜桃久久av一区| 色成年激情久久综合| 久久久久久久久蜜桃| 亚洲国产三级在线| 丁香婷婷深情五月亚洲| 欧美一区二区三区系列电影| 日韩一区在线播放| 国产一区二三区好的| 欧美亚洲一区二区在线观看| 久久精品日产第一区二区三区高清版| 亚洲不卡一区二区三区| 91亚洲精品一区二区乱码| 精品盗摄一区二区三区| 天天操天天干天天综合网| eeuss影院一区二区三区| 精品久久久久久最新网址| 午夜伦理一区二区| 色狠狠综合天天综合综合| 国产蜜臀av在线一区二区三区| 久久精品久久精品| 欧美精品一二三四| 亚洲欧美成人一区二区三区| 国产不卡一区视频| 精品国产免费视频| 麻豆精品新av中文字幕| 7777精品伊人久久久大香线蕉最新版| 亚洲欧洲成人精品av97| 国产91在线观看| 久久久久久久久久电影| 激情深爱一区二区| 欧美一区二区三区四区久久| 亚洲无人区一区| 欧美综合在线视频| 亚洲激情图片qvod| 色88888久久久久久影院野外 | 麻豆免费看一区二区三区| 欧美久久一二三四区| 亚洲制服丝袜在线| 一本色道久久综合狠狠躁的推荐 | 狠狠狠色丁香婷婷综合激情 | 日韩欧美综合一区| 美女在线观看视频一区二区| 91精品午夜视频| 亚洲大型综合色站| 欧美日韩久久不卡| 午夜激情综合网| 8x福利精品第一导航| 婷婷综合五月天| 在线不卡中文字幕| 日韩电影在线一区二区| 欧美一卡二卡在线观看| 久久国产精品无码网站| 久久午夜色播影院免费高清 | 国产亚洲一区字幕| 国产99久久久国产精品免费看| 日本一区二区免费在线| 丰满白嫩尤物一区二区| 国产精品成人免费| 色av一区二区| 丝袜亚洲另类欧美综合| 欧美xxxxx裸体时装秀| 国模娜娜一区二区三区| 国产视频一区在线播放| 99久久精品99国产精品| 亚洲伊人伊色伊影伊综合网 | 午夜精品久久久久影视| 91精品国产色综合久久| 久久精品72免费观看| 欧美激情中文字幕一区二区| 91亚洲精品久久久蜜桃| 亚洲18女电影在线观看| 日韩美女主播在线视频一区二区三区 | 三级久久三级久久| 欧美精品一区二区三区一线天视频| 国产精品99久久久久久似苏梦涵 | 亚洲久本草在线中文字幕| 欧美日韩免费高清一区色橹橹 | 色婷婷综合久久久中文一区二区 | 国产成人免费在线| 亚洲精品免费在线| 欧美老人xxxx18| 国产一区二区三区在线观看免费 | 一区二区三区日韩精品视频| 7777精品伊人久久久大香线蕉的 | 精品一区二区三区欧美| 欧美国产日韩亚洲一区| 欧美婷婷六月丁香综合色| 蜜臀91精品一区二区三区| 国产精品青草久久| 91精品国产色综合久久不卡电影| 丰满白嫩尤物一区二区| 日韩精品欧美成人高清一区二区| 国产视频一区在线播放| 欧美久久久久久蜜桃| 成人深夜视频在线观看| 三级在线观看一区二区| 国产精品动漫网站| 日韩精品一区国产麻豆| 91在线观看地址| 国产一区二区福利视频| 亚洲成av人**亚洲成av**| 国产精品欧美久久久久一区二区| 欧美精品日日鲁夜夜添| 不卡一区二区中文字幕| 久久99在线观看| 亚洲成人精品在线观看| 国产精品国产三级国产普通话蜜臀| 欧美一区二区啪啪| 91蝌蚪国产九色| 国产乱人伦偷精品视频不卡| 亚洲mv大片欧洲mv大片精品| 亚洲欧美综合网| 久久久另类综合| 日韩女同互慰一区二区| 在线观看91视频| 99久免费精品视频在线观看| 激情欧美一区二区| 亚洲成人av在线电影| 一区免费观看视频| 国产日韩欧美高清在线| 欧美大片拔萝卜| 69p69国产精品| 在线观看亚洲专区| 不卡一区中文字幕| 国产电影精品久久禁18| 免费欧美高清视频| 香蕉av福利精品导航| 亚洲美女淫视频| 国产精品青草久久| 久久久99精品久久| 久久久综合激的五月天| 日韩三级在线观看| 日韩一级片网站| 在线播放日韩导航| 欧美三级视频在线| 欧美亚洲一区二区在线| 欧洲激情一区二区| 91成人在线精品| 色综合久久久网| 色婷婷综合视频在线观看| 91丨porny丨首页| 播五月开心婷婷综合| 成人91在线观看| 91亚洲国产成人精品一区二三|