Создание программы-интерпретатора блок-схем

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

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



Items.Insert(index, newBlock);();();

}Block CreateNewBlock(int type)

{(type)

{(1):regularBLock = new RegularBLock("action");.Add(regularBLock);regularBLock;(2):conditionBlock = new ConditionBlock("condition");left = new Branch("condition left branch");right = new Branch("condition right branch");

//left.Branch = right.Branch = conditionBlock;.Items.Add(left);.Items.Add(right);.Add(conditionBlock);.Add(left);.Add(right);conditionBlock;(3):loopBlock = new LoopBlock("loop");.TextAtTheEnd = "loop end";loopBranch = new Branch("loop branch");

//loopBranch.Branch = loopBlock;.Items.Add(loopBranch);.Add(loopBlock);.Add(loopBranch);loopBlock;:null;

}

}

///

/// Проверить является ли расстояние между двумя точками меньше заданного

/// bool CheckTwoPoints(int x1, int y1, int x2, int y2, int r)

{dx = Math.Abs(x1 - x2);dy = Math.Abs(y1 - y2);dx * dx + dy * dy <= r * r;

}InsertionPoint GetPointAt(int x, int y)

{(InsertionPoint ip in insertionPoints)

{(CheckTwoPoints(ip.x, ip.y, x, y, ip.R))

{ip;

}

}null;

}

///

/// Удаляет выбранный блок схемы

///

///

public bool DeleteSelectedBlock()

{(selectedBlock == null)false;.Branch.Items.Remove(selectedBlock);();();();true;

}void UpdateAllBlocksList()

{.Clear();(root);

}void WalkChart(Block block)

{.Add(block);(var item in block.Items)

{(item);

}

}void ClearChart()

{.Items[0].Items.Clear();.Clear();();();

}

#region mouse events handling

void ProcessMouseClickInsertion(int mouseX, int mouseY, int blockType)

{insertionPointClicked = GetPointAt(mouseX, mouseY);(insertionPointClicked == null);newBLock = CreateNewBlock(blockType);(insertionPointClicked.branch, newBLock, insertionPointClicked.index);

}void ProcessMouseClickBlockSelection(int mouseX, int mouseY)

{= null;(Block block in blocks)

{.isSelected = false;

}(Block block in blocks)

{(block is Branch || block is ChartMainBlock);(block.PointInsideBlock(mouseX, mouseY))

{= block;(block);;

}

}

}bool ProcessMouseMove(int mouseX, int mouseY)

{result = false;(InsertionPoint ip in insertionPoints)

{(CheckTwoPoints(ip.x, ip.y, mouseX, mouseY, ip.R))

{.underCursor = true;= true;

}

{.underCursor = false;

}

}result;

}Block ProcessMouseDoubleClick(int mouseX, int mouseY)

{(Block block in blocks)

{(block is Branch || block is ChartMainBlock);(block.PointInsideBlock(mouseX, mouseY))

{block;

}

}null;

}

#endregionvoid selectBlock(Block block)

{.isSelected = true;(block is RegularBLock);(Block item in block.Items)

{(item);

}

}

//отрисовка схемыvoid Draw(Graphics g, bool insertion = false)

{.Draw(g);(root, g);(!insertion) return;(InsertionPoint insertionPoint in insertionPoints)

{.draw(g);

}

}void drawBlockItems(Block block, Graphics g)

{(Block item in block.Items)

{.Draw(g);(item, g);

}

}string GetCode()

{codeGen.GetGeneratedCode();

}

}

}

) CodeGenerator.csSystem;flowchart.blocks;flowchart

{class CodeGenerator

{Block root;string code;

//новая строкаstring br = Environment.NewLine;int tab = 2;CodeGenerator(Block root)

{.root = root;

}string GetGeneratedCode()

{= "";(root, 0);code;

}void GenerateCode(Block block, int indent)

{(block is ChartMainBlock)

{(block.Items[0], indent);

}if (block is Branch)

{(var item in block.Items)

{(item, indent);

}

}if (block is RegularBLock)

{+= GetIndent(indent);+= block.Text + ";" + br;

}if (block is ConditionBlock)

{+= GetIndent(indent) + String.Format("if ({0})", block.Text) + br;+= GetIndent(indent) + "{" + br;(block.Items[0], indent + tab);+= GetIndent(indent) + "}" + br;+= GetIndent(indent) + "else" + br;+= GetIndent(indent) + "{" + br;(block.Items[1], indent + tab);+= GetIndent(indent) + "}" + br;

}if (block is LoopBlock)

{+= GetIndent(indent) + block.Text + br;+= GetIndent(indent) + "{" + br;(block.Items[0], indent + tab);+= GetIndent(indent) + "} ";(block.TextAtTheEnd != "")

{+= block.TextAtTheEnd + ";";

}+= br;

}

}string GetIndent(int indent)

{res = "";(int i = 0; i < indent; i++)

{+= " ";

}res;

}

}

}

) InsertionPoint.csSystem.Drawing;flowchart

{class InsertionPoint

{Block branch;int index;int x;int y;bool underCursor = false;int R = 10;int paintingR = 4;void draw(Graphics g)

{.FillEllipse(Brushes.Firebrick, x - paintingR, y - paintingR, 2 * paintingR, 2 * paintingR);(underCursor)

{.FillEllipse(Brushes.CornflowerBlue, x - R, y - R, 2 * R, 2 * R);

}

}

}

}

) JsCodeInterpreter.csSystem;System.Windows.Forms;Jint;flowchart

{class JsCodeInterpreter

{TextBox textBox;JintEngine jsEngine;JsCodeInterpreter(TextBox textBox)

{.textBox = textBox;= new JintEngine();print = delegate(object text) { textBox.Text += text + Environment.NewLine; };.SetFunction("print", print);

}delegate void PrintCodeExecutionResultDelegate(object text);void RunScript(string script)

{.Text = "";.Run(script);

}

}

Приложение Б.

(справочное)

XML файл генерируемый программой

">

">

">

Список литературы

1.Джон Пол Мюллер, Дебби Валковски, Microsoft Office Visio 2007 для "чайников"- М.: 2008.- 304с

.Бонни Бьяфоре, Visio 2007 Bible- М.:2009.-800с

.Джим Арлоу, Айла Нейдштадт, UML и Унифицированный процесс- М.:2007.-617с

.

.Дж. Рамбо, UML 2.0. Объектно-ориентированное моделирование и разработка- М.:2007.-544с