2. Спеціальна частина
.1 Застосування мови UML до проектування інформаційної системи
(Unified Modeling Language) - уніфікована мова моделювання, використовується у парадигмі об'єктно-орієнтованого програмування. Є невід'ємною частиною уніфікованого процесу розробки програмного забезпечення. UML є мовою широкого профілю, це відкритий стандарт, що використовує графічні позначення для створення абстрактної моделі системи, яку називають UML-моделлю.
Основні види діаграм UML:
– діаграма прецедентів;
– діаграма класів;
– діаграма об’єктів;
– діаграма послідовностей;
– діаграма взаємодії;
– діаграма стану;
– діаграма активності;
– діаграма розгортання.
Для проектування додатку використаємо діаграму прецедентів рисунок 2.1, діаграму класів рисунок 2.2, діаграму послідовностей рисунок 2.3 та діаграму розгортання рисунок 2.4.
Діаграма прецедентів - це діаграма, яка відображає відносини між акторами та прецедентами і дозволяє описати систему на концептуальному рівні.
Актор - людина, зовнішня сутність, клас, інша система, що взаємодіє з створюваною системою, позначаються у вигляді стилізованої людини. Актори не можуть бути пов’язані між собою.
Прецедент - виконувана
системою дія з точки зору користувача, позначається на діаграмі овалом.
Рисунок 2.1 - Діаграма
прецедентів АІС промислового підприємства
Діаграма компонентів (Component diagram) - статична структурна діаграма, показує розбивку програмної системи на структурні компоненти та зв’язки (залежності) між компонентами, що відображають архітектуру розробленого додатку. В якості фізичних компонентів можуть виступати файли, бібліотеки, модулі, виконувані файли, пакети, таблиці, бази даних тощо.
Діаграми компонентів показують особливості фізичного представлення системи. Вона дозволяє визначити архітектуру системи, яка розробляється, встановити залежності між програмними компонентами.
Основними графічними елементами на діаграмі компонентів є компоненти, інтерфейси і залежності між ними.
Діаграма компонентів розробляється для наступних цілей:
візуалізації загальної структури вихідного коду програмної системи;
- специфікації виконуваного варіанту програмної системи;
забезпечення багаторазового використання окремих фрагментів програмного коду;
подання концептуальної і фізичної схем баз даних.
У розробці діаграми компонентів беруть участь не тільки програмісти а і системні аналітики та архітектори.
Змодельована діаграма
компонентів для даної інформаційної системи представлена на рисунку 2.2
Рисунок 2.2 - Діаграма
компонентів АІС промисловго підприємства
Діаграма класів служить для представлення статичної структури моделі і являє собою логічне представлення моделі системи, призначена для опису статичної структури моделі у термінології класів ООП.
Діаграма класів являється статичною діаграмою, яка показує логічну структуру інформаційної системи. На ній відображаються сутності, які реалізують інформаційну систему класа, їх атрибути, операції, а також взаємовідношення сутностей на структурному рівні.
Клас в мові UML служить для позначення безлічі об’єктів, які мають однакову структуру, поведінку і відносини з об’ктами інших класів.
Обов’язковим елементом позначення класу є його ім’я.
Клас має атрибут -
іменована властивість класу, що описує безліч значень, які можуть приймати
примірники цієї властивості, і операції - іменована послуга, яку можна
запросити у бідь-якого об’єкта цього класу. Змодельована діаграма класів для
даної інформаційної системи представлена на рисунку 2.3
Рисунок 2.3 Діаграма
класів промислового підприємства
Для підвищення ефективності роботи програми був використаний DataModule, який має назву «DM».це об’єкт класа ТDataModule, такий як і звичайна форма, призначений для розміщення компонентів. Модуль даних відрізняється від форми лише тим що, на ньому розміщуються лише не візуальні компоненти. На ньому можна розмістити всі не візуальні компоненти програми.
На ньому розміщені всі
не візуальні компоненти програми які показано на рисунку 2.4:
Рисунок 2.4 структура
DataModule
2.2 Програма задачі та її опис
Програма компонентів інформаційної системи складається з окремих складових кожного з модулів, до складу яких входять процедури та функції, які виконують обробку інформації або забезпечують обробку визначених подій.
Project1 - стартовий модуль;
- Unit1 - Головна форма;
Unit2 - DM;
Unit3 - Форма БД;
Програми має вигляд:
Файл Form1.cs є модулем головної форми проекту, на рисинку 2.5 зображено дизайн форми.
Form1.cs:Unit1;
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, Grids, DBGrids, StdCtrls, Mask, DBCtrls, Buttons, ExtCtrls, jpeg;
= class(TForm): TButton;: TBitBtn;: TImage;Button1Click (Sender: TObject);BitBtn5Click (Sender: TObject);
{Private declarations}
{Public declarations};
: TForm1;
Unit2, Unit3;
{$R *.dfm}
TForm1. Button1Click (Sender: TObject);
. Show;. Visible:= false;;
TForm1. BitBtn5Click (Sender: TObject);. Close;;
.
Файл Form2.cs є дата модулем проекту, на рис. 2.4 зображено дизайн форми.
Form2.cs:Unit2;
, Classes, DB, ADODB, StdCtrls;
= class(TDataModule): TADOConnection;: TADOTable;: TDataSource;: TADOTable;: TADOTable;: TADOTable;: TADOTable;: TADOTable;: TADOTable;_zamovlenya: TADOTable;: TDataSource;: TDataSource;: TDataSource;: TDataSource;: TDataSource;: TDataSource;: TDataSource;_2: TWideStringField;_3: TIntegerField;_4: TIntegerField;__: TIntegerField;_5: TDateTimeField;: TBCDField;_2: TWideStringField;_: TAutoIncField;_: TAutoIncField;_: TAutoIncField;_2: TWideStringField;: TWideStringField;_: TAutoIncField;_2: TDateTimeField;_3: TIntegerField;_: TAutoIncField;: TWideStringField;: TWideStringField;: TWideStringField;_2: TIntegerField;_3: TIntegerField;_4: TIntegerField;_5: TIntegerField;_: TAutoIncField;_2: TWideStringField;_: TAutoIncField;_2: TIntegerField;_3: TWideStringField;_zamovlenya_: TAutoIncField;_zamovlenya_2: TIntegerField;_zamovlenya_3: TIntegerField;_zamovlenyaDSDesigner: TIntegerField;_6: TStringField;_7: TStringField;: TStringField;: TStringField;: TStringField;: TStringField;_zamovlenyaField: TStringField;_zamovlenyaField2: TDateField;_4: TIntegerField;_5: TStringField;: TStringField;: TIntegerField;: TIntegerField;: TBlobField;DataModuleCreate (Sender: TObject);: TEdit;setEdit (Edit: TEdit);;
: TDM;
Variants;
{$R *.dfm}
TDM.setEdit (Edit: TEdit);:= Edit;;
Файл Form3.cs є формою БД, в якому реалізований її інтерфейс та робота.
Form3.cs:
unit Unit3;
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, ComCtrls, Grids, DBGrids, StdCtrls, Buttons, Mask, DBCtrls, jpeg, ComObj,, OleCtnrs, DB;
= class(TForm):
TPageControl;: TTabSheet;: TTabSheet;: TTabSheet;: TTabSheet;: TTabSheet;:
TGroupBox;: TGroupBox;: TGroupBox;: TDBGrid;: TBitBtn;: TBitBtn;: TBitBtn;:
TDBEdit;: TDBEdit;: TDBEdit;: TDBEdit;: TDBLookupComboBox;: TLabel;:
TDBLookupComboBox;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TRadioButton;:
TEdit;: TGroupBox;: TGroupBox;: TDBGrid;: TBitBtn;: TBitBtn;: TBitBtn;:
TDBEdit;: TLabel;: TGroupBox;: TGroupBox;: TGroupBox;: TDBGrid;: TDBEdit;:
TLabel;: TLabel;: TLabel;: TBitBtn;: TBitBtn;: TBitBtn;: TRadioButton;: TEdit;:
TGroupBox;: TGroupBox;: TGroupBox;: TDBGrid;: TDBEdit;: TDBEdit;: TDBEdit;:
TDBEdit;: TDBEdit;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;: TLabel;:
TLabel;: TBitBtn;: TBitBtn;: TBitBtn;: TRadioButton;: TEdit;:
TDBLookupComboBox;: TDBLookupComboBox;: TDBLookupComboBox;: TGroupBox;:
TGroupBox;: TDBGrid;: TDBEdit;: TDBLookupComboBox;: TBitBtn;: TBitBtn;:
TBitBtn;: TLabel;: TLabel;: TLabel;: TBitBtn;: TBitBtn;: TLabel;:
TDBLookupComboBox;: TDBEdit;: TLabel;: TBitBtn;: TDBGrid;: TBitBtn;: TBitBtn;:
TLabel;: TLabel;: TLabel;: TLabel;: TDBEdit;: TBitBtn;: TDBLookupComboBox;:
TLabel;: TBitBtn;: TDBEdit;: TDBEdit;: TLabel;: TLabel;: TBitBtn;: TBitBtn;:
TBitBtn;: TDBGrid;: TLabel;: TLabel;: TBitBtn;: TEdit;: TBitBtn;: TBitBtn;:
TDBImage;: TOpenPictureDialog;: TBitBtn;: TBitBtn;: TBitBtn;:
TBitBtn;BitBtn1Click (Sender: TObject);BitBtn2Click (Sender:
TObject);BitBtn3Click (Sender: TObject);BitBtn4Click (Sender:
TObject);RadioButton1Click (Sender: TObject);Edit1Change (Sender:
TObject);DBGrid1CellClick (Column: TColumn);BitBtn9Click (Sender:
TObject);BitBtn6Click (Sender: TObject);BitBtn7Click (Sender:
TObject);BitBtn8Click (Sender: TObject);BitBtn10Click (Sender:
TObject);BitBtn11Click (Sender: TObject);BitBtn12Click (Sender:
TObject);DBGrid2CellClick (Column: TColumn);DBGrid3CellClick (Column:
TColumn);DBGrid4CellClick (Column: TColumn);RadioButton2Click (Sender:
TObject);BitBtn16Click (Sender: TObject);BitBtn17Click (Sender:
TObject);BitBtn18Click (Sender: TObject);RadioButton3Click (Sender:
TObject);DBGrid5CellClick (Column: TColumn);DBGrid6CellClick (Column: TColumn);BitBtn19Click
(Sender: TObject);BitBtn20Click (Sender: TObject);BitBtn21Click (Sender:
TObject);BitBtn22Click (Sender: TObject);BitBtn23Click (Sender:
TObject);BitBtn24Click (Sender: TObject);Edit3Change (Sender:
TObject);DBGrid8CellClick (Column: TColumn);BitBtn25Click (Sender:
TObject);BitBtn26Click (Sender: TObject);BitBtn27Click (Sender:
TObject);BitBtn28Click (Sender: TObject);BitBtn29Click (Sender:
TObject);TabSheet4Show (Sender: TObject);BitBtn13Click (Sender:
TObject);BitBtn15Click (Sender: TObject);BitBtn14Click (Sender:
TObject);BitBtn5Click (Sender: TObject);BitBtn30Click (Sender:
TObject);BitBtn31Click (Sender: TObject);BitBtn32Click (Sender:
TObject);DBLookupComboBox7Exit (Sender: TObject);DBEdit9Exit (Sender: TObject);
{Private declarations}
{Public declarations};
: TForm3;:integer;:integer;:integer;
Unit1, unit2;
{$R *.dfm}
TForm3. BitBtn1Click (Sender: TObject);. Show;. Visible:= false;;TForm3. BitBtn2Click (Sender: TObject);. Tovar. Append;
TForm3. BitBtn3Click (Sender: TObject);. Tovar. Edit;. Tovar. Post;;
TForm3. BitBtn4Click (Sender: TObject);. Tovar. Delete;;
TForm3. RadioButton1Click (Sender: TObject);RadioButton1. Checked then. Tovar. Sort:= 'назва_товору';;
TForm3. Edit1Change (Sender: TObject);length (Edit1. Text)>0 then. Tovar. Filtered:= False;. Tovar. Filter:= ' назва_товору ' + ' LIKE ' + #39+' % ' + Edit1. Text+ ' % ' + #39;. Tovar. Filtered:= True;else. Tovar. Filtered:= False;;
TForm3.DBGrid1CellClick (Column: TColumn);. Tovar. Edit;;
TForm3. BitBtn9Click (Sender: TObject);. Show;. Visible:= false;;TForm3. BitBtn6Click (Sender: TObject);. Gatunok. Append;;
TForm3. BitBtn7Click (Sender: TObject);. Gatunok. Post;;
TForm3. BitBtn8Click (Sender: TObject);. Gatunok. Delete;;
TForm3. BitBtn10Click (Sender: TObject);. Material. Append;;
TForm3. BitBtn11Click (Sender: TObject);. Material. Post;;
TForm3. BitBtn12Click (Sender: TObject);. Material. Delete;;
TForm3.DBGrid2CellClick (Column: TColumn);. Gatunok. Edit;;
TForm3.DBGrid3CellClick (Column: TColumn);. Material. Edit;;
TForm3.DBGrid4CellClick (Column: TColumn);:real;. Zamovlenya. Edit;:=StrToInt (DBEdit9. Text);:= StrToFloat (DBLookupComboBox9. Text)* StrToFloat (DBedit9. Text);. Text:= FloatToStr(c);;
TForm3. RadioButton2Click (Sender: TObject);RadioButton2. Checked then. Zamovlenya. Sort:= 'дата_замовлення';;
;
TForm3. BitBtn16Click (Sender: TObject);. Zamovnuk. Append;;
TForm3. BitBtn17Click (Sender: TObject);. Zamovnuk. Post;;
TForm3. BitBtn18Click (Sender: TObject);. Zamovnuk. Delete;;
TForm3.
RadioButton3Click (Sender: TObject);RadioButton3. Checked then. Zamovnuk.
Sort:= 'Прізвище';;
TForm3.DBGrid5CellClick (Column: TColumn);. Zamovnuk. Edit;;
TForm3.DBGrid6CellClick (Column: TColumn);. Town. Edit;;
TForm3. BitBtn19Click (Sender: TObject);. Town. Append;;
TForm3. BitBtn20Click (Sender: TObject);. Town. Post;;
TForm3. BitBtn21Click
(Sender: TObject);. Town. Delete;;
procedure TForm3. BitBtn22Click (Sender: TObject);. Street. Append;;
TForm3. BitBtn23Click (Sender: TObject);. Street. Post;;
TForm3. BitBtn24Click (Sender: TObject);. Street. Delete;;
TForm3. Edit3Change (Sender: TObject);length (Edit3. Text)>0 then. Zamovnuk. Filtered:= False;. Zamovnuk. Filter:= ' Прізвище ' + ' LIKE ' + #39+' % ' + Edit3. Text+ ' % ' + #39;. Zamovnuk. Filtered:= True;else. Zamovnuk. Filtered:= False;;
TForm3.DBGrid8CellClick (Column: TColumn);. Info_zamovlenya. Edit;;
TForm3. BitBtn25Click (Sender: TObject);. TabSheet5. Show;;
TForm3. BitBtn26Click (Sender: TObject);. TabSheet4. Show;;
TForm3. BitBtn27Click (Sender: TObject);
:TDate;:=Now;not (DBGrid4. DataSource. DataSet. IsEmpty)_rows:=DBGrid4. DataSource. DataSet. RecordCount;_columns:=DBGrid4. DataSource. DataSet. FieldCount;:=CreateOleObject ('Word.application');.visible:=true;.documents.add;:=Wd. ActiveDocument. Range (Wd. ActiveDocument. Range. End-1,. ActiveDocument. Range. End-1);. ActiveDocument. Range. Font. Size:=14;
. ActiveDocument. Range. Font. Size:=14;. ActiveDocument. Tables. Add (Range:=Rang, NumRows:=num_rows, NumColumns:=num_columns);:=1;:=wd.activedocument.tables.item(1);not (DBGrid4. DataSource. DataSet.eof) doj:=0 to num_columns-1 do.cell (i, j+1).range.text:=DBGrid4. DataSource. DataSet. Fields[j].asstring;;. DataSource. DataSet.next;(i);;;
. ActiveDocument. SaveAs (extractfilepath(application. ExeName)+'Замовлення.doc');:=UnAssigned;;TForm3. BitBtn28Click (Sender: TObject);. Zamovlenya. Filter:='дата_замовлення='+ Edit2. Text;. Zamovlenya. Filtered:=True;;
TForm3. BitBtn29Click (Sender: TObject);. Zamovlenya. Filtered:=False;;
TForm3. TabSheet4Show (Sender: TObject);
// DM.setEdit(Edit4);;
TForm3. BitBtn13Click (Sender: TObject);. Zamovlenya. Append;;
TForm3. BitBtn15Click (Sender: TObject);. Zamovlenya. Delete;;
TForm3. BitBtn14Click
(Sender: TObject);. Zamovlenya. FieldByName('Вартість').AsFloat:= StrToFloat
(Edit4.text);. Zamovlenya. Post;
if (k1<=k) then. Tovar. Locate ('код_товару', id, []);. Tovar. Edit;. Tovar. FieldByName ('кількість_на_складі').AsInteger:= k-k1;. Tovar. Post;
;
TForm3. BitBtn5Click (Sender: TObject);: TJpegImage;: TBitmap;(OpenPictureDialog1. Execute) then:= TJPEGImage. Create;:= TBitmap. Create;
. LoadFromFile (OpenPictureDialog1. FileName);. Assign(jpg);. Tovar. Edit;. Tovar. FieldByName('Фото').Assign(bmp);. Tovar. Post;. Free;. Free;;;;TForm3. BitBtn30Click (Sender: TObject);. Show;. Visible:= false;;
TForm3. BitBtn31Click (Sender: TObject);. Show;. Visible:= false;;
TForm3. BitBtn32Click (Sender: TObject);. Show;. Visible:= false;;
TForm3.DBLookupComboBox7Exit
(Sender: TObject);:=DBLookupComboBox7. KeyValue;. Tovar. Locate ('код_товару',
id, []);:=dm. Tovar. Fields[4].Value;;TForm3.DBEdit9Exit (Sender:
TObject);:real;:=StrToInt (DBEdit9. Text);:= StrToFloat (DBLookupComboBox9.
Text)* StrToFloat (DBedit9. Text);. Text:= FloatToStr(c);;.
2.3 Налагодження та тестування програми
Тестування програми - це перевірка правильності виконання програми при різних початкових даних та при виконані функціональних режимів.
На етапі тестування програми перевіряється логіка роботи програми в ході її виконання з конкретними вхідними даними.
Відладка - процес розробки комп’ютерної програми, що виявляє, локалізує
і усуває помилки. На цьому етапі програма перевіряється на синтаксичні та семантичні помилки.
Налагодження - це процес, який починається з моменту встановлення існування помилки і закінчується локалізацією цієї помилки в програмі, тобто визначенням її характеру та місцезнаходження. Таким чином, налагодження програми передбачає обов’язкову наявність помилки.
Налагодження програм - досить складний процесс, тому що для виправлення помилки необхідно повністю виявити її причини, які часто бувають неочевидними. Крім того, налагодження - це процес, який призупиняється лише тимчасово, поки тестування не виявить наявність чергової помилки.
Синтаксична помилка - помилка, яка пов’язана з неправильністю написання послідовності символів або токенів певною мовою програмування, призводить до краху програми при виконанні. У середовищі Visual Studio в редакторі коду більшість синтаксичних помилок виділяються і їх легко помітити і усунути.
Семантична помилка (баг) - призводить до некоректної роботи програми, але не призводить до її краху. Засобами Visual Studio можна покроково виконувати код і переглядати значення змінних в кожен момент часу, щоб побачити де саме в програмі виникає некоректна робота і виправити її. Також для цього можна встановлювати точки «зупину» на певних рядках коду, де буде зупинятися робота програми для аналізу значень змінних.
Коли програма виявила помилку вона видає повідомлення про знаходження даної помилки, та намагається як найточніше вказати місце її знаходження.
Під час розробки програмного додатку було виявлено такі помилки:
- [Error] Unit3.pas(65): Missing operator or semicolon
- [Fatal Error] Project1.dpr(17): Could not compile used unit 'Unit1.pas'
[Error] Unit3.pas(86): Undeclared identifier: 'ataModule2'
- [Error] Unit3.pas(278): '.' expected but end of file found
Всі виявлені помилки
було проаналізовано і виправлено. Після відлагодження проект запрацював
нормально.
2.4 Дослідна експлуатація програми
Дослідна експлуатація - одна з останніх стадій створення обладнання, пристроїв, систем, програм та методик, що полягає в використанні вище перерахованого за прямим призначенням в реальних робочих чи технологічних процесах та під час якої остаточно визнається їх функціональна придатність.
Дослідна експлуатація проекту відбулась відразу після закінчення етапу тестування та налагодження, в результаті чого було отримано виконавчий модуль програми. Перед початком дослідної експлуатації були створені макети таблиць БД. Склад даних цих таблиць передбачав можливість випробовувань проекту для різних значень даних включаючи виникнення виключних ситуацій. Під час експлуатації програми перевіряємо усі режими роботи програми, щоб переконатися у відповідності функціонування додатку поставленим вимогам.
У процесі дослідної експлуатації проекту відбувались його багаторазові запуски та виправлення всих недоліків, які виникали, після виправлення яких програма почала працювати коректно. Також було виконано корегування кольорів вікон діалогу та окремих елементів керування.
Розроблена АС надає доступ до редагування всіх необхідних довідників розробленої бази даних промислового підприємства, а саме довідника гатунка та матеріалу, довідника міста и вулиці.
Отже, розроблений
додаток повністю відповідає вимогам постановки задачі.
2.5 Робота з програмою
Розробленою програмою може користуватись людина, якщо вона володіє базовими знаннями ПК.
Після запуску програми відкривається
головне вікно програми як на рисунку 2.5. Дане вікно дає змогу перейти до форми з базой данних.