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

📄 change.cpp

📁 1.通过鼠标拖拽和弹出对话框完成实体、属性、联系的绘制以及各参数设定 2.对绘制的实体、属性、联系提供合法性检查 3.对绘制的图形进行拖动、重设大小、删除 4.通过属性对话框对实体、属性、联系的
💻 CPP
字号:
#include "StdAfx.h"
#include "change.h"
char a=13;
char b=10;
Change::Change(Diagram* diagram)
{
	myresult="";
	temp="";
	foreign=0;
	this->diagram=diagram;
}
CString Change::change()
{
	int count=0;
	int count1=0;
	int count2=0;
    Element* first=diagram->firstElement;
	while(first!=NULL)
	{
		myresult="";
		foreign=0;
		if(first->type==1)
		{   
			MyEntity* my=(MyEntity* )first;
            myresult=myresult+"create table "+first->name+a+b+"("+a+b;
			Attribute* afirst=my->firstAttribute;
			if(afirst==NULL)
			{
				return "entity must have attribute";
			}
			while(afirst!=NULL)
			{
				count++;
				if(afirst->flag==1)
				{
				   myresult=myresult+afirst->name+" "+afirst->nametype+" ";
			    	if(afirst->canempty==2)
					{
				    	myresult=myresult+"not null"+" ";
					}
			    	myresult=myresult+","+a+b;
				}
				afirst=afirst->next;
			}
 //           return myresult;
			Redata* rfirst=my->firstRelation;
			if(rfirst==NULL)
			{
				return myresult+"null";
			}
			while(rfirst!=NULL)
			{
                count1++;
				if((rfirst->data->flag==1&&rfirst->data->entity2==my)||
					(rfirst->data->flag==2&&rfirst->data->entity2==my)||
					(rfirst->data->flag==3&&rfirst->data->entity1==my)||
					(rfirst->data->flag==5&&rfirst->data->entity2==my)
				  )
				{
//					return myresult+"null555";
					Attribute* firstmain;
					if(rfirst->data->entity1==my)
					{
						rfirst->data->entity2->emptymain();
					   firstmain=rfirst->data->entity2->mainkey();
					}
					else
					{
						rfirst->data->entity1->emptymain();
						firstmain=rfirst->data->entity1->mainkey();
					} 
					while(firstmain!=NULL)
					{
	                    CString str=firstmain->name;
						if(rfirst->data->entity1==rfirst->data->entity2)
						{
							str=my->name+"_"+firstmain->name;
						}
						myresult=myresult+str+" "+firstmain->nametype+" ";
						if(firstmain->canempty==2)
						{
							myresult=myresult+"not null"+" ";
						}
						myresult=myresult+","+a+b;
						firstmain=firstmain->nextmain;
					}
					Attribute* rattribute=rfirst->data->firstAttribute;
					if(rattribute!=NULL)
					{
					   while(rattribute!=NULL)
					   {
						   if(rattribute->flag==1)
						   {
						        myresult=myresult+rattribute->name+" "+rattribute->nametype+" ";
					        	if(rattribute->canempty==2)
								{
						        	myresult=myresult+"not null"+" ";
								}
					        	myresult=myresult+","+a+b;
						   }
					    rattribute=rattribute->next;
					   }
					}
				}
                rfirst=rfirst->next;
			}
//			return myresult+"null44";
			my->emptymain();
			Attribute* firstmain=my->mainkey();
			if(firstmain==NULL)
			{
				return "entity must have mainkey";
//				return myresult+"null44";
			}
			myresult=myresult+"primary key(";
//			return myresult+"null";
			while(firstmain!=NULL)
			{
				myresult=myresult+firstmain->name+",";
				firstmain=firstmain->nextmain;
			}
			if(my->flag==2)
			{
				MyEntity* oe=my->firstRelation->data->entity1;
				oe->emptymain();
				Attribute* omain=oe->mainkey();
				while(omain!=NULL)
				{
					myresult=myresult+omain->name+",";
					omain=omain->nextmain;
				}
			}
			myresult.SetAt(myresult.GetLength()-1,')');
			myresult=myresult+","+a+b;
//			return myresult;
			rfirst=my->firstRelation;
			while(rfirst!=NULL)
			{
			
			    if((rfirst->data->flag==1&&rfirst->data->entity2==my)||
					(rfirst->data->flag==2&&rfirst->data->entity2==my)||
					(rfirst->data->flag==3&&rfirst->data->entity1==my)||
					(rfirst->data->flag==5&&rfirst->data->entity2==my)
				  )
				{
			    	MyEntity* en;
			    	if(rfirst->data->entity1==my)
					{
                        rfirst->data->entity2->emptymain();
			        	firstmain=rfirst->data->entity2->mainkey();
				    	en=rfirst->data->entity2;
					}
		        	else
					{   
						rfirst->data->entity1->emptymain();
			            firstmain=rfirst->data->entity1->mainkey();
				        en=rfirst->data->entity1;
					} 
			    	while(firstmain!=NULL)
					{
						foreign=1;
						CString str=firstmain->name;
						if(rfirst->data->entity2==rfirst->data->entity1)
						{
							str=my->name+"_"+firstmain->name;
						}
                         myresult=myresult+"foreign key ("+str+")"
						     +" REFERENCES "+en->name+"("+firstmain->name+"),"+a+b;
				    	firstmain=firstmain->nextmain;
					}
				}
				rfirst=rfirst->next;
			}
 //           return myresult;
				myresult.SetAt(myresult.GetLength()-3,')');
			    myresult.SetAt(myresult.GetLength()-2,' ');
				myresult.SetAt(myresult.GetLength()-1,' ');
			myresult=myresult+";"+a+b;
//			 return myresult;
		}
		else if(first->type==2)
		{
			Relation *relation=(Relation*)first;
			if(relation->flag==4)
			{
                 myresult=myresult+"create table "+first->name+a+b+"("+a+b;
				 Attribute* afirst=relation->firstAttribute;
				 if(afirst!=NULL)
				 {
				    while(afirst!=NULL)
					{
						if(afirst->flag==1)
						{
					        myresult=myresult+afirst->name+" "+afirst->nametype+" ";
					        if(afirst->canempty==2)
							{
					    	    myresult=myresult+"not null ";
							}
				    	    myresult=myresult+","+a+b;
						}
				     afirst=afirst->next;
					}
				 }
				 relation->entity1->emptymain();
				 afirst=relation->entity1->mainkey();
				 {
					 while(afirst!=NULL)
					 {
						 myresult=myresult+afirst->name+" "+afirst->nametype+" ";
						 if(afirst->canempty==2)
						 {
						     myresult=myresult+"not null ";
						 }
					     myresult=myresult+","+a+b;
					     afirst=afirst->nextmain;
					 }
				 }
				 relation->entity2->emptymain();
				 afirst=relation->entity2->mainkey();
				 {
					 while(afirst!=NULL)
					 {
						 CString str=afirst->name;
						 if(relation->entity2==relation->entity1)
						 {
                             str=relation->entity1->name+"_"+str;
						 }
						 myresult=myresult+str+" "+afirst->nametype+" ";
						 if(afirst->canempty==2)
						 {
						     myresult=myresult+"not null ";
						 }
					     myresult=myresult+","+a+b;
					     afirst=afirst->nextmain;
					 }
				 }
				 relation->entity1->emptymain();
				 afirst=relation->entity1->mainkey();
				 while(afirst!=NULL)
				 {
					 foreign=1;
                    myresult=myresult+"foreign key ("+afirst->name+")"
						     +" REFERENCES "+relation->entity1->name+"("+afirst->name+"),"+a+b;
					afirst=afirst->nextmain;
				 }
				 relation->entity2->emptymain();
				 afirst=relation->entity2->mainkey();
				 while(afirst!=NULL)
				 {
					 CString str=afirst->name;
					if(relation->entity2==relation->entity1)
					{
                        str=relation->entity1->name+"_"+str;
					}
					foreign=1;
                    myresult=myresult+"foreign key ("+str+")"
						     +" REFERENCES "+relation->entity2->name+"("+afirst->name+"),"+a+b;
					afirst=afirst->nextmain;
				 }
				myresult.SetAt(myresult.GetLength()-3,')');
			    myresult.SetAt(myresult.GetLength()-2,' ');
				myresult.SetAt(myresult.GetLength()-1,' ');
				myresult=myresult+";"+a+b;
			}
		}
		else if(first->type==3)
		{
		
			Attribute* attr=(Attribute* )first;
			if(attr->flag==2)
			{
				myresult=myresult+"create table "+first->name+a+b+"("+a+b;
				myresult=myresult+attr->name+" "+attr->nametype+" ";
			    if(attr->canempty==2)
				{
					myresult=myresult+"not null ";
				}
				myresult=myresult+","+a+b;
				MyEntity* mye=(MyEntity* ) attr->father;
				mye->emptymain();
				Attribute* mymain=mye->mainkey();
			    while(mymain!=NULL)
				{
					myresult=myresult+mymain->name+" "+mymain->nametype+" ";
					if(mymain->canempty==2)
					{
					  myresult=myresult+"not null ";
					}
					myresult=myresult+","+a+b;
					mymain=mymain->nextmain;
				}
				myresult.SetAt(myresult.GetLength()-3,')');
			    myresult.SetAt(myresult.GetLength()-2,' ');
				myresult.SetAt(myresult.GetLength()-1,' ');
				myresult=myresult+";"+a+b;	
			}
		}
		if(foreign==0)
		{
			temp=myresult+temp;
		
		}
		else
		{
			temp=temp+myresult;
		}
		first=first->nextelement;
	}
	return temp;
}

⌨️ 快捷键说明

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