Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dokumentatsiya.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
311.81 Кб
Скачать

5 Програмування та тестування

5.1 Розробка програми

Створення бази даних відбувається за допомогою FoxPro 2.6

Для створення таблиці необхідно натиснути File -> New потім обрати тип Database.

Заповнити структуру БД, вона відповідає структурі вхідних даних, що описані в пункті 2.3.

Для опрацювання даної БД в Головній формі введено об’єкт sDBGrid1 та функціональні кнопки для управління. DBGrid1 – один з найбільш часто використовуваних елементів управління, спеціалізація якого відображення і редагування даних.

5.2 Етапи відладки

Для відладки програми було застосовано інструменти відладки

Delphi. Зокрема трасування. Виконується в меню Run-Trace Into, при

натисканні клавіші F7. Цей метод використовується для відладки

коду в певному місці коду. Таким чином досить легко впевнитись в

прави­льності або знайти помилку в коді.

Метод покрокового виконання запускається через меню Run->Step

Over, при натисканні на клавішу F8. Дозволяє відстежити де саме і за

яких умов сталась помилка або незбіжність. Досить ефективний з

використанням Break point, точками зупину.

5.3 Типи помилок

При написанні програми можуть зустрічатись різні помилки. Вони можуть бути повязані з синтаксисом або помилками в роботі з обєктами.

При створенні програмного коду були присутні такі типи помилок:

- синтаксичні помилки;

- логічні помилки;

- помилки компіляції;

- помилки часу виконання.

Синтаксичні помилки є одними з найпростіших і швидко усуваються.

Логічні помилки з’являються при некоректних результатах.

Помилки компіляції виникають при некоректних операціях.

Помилки часу виконання виникають тоді, коли програмний код був правильним, але це привело до неприпустимої операції (ділення на нуль)

Серед поширених помилок є такі:

  • при звертанні до поля з БД допускається неправильне введення його імені.

  • замість «form3.showmodal» вводиться «form3.show modal» або «form3.shovmodal».

  • також одним із найпоширеніших типів помилок може бути різні типи даних. Наприклад в базі даних поле числового типу,а користувач вводить текст.

Висновки

Delphi — це інтегроване середовище швидкої розробки програмного забезпечення для роботи під Microsoft Windows. Воно підтримує розробку Windows-застосунків на мові програмування Delphi, яка є наступницею мови Object Pascal.

При написанні курсового проекту була розроблена програма автоматизації обліку та продажу косметичних засобів у мережевому маркетингу. Даний програмний продукт може використовуватись на багатьох компютерах.

При виконанні програми були вивчені такі теми як управління БД в Delphi, опрацювання БД FoxPro 2.6, використання компонента для роботи зі звітами такого як QReport 4.05. Програма може бути удосконалена шляхом додавання нових функцій, поліпшення інтерфейсу користувача, розширення можливостей.

Delphi в основному використовується для розробки настільних застосунків та корпоративних СКБД, проте цей інструмент можна використовувати для розробки будь-якого загального програмного забезпечення. Не залишена осторонь і можливість побудови Веб-застосунків, так потрібних у сучасному інформаційному світі.

Список використаних джерел

  1. Майкл Херволсон, Майкл Янг. Ефективна робота з Microsoft

Office. – С.Пб. : Питер, 2001 – 798с.

  1. Бойко И. Об’єктно-орієнтовані СУБД. – К.: Вища школа, 1999

  2. Архангельський А. Я. Программирование в Delphi 6: Москва 2003

4.Пестриков В. М., Маслобоев А. Н. Delphi на примерах. Петербург,

2005. 496 с.

5. Delphi 7. Учебный курс / С. И. Бобровский. — СПб. Питер, 2004

6. С. Боровський “Delphi 5” учебный курс Питер 2002г, -640 с

7. С. Симонович, Г. Евсеев «Занимательное программирование Delphi» Москва «Аст-Пресс Книга», 2001г, -368с.

8. Н.Б. Культин «Программирование на Object Pascal в Delphi 5 » - Санкт-Петербург,2000 – 400с.

9. Оузьер Д., Батсон С. Освой самостоятельно Delphi 4 - М.: Бином, 1997. - 624 с.

10. Попов Н.Е. «Delphi5: Обзор компонентов InternetExpress» - Москва: Центр информационных технологий , 1999 г., - 650 с

Додаток А

Схема алгоритму програми

Додаток Б

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

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, DB, DBTables, Grids, DBGrids, StdCtrls, ComCtrls, ExtCtrls,

XPMan;

type

TForm1 = class(TForm)

Table1: TTable;

DataSource1: TDataSource;

DataSource2: TDataSource;

Table2: TTable;

DataSource3: TDataSource;

Table3: TTable;

Table4: TTable;

DataSource4: TDataSource;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

DBGrid1: TDBGrid;

Button4: TButton;

Button5: TButton;

Button6: TButton;

TabSheet2: TTabSheet;

DBGrid2: TDBGrid;

Button1: TButton;

Button2: TButton;

Button3: TButton;

TabSheet3: TTabSheet;

DBGrid3: TDBGrid;

Button7: TButton;

Button8: TButton;

Button10: TButton;

TabSheet4: TTabSheet;

Label1: TLabel;

Label2: TLabel;

Label4: TLabel;

TabSheet5: TTabSheet;

Button9: TButton;

TabSheet6: TTabSheet;

TabSheet7: TTabSheet;

DateTimePicker1: TDateTimePicker;

DateTimePicker2: TDateTimePicker;

RadioGroup1: TRadioGroup;

Button11: TButton;

Label3: TLabel;

Label5: TLabel;

Label6: TLabel;

XPManifest1: TXPManifest;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button6Click(Sender: TObject);

procedure Button7Click(Sender: TObject);

procedure Button8Click(Sender: TObject);

procedure TabSheet6Show(Sender: TObject);

procedure Button9Click(Sender: TObject);

procedure Button10Click(Sender: TObject);

procedure Button11Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

t,g,h:boolean;

procedure zapolnen(combo:TComboBox; table:ttable; pole:string);

function newkod(fieldkod,fieldres:string; target:ttable):integer;

function keyerror(target:char):char;

function keyerror2(target:char):char;

implementation

uses Unit2, Unit3, Unit4, Unit5;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

pagecontrol1.ActivePageIndex:=3;

table1.Open;

table2.Open;

table3.Open;

Table4.Open;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

h:=true;

form2.showmodal;

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

if table2.RecordCount>0 then begin

h:ъlse;

form2.ShowModal;

end else Showmessage ('Нет информации для редактирования');

end;

procedure TForm1.Button3Click(Sender: TObject);

begin

if table2.RecordCount>0 then begin

if messagedlg('Выделеная строка будет удалена. Продолжить?',mtconfirmation,[mbok,mbno],0)=mrok then

table2.delete;

end else showmessage('Нет данных для удаления');

end;

procedure TForm1.Button4Click(Sender: TObject);

begin

g:=true;

form3.showmodal;

end;

procedure TForm1.Button5Click(Sender: TObject);

begin

if table1.RecordCount>0 then begin

g:ъlse;

form3.ShowModal;

end else Showmessage ('Нет информации для редактирования');

end;

procedure TForm1.Button6Click(Sender: TObject);

begin

if table1.RecordCount>0 then begin

if messagedlg('Выделеная строка будет удалена. Продолжить?',mtconfirmation,[mbok,mbno],0)=mrok then

table1.delete;

end else showmessage('Нет данных для удаления');

end;

function newkod(fieldkod,fieldres:string; target:ttable):integer;

var

varres:variant;

kod:integer;

begin

kod:=0;

repeat Inc(kod); varres:=target.lookup(fieldkod,kod,fieldres) until varisnull(varres);

result:=kod;

end;

function keyerror(target:char):char;

begin

if target in [#48..#57,#8,#46] then result:=target else result:=#0;

end;

function keyerror2(target:char):char;

begin

if target in [#48..#57,#8] then result:=target else result:=#0;

end;

procedure zapolnen(combo:tcombobox; table:ttable; pole:string);

var i:integer;

begin

combo.Items.Clear;

table.first;

For i:=0 to table.RecordCount-1 do begin

combo.Items.Add(Table.fieldbyname(pole).asstring);

table.Next;

end;

end;

procedure TForm1.Button7Click(Sender: TObject);

begin

if table1.RecordCount>0 then begin

t:=true;

form4.showmodal;

end else Showmessage ('Список товара пуст');

end;

procedure TForm1.Button8Click(Sender: TObject);

begin

if table3.RecordCount>0 then begin

t:ъlse;

form4.ShowModal;

end else Showmessage ('Склад пуст');

end;

procedure TForm1.TabSheet6Show(Sender: TObject);

begin

close;

end;

procedure TForm1.Button9Click(Sender: TObject);

begin

table1.EmptyTable;

table2.EmptyTable;

table3.EmptyTable;

table4.EmptyTable;

end;

procedure TForm1.Button10Click(Sender: TObject);

begin

Form5.QRLabel9.Caption:Ъtetostr(date);

Form5.QuickRep2.Preview;

//form5.ShowModal;

end;

procedure TForm1.Button11Click(Sender: TObject);

begin

with table4 do begin

DISABLECOntrols;

filtered:ъlse;

if form1.RadioGroup1.ItemIndex=1 then begin

filter:='(data>='+quotedstr(datetostr(datetimepicker1.date))+') and (data<='+quotedstr(datetostr(datetimepicker2.date))+') and (tip_oper='+quotedstr('Расход')+')';

form5.QRLabel1.Caption:='Расход товара за период с: '+datetostr(datetimepicker1.date)+'по '+datetostr(datetimepicker2.date);

end else begin

filter:='(data>='+quotedstr(datetostr(datetimepicker1.date))+') and (data<='+quotedstr(datetostr(datetimepicker2.date))+') and (tip_oper='+quotedstr('Приход')+')';

form5.QRLabel1.Caption:='Приход товара за период с: '+datetostr(datetimepicker1.date)+'по '+datetostr(datetimepicker2.date);

end;

filtered:=true;

enablecontrols;

end;

form5.QuickRep1.Preview;

end;

end.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, DBTables;

type

TForm2 = class(TForm)

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

Button2: TButton;

procedure Button2Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button2Click(Sender: TObject);

begin

close;

end;

procedure TForm2.FormActivate(Sender: TObject);

begin

if h then begin

caption:='Добавить поставщика';

edit1.text:='';

edit2.text:='';

edit3.text:='';

end else begin

caption:='Редактировать данные';

edit1.text:=form1.table2.fieldbyname('nazva').asstring;

edit2.text:=form1.table2.fieldbyname('Adres').asstring;

edit3.text:=form1.table2.fieldbyname('Fone').asstring;

end;

end;

procedure TForm2.Button1Click(Sender: TObject);

var k:integer;

begin

if (trim(edit1.Text)<>'') and (trim(edit2.text)<>'') and (trim(edit3.text)<>'') then begin

with form1.Table2 do begin

k:=fieldbyname('kod_p').asinteger;

if h then begin

k:=newkod('kod_p','Nazva',form1.Table2);

append;

end else edit;

fieldbyname('nazva').asstring:=trim(edit1.text);

fieldbyname('adres').asstring:=trim(edit2.text);

fieldbyname('fone').asstring:=trim(edit3.text);

fieldbyname('kod_p').asinteger:=k;

post; flushbuffers;

end;

FORM2.Close;

end else showmessage('Введите все данные');

end;

end.

unit Unit3;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, DBCtrls, DBTables, DB, Grids, DBGrids, ComCtrls;

type

TForm3 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Button1: TButton;

Button2: TButton;

ComboBox1: TComboBox;

procedure FormActivate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure ComboBox1DropDown(Sender: TObject);

procedure Edit2KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form3: TForm3;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm3.FormActivate(Sender: TObject);

begin

if g then begin

caption:='Добавить товар';

edit1.text:='';

edit2.text:='';

combobox1.text:='';

end else begin

caption:='Редактировать данные';

edit1.text:=form1.table1.fieldbyname('nazvanie').asstring;

edit2.text:=form1.table1.fieldbyname('Cena').asstring;

combobox1.text:=form1.table1.fieldbyname('postav').asstring;

end;

end;

procedure TForm3.Button2Click(Sender: TObject);

begin

close;

end;

procedure TForm3.Button1Click(Sender: TObject);

var k:integer;

begin

if (trim(edit1.Text)<>'') and (trim(edit2.text)<>'') and (trim(ComboBox1.text)<>'') then begin

with form1.Table1 do begin

k:=fieldbyname('kod_tovara').asinteger;

if g then begin

k:=newkod('kod_tovara','Nazvanie',form1.Table1);

append;

end else edit;

fieldbyname('nazvanie').asstring:=trim(edit1.text);

fieldbyname('cena').asstring:=trim(edit2.text);

fieldbyname('kod_tovara').asinteger:=k;

fieldbyname('postav').asstring:=trim(combobox1.text);

post; flushbuffers;

end;

FORM3.Close;

end else showmessage('Введите все данные');

end;

procedure TForm3.ComboBox1DropDown(Sender: TObject);

begin

zapolnen(ComboBox1, form1.Table2, 'Nazva');

end;

procedure TForm3.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

key:=keyerror(key);

end;

end.

unit Unit4;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids, DBGrids, ComCtrls;

type

TForm4 = class(TForm)

DBGrid1: TDBGrid;

Button1: TButton;

Edit1: TEdit;

Label1: TLabel;

Button2: TButton;

Label2: TLabel;

DateTimePicker1: TDateTimePicker;

procedure Button2Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Edit1KeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form4: TForm4;

implementation

uses Unit2, Unit3, Unit1, Unit5;

{$R *.dfm}

procedure TForm4.Button2Click(Sender: TObject);

begin

close;

end;

procedure TForm4.FormActivate(Sender: TObject);

begin

if t then begin

caption:='Приход товара';

edit1.text:='';

end else begin

caption:='Расход товара';

edit1.text:='';

end;

end;

procedure TForm4.Button1Click(Sender: TObject);

var varres:variant;

begin

if (trim(edit1.Text)<>'') then begin

if t=true then begin

with form1.Table3 do begin

begin

varres:=form1.table3.locate('cod_tovara',form1.table1.fieldbyname('kod_tovara').asinteger,[]);

if varres=true then begin

edit;

fieldbyname('nazvanie').asstring:=form1.table1.fieldbyname('nazvanie').asstring;

fieldbyname('col').asinteger:=fieldbyname('col').asinteger+strtoint(trim(edit1.text));

fieldbyname('summa').asfloat:=fieldbyname('col').asinteger*form1.table1.fieldbyname('cena').asfloat;

fieldbyname('cena').asfloat:=form1.table1.fieldbyname('cena').asfloat;

post; flushbuffers;

with form1.Table4 do begin

append;

fieldbyname('nazvanie').asstring:=form1.table1.fieldbyname('nazvanie').asstring;

fieldbyname('cena').asfloat:=form1.table1.fieldbyname('cena').asfloat;

fieldbyname('col').asinteger:=strtoint(trim(edit1.text));

fieldbyname('summa').asfloat:=fieldbyname('col').asinteger*form1.table1.fieldbyname('cena').asfloat;

fieldbyname('data').asdatetime:ЪteTimePicker1.Date;

fieldbyname('tip_oper').asstring:='Приход';

post; flushbuffers;

end;

end else begin

append;

fieldbyname('nazvanie').asstring:=form1.table1.fieldbyname('nazvanie').asstring;

fieldbyname('cod_tovara').asinteger:=form1.table1.fieldbyname('kod_tovara').asinteger;

fieldbyname('col').asinteger:=strtoint(trim(edit1.text));

fieldbyname('summa').asfloat:=strtofloat(trim(edit1.text))*form1.table1.fieldbyname('cena').asfloat;

fieldbyname('cena').asfloat:=form1.table1.fieldbyname('cena').asfloat;

post; flushbuffers;

with form1.Table4 do begin

append;

fieldbyname('nazvanie').asstring:=form1.table1.fieldbyname('nazvanie').asstring;

fieldbyname('cena').asfloat:=form1.table1.fieldbyname('cena').asfloat;

fieldbyname('col').asinteger:=strtoint(trim(edit1.text));

fieldbyname('summa').asfloat:=fieldbyname('col').asinteger*form1.table1.fieldbyname('cena').asfloat;

fieldbyname('data').asdatetime:ЪteTimePicker1.Date;

fieldbyname('tip_oper').asstring:='Приход';

end;

end;

End;

end;

FORM4.Close;

end else begin

with form1.Table3 do begin

begin

varres:=form1.table3.locate('cod_tovara',form1.table1.fieldbyname('kod_tovara').asinteger,[]);

if varres=true then begin

if strtoint(trim(edit1.text))>fieldbyname('col').asinteger then showmessage('На складе осталось только '+inttostr(fieldbyname('col').asinteger)+' единиц товара')

else begin

edit;

fieldbyname('nazvanie').asstring:=form1.table1.fieldbyname('nazvanie').asstring;

fieldbyname('col').asinteger:=fieldbyname('col').asinteger-strtoint(trim(edit1.text));

fieldbyname('summa').asfloat:=fieldbyname('col').asinteger*form1.table1.fieldbyname('cena').asfloat;

fieldbyname('cena').asfloat:=form1.table1.fieldbyname('cena').asfloat;

post; flushbuffers;

with form1.Table4 do begin

append;

fieldbyname('nazvanie').asstring:=form1.table1.fieldbyname('nazvanie').asstring;

fieldbyname('cena').asfloat:=form1.table1.fieldbyname('cena').asfloat;

fieldbyname('col').asinteger:=strtoint(trim(edit1.text));

fieldbyname('summa').asfloat:=fieldbyname('col').asinteger*form1.table1.fieldbyname('cena').asfloat;

fieldbyname('data').asdatetime:ЪteTimePicker1.Date;

fieldbyname('tip_oper').asstring:='Расход';

post; flushbuffers;

end;

end;

end else begin

showmessage('Такого товара нет на складе!!!');

end;

End;

end;

FORM4.Close;

end;

end else showmessage('Введите количество товара');

end;

procedure TForm4.Edit1KeyPress(Sender: TObject; var Key: Char);

begin

key:=keyerror2(key);

end;

end.

unit Unit5;

interface

uses

Windows, MeЯages, SysUtils, Variants, ClaЯes, Graphics, Controls, Forms,

Dialogs, DB, DBTables, Grids, DBGrids, ComCtrls, StdCtrls, ExtCtrls,

QuickRpt, QRCtrls;

type

TForm5 = claЯ(TForm)

QuickRep1: TQuickRep;

QRBand1: TQRBand;

QRLabel1: TQRLabel;

QRBand2: TQRBand;

QRLabel3: TQRLabel;

QRLabel4: TQRLabel;

QRLabel5: TQRLabel;

QRLabel6: TQRLabel;

QRBand3: TQRBand;

QRDBText1: TQRDBText;

QRDBText2: TQRDBText;

QRDBText3: TQRDBText;

QRDBText4: TQRDBText;

QuickRep2: TQuickRep;

QRBand4: TQRBand;

QRLabel8: TQRLabel;

QRLabel9: TQRLabel;

QRBand5: TQRBand;

QRLabel10: TQRLabel;

QRLabel11: TQRLabel;

QRLabel12: TQRLabel;

QRLabel13: TQRLabel;

QRBand6: TQRBand;

QRDBText6: TQRDBText;

QRDBText7: TQRDBText;

QRDBText8: TQRDBText;

QRDBText9: TQRDBText;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form5: TForm5;

implementation

uses unit1;

{$R *.dfm}

procedure TForm5.Button1Click(Sender: TObject);

begin

close;

end;

end.

Додаток В

Роздрук результатів роботи програми

Рисунок В 1 - Головна сторінка

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]