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

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

                        arrows[movableArrow].findNearestBlockToConnectToNode(blocks, 0); 

                    update();

                    return;

                } 
 

                for (int i = 0; i < blocks.Count; i++)   //если нет блока для перемещения, найдем такой блок

                {

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

                    {

                        movableBlock = i;

                        this.Cursor = Cursors.Hand;

                        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))

                        {

                            movableArrow = i;

                            nodeToMove = j;

                            arrows[i].isChangeable = true;                           

                            return;

                        }

                    } 

                } 

                for (int i = 0; i < arrows.Count; i++)   //если  нет стрелки для перемещения, найдем такую стрелку

                {

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

                    {

                        movableArrow = i;

                        arrows[i].isMovable = true; 

                        this.Cursor = Cursors.Hand;

                        return;

                    }

                }  
 

            }

        } 
 

        private void pictureBox1_MouseDoubleClick(object sender, MouseEventArgs e)

        {

            int shapeNum = -1;

            int arrowNum = -1; 

            for (int i = 0; i < blocks.Count; i++)   //определяем по каком блоку кликнули

            {

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

                {

                    shapeNum = i;

                    break;

                }

            } 

           

            if (shapeNum == -1)    //если не нашли блок, найдем стрелку. Если блок уже найден то стрелку искать не нужно

            {

                for (int i = 0; i < arrows.Count; i++)   //определяем  по каком блоку кликнули               

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

                    {

                        arrowNum = i;

                        break;

                    }               

            } 

         

            if (shapeNum != -1 || arrowNum != -1)

            {

                editForm = new editTextForm(this, shapeNum, arrowNum);

                editForm.MdiParent = this.MdiParent;               

                editForm.Show();

            }

               

        } 

#endregion 
 
 

        private void WorkAreaForm_Resize(object sender, EventArgs e)

        {

            pictureBox1.Width = Width;

            pictureBox1.Height = Height;

            picture = new Bitmap(Width, Height);

            pictureBox1.Image = picture;

            g = Graphics.FromImage(pictureBox1.Image);

            g.SmoothingMode = SmoothingMode.AntiAlias;

            update();

        } 
 

    }

} 
 
 

3) editTextForm.cs – форма редактирования свойств элементов схемы

using System;

using System.Windows.Forms;

using System.Drawing; 

namespace FCEditor

{  

    public partial class editTextForm : Form

    {

        int blockToChange;

        int arrowToChange; 

        WorkAreaForm workAreaForm; 

        public editTextForm(WorkAreaForm form, int blockNum, int arrowNum)

        {

            InitializeComponent();

            workAreaForm = form;

            blockToChange = blockNum;

            arrowToChange = arrowNum; 

            if (arrowToChange != -1)

            {

                textBox1.Visible = false;

                button1.Visible = false;

                comboBox1.Visible = false;

                label1.Visible = false;

                checkBox1.Visible = true;

                groupBox1.Visible = true;

                checkBox1.Checked = workAreaForm.arrows[arrowToChange].isDashed;

                startCapCheckBox.Checked = workAreaForm.arrows[arrowToChange].needStartCap;

                endCapCheckBox.Checked = workAreaForm.arrows[arrowToChange].needEndCap;

                button2.Width = 140;

                button2.Left = this.Width / 2 - button2.Width / 2;

                button2.Text = "Удалить стрелку";

                Height = 100;

                Width = 270;

                checkBox1.Top -= 20;

                groupBox1.Top -= 20;

                button2.Top -= 20;

            } 

            if (blockToChange != -1)

            {

                comboBox1.Visible = true;

                textBox1.Text = workAreaForm.blocks[blockToChange].info;

                comboBox1.SelectedIndex = workAreaForm.blocks[blockToChange].thickness - 1;

                Height = 75;

            }

        } 

        private void button1_Click(object sender, EventArgs e)

        {

            if (blockToChange != -1)

            {

                string text = textBox1.Text;

                workAreaForm.blocks[blockToChange].info = text;

                workAreaForm.update();

                this.Close();

            }

        } 

        private void button2_Click(object sender, EventArgs e)

        {

            if (blockToChange != -1)           

                workAreaForm.blocks.Remove(workAreaForm.blocks[blockToChange]); 

            if (arrowToChange != -1)

                workAreaForm.arrows.Remove(workAreaForm.arrows[arrowToChange]); 

            workAreaForm.update();

            this.Close();

        } 

        private void editTextForm_Activated(object sender, EventArgs e)

        {

            textBox1.Focus();

        } 

        private void editTextForm_Load(object sender, EventArgs e)

        {

            this.Location = new Point(MdiParent.ClientSize.Width / 2 - this.Width / 2, MdiParent.ClientSize.Height / 2 - this.Height / 2);

        } 

        private void checkBox1_CheckStateChanged(object sender, EventArgs e)

        {

            if (arrowToChange == -1)

                return; 

            workAreaForm.arrows[arrowToChange].changeStyle_DashedOrRegular(checkBox1.Checked);

            workAreaForm.update();

        } 

        private void startCapCheckBox_CheckStateChanged(object sender, EventArgs e)

        {

            workAreaForm.arrows[arrowToChange].changeArrowEndCap(workAreaForm.arrows[arrowToChange].needEndCap, startCapCheckBox.Checked);

            workAreaForm.update();

        } 

        private void endCapCheckBox_CheckStateChanged(object sender, EventArgs e)

        {

            workAreaForm.arrows[arrowToChange].changeArrowEndCap(endCapCheckBox.Checked, workAreaForm.arrows[arrowToChange].needStartCap);

            workAreaForm.update();

        } 

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

        {

            string text = (string)comboBox1.SelectedItem;

            workAreaForm.blocks[blockToChange].changeLineThickness(Convert.ToInt32(text));

            workAreaForm.update();

        }

    }

} 
 

4) blockTemplate.cs – класс шаблон для блока

using System.Drawing;

using System.Xml.Serialization; 

namespace FCEditor

{

    public abstract class BlockTemplate

    {

        [XmlAttribute]

        public int cx; 

        [XmlAttribute]

        public int cy; 

        [XmlAttribute]

        public int w; 

        [XmlAttribute]

        public int h; 

        [XmlAttribute]

        public bool isSelected = false; 

        [XmlAttribute]

        public string info = "Some Text"; 

        [XmlAttribute]

        public int thickness = 1; 

        //присоединенные стрелки

        public ArrowTemplate[] connectedArrows; 
 

        //хранит номер узла которым присоеденена connectedArrows[i] стрелка

        public int[] connectedArrowsNodes; 
 

        //top right bottom left. Точки к которым стыкуются стрелки

        public Point[] connectionPoints;

   

        [XmlIgnore]

        public Pen blockPen = new Pen(Color.Black, 1); 

        [XmlIgnore]

        public Pen selectedBlockPen = new Pen(Color.Firebrick, 1); 

        [XmlIgnore]

        protected static StringFormat strFormat = new StringFormat()

        {

            Alignment = StringAlignment.Center,

            LineAlignment = StringAlignment.Center

        }; 

        [XmlIgnore]

        protected static Brush drawBrush = new SolidBrush(Color.Black); 
 

        public BlockTemplate() { } 
 

        public BlockTemplate(int x, int y)

        {

            cx = x;

            cy = y;

            

            blockPen = new Pen(Color.Black, thickness);

            selectedBlockPen = new Pen(Color.Firebrick, thickness); 

            connectedArrows = new ArrowTemplate[] { null, null, null, null }; 

            connectedArrowsNodes = new int[] { -1, -1, -1, -1 };

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