Автор работы: Пользователь скрыл имя, 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
СПИСОК ЛИТЕРАТУРЫ
);
try
{
config = (Configuration)xmlFormat.
}
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.
toolStripButton1.Checked = config.needBlocksAlign;
toolStripButton2.Checked = config.needBlocksAlign;
fStream.Close();
workAreaForm.update();
}
#endregion
private void saveToJpgToolStripMenuItem_
{
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(
}
private void toolStripButton4_Click(object sender, EventArgs e)
{
workAreaForm.checkScheme(
}
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(
g.SmoothingMode = SmoothingMode.AntiAlias;
}
public void saveToJPG(string fileName)
{
pictureBox1.Image.Save(
}
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].
{
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].
blocks[i].connectedArrows[2].
{
if (blocks[i].connectedArrows[1] != null && blocks[i].connectedArrows[1].
blocks[i].connectedArrows[1].
{
if (blocks[i].connectedArrows[2].
if ((blocks[i].connectedArrows[1]
{
}
}
if (blocks[i].connectedArrows[3] != null && blocks[i].connectedArrows[3].
blocks[i].connectedArrows[3].
{
if (blocks[i].connectedArrows[2].
if ((blocks[i].connectedArrows[3]
{
log.Text += String.Format("Не может быть два выхода процесса: блок номер {0}\r\n", i + 1);
}
}
}
}
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++)