Автор работы: Пользователь скрыл имя, 20 Декабря 2011 в 10:11, курсовая работа
Различные схемы являются неотъемлемой частью любой информационной системы или программного продукта. Существует множество схем создающийся по различным стандартам, в частности стандарт ГОСТ 19.701 различает следующие схемы:
1. Схема данных.
2. Схема программы.
3. Схема работы системы.
4. Схема взаимодействия программ.
5. Схема ресурсов системы.
ВВЕДЕНИЕ 3
1. Аналитический обзор существующих программ-редакторов схем 4
1.1 Microsoft Offise Visio 2007 4
1.2 Редактор блок-схем 5
1.3 FCEditor 6
1.4 Вывод по аналитическому обзору 6
2. Выбор технических средств 8
3. Диграммы 9
3.1 Функциональная модель 9
3.2 Функционально-стоимостной анализ IDEF0-схемы 14
3.3 Диаграмма потоков данных 15
3.4 Диаграмма прецендентов 16
3.5 Диаграмма последовательностей 17
3.6 Диаграмма классов 18
4. Описание системы…………………......……………………………………………….....…23
ЗАКЛЮЧЕНИЕ 26
ПРИЛОЖЕНИЕ А(справочное)Исходный текст пограммы…..……………….…………….27
СПИСОК ЛИТЕРАТУРЫ
}
public void move(int dx, int dy)
{
cx += dx;
cy += dy;
for (int i = 0; i < connectionPoints.Length; i++)
{
connectionPoints[i].X += dx;
connectionPoints[i].Y += dy;
}
for (int i = 0; i < connectedArrows.Length; i++)
{
if (connectedArrows[i] != null && connectedArrowsNodes[i] != -1)
connectedArrows[i].moveNode(
}
}
public void changeLineThickness(int thickness)
{
if (thickness < 1 || thickness > 5)
return;
this.thickness = thickness;
blockPen = new Pen(Color.Black, thickness);
selectedBlockPen = new Pen(Color.Firebrick, thickness);
}
/// <summary>
/// Рисует блок на Graphics
/// </summary>
/// <param name="g">Graphics на котором будет нарисован блок</param>
/// <param name="drawFont">Шрифт текста блока</param>
public abstract void draw(Graphics g, Font drawFont);
/// <summary>
/// Определяет находится ли точка внутри блока.
/// </summary>
public bool pointInside(int x, int y)
{
return ((x > cx && x < cx + w) && (y > cy && y < cy + h));
}
/// <summary>
/// Определяет находится ли
/// </summary>
/// <param name="x">Координата x верхнего левого угла области</param>
/// <param name="y">Координата y верхнего левого угла области</param>
/// <param name="width">Ширина области</param>
/// <param name="height">Высота области</param>
/// <returns></returns>
public bool blockInsideRect(int x, int y, int width, int height)
{
return ((cx > x && cx < x + width) && (cy > y && cy < y + height));
}
}
}
5) arrowTemplate.cs – класс шаблон для стрелки
using System.Drawing;
using System.Xml.Serialization;
using System.Drawing.Drawing2D;
using System.Collections.Generic;
using System;
namespace FCEditor
{
public abstract class ArrowTemplate
{
/// <summary>
/// Если можно изменять стрелку. Но не передвигать.
/// </summary>
[XmlAttribute]
public bool isChangeable = false;
/// <summary>
/// Если можно передвигать стрелку. Но не изменять.
/// </summary>
[XmlAttribute]
public bool isMovable = false;
/// <summary>
/// Нужно ли рисовать наконечник стрелки.
/// </summary>
[XmlAttribute]
public bool needEndCap = true;
[XmlAttribute]
public bool needStartCap = false;
[XmlAttribute]
public bool isDashed = false;
[XmlAttribute]
public int thickness = 1;
[XmlIgnore]
public BlockTemplate blockConnectedToFirstNode = null;
[XmlIgnore]
public BlockTemplate blockConnectedToLastNode = null;
[XmlIgnore]
public int slotNumConnectedToFirstNode = -1;
[XmlIgnore]
public int slotNumConnectedToLastNode = -1;
/// <summary>
/// Список узлов
/// </summary>
public ArrowNodePoint[] nodes;
public Point[] points;
protected Pen arrowPen = new Pen(Color.Black, 1);
protected Pen selectedArrowPen = new Pen(Color.Firebrick, 1);
public ArrowTemplate(int thickness)
{
arrowPen = new Pen(Color.Black, thickness);
selectedArrowPen = new Pen(Color.Firebrick, thickness);
changeArrowEndCap(needEndCap, needStartCap);
changeLineThickness(thickness)
changeStyle_DashedOrRegular(
}
public ArrowTemplate() { }
public void findNearestBlockToConnectToNod
{
for (int i = 0; i < blocks.Count; i++)
{
for (int j = 0; j < blocks[i].connectionPoints.
{
double len = Math.Sqrt(Math.Pow((nodes[
if (len < 10)
{
blocks[i].connectedArrows[j] = this;
blocks[i].
if (nodeNum == 0)
{
blockConnectedToFirstNode = blocks[i];
slotNumConnectedToFirstNode = j;
}
else
{
blockConnectedToLastNode = blocks[i];
slotNumConnectedToLastNode = j;
}
int dx = blocks[i].connectionPoints[j].
int dy = blocks[i].connectionPoints[j].
if (this is ArrowHorizontal || this is ArrowVertical)
moveArrow(dx, dy, false);
else
moveNode(dx, dy, nodeNum);
return;
}
}
}
}
public void deteteConnectionWithBlock()
{
if (blockConnectedToFirstNode != null)
{
blockConnectedToFirstNode.
blockConnectedToFirstNode.
blockConnectedToFirstNode = null;
}
if (blockConnectedToLastNode != null)
{
blockConnectedToLastNode.
blockConnectedToLastNode.
blockConnectedToLastNode = null;
}
}
public void copyPoints()
{
for (int i = 0; i < nodes.Length; i++)
{
points[i].X = nodes[i].x;
points[i].Y = nodes[i].y;
}
}
/// <summary>
/// Двигает узел на смещение dx dy
/// </summary>
/// <param name="dx">Смещение по X</param>
/// <param name="dy">Смещение по Y</param>
/// <param name="nodeNumber">Узел для перемещения</param>
public abstract void moveNode(int dx, int dy, int nodeNumber);
public abstract void arrangeMiddleNodes();
public abstract bool pointInside(int x, int y);
public abstract void draw(Graphics g);
public void moveArrow(int dx, int dy)
{
for (int i = 0; i < nodes.Length; i++)
nodes[i].add(dx, dy);
deteteConnectionWithBlock();
copyPoints();
}
public void moveArrow(int dx, int dy, bool deleteConnection)
{
for (int i = 0; i < nodes.Length; i++)
nodes[i].add(dx, dy);
if (deleteConnection)
deteteConnectionWithBlock();
copyPoints();
}
public void changeLineThickness(int thickness)
{
if (thickness < 1 || thickness > 5)
return;
arrowPen = new Pen(Color.Black, thickness);
selectedArrowPen = new Pen(Color.Firebrick, thickness);
changeStyle_DashedOrRegular(
changeArrowEndCap(needEndCap, needStartCap);
}
/// <summary>
/// Изменить стиль стрелки.
/// </summary>
/// <param name="dashed">true для того чтобы поменять на пунктирный. false на обычный</param>
public void changeStyle_DashedOrRegular(
{
arrowPen.DashStyle = (dashed) ? DashStyle.Dash : DashStyle.Solid;
selectedArrowPen.DashStyle = (dashed) ? DashStyle.Dash : DashStyle.Solid;
isDashed = dashed;
}
public void changeArrowEndCap(bool endCap, bool startCap)
{
arrowPen.StartCap = selectedArrowPen.StartCap = (startCap) ? LineCap.ArrowAnchor : LineCap.NoAnchor;
arrowPen.EndCap = selectedArrowPen.EndCap = (endCap) ? LineCap.ArrowAnchor : LineCap.NoAnchor;
needEndCap = endCap;
needStartCap = startCap;
}
public bool arrowInsideRect(int x, int y, int width, int height)
{
return ((nodes[0].x > x && nodes[0].x < x + width) && (nodes[0].y > y && nodes[0].y < y + height))
}
}
}
6) blocks.cs – блоки. Приведен пример только одного блока. Классы остальных блоков отличаются только методов draw.
using System.Drawing;