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

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

            ); 

            try

            {

                config = (Configuration)xmlFormat.Deserialize(fStream);

            }

            catch (System.Exception ex)

            {

                MessageBox.Show(ex.Message, "Ошибка");

                fStream.Close();

                return;

            } 

            workAreaForm.blocks.Clear();

            workAreaForm.arrows.Clear();

            workAreaForm.blocks = config.shapes;

            workAreaForm.arrows = config.arrows;

            workAreaForm.gridBlockSize = config.gridBlockSize;

            workAreaForm.needBlocksAlign = config.needBlocksAlign;

            workAreaForm.needGrid = config.needBlocksAlign; 

            toolStripTextBox1.Text = Convert.ToString(config.gridBlockSize); 

            toolStripButton1.Checked = config.needBlocksAlign;

            toolStripButton2.Checked = config.needBlocksAlign; 
 

            fStream.Close(); 

            workAreaForm.update();

        } 

        #endregion 

        private void saveToJpgToolStripMenuItem_Click(object sender, EventArgs e)

        {

            string fileName = string.Empty; 

            saveFileDialog1.Filter = "jpg files (*.jpg)|*.jpg|All files (*.*)|*.*"; 

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)

                fileName = saveFileDialog1.FileName; 

            if (fileName == String.Empty)

                return; 

            workAreaForm.saveToJPG(fileName);

        } 

        private void toolStripButton4_Click(object sender, EventArgs e)

        {

            workAreaForm.checkScheme(textBox1);

        } 

        private void MainForm_Resize(object sender, EventArgs e)

        {

            textBox1.Width = ClientRectangle.Width;

            textBox1.Top = ClientRectangle.Height - textBox1.Height;

            textBox1.Left = 0;

            panel1.Height = ClientRectangle.Height - textBox1.Height;

        }

    }

} 
 

2) workAreaForm.cs – форма для редактирования схемы

using System;

using System.Collections.Generic;

using System.Drawing;

using System.Drawing.Drawing2D;

using System.Windows.Forms; 

namespace FCEditor

{

    public partial class WorkAreaForm : Form

    {

        Graphics g; 

        public bool putBlock = false;    //нужно ли нарисовать добавить блок 

        /// <summary>

        /// Определяет тип блока

        /// -1 - ничего

        /// 1 - процесс

        /// 2 - данные

        /// 3 - решение

        /// 4 - RAM

        /// 5 - память с последовательным доступом

        /// 6 - ручной ввод

        /// 7 - предопределенный процесс

        /// 8 - ручная операция

        /// 9 - подготовка

        /// 10 - начало цикла

        /// 11 - конец цикла

        /// 12 - документ

        /// 13 - память с прямым доступом

        /// 14 - хранилище

        /// 15 - внешние данные

        /// 16 - терминатор

        /// 17 - комметарий левый

        /// 18 - комментарий правый

        /// </summary>

        public int blockType = -1; 

        public bool putArrow = false; 

        /// <summary>

        /// Опеределяет тип стрелки

        /// -1 - ничего 

        ///  1 - горизонтальная кривая

        ///  2 - вертикальная кривая

        ///  3 - горизонтальная

        ///  4 - вертикальная

        /// </summary>

        public int arrowType = -1; 

        bool leftButton = false;         //нажата ли ЛКМ 

        int prevx, prevy, mousex, mousey, dx, dy; 

        int movableBlock = -1;          //номер блока для перемещения 

        int movableArrow = -1;           //номер стрелки для перемещения

        int nodeToMove = -1; 

        int selectedRectX, selectedRectY;  //координаты  начала области выделения

        int selectedRectW, selectedRectH;  //ширина и высота области выделения

        bool needRect = false; 

        public List<BlockTemplate> blocks = new List<BlockTemplate>(); //все блоки

        public List<ArrowTemplate> arrows = new List<ArrowTemplate>()  //все стрелки 

        Bitmap picture; 

        editTextForm editForm;     //форма с полем редактирования текста блока 

        public Font drawFont; 
 

        public int thickness = 1; 
 

        public bool needGrid = false;

        public bool needBlocksAlign = false; 

        public int gridBlockSize = 30; 
 

        public WorkAreaForm()

        {

            InitializeComponent();

                    

            picture = new Bitmap(Width, Height);

            pictureBox1.Image = picture;

            pictureBox1.Width = Width;

            pictureBox1.Height = Height; 

            g = Graphics.FromImage(pictureBox1.Image);

            g.SmoothingMode = SmoothingMode.AntiAlias;

        } 

        public void saveToJPG(string fileName)

        {

            pictureBox1.Image.Save(fileName);

        } 
 

        private void WorkAreaForm_Load(object sender, EventArgs e)

        {

            this.Location = new Point(100, 2);   //начальная позиция формы

        } 
 

        public void checkScheme(TextBox log)

        {

            log.Clear(); 

            ////////////////////////////////////////////////////////////////////////// 

            BlockTemplate topBlock = null; 

            if (blocks.Count != 0)

                topBlock = blocks[0]; 

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

                if (blocks[i].cy < topBlock.cy)

                    topBlock = blocks[i];             

            if (topBlock.connectedArrows[0] != null)

            {

                log.Text += "В первый блок не  могут входить стрелки\r\n";

                topBlock.isSelected = true;

            } 

            ////////////////////////////////////////////////////////////////////////// 

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

                if (arrows[i].blockConnectedToFirstNode == null || arrows[i].blockConnectedToLastNode == null)

                {

                    log.Text += String.Format("Стрелка {0} не имеет связей с блоками\r\n", i + 1);

                    arrows[i].isMovable = true;

                } 

            ////////////////////////////////////////////////////////////////////////// 
 

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

            {

                if (blocks[i].connectedArrows[0] == null && blocks[i].connectedArrows[1] == null && blocks[i].connectedArrows[2] == null && blocks[i].connectedArrows[3] == null)

                {

                    log.Text += String.Format("Найден висячий блок: номер {0}\r\n", i + 1);

                    blocks[i].isSelected = true;

                }

            } 
 

            ////////////////////////////////////////////////////////////////////////// 
 

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

            {

                if (blocks[i].connectedArrows[2] != null && blocks[i].connectedArrows[2].blockConnectedToFirstNode != null &&

                        blocks[i].connectedArrows[2].blockConnectedToLastNode != null)

                {

                    if (blocks[i].connectedArrows[1] != null && blocks[i].connectedArrows[1].blockConnectedToFirstNode != null &&

                        blocks[i].connectedArrows[1].blockConnectedToLastNode != null)

                    {

                        if (blocks[i].connectedArrows[2].blockConnectedToFirstNode is ProcessBlock && blocks[i].connectedArrows[2].blockConnectedToLastNode is ProcessBlock)

                            if ((blocks[i].connectedArrows[1].blockConnectedToFirstNode is ProcessBlock && blocks[i].connectedArrows[1].blockConnectedToLastNode is ProcessBlock) || blocks[i].connectedArrows[3].blockConnectedToFirstNode is ProcessBlock && blocks[i].connectedArrows[3].blockConnectedToLastNode is ProcessBlock)

                            {

                                log.Text += String.Format("Не может быть  два выхода процесса: блок номер  {0}\r\n", i + 1);

                                blocks[i].isSelected = true;

                            }

                    } 
 

                    if (blocks[i].connectedArrows[3] != null && blocks[i].connectedArrows[3].blockConnectedToFirstNode != null &&

                        blocks[i].connectedArrows[3].blockConnectedToLastNode != null)

                    {

                        if (blocks[i].connectedArrows[2].blockConnectedToFirstNode is ProcessBlock && blocks[i].connectedArrows[2].blockConnectedToLastNode is ProcessBlock)

                            if ((blocks[i].connectedArrows[3].blockConnectedToFirstNode is ProcessBlock && blocks[i].connectedArrows[3].blockConnectedToLastNode is ProcessBlock) || blocks[i].connectedArrows[3].blockConnectedToFirstNode is ProcessBlock && blocks[i].connectedArrows[3].blockConnectedToLastNode is ProcessBlock)

                            {

                                log.Text += String.Format("Не может быть два выхода процесса: блок номер {0}\r\n", i + 1);

                                blocks[i].isSelected = true;

                            }

                    }

                }

            } 
 
 

            update();

        } 
 

        private void drawGrid(Graphics g)

        {

            Pen pen = new Pen(Color.Thistle, 1);

            pen.DashStyle = DashStyle.Dash; 

            for (int i = 0; i < pictureBox1.Width / gridBlockSize + 1; i++)  //вертикальные линии              

                g.DrawLine(pen, i * gridBlockSize, 0, i * gridBlockSize, pictureBox1.Height);            

            for (int i = 0; i < pictureBox1.Height / gridBlockSize + 1; i++)  //горизонтальные линии                      

                g.DrawLine(pen, 0, i * gridBlockSize, pictureBox1.Width, i * gridBlockSize);           

        } 
 

        public void update()

        {

            g.Clear(Color.White);  //удаление блоков 

            if (needGrid)           

                drawGrid(g); 

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

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