Разработка и экспериментальное исследование редактора схем программ
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
. Рева О.Н. 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);