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

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

            {

                blocks[i].draw(g, drawFont);

            }

           

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

                arrows[i].draw(g);             

            if (needRect)           

                g.DrawRectangle(Pens.Gray, selectedRectX, selectedRectY, selectedRectW, selectedRectH);         

          

            pictureBox1.Refresh();

        } 
 
 

        public void alignBlocks()

        {

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

            {

                int dx = blocks[i].cx / gridBlockSize * gridBlockSize - blocks[i].cx;

                int dy = blocks[i].cy / gridBlockSize * gridBlockSize - blocks[i].cy;

                blocks[i].move(dx, dy);

            }

        } 
 
 

#region mouse events handling 

        private void pictureBox1_MouseClick(object sender, MouseEventArgs e)

        {

            //если нужно рисовать блок/стрелку  и нажата ПКМ

            if ((putBlock || putArrow) && e.Button == MouseButtons.Right)  

            {

                putBlock = false;   //рисовать уже не  нужно

                putArrow = false;

                blockType = -1;

                arrowType = -1;

                this.Cursor = Cursors.Arrow;  //курсор обычный

                return;

            } 
 

            if (putBlock)

            {

                switch (blockType)

                {

                    case(-1): break; 

                    case(1):  blocks.Add(new ProcessBlock(e.X, e.Y)); break;

                    case(2):  blocks.Add(new DataBlock(e.X, e.Y)); break;

                    case(3):  blocks.Add(new DecisionBlock(e.X, e.Y)); break;

                    case(4):  blocks.Add(new RAM_Block(e.X, e.Y)); break;                       

                    case(5):  blocks.Add(new SerialAcessMemoryBlock(e.X, e.Y)); break;                       

                    case(6):  blocks.Add(new ManualInputBlock(e.X, e.Y)); break;                       

                    case(7):  blocks.Add(new PredefinedProcessBlock(e.X, e.Y)); break;                       

                    case(8):  blocks.Add(new ManualOperationBlock(e.X, e.Y)); break;                       

                    case(9):  blocks.Add(new PreparationBlock(e.X, e.Y)); break;                       

                    case(10): blocks.Add(new LoopStartBlock(e.X, e.Y)); break;                       

                    case(11): blocks.Add(new LoopEndBlock(e.X, e.Y)); break;                       

                    case(12): blocks.Add(new DocumentBlock(e.X, e.Y)); break;                       

                    case(13): blocks.Add(new MemoryWithDirectAcessBlock(e.X, e.Y)); break;                       

                    case(14): blocks.Add(new DataStorageBlock(e.X, e.Y)); break;                      

                    case(15): blocks.Add(new ExternalDataBlock(e.X, e.Y)); break;                       

                    case(16): blocks.Add(new TerminatorBlock(e.X, e.Y)); break;                      

                   case(17): blocks.Add(new CommentLeftBlock(e.X, e.Y)); break;                       

                    case(18): blocks.Add(new CommentRightBlock(e.X, e.Y)); break; 

                    default: break;

                }

               

                this.Cursor = Cursors.Arrow;   //курсор обычный

                putBlock = false;

                blockType = -1;

                update();

                return;

            } 
 

            if (putArrow)

            {

                switch (arrowType)

                {

                    case(-1): break; 

                    case(1): arrows.Add(new ArrowCurveHorizontal(e.X, e.Y, thickness)); break;

                    case(2): arrows.Add(new ArrowCurveVertical(e.X, e.Y, thickness)); break;

                    case(3): arrows.Add(new ArrowHorizontal(e.X, e.Y, thickness)); break;

                    case(4): arrows.Add(new ArrowVertical(e.X, e.Y, thickness)); break; 

                    default: break;

                }                

                this.Cursor = Cursors.Arrow; 

                putArrow = false;

                arrowType = -1;

                update();

                return;

            }

          

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

            {

                if (arrows[i].pointInside(e.X, e.Y))

                {

                    arrows[i].isChangeable = true;

                    update();

                    return;

                }

            } 

        } 

        private void pictureBox1_MouseDown(object sender, MouseEventArgs e)

        {

            leftButton = true; 

            if (putBlock || putArrow)

                return; 

            for (int i = 0; i < blocks.Count; i++)   //если нажали на блок то выход. иначе

            {

                if (blocks[i].pointInside(e.X, e.Y))                      

                    return;               

            } 

            for (int i = 0; i < arrows.Count; i++) //если нажали на узел стрелки

            {

                for (int j = 0; j < arrows[i].nodes.Length; j++)

                {

                    if (arrows[i].nodes[j].pointInsideNode(e.X, e.Y))

                        return;                   

                }

            } 

            for (int i = 0; i < arrows.Count; i++) //если нажали на стрелку то выход. иначе

            {

                if (arrows[i].pointInside(e.X, e.Y))               

                    return;               

            } 

            for (int i = 0; i < blocks.Count; i++)   //все блоки не выбраны

            {

                blocks[i].isSelected = false;

            } 

            for (int i = 0; i < arrows.Count; i++)   //все стрелки не выбраны

            {

                arrows[i].isMovable = false;

                arrows[i].isChangeable = false;               

            } 
 

            update(); 

            needRect = true;     //нужно рисовать  область выделения

            selectedRectX = e.X;

            selectedRectY = e.Y;       

        } 
 

        private void pictureBox1_MouseUp(object sender, MouseEventArgs e)

        {

            leftButton = false;

            needRect = false;           

            movableBlock = -1;  //перемещать ничего не надо

            movableArrow = -1;

            nodeToMove = -1;

            this.Cursor = Cursors.Arrow; 

            //выравнивание блоков

            if (needBlocksAlign)

            {

                alignBlocks();

            } 

            update();

        } 
 
 

        private void pictureBox1_MouseMove(object sender, MouseEventArgs e)

        {

            prevx = mousex;  //старые координаты сохраняются

            prevy = mousey;

            mousex = e.X;   //новые координаты

            mousey = e.Y; 

            bool blocksSelected = false; 

            if (needRect)

            {

                selectedRectW = mousex - selectedRectX;

                selectedRectH = mousey - selectedRectY; 

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

                    blocks[i].isSelected = blocks[i].blockInsideRect(selectedRectX, selectedRectY, selectedRectW, selectedRectH);

               

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

                    arrows[i].isMovable = arrows[i].arrowInsideRect(selectedRectX, selectedRectY, selectedRectW, selectedRectH);

                          

                update(); 

                return;

            } 
 

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

            {

                if (blocks[i].isSelected)

                {

                    blocksSelected = true;

                    break;

                }

            } 

           

            if (leftButton && blocksSelected)      //перемещение выделенных блоков

            {

                this.Cursor = Cursors.Hand; 

                dx = mousex - prevx;

                dy = mousey - prevy; 

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

                {                   

                    if (blocks[i].isSelected)

                    {

                        blocks[i].move(dx, dy);

                    }

                } 

                update();

                return;

            } 
 

            if (leftButton)  //если нажата левая кнопка мыши

            { 

               dx = mousex - prevx;     //шаг мыши за текущее движение

                dy = mousey - prevy; 

                if (movableBlock != -1)   // и есть блок  для перемещения

                {

                    blocks[movableBlock].move(dx, dy); //сдвигаем блок  на новую позицию

                    update();

                    return;

                } 

                if (movableArrow != -1 && nodeToMove == -1)   // или  есть стрелка для перемещения  но нет узла стрелки. Двигаем стрелку

                {

                    arrows[movableArrow].moveArrow(dx, dy); 

                    update();

                    return;

                } 

                if (movableArrow != -1 && nodeToMove != -1)

                {

                    arrows[movableArrow].moveNode(dx, dy, nodeToMove); 

                    if (nodeToMove == arrows[movableArrow].nodes.Length - 1)

                        arrows[movableArrow].findNearestBlockToConnectToNode(blocks, arrows[movableArrow].nodes.Length - 1); 

                    if (nodeToMove == 0)

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