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

Автор работы: Пользователь скрыл имя, 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 Мб (Скачать файл)

using System.Xml.Serialization; 
 

namespace FCEditor

{ 

    public class ProcessBlock : BlockTemplate

    {

        public ProcessBlock(int x, int y)

            : base(x,y)      

        {

            w = 100;

            h = 50; 

            connectionPoints = new Point[]

            {

                new Point(cx + w / 2, cy), new Point(cx + w, cy + h / 2), new Point(cx + w / 2, cy + h), new Point(cx, cy + h / 2)

            };

        } 
 

        public ProcessBlock() { } 
 

        public override void draw(Graphics g, Font drawFont)

        {

            Rectangle r = new Rectangle(cx, cy, w, h); 

            g.DrawRectangle(isSelected ? selectedBlockPen : blockPen, cx, cy, w, h); 

            g.DrawString(info, drawFont, drawBrush, r, strFormat);

        }

    }

} 

7) arrows.cs – стрелки. Приведен код только одной стрелки. Остальные аналогичны, меняются только методы, зависящие от расположения стрелки и числа узлов.

using System;

using System.Drawing;

using System.Xml.Serialization; 

namespace FCEditor

{

    public class ArrowCurveHorizontal : ArrowTemplate

    {

        public ArrowCurveHorizontal(int x, int y, int thickness) : base(thickness)

        {          

            nodes = new ArrowNodePoint[7];

            points = new Point[7]; 

            nodes[0] = new ArrowNodePoint(x, y);

            nodes[1] = new ArrowNodePoint(x, y + 25);  // средний узел

            nodes[2] = new ArrowNodePoint(x, y + 50);

            nodes[3] = new ArrowNodePoint(x + 50, y + 50);   // средний узел

            nodes[4] = new ArrowNodePoint(x + 100, y + 50);

            nodes[5] = new ArrowNodePoint(x + 100, y + 75);  // средний узел

            nodes[6] = new ArrowNodePoint(x + 100, y + 100); 
 

            points[0] = new Point(x, y);

            points[1] = new Point(x, y + 25);  // средний узел

            points[2] = new Point(x, y + 50);

            points[3] = new Point(x + 50, y + 50);   // средний узел

            points[4] = new Point(x + 100, y + 50);

            points[5] = new Point(x + 100, y + 75);  // средний узел

            points[6] = new Point(x + 100, y + 100);

        } 

        public ArrowCurveHorizontal() { } 

        public override void moveNode(int dx, int dy, int nodeNumber)

        {

            if (nodeNumber != 0 && nodeNumber != 6 && nodeNumber != 3)

                deteteConnectionWithBlock(); 

            switch (nodeNumber)

            {

                case 0:

                    nodes[0].add(dx, dy);                   

                    nodes[1].add(dx, 0);

                    nodes[2].add(dx, 0);

                    break; 

                case 1:  //средний узел

                    nodes[1].add(dx, 0);

                    nodes[0].add(dx, 0);  //два соседних узла

                    nodes[2].add(dx, 0);                   

                    break; 

                case 2:

                    nodes[2].add(dx, dy);

                    nodes[0].add(dx, 0);

                    nodes[1].add(dx, 0);

                    nodes[3].add(0, dy);

                    nodes[4].add(0, dy);

                    break; 

                case 3:  //средний узел

                    nodes[3].add(0, dy);

                    nodes[2].add(0, dy);

                    nodes[4].add(0, dy);

                    break; 

                case 4:

                    nodes[4].add(dx, dy);

                    nodes[2].add(0, dy);

                    nodes[3].add(0, dy);

                    nodes[5].add(dx, 0);

                    nodes[6].add(dx, 0);

                    break; 

                case 5:  //средний узел

                    nodes[5].add(dx, 0);

                    nodes[4].add(dx, 0);

                    nodes[6].add(dx, 0);

                    break;  

                case 6:

                    nodes[6].add(dx, dy);

                    nodes[4].add(dx, 0);

                    nodes[5].add(dx, 0);

                    break; 

                default:

                    break;

            } 

            arrangeMiddleNodes();

            copyPoints();

        } 
 

        public override void arrangeMiddleNodes()

        {

            nodes[1].y = (nodes[0].y + nodes[2].y) / 2;

            nodes[3].x = (nodes[2].x + nodes[4].x) / 2;

            nodes[5].y = (nodes[4].y + nodes[6].y) / 2;           

        } 
 

        public override bool pointInside(int x, int y)

        {

            int X = nodes[0].x;

            int maxY = Math.Max(nodes[0].y, nodes[2].y) - 15;

            int minY = Math.Min(nodes[0].y, nodes[2].y) + 15; 

            if ((x > X - 5 && x < X + 5) && (y > minY && y < maxY))

                return true; 
 

            int Y = nodes[2].y;

            int maxX = Math.Max(nodes[2].x, nodes[4].x) - 15;

            int minX = Math.Min(nodes[2].x, nodes[4].x) + 15; 

            if ((x > minX && x < maxX) && (y > Y - 5 && y < Y + 5))

               return true; 
 

            X = nodes[4].x;

            maxY = Math.Max(nodes[4].y, nodes[6].y) - 15;

            minY = Math.Min(nodes[4].y, nodes[6].y) + 15; 

            if ((x > X - 5 && x < X + 5) && (y > minY && y < maxX))

                return true; 

            return false;

        } 

        public override void draw(Graphics g)

        {

            if (isChangeable)

            {

                g.DrawCurve(selectedArrowPen, points, 0); 

                for (int i = 0; i < nodes.Length; i++)

                    g.FillEllipse(Brushes.Navy, nodes[i].x - 3, nodes[i].y - 3, 6, 6);

            } 
 

            else if (isMovable)

            {

                g.DrawCurve(selectedArrowPen, points, 0);

            } 
 

            else

            {

                g.DrawCurve(arrowPen, points,  0);

            }

        }

    }

} 

8) arrowNodePoint.cs – класс узла стрелки

using System.Xml.Serialization;

using System.Drawing; 

namespace FCEditor

{

    /// <summary>

    /// Описывает  узел стрелки

    /// </summary>

    public class ArrowNodePoint

    {

        [XmlAttribute]

        public int x; 

        [XmlAttribute]

        public int y; 
 

        /// <summary>

        /// В квадрате со стороной 2*rad и центром в данном узле будут регистрировать нажатия мышью на этот узел

        /// </summary>

        private const int rad = 15; 
 

        public ArrowNodePoint() { } 

        public ArrowNodePoint(int X, int Y)

        {

            x = X;

            y = Y;

        } 

        /// <summary>

        /// Добавляет к координатам точки (x,y) приращение (dx, dy)

        /// </summary>

        /// <param name="dx">Приращение по X</param>

        /// <param name="dy">Приращение по Y</param>

        public void add(int dx, int dy)

        {

            x += dx;

            y += dy;

        } 
 

        /// <summary>

        /// Проверяет находится ли точка в квадратной области вокруг центра узла.

        /// </summary>

        /// <param name="X">Координата X проверяемой точки</param>

        /// <param name="Y">Координата Y проверяемой точки</param>

        /// <returns></returns>

        public bool pointInsideNode(int X, int Y)

        {

                  return ((X > x - rad && X < x + rad) && (Y > y - rad && Y < y + rad))

        }

    }

} 

9) configuration.cs – класс конфигурации программы

using System.Collections.Generic;

using System.Xml.Serialization; 

namespace FCEditor

{

    public class Configuration

    {

        public List<BlockTemplate> shapes; 

        public List<ArrowTemplate> arrows; 

        [XmlAttribute]

        public bool needGrid; 

        [XmlAttribute]

        public bool needBlocksAlign; 

        [XmlAttribute]

        public int gridBlockSize; 

        public Configuration() { }

    }

} 
 
 
 
 
 
 
 
 

СПИСОК  ЛИТЕРАТУРЫ

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

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

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

       4. http://khpi-iip.mipk.kharkiv.edu/library/case/leon/

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

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