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

2.5 Описание отношений

Для упрощения процесса разработки, а так же в целях получения ясной и логичной схемы функционирования, разобьём основную задачу на подзадачи, при этом выделив равноценные части. Наш проект может быть разбит на три функционально-независимые подзадачи:

- организация структуры данных для хранения информации о книгах, покупателях, продажах.

- организация информационной части, включающей в себя вывод на экран конечных данных, отчётов по всем классам.

Каждая из перечисленных подзадач разбивается на элементарные подзадачи, такие как построение процедур и функций на языке программирования, а так же проектированию форм приложения. В модулях форм содержатся обработчики событий, а в модулях приложения самостоятельные процедуры.

При разработке программы использовались следующие стандартные классы Delphi:

  • TForm - класс форм, на его базе создаются формы;

  • TButton - класс стандартной кнопки;

  • TEdit - класс стандартного поля для редактирования;

  • TImage класс - класс служит для отображения изображений различных форматов включая gif и jpeg;

  • TDBGrid - класс служит для отображения содержимого набора данных в виде таблицы, в которой столбцы соответствуют полям набора данных, а строки - записям;

  • TDBText - класс служит для отображения текстовых представлений различных полей набора данных в том виде, в котором эти поля отображаются в сетке TDBGrid;

  • TDBEdit - класс позволяет редактировать значение поля текущей записи набора данных;

  • TMainMenu - класс служит для формирования систему пользовательского меню;

  • TDateTimePickerl - класс служит для работы с датой;

  • ТТаblе - класс позволяет получить доступ к одной таблице базы данных;

  • TDataSource- представляет базовые события, свойства, методы для работы с данными и связи между таблицами.

  • RaveReports – позволяет подготовить произвольное число виртуальных страниц отчетов в простом визуальном редакторе.

  • TDBNavigator – позволяет управлять указателем связанного с ним набора данных.

При работе с формой может выполняться обработка событий, инициируемых пользователем или наступающих в процессе работы с формой. Форма может создаваться для управления приложением пользователя. Типовые процедуры формируются автоматически при создании элементов формы. Такими элементами, например, являются графические кнопки. Каждый модуль содержит текст программы, связанный с какой-либо формой.

Для создание программы необходимо создать несколько форм:

Main – главная форма

In_Book – форма добавления новой книги

In_Presence – добавление товара на склад

In_Sale – форма продажи товара

In_Warhouse – форма добавления склада

Books – форма перечисления имеющихся книг

Presences – форма наличия товаров

Sales – форма списка продаж

Warhouses – форма списка складов

SQL_Query – форма SQL – запроса

QAuthor – форма запроса «автор»

QGain – форма запроса «выручка»

QKnowledge – форма запроса «тематика»

QSale_Cost – форма запроса «отпускные цены»

Главная форма:

На главной форме размещаем главное меню, которое будет служить для запуска остальных форм проекта. Для реализации необходимо на форме разместить компонент главного меню TMainMenu, компонент TButton (кнопка «Выход»). Ниже приведены скриншоты редакотра меню

Рис. 2.3. Путнкты меню «Файл»

Рис. 2.4. Путнкты меню «Таблицы»

Рис. 2.5. Путнкты меню «Запросы»

Рис. 2.6. Путнкты меню «Ввод данных»

Вид главной формы предоставлен на рисунке ниже:

Рис. 2.7. Вид главной формы

Ниже приведен код программы главной формы

uses Warhouses, Presences, Books, Sales, In_Warhouse, In_Book, In_Presence,

In_Sale, SQL_Query, QKnowledge, QSale_Cost, QAuthor, QGain;

{$R *.DFM}

procedure TForm_Main.N2Click(Sender: TObject);

begin

Close;

end;

procedure TForm_Main.N4Click(Sender: TObject);

begin

Form_Warhouses.Show;

end;

procedure TForm_Main.N5Click(Sender: TObject);

begin

Form_Presences.Show;

end;

procedure TForm_Main.N6Click(Sender: TObject);

begin

Form_Books.Show;

end;

procedure TForm_Main.N7Click(Sender: TObject);

begin

Form_Sales.Show;

end;

procedure TForm_Main.N9Click(Sender: TObject);

begin

Form_In_Warhouse.Show;

end;

procedure TForm_Main.N11Click(Sender: TObject);

begin

Form_In_Book.Show;

end;

procedure TForm_Main.N10Click(Sender: TObject);

begin

Form_In_Presence.Show;

end;

procedure TForm_Main.N12Click(Sender: TObject);

begin

Form_In_Sale.Show;

end;

procedure TForm_Main.SQL1Click(Sender: TObject);

begin

Form_SQL_Query.Show;

end;

procedure TForm_Main.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_Main.N14Click(Sender: TObject);

begin

Form_QKnowledge.Show;

end;

procedure TForm_Main.N15Click(Sender: TObject);

begin

Form_QSale_Cost.Show;

end;

procedure TForm_Main.N16Click(Sender: TObject);

begin

Form_QAuthor.Show;

end;

procedure TForm_Main.N17Click(Sender: TObject);

begin

Form_QGain.Show;

end;

Далее приведены тексты программ остальных форм:

Форма «Склады»:

На форме размещаем компоненты:

DBGrid – для вывода данных таблицы

Query – для вывода записей запроса

DataSource – для связи таблицы с компонентами

Table – для вывода всех записей таблицы

Ниже приведен рисунок полученной формы:

Рис. 2.8. Форма «Склады»

Текст программы:

uses Presences, Sales;

{$R *.DFM}

procedure TForm_Warhouses.Button_CloseClick(Sender: TObject);

begin

Close;

end;

procedure TForm_Warhouses.Table_WarhousesBeforeDelete(DataSet: TDataSet);

var

id: string;

begin

//подтверждение удаления записи

if MessageDlg('Текущая запись и все связанные с ней записи будут удалены.'

+#13+'Продолжить?',

mtConfirmation,[mbOK,mbCancel],0)=mrCancel then begin

Abort;

end;

//закрытие запроса на удаление

Query_Delete.Close;

//получение ключа удаляемой записи

id:=Table_Warhouses.FieldByName('id').AsString;

//очищение SQL-запроса

Query_Delete.SQL.Clear;

//добавление текста SQL-запроса

Query_Delete.SQL.Add('DELETE FROM presences');

Query_Delete.SQL.Add('WHERE presences.id_warhouse='+id);

//выполнение запроса

Query_Delete.ExecSQL;

Query_Delete.SQL.Clear;

Query_Delete.SQL.Add('DELETE FROM sales');

Query_Delete.SQL.Add('WHERE sales.id_warhouse='+id);

Query_Delete.ExecSQL;

//обновление данных в окнах программы

Form_Presences.Table_Presences.Close;

Form_Presences.Table_Presences.Open;

Form_Sales.Table_Sales.Close;

Form_Sales.Table_Sales.Open;

end;

Форма «Наличие»:

DBGrid – для вывода данных таблицы

DataSource – для связи таблицы с компонентами

Table – для вывода всех записей таблицы

Скриншот полученной формы:

Рис. 2.9. Форма «Наличие»

Код программы:

procedure TForm_Presences.Button_CloseClick(Sender: TObject);

begin

Close;

end;

procedure TForm_Presences.Table_PresencesBeforeDelete(DataSet: TDataSet);

begin

if MessageDlg('Текущая запись и все связанные с ней записи будут удалены.'

+#13+'Продолжить?',

mtConfirmation,[mbOK,mbCancel],0)=mrCancel then begin

Abort;

end;

end;

Форма «Книги»:

DBGrid – для вывода данных таблицы

DataSource – для связи таблицы с компонентами

Query – для вывода записей запроса

Table – для вывода всех записей таблицы

Скриншот полученной формы:

Рис. 2.10. Форма «Книги»

Код программы:

uses Presences, Sales;

{$R *.DFM}

procedure TForm_Books.Button_CloseClick(Sender: TObject);

begin

Close;

end;

procedure TForm_Books.Table_BooksBeforeDelete(DataSet: TDataSet);

var

id: string;

begin

if MessageDlg('Текущая запись и все связанные с ней записи будут удалены.'

+#13+'Продолжить?',

mtConfirmation,[mbOK,mbCancel],0)=mrCancel then begin

Abort;

end;

Query_Delete.Close;

id:=Table_Books.FieldByName('id').AsString;

Query_Delete.SQL.Clear;

Query_Delete.SQL.Add('DELETE FROM presences');

Query_Delete.SQL.Add('WHERE presences.id_book='+id);

Query_Delete.ExecSQL;

Query_Delete.SQL.Clear;

Query_Delete.SQL.Add('DELETE FROM sales');

Query_Delete.SQL.Add('WHERE sales.id_book='+id);

Query_Delete.ExecSQL;

Form_Presences.Table_Presences.Close;

Form_Presences.Table_Presences.Open;

Form_Sales.Table_Sales.Close;

Form_Sales.Table_Sales.Open;

end;

Форма «Продажи»:

DBGrid – для вывода данных таблицы

DataSource – для связи таблицы с компонентами

Table – для вывода всех записей таблицы

Скриншот полученной формы:

Рис. 2.11. форма «Продажи»

Код программы:

procedure TForm_Sales.Button_CloseClick(Sender: TObject);

begin

Close;

end;

procedure TForm_Sales.Table_SalesBeforeDelete(DataSet: TDataSet);

begin

if MessageDlg('Текущая запись и все связанные с ней записи будут удалены.'

+#13+'Продолжить?',

mtConfirmation,[mbOK,mbCancel],0)=mrCancel then begin

Abort;

end;

end;

Форма запроса «SQL - Запрос»:

Memo – для ввода SQL - запроса

DBGrid – для вывода данных таблицы

DataSource – для связи таблицы с компонентами

Query – для вывода записей запроса

OpenDialog – диалог открытия файла

SaveDialog – диалог сохранения файла

Button – для управления командами

Скриншот полученной формы:

Рис. 2.12. форма запроса «SQL - Запрос»

Текст программы:

procedure TForm_SQL_Query.Button_ExecuteClick(Sender: TObject);

begin

//присваивается текст SQL-запроса

Form_SQL_Query.Query1.SQL:=Form_SQL_Query.Memo1.Lines;

try

//закрывается запрос

Form_SQL_Query.Query1.Active:=false;

//открывается запрос

Form_SQL_Query.Query1.Active:=true;

except

//в случае ошибки базы данных выводится сообщение об ошибке

on error: EDatabaseError do begin

MessageDlg('При выполнении запроса произошла ошибка:'+#13+#13+

error.Message ,mtError,[mbOK],0);

end;

end;

end;

procedure TForm_SQL_Query.Button_ClearClick(Sender: TObject);

begin

Form_SQL_Query.Memo1.Lines.Clear;

end;

procedure TForm_SQL_Query.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_SQL_Query.Button_LoadClick(Sender: TObject);

begin

if OpenDialog1.Execute then begin

Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

end;

end;

procedure TForm_SQL_Query.Button_SaveClick(Sender: TObject);

begin

if SaveDialog1.Execute then begin

Memo1.Lines.SaveToFile(ChangeFileExt(SaveDialog1.FileName,'.sql'));

end;

end;

Форма запроса «Книги по тематике»:

DBLookupComboBox – для выбора фильтра

DBGrid – для вывода данных таблицы

DataSource – для связи таблицы с компонентами

Query – для вывода записей запроса

Table – для вывода всех записей таблицы

Button – для управления командами

Скриншот полученной формы:

Рис. 2.13. форма запроса «Книги по тематике»

Код программы:

procedure TForm_QKnowledge.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_QKnowledge.Button_ExecuteClick(Sender: TObject);

begin

try

//закрывается запрос

Query1.Active:=false;

//устанавливается параметр "Область знаний"

Query1.ParamByName('know').AsString:=DBLookUpComboBox1.Text;

//открывается запрос

Query1.Active:=true;

except

//в случае ошибки базы данных выводится сообщение об ошибке

on error: EDatabaseError do begin

MessageDlg('При выполнении запроса произошла ошибка:'+#13+#13+

error.Message ,mtError,[mbOK],0);

end;

end;

end;

Форма запроса «Отпускные цены»:

DBLookupComboBox – для выбора фильтра

DBGrid – для вывода данных таблицы

DataSource – для связи таблицы с компонентами

Query – для вывода записей запроса

Table – для вывода всех записей таблицы

Button – для управления командами

Скриншот полученной программы:

Рис. 2.14. форма запроса «Отпускные цены»

Текст программы:

procedure TForm_QSale_Cost.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_QSale_Cost.Button_ExecuteClick(Sender: TObject);

begin

try

Query1.Active:=false;

Query1.Params[0].Value:=DBLookUpComboBox1.KeyValue;

Query1.Active:=true;

except

on error: EDatabaseError do begin

MessageDlg('При выполнении запроса произошла ошибка:'+#13+#13+

error.Message ,mtError,[mbOK],0);

end;

end;

end;

Форма запроса «Книги по автору»:

DBLookupComboBox – для выбора фильтра

DBGrid – для вывода данных таблицы

DataSource – для связи таблицы с компонентами

Query – для вывода записей запроса

Table – для вывода всех записей таблицы

Button – для управления командами

Скриншот полученной формы:

Рис. 2.15. Форма запроса «Книги по автору»

Код программы:

procedure TForm_QAuthor.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_QAuthor.Button_ExecuteClick(Sender: TObject);

begin

try

Query1.Active:=false;

Query1.ParamByName('author').AsString:=DBLookUpComboBox1.Text;

Query1.Active:=true;

except

on error: EDatabaseError do begin

MessageDlg('При выполнении запроса произошла ошибка:'+#13+#13+

error.Message ,mtError,[mbOK],0);

end;

end;

end;

Форма запроса «Выручка»:

DBLookupComboBox – для выбора фильтра

DBGrid – для вывода данных таблицы

DataSource – для связи таблицы с компонентами

Query – для вывода записей запроса

Table – для вывода всех записей таблицы

Button – для управления командами

Скриншот полученной формы:

Рис. 2.16. Форма запроса «Выручка»

Код программы:

procedure TForm_QGain.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_QGain.Button_ExecuteClick(Sender: TObject);

begin

try

Query1.Active:=false;

Query1.ParamByName('first_date').AsDate:=DateTimePicker_Start.Date;

Query1.ParamByName('last_date').AsDate:=DateTimePicker_Last.Date;

Query1.Active:=true;

except

on error: EDatabaseError do begin

MessageDlg('При выполнении запроса произошла ошибка:'+#13+#13+

error.Message ,mtError,[mbOK],0);

end;

end;

end;

Форма добавления «Склады»:

Edit – ввод данных для добавления

Button – для управления командами

Скриншот полученной формы:

Рис. 2.17. Форма добавления данных «Склады»

Код программы:

uses Warhouses;

{$R *.DFM}

procedure fill_result_data;

begin

with Form_In_Warhouse do begin

Edit_Name.Text:='Name';

Edit_Address.Text:='Address';

Edit_Phone.Text:='000-00-00';

Edit_Manager.Text:='Manager';

end;

end;

procedure TForm_In_Warhouse.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_In_Warhouse.Button_AddClick(Sender: TObject);

begin

Form_Warhouses.Table_Warhouses.Last;

try

Form_Warhouses.Table_Warhouses.AppendRecord([

Form_Warhouses.Table_Warhouses.FieldByName('id').AsInteger+1,

Edit_Name.Text,

Edit_Address.Text,

Edit_Phone.Text,

Edit_Manager.Text]);

except

MessageDlg('В поля формы введены недопустимые данные',

mtError,[mbOK],0);

Exit;

end;

fill_result_data;

end;

procedure TForm_In_Warhouse.FormCreate(Sender: TObject);

begin

fill_result_data;

end;

Форма добавления данных «Наличие»:

Edit – ввод данных для добавления

Button – для управления командами

Combobox – для выбора группы

DataSource – для связи таблицы с компонентами

Table – для вывода всех записей таблицы

Рис. 2.18. Форма добавления данных «Наличие»

Код программы:

uses Presences;

{$R *.DFM}

procedure fill_result_data;

begin

with Form_In_Presence do begin

Edit_Pack_Amount.Text:='0';

Edit_Item_Amount.Text:='0';

end;

end;

procedure TForm_In_Presence.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_In_Presence.Button_AddClick(Sender: TObject);

begin

Form_Presences.Table_Presences.Last;

try

Form_Presences.Table_Presences.AppendRecord([

Form_Presences.Table_Presences.FieldByName('id').AsInteger+1,

Edit_Pack_Amount.Text,

Edit_Item_Amount.Text,

DBLookUpComboBox_Warhouse.Field.Value,

DBLookUpComboBox_Book.Field.Value]);

except

MessageDlg('В поля формы введены недопустимые данные',

mtError,[mbOK],0);

Exit;

end;

fill_result_data;

end;

procedure TForm_In_Presence.FormCreate(Sender: TObject);

begin

fill_result_data;

end;

Форма добавления данных «Книги»:

Edit – ввод данных для добавления

Button – для управления командами

Скриншот полученной формы:

Рис. 2.19. Форма добавления данных «Книги»

Код программы:

uses Books;

{$R *.DFM}

procedure fill_result_data;

begin

with Form_In_Book do begin

Edit_Name.Text:='Name';

Edit_Author.Text:='Author';

Edit_Publisher.Text:='Publisher';

Edit_Year.Text:='1900';

Edit_Circuation.Text:='0';

Edit_Knowledge.Text:='Knowledge';

Edit_Cost.Text:='0';

end;

end;

procedure TForm_In_Book.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_In_Book.Button_AddClick(Sender: TObject);

begin

Form_Books.Table_Books.Last;

try

Form_Books.Table_Books.AppendRecord([

Form_Books.Table_Books.FieldByName('id').AsInteger+1,

Edit_Name.Text,

Edit_Author.Text,

Edit_Publisher.Text,

StrToInt(Edit_Year.Text),

StrToInt(Edit_Circuation.Text),

Edit_Knowledge.Text,

StrToInt(Edit_Cost.Text)]);

except

MessageDlg('В поля формы введены недопустимые данные',

mtError,[mbOK],0);

Exit;

end;

fill_result_data;

end;

procedure TForm_In_Book.FormCreate(Sender: TObject);

begin

fill_result_data;

end;

Форма добавления данных «»:

Edit – ввод данных для добавления

Button – для управления командами

Combobox – для выбора группы

DataSource – для связи таблицы с компонентами

Table – для вывода всех записей таблицы

Скриншот полученной формы:

Рис. 2.20. Форма добавления данных «Продажи»

Код программы:

uses Sales;

{$R *.DFM}

procedure fill_result_data;

begin

with Form_In_Sale do begin

Edit_Date.Text:='01.01.01';

Edit_Cost.Text:='0';

Edit_Amount.Text:='0';

end;

end;

procedure TForm_In_Sale.Button_CloseClick(Sender: TObject);

begin

close;

end;

procedure TForm_In_Sale.Button_AddClick(Sender: TObject);

begin

Form_Sales.Table_Sales.Last;

try

Form_Sales.Table_Sales.AppendRecord([

Form_Sales.Table_Sales.FieldByName('id').AsInteger+1,

StrToDate(Edit_Date.Text),

StrToInt(Edit_Cost.Text),

StrToInt(Edit_Amount.Text),

DBLookUpComboBox_Warhouse.Field.Value,

DBLookUpComboBox_Book.Field.Value]);

except

MessageDlg('В поля формы введены недопустимые данные',

mtError,[mbOK],0);

Exit;

end;

fill_result_data;

end;

procedure TForm_In_Sale.FormCreate(Sender: TObject);

begin

fill_result_data;

end;