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

📄 relation.cpp

📁 1.通过鼠标拖拽和弹出对话框完成实体、属性、联系的绘制以及各参数设定 2.对绘制的实体、属性、联系提供合法性检查 3.对绘制的图形进行拖动、重设大小、删除 4.通过属性对话框对实体、属性、联系的
💻 CPP
字号:
#include "StdAfx.h"
#include "Relation.h"
Relation::Relation(CString name,int f,MyEntity* my1,MyEntity* my2,int x1,int y1,int x2,int y2)
{
	this->selecting=0;
	this->name=name;
	this->flag=f;
	this->type=2;
	this->entity1=my1;
	this->entity2=my2;
	this->e1=*(new CPoint(x1,y1));
	this->e2=*(new CPoint(x2,y2));
	this->firstAttribute=NULL;
//	this->next=NULL;
	this->nextelement=NULL;
	this->role1="";
	this->role2="";
}
void Relation::addAttribute(Attribute *a)
{
	Attribute* first=this->firstAttribute;
	if(first==NULL)
	{
		firstAttribute=a;
		return;
	}
	while(first->next!=NULL)
	{
		first=first->next;
	}
	first->next=a;
}
void Relation::removeAttribute(Attribute *a)
{
	Attribute* first=this->firstAttribute;
	if(first==a)
	{
		firstAttribute=first->next;
		return;
	}
	while(first->next!=NULL)
	{
		if(first->next==a)
		{
			first->next=a->next;
			return;
		}
		first=first->next;
	}
}
void Relation::paint(CDC& g)
{
	CPen pen(PS_SOLID,2,RGB(255,0,0));
	if(this->entity1!=this->entity2)
	{

    	if(this->flag==1)
		{
            g.TextOut((e1.x+e2.x+entity1->e1.x+entity1->e2.x)/4,
			(e1.y+e2.y+entity1->e1.y+entity1->e2.y)/4,"1");
	    	g.TextOut((e1.x+e2.x+entity2->e1.x+entity2->e2.x)/4,
			(e1.y+e2.y+entity2->e1.y+entity2->e2.y)/4,"1");
		}
    	else if(this->flag==2||this->flag==5)
		{
            g.TextOut((e1.x+e2.x+entity1->e1.x+entity1->e2.x)/4,
			(e1.y+e2.y+entity1->e1.y+entity1->e2.y)/4,"1");
    		g.TextOut((e1.x+e2.x+entity2->e1.x+entity2->e2.x)/4,
			(e1.y+e2.y+entity2->e1.y+entity2->e2.y)/4,"n");
		}
    	else if(this->flag==3)
		{
	    	g.TextOut((e1.x+e2.x+entity1->e1.x+entity1->e2.x)/4,
			(e1.y+e2.y+entity1->e1.y+entity1->e2.y)/4,"n");
	    	g.TextOut((e1.x+e2.x+entity2->e1.x+entity2->e2.x)/4,
			(e1.y+e2.y+entity2->e1.y+entity2->e2.y)/4,"1");
		}
    	else if(this->flag==4)
		{
			g.TextOut((e1.x+e2.x+entity1->e1.x+entity1->e2.x)/4,
			(e1.y+e2.y+entity1->e1.y+entity1->e2.y)/4,"n");
	    	g.TextOut((e1.x+e2.x+entity2->e1.x+entity2->e2.x)/4,
			(e1.y+e2.y+entity2->e1.y+entity2->e2.y)/4,"n");
		}
    	g.MoveTo((e1.x+e2.x)/2,(e1.y+e2.y)/2);
    	g.LineTo((this->entity1->e1.x+this->entity1->e2.x)/2
		     ,(this->entity1->e1.y+this->entity1->e2.y)/2);
    	g.MoveTo((e1.x+e2.x)/2,(e1.y+e2.y)/2);
    	g.LineTo((this->entity2->e1.x+this->entity2->e2.x)/2
		     ,(this->entity2->e1.y+this->entity2->e2.y)/2);
   	}
	else
	{
		int x1=(e1.x+e2.x)/4+this->entity1->e2.x/2;
		int y1=(e1.y+e2.y)/4+this->entity1->e1.y/2;
		int y2=(e1.y+e2.y)/4+this->entity1->e2.y/2;
		x1=(this->entity1->e2.x+x1)/2;
		y1=(this->entity1->e1.y+y1)/2;
		y2=(this->entity1->e2.y+y2)/2;
		if(this->flag==1)
		{
            g.TextOut(x1,y1,"1"+role1);
			g.TextOut(x1,y2,"1"+role2);
		}
    	else if(this->flag==2)
		{
	        g.TextOut(x1,y1,"1"+role1);
			g.TextOut(x1,y2,"n"+role2);
		}
    	else if(this->flag==3)
		{
    	    g.TextOut(x1,y1,"n"+role1);
			g.TextOut(x1,y2,"1"+role2);
		}
    	else if(this->flag==4)
		{
            g.TextOut(x1,y1,"n"+role1);
			g.TextOut(x1,y2,"n"+role2);
		}
    	g.MoveTo((e1.x+e2.x)/2,(e1.y+e2.y)/2);
    	g.LineTo(entity1->e2.x,entity1->e1.y);
    	g.MoveTo((e1.x+e2.x)/2,(e1.y+e2.y)/2);
    	g.LineTo(entity1->e2.x,entity1->e2.y);
		
	}
	if(this->selecting==1)
	{	
	    g.SelectObject(&pen);
	}
	CPoint *p=new CPoint[4];

	p[0].x=e1.x-7;p[0].y=(e1.y+e2.y)/2;
	p[1].x=(e1.x+e2.x)/2;p[1].y=e1.y-5;
	p[2].x=e2.x+7;p[2].y=(e1.y+e2.y)/2;
	p[3].x=(e1.x+e2.x)/2;p[3].y=e2.y+5;
	g.Polygon(p,4);
	if(this->flag==5)
	{
			p[0].x=p[0].x+7;
	        p[1].y=p[1].y+5;
	        p[2].x=p[2].x-7;
	        p[3].y=p[3].y-5;
        	g.Polygon(p,4);
	}
	delete []p;
	g.TextOut(e1.x+20,(e1.y+e2.y)/2-10,name);
    CPen test_pen;
	if(this->selecting==1)
	{
		test_pen.CreatePen(PS_SOLID,1,RGB(0,0,0));
		g.SelectObject(&test_pen);
	}
    this->entity1->paint(g);
	this->entity2->paint(g);
	pen.DeleteObject();
	test_pen.DeleteObject();

}
int Relation::isDeleted()
{
    if(this->firstAttribute==NULL)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
void Relation::Delete()
{
	if(this->entity1!=this->entity2)
	{
		this->entity1->removeRelation(this);
	}
	this->entity2->removeRelation(this);
}
void Relation::serial(CArchive& ar)
{
	
}

⌨️ 快捷键说明

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