Автор работы: Пользователь скрыл имя, 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
СПИСОК ЛИТЕРАТУРЫ
{
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.
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].
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(
for (int i = 0; i < arrows.Count; i++)
arrows[i].isMovable = arrows[i].arrowInsideRect(
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].
update();
return;
}
if (movableArrow != -1 && nodeToMove != -1)
{
arrows[movableArrow].moveNode(
if (nodeToMove == arrows[movableArrow].nodes.
arrows[movableArrow].
if (nodeToMove == 0)