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