Практичні аспекти створення програмного забезпечення

Курсовой проект - Компьютеры, программирование

Другие курсовые по предмету Компьютеры, программирование

?ис роботи програми

 

Програма розроблена у середовищі програмування Турбо Паскаль. Вона призначена для свого використання операційною системою MS DOS. До неї підключені стандартні бібліотеки Турбо Паскаля: crt, graph та dos.

На початку роботи програми на екрані зявляється головне меню, яке містить кнопки “Данные”, “Результат” и “?”. При натисненні кнопки “Данные” на екрані зявляються підпункти “Из файла”, “Вручную” та “Выход”. Користувач обирає метод введення матриці вагів зчитування її з файлу Input.txt чи введення власноруч. Користувач виходить з програми, вибравши підпункт “Выход”. “Результат” складається з підпунктів “На экран” та “В файл”. Обравши один з цих підпунктів, користувач автоматично обирає, як саме виводити результати на екран чи записавши їх у файл Output.txt відповідно. Пункт меню “?” містить лише підпункт “Справка”, який містить довідку про програму та її автора.

Опис творчого процесу рішення задачі

 

Користувач може керувати програмою за допомогою меню. Структурна схема меню представлена на мал.1.

 

 

 

 

 

 

 

 

 

 

 

 

 

Мал.1.

 

Алгоритм роботи програми приведений на мал.2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Мал.2.

 

Опис процедур

 

procedure Init

Ініціалізація кнопки меню.

Вхідін дані - координати кнопки.

procedure Show

Виведення на екран кнопки меню.

Вхідні дані - колір.

procedure ChoiceMein

Вибір в головному меню.

Вхідні дані - номер виділеної кнопки.

procedure Mein

Виведення на екран головного меню.

procedure ShowAll

Виведення підменю.

Вхідні дані - номер підменю.

procedure ChoiceM

Вибір у підменю.

procedure PHelp

Виведення допомоги.

procedure MsgError

Виведення повідомлення про помилку.

Вхідні дані - рядок повідомлення.

procedure InitMatrix

Ініціалізація масиву з координатами кнопок.

Вхідні дані - потрібний пункт меню.

procedure ChoiceResult

Перевірка натиснутої кнопки меню і виконання відповідної дії.

Вхідні дані - номер кнопки меню.

 

Лістинг програми:

 

Program Lenna;{iм"я програми}

Uses crt, dos, graph ;{пiдключаємо модулi}

Const MaxMenuItems = 10;{максимальна кiлькiсть пунктiв меню}

GM = MAXINT;{"нескiнченно велике число"}

MAXN = 10;{максимальна кiлькiсть комп"ютерiв у мережi}

Const Huge = MaxInt;{те саме що i ГМ}

Type MyArray = Array[1..MaxN, 1..MaxN] of Real; {тип масиву для розрахункiв}

MySimpleArray = Array[1..MaxN] of Real; {тип масиву для розрахункiв}

Type ProcedureType = Procedure;{процедурний тип}

Type ProcedurePointer = ^ProcedureType; {покажчик на процедурний тип (для меню) }

Type TMenuItem = Record{тип пункту меню}

Caption : String;{текст пункту (назва) }

Action : ProcedurePointer; {покажчик на процедуру}

Selected: Boolean;{пункт видiленоi}

end;

{загальний опис структури меню та короткий довiдник}

Type TMenu = Object {об"єкт меню}

Items: Array [ 1..MaxMenuItems ] of TMenuItem;{пукти}

ItemsCount: Integer;{кiлькiсть пунктiв}

Active: Boolean;{меню активнеi взагалi це поле не вик.}

Procedure AddItem(Caption: String; Action: ProcedurePointer); {метод. додати пукт до меню}

Procedure ExecuteAction;{виконати дiю: передати керування процедурi на яку вказує покажчик видiленого пункту}

Function getMaximalWidth: Integer; {знайти найширший пункт}

Procedure Print;{вивести меню на екран}

procedure Activate;{передати керування у меню}

end;

var Num: Integer;

Input: MyArray;

i, j: integer;

OriginalMode : Word; {для перемикання текстових режимiв}

ScreenWidth : Integer;{ширина екрану}

ScreenHeight : Integer;{висота екрану}

CharBuffer : Char;{непотрiбно :)}

Menu: TMenu;{об"єкт меню}

{процедура створення текстового вiкна з параметрами кольору фону та тексту}

Procedure CreateTextWindow( X, Y, Width, Height: Integer;

BackgroundColor, ForegroundColor: Integer);

begin

If (X + Width) > ScreenWidth then Width := ScreenWidth - X;

If (Y + Height) > ScreenHeight then Height := ScreenHeight - Y;

Window(X, Y, Width, Height);

TextBackground(BackgroundColor);

TextColor(ForegroundColor);

ClrScr;

end;

{активацiя меню}

Procedure TMenu.Activate;

var CommandKey: Char;

I: Integer;

begin

{виводимо меню}

Print;

{читаємо команди}

Repeat

CommandKey := ReadKey;

{Enter -- виконати}

Case Ord(CommandKey) Of

13: ExecuteAction;

{вибрати наступний униз}

75: Begin

For i := 1 to ItemsCount do

If items[i].selected then break;

Items[I].Selected := False;

If i = 1 then I := ItemsCount Else

I:=I-1;

Items[I].Selected := True;

End;

{вибрати наступний угору}

77: Begin

For I:=1 to ItemsCount do

If Items[i].selected then break;

Items[i].Selected := False;

If I = Itemscount then I:=1 else I:=I+1;

Items[I].Selected := True;

end;

end;

{надрукувати меню на екран}

Print;

{якщо Еск -- вийти}

Until Ord(CommandKey) = 27;

end;

{вивiд меню на екран}

Procedure TMenu.Print;

var i:integer;

width: integer;

Position: Integer;

TempText: String;

begin

{тiльки якщо пункти є}

If ItemsCount > 0 then

Begin

Width:=getMaximalWidth + 4;

{ робимо заголовок}

TempText:=ЗАДАЧА О НАЗНАЧЕНИЯХ;

CreateTextWindow(1, 1, 80, 4, LightGray, Black);

GotoXY(ScreenWidth div 2 - Length(TempText) div 2, 2);

Write(TempText);

{робимо меню i друкуємо його}

CreateTextWindow(1, 4, 80, 6,green, White);

For I:=1 to ItemsCount do

begin

GotoXY( Width * I - Width div 2 - Length(Items[i].Caption) div 2, 2);

If Items[I].Selected then TextColor(Yellow) Else TextColor(White);

Write(Items[I].Caption);

end;

End;

end;

{знайти найширший пункт}

Function TMenu.getMaximalWidth: Integer;

var max: integer;

i: integer;

begin

if ItemsCount > 0 then

begin

max := Length(Items[1].Caption);

For I:=1 to ItemsCount do

begin

If Length(Items[i].Caption) > max then

Max := Length(Items[i].Caption);

end;

end;

getMaximalWidth := max;

end;

{виконати дiю}

Procedure TMenu.ExecuteAction;

Var N: Integer;

Begin

if ItemsCount > 0 then

begin

For N:=1 to ItemsCount do

begin

If Items[N].Selected Then ProcedureType(Items[N].Action