Разработка и экспериментальное исследование редактора схем программ

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



. Рева О.Н. JavaScript в кармане / Рева О.Н - М.: АСТ, 2008. - 72 с.

. Рева О.Н. JavaScript в кармане / Рева О.Н - М.: АСТ, 2008. - 80 с.

. Рева О.Н. JavaScript в кармане / Рева О.Н - М.: АСТ, 2008. - 84 с.

. Дунаев В.Д. Самоучитель JavaScript. 2-е издание / Дунаев В.Д. - Спб.: Питер, 2004. - 106 с.

. Анисимов А.М. Работа в системе дистанционного обучения Moodle. Учебное пособие. 2-е издание / Анисимов А. М. - Харьков: ХНАГХ, 2009. - 40 с.

. Анисимов А.М. Работа в системе дистанционного обучения Moodle. Учебное пособие. 2-е издание / Анисимов А. М. - Харьков: ХНАГХ, 2009. - 48 с.

. Анисимов А.М. Работа в системе дистанционного обучения Moodle. Учебное пособие. 2-е издание / Анисимов А. М. - Харьков: ХНАГХ, 2009. - 72 с.

Приложение А

(обязательное)

Программный код

1) Block.cs

using System;

using System.Collections.Generic;System.Drawing;flowchart.blocks;System.Xml.Serialization;

flowchart

{

[Serializable]abstract class Block

{List Items;

[XmlIgnore]Block Branch;

int w = 100;int h = 50;

int marginTop;int marginRight;int marginBottom;int marginLeft;

[XmlIgnore]int width;

[XmlIgnore]int height;

[XmlIgnore]int X;

[XmlIgnore]int Y;

[XmlIgnore]bool isSelected = false;

//смещение вниз чтобы не перекрывало точку вставки

protected int dy = 18;

[XmlAttribute]string Text;

[XmlAttribute]string TextAtTheEnd;

Font drawFont = new Font("Sans Serif", 10);SolidBrush drawBrush = new SolidBrush(Color.Black);

static StringFormat strFormat = new StringFormat()

{= StringAlignment.Center,= StringAlignment.Center

};

Block() { }

Block (string text)

{= null;= new List();= 0;= 0;.Text = text;

}

virtual bool PointInsideBlock(int x, int y)

{blockX = X + width / 2 - w/2;blockY = Y + dy;((x > blockX && x blockY && y < blockY + h));

}

void AdjustSize()

{clientWidth = 0; clientHeight = 0;(this is Branch)

{(Block item in Items)

{.AdjustSize();

(clientWidth < item.width)= item.width;

+= item.height;

}minWidth = 180;minHeight = 16;

(clientHeight < minHeight) = minHeight;

(clientWidth < minWidth) = minWidth;

= clientHeight;= clientWidth;

}

{(Block item in Items)

{.AdjustSize();

(clientHeight < item.height)= item.height;

+= item.width;

}= 40;= 40;= 10;= 10;

(this is ChartMainBlock)

{= 40;= 18;

}if (this is RegularBLock)

{= 16;= 10;= 120;= 60;

}if (this is ConditionBlock)

{= 92;= 16;

}if (this is LoopBlock)

{= 80;= 80;

}

= marginLeft + clientWidth + marginRight;= marginTop + clientHeight + marginBottom;

}

}

void AdjustPosition(int ox, int oy)

{= ox;= oy;(this is Branch)

{cy = Y;(Block item in Items)

{.AdjustPosition(ox + (width - item.width) / 2, cy);+= item.height;

}

}

{cx = X + marginLeft;(Block item in Items)

{.AdjustPosition(cx, Y + marginTop);

cx += item.width;

}

}

}

///

/// Если открыть блок из файла, то информация о том какой ветке принадлежит каждый блок теряется

/// Метод устанавливает для каждого блока какой ветке он принадлежит

/// void SetBranches(Block branch)

{.Branch = branch;(this is RegularBLock); (Block block in Items)

{.SetBranches(this);

}

}

abstract void Draw(Graphics g);

}

}

) RegularBlock.csSystem;System.Drawing;System.Drawing.Drawing2D;

flowchart.blocks

{

[Serializable]class RegularBLock : Block

{RegularBLock() { }RegularBLock(string text) : base(text) { }

override void Draw(Graphics g)

{containerCenter = X + width / 2;pen = isSelected ? new Pen(Color.Firebrick, 3) : new Pen(Color.Black, 1);

.EndCap = LineCap.ArrowAnchor;.DrawLine(pen, containerCenter, Y, containerCenter, Y + dy);.EndCap = LineCap.NoAnchor;

.DrawRectangle(pen, containerCenter - w/2, Y + dy, w, h);

r = new Rectangle(containerCenter - w / 2, Y + dy, w, h);.DrawString(Text, drawFont, drawBrush, r, strFormat);.DrawLine(pen, containerCenter, Y + height - dy, containerCenter, Y + height);

}

}

}

) Branch.csSystem;System.Drawing;

flowchart.blocks

{

[Serializable]class Branch : Block

{Branch() { }Branch(string text): base(text) { }

override void Draw(Graphics g)

{pen = isSelected ? new Pen(Color.Firebrick, 3) : new Pen(Color.Black, 1);containerCenter = X + width / 2;.DrawLine(pen, containerCenter, Y, containerCenter, Y + dy); ;

}

}

}

) ChartMainBlock.csSystem;System.Collections.Generic;System.Drawing;System.Drawing.Drawing2D;System.IO;System.Xml.Serialization;

flowchart.blocks

{

[Serializable]class ChartMainBlock : Block

{ChartMainBlock() { }ChartMainBlock(string text) : base(text) { }

override bool PointInsideBlock(int x, int y)

{blockX = X + width / 2 - w / 2;blockY = Y - dy;((x > blockX && x blockY && y < blockY + h));

}

override void Draw(Graphics g)

{

//центр контейнераcontainerCenter = X + width / 2;

//центр контейнера минус половина ширины блока

int dx = X + width/2 - w/2;

pen = isSelected ? new Pen(Color.Firebrick, 3) : new Pen(Color.Black, 1);.DrawLine(pen, dx + h / 2, Y - dy, dx + w - h / 2, Y - dy);.DrawLine(pen, dx + h / 2, Y + h - dy, dx + w - h / 2, Y + h - dy);.DrawArc(pen, dx, Y - dy, h, h, 90, 180);.DrawArc(pen, dx + w - h, Y - dy, h, h, 270, 180);

.DrawLine(pen, containerCenter, Y + h - dy, containerCenter, Y + h);

r = new Rectangle(dx, Y - dy, w, h);.DrawString("begin", drawFont, drawBrush, r, strFormat);

//блок в конце схемыdowny = Y + height;.DrawLine(pen, dx + h / 2, downy, dx + w - h / 2, downy);.DrawLine(pen, dx + h / 2, downy + h, dx + w - h / 2, downy + h);.DrawArc(pen, dx, downy, h, h, 90, 180);.DrawArc(pen, dx + w - h, downy, h, h, 270, 180);

= new Rectangle(dx, downy, w, h);.DrawString("end", drawFont, drawBrush, r, strFormat);

.EndCap = LineCap.ArrowAnchor;.DrawLine(pen, containerCenter, Y + height - dy, containerCenter, Y + height);.EndCap = LineCap.NoAnchor;

}

void SaveToXml(string path)

{fStream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None);

xmlFormat = new XmlSerializer((ChartMainBlock),Type[]

{(Block),(ConditionBlock),(RegularBLock),(Branch),(LoopBlock),(ChartMainBlock),(List),

}

);

.Serialize(fStream, this);.Close();

}

}

}

) ConditionBLock.csSystem;System.Drawing;System.Drawing.Drawing2D;

flowchart.blocks

{

[Serializable]class ConditionBlock : Block

{ConditionBlock() { }ConditionBlock(string text) : base(text) { }

override void Draw(Graphics g)

{

//центр контейнераcontainerCenter = X + width / 2;

//центр контейнера минус половина ширины блока

int dx = containerCenter - w / 2;

pen = isSelected ? new Pen(Color.Firebrick, 3) : new Pen(Color.Black, 1);

//верхняя линия.EndCap = LineCap.ArrowAnchor;.DrawLine(pen, containerCenter, Y, containerCenter, Y + dy);.EndCap = LineCap.NoAnchor;

//сам блок в виде ромба[] points = new Point[]

{Point(dx + w / 2, Y + dy), Point(dx + w, Y + h / 2 + dy), Point(dx + w / 2, Y + h + dy), Point(dx, Y + h / 2 + dy), Point(dx + w / 2, Y + dy),

};

.DrawCurve(pen, points, 0);

r = new Rectangle(dx, Y + dy, w, h);.DrawString(Text, drawFont, drawBrush, r, strFormat);

//подпись да= new Rectangle(dx - w/2, Y + dy, w/2, h/2);.DrawString("да", drawFont, drawBrush, r, strFormat);

//подпись нет= new Rectangle(dx + w , Y + dy, w / 2, h / 2);.DrawString("нет", drawFont, drawBrush, r, strFormat);