Table1->FieldByName(\名称\ Table1->FieldByName(\系数\ Table1->FieldByName(\满度值\ Table1->FieldByName(\上限\ Table1->FieldByName(\下限\ Table1->FieldByName(\积分点\ Table1->FieldByName(\数据\ }
变电站实时监控系统模型(10)
5、作图模块
其基本思想是定义一个标绘图形库,记录图形的基本特征,以便于显示、编辑和检索。图形类定义代码如下: class TMyGr { public:
WORD Read_GrFile(char *Name); void Write_GrFile(char *Name); void DisplayGr();
void dispS00(int x,int y);
void dispS01(int x,int y,int flag); void dispS02(int x,int y,int flag); TImage *Image; WORD Pointer; struct ELEMENT {
struct { int Parts; } Attribute;
union { struct { int x1,y1,x2,y2; int Width; Tcolor Color; } Line;
struct { int x,y; Tcolor Color; Int Size; Char Name[20];
Char Code[STRLENTH+1]; } String; struct { int x,y; int Point,State; Tcolor Color; } S00;
struct { int x,y; int Point,State; Tcolor Color; } S01;
struct { int x,y; int Point,State; Tcolor Color; } S02;
struct { int x,y; int Point,State;
Tcolor Color; } Data; } Attr; } Element[RECORDLEN];
}
WORD TMyGr::Read_GrFile(char *Name) {
FILE *Stream; //定义一个流 WORD len;
Stream=fopen(Name,\打开一个文件 if (Stream==NULL) len=0;
else { len=(WORD)fread(Element,sizeof(Element)/RECORDLEN,RECORDLEN,Stream); fclose(Stream); } return(len); }
void TMyGr:: Write_GrFile(char *Name) {
FILE *Stream; WORD i;
Stream=fopen(Name,\ if (Stream==NULL) return; for (i=0;i { if (Element[i].Attribute.Parts==NULLREC) continue; else fwrite(&Element[i],sizeof(Element)/RECORDLEN,1,Stream); } fclose(Stream); } void TMyGr::DisplayGr() { WORD i; Image->Canvas->Pen->Mode=pmCopy; for (i=0;i { switch (Element[i].Attribute.Parts) { case NULLREC: break; case dtLINE: Image->Canvas->Pen->Color=Element[i].Attr.Line.Color; Image->Canvas->Pen->Width=Element[i].Attr.Line.Width; Image->Canvas->MoveTo(Element[i].Attr.Line.x1, Element[i].Attr.Line.y1); Image->Canvas->LineTo(Element[i].Attr.Line.x2, Element[i].Attr.Line.y2); break; case dtCHAR: Image->Canvas->Font->Size=Element[i].Attr.String.Size; Image->Canvas->Font->Color=Element[i].Attr.String.Color; Image->Canvas->Font->Name=Element[i].Attr.String.Name; Image->Canvas->TextOut(Element[i].Attr.String.x, Element[i].Attr.String.y, Element[i].Attr.String.Code); break; case dtS00: Image->Canvas->Pen->Color=Element[i].Attr.S00.Color; Image->Canvas->Pen->Width=1; dispS00(Element[i].Attr.S00.x,Element[i].Attr.S00.y); break; case dtS01: Image->Canvas->Pen->Color=Element[i].Attr.S01.Color; Image->Canvas->Pen->Width=1; dispS01(Element[i].Attr.S01.x,Element[i].Attr.S01.y,0); break; case dtS02: Image->Canvas->Pen->Color=Element[i].Attr.S02.Color; Image->Canvas->Pen->Width=1; dispS02(Element[i].Attr.S02.x,Element[i].Attr.S02.y,0); break; case dtDATA: break; default: break; } } } void TMyGr::dispS00(int x,int y) { Image->Canvas->Ellipse(x-15,y-10,x+15,y+20); Image->Canvas->Pen->Color=clGreen; Image->Canvas->Ellipse(x-15,y+10,x+15,y+20+20); } void TMyGr:: dispS01(int x,int y,int flag) { if (flag==0) { Image->Canvas->Pen->Color=clGreen; Image->Canvas->Brush->Color=clRed; Image->Canvas->Rectangle(x-8,y-7,x+9,y+9); } else { Image->Canvas->Pen->Color=clRed; Image->Canvas->Brush->Color=clGreen; Image->Canvas->Rectangle(x-8,y-7,x+9,y+10); } Image->Canvas->Brush->Style=bsClear; } void TMyGr::dispS02(int x,int y,int flag) { if (flag==0) { Image->Canvas->MoveTo(x,y-9); Image->Canvas->LineTo(x,y-2); Image->Canvas->MoveTo(x-8,y-2); Image->Canvas->LineTo(x+4,y-2); Image->Canvas->MoveTo(x+8,y-2); Image->Canvas->LineTo(x,y+6); Image->Canvas->LineTo(x,y+13); } else { Image->Canvas->MoveTo(x,y-9); Image->Canvas->LineTo(x,y+13); Image->Canvas->Brush->Color=clGreen; Image->Canvas->Pen->Color=clRed; Image->Canvas->Ellipse(x-4,y-4,x+5,y+5); Image->Canvas->Brush->Style=bsClear; } } 监控软件的领域体系结构 所谓领域体系结构,SanfFrancisco(itectSFo或Do)ain-SpecIfic software Architecture),显然是面向某个特定领域的体系结构。与通用体系结构不同,领域体系结构与领域密切相关,建立在对领域业务逻辑规则的抽象和归纳的基础上。鉴于领域 Share Foundation Objects, SFOSF究和发展具有比较大的难度。事实上,软件技术发展的历程也是寻求领域体系结构的历程。尽管软件模型、设计模式和框架技术的发展为领域体系结构的发展奠定了技术基础,然而这只是领域体系结构建立的外因。作为领域体系结构建立的内因——领域本身的业务逻辑的抽象及领域应用模型的建立,则是永恒变化和发展的。因此,领域体系结构是一个动态的体系结构,必须伴随着通用体系结构(技术维度)的发展和领域应用(应用维度)的发展而发展。同时,也需要提供扩展和二次开发的方法,以便适应应用发展的需要。 由于领域体系结构的特殊性,目前几乎没有具体的规范、标准或成熟产品。相对成熟或可以称得上是领域体系结构的只有IBM的San Franci sco(简称SF 。事实上,其本质是share Foundation Obj ects,sFO)o sF建立在对大量企业管理应用系统开发和应用实践的经验总结基础上,归纳和抽象了构成所有企业管理系统核心处理功能的公共特性的结构和应该支持的基本服务,建立了面向企业管理系统构造的一致性框架及一些通用服务功能组件接口。例如,SF的总账组件(General Ledger)提供了一个BankAccount类,用以表达企业应用的银行账户业务实体,并封装了将银行账户的交易事务转换为各类记账凭证的业务处理逻辑。 SF采用层次化结构并建立在设计模式基础上。 (1)基础层(Foundation Layer)直接建立在Java虚拟机基础上,主要提供对分布式环境下组件对象创建和运行管理的各种基础服务支持,以便为上层的公共业务对象层、核心业务对象层以及领域专用的业务组件的构建建立基础。基础层主要包括:内核服务集[KernelServices,基于OMG的对象服务规范和Java的一些机制,主要提供分布式对象创建和运行管理的一些基础技术支持,包括对象请求代理( Object Request Broker)、事务服务(Transaction Services)、持久性服务(Persistence Services)、生命周期服务(Life Cycle Services)、并发服务(Concurrencxy Serxrices)、命名服务(Naming Services)、安全服务 (Transaction Support)、并发和锁支持(Concurrency and Locking Support)、持久性支持( Persistency Support)和对象生命周期和访问模式(Object Life-cycle and AccessModes)等]、图形用户界面框架(The Graphical User Interface Framework,基于MVC模式,提供开发SF应用的GUI需要的所有组件并维护界面和业务逻辑之间的交互关系)和实用工具集(Utilities,用于帮助应用部署和运行时管理,包括持久性存储配置、安全配置、模式映射、报告编辑与打印和冲突控制配置等)四个部分。 (2)公共业务对象层(Common Business Objects Layer)主要提供大部分业务环境中和业务过程中都会涉及的一些通用的业务对象和业务规则,以及与核心业务对象层业务对象交互的接口,还有一些通用的业务模式( Business Patterns)o公共业务对象层建立在SF的业务对象框架( Business Object Framework)基础上。目前,CBO层主要包括公司(Company)、地址(Address)、业务伙伴 (Business Partner)、日历(Natural Calendar)、货币及交换率( Currency,Exchange Rate)、计量单位(Units of Measure)和号码序列(Number Series)等几个公共业务对象包,每个包封装了相关数据集及其业务处理规则。抽象的通用业务模式有Class出cation Type(用于定义新的应用数据类型及其取值范围)、Keyables(用于为搜索或平衡计算需要而建立新的业务对象属性联合,即通过键机制实现属性与属性使用者的分离)和Extensible Item(用于按需动态地为一个对象添加或删除行为)等。 (3)核心业务处理层(Core Business Processes Layer)主要提供企业业务对象及封装默认的业务逻辑规则。核心业务处理层建立在业务对象框架(Business Object Framework)基础上,并使用公共业务对象层的一些公共业务对象。核心业务处理层已经预先抽象和建立了企业运转必须有的几个关键业务对象并封装其业务逻辑,包括财务管理( Financials Management)、应收/应付账户管理、仓库管理(Warehouse Management)和订单管理(Order Management)。应用开发者如果有特殊需求,也可以通过SF的扩展机制进行调整和扩展。