- •1 Вступ
- •2 Постановка задачі
- •2.1 Характеристика предметної області
- •2.2 Вимоги до програми
- •Структура вхідних даних
- •2.4 Структура вихідних даних
- •3 Комп’ютерна система
- •3.2 Вибір програмних засобів та операційної системи
- •4 Об’єктно-орієнтоване проектування
- •4.1 Інтерфейс програми
- •4.2 Алгоритм рішення задачі
- •5 Програмування та тестування
- •5.1 Розробка програми
- •5.2 Етапи відладки
- •5.3 Типи помилок
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 в основному використовується для розробки настільних застосунків та корпоративних СКБД, проте цей інструмент можна використовувати для розробки будь-якого загального програмного забезпечення. Не залишена осторонь і можливість побудови Веб-застосунків, так потрібних у сучасному інформаційному світі.
Список використаних джерел
Майкл Херволсон, Майкл Янг. Ефективна робота з Microsoft
Office. – С.Пб. : Питер, 2001 – 798с.
Бойко И. Об’єктно-орієнтовані СУБД. – К.: Вища школа, 1999
Архангельський А. Я. Программирование в 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 - “Головна сторінка”
