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

Автор работы: Пользователь скрыл имя, 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
СПИСОК ЛИТЕРАТУРЫ

Файлы: 1 файл

МИМИУС fin.doc

— 1.35 Мб (Скачать файл)

        } 
 

        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(dx, dy, connectedArrowsNodes[i]);               

            }

        } 
 
 

        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(isDashed);

        } 

        public ArrowTemplate() { } 
 

        public void findNearestBlockToConnectToNode(List<BlockTemplate> blocks, int nodeNum)

        {

            for (int i = 0; i < blocks.Count; i++)

            {

                for (int j = 0; j < blocks[i].connectionPoints.Length; j++)

                {

                    double len = Math.Sqrt(Math.Pow((nodes[nodeNum].x - blocks[i].connectionPoints[j].X), 2) +

                                                    Math.Pow((nodes[nodeNum].y - blocks[i].connectionPoints[j].Y), 2)); 

                    if (len < 10)

                    {

                        blocks[i].connectedArrows[j] = this;

                        blocks[i].connectedArrowsNodes[j] = nodeNum; 

                        if (nodeNum == 0)

                        {                       

                            blockConnectedToFirstNode = blocks[i];

                            slotNumConnectedToFirstNode = j;

                        }

                        else

                        {

                            blockConnectedToLastNode = blocks[i];

                            slotNumConnectedToLastNode = j;

                        } 

                        int dx = blocks[i].connectionPoints[j].X - nodes[nodeNum].x;

                        int dy = blocks[i].connectionPoints[j].Y - nodes[nodeNum].y; 

                        if (this is ArrowHorizontal || this is ArrowVertical)

                            moveArrow(dx, dy, false);

                        else

                            moveNode(dx, dy, nodeNum); 

                        return;

                    }

                }

            }

        } 
 

        public void deteteConnectionWithBlock()

        {

            if (blockConnectedToFirstNode != null)

            {

                blockConnectedToFirstNode.connectedArrows[slotNumConnectedToFirstNode] = null;

                blockConnectedToFirstNode.connectedArrowsNodes[slotNumConnectedToFirstNode] = -1;               

                blockConnectedToFirstNode = null;

            } 

            if (blockConnectedToLastNode != null)

            {

                blockConnectedToLastNode.connectedArrows[slotNumConnectedToLastNode] = null;

                blockConnectedToLastNode.connectedArrowsNodes[slotNumConnectedToLastNode] = -1;

                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(isDashed);

            changeArrowEndCap(needEndCap, needStartCap);

        } 
 

        /// <summary>

        /// Изменить стиль стрелки. Пунктир или обычный.

        /// </summary>

        /// <param name="dashed">true для того чтобы поменять на пунктирный. false на обычный</param>

        public void changeStyle_DashedOrRegular(bool dashed)

        {

            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;

Информация о работе Создание программы-редактора схем