
- •Введение
- •Глава I. Аналитическая часть
- •1.1 Описание магазина «Книжная полка» и его назначения
- •1.2 История магазина «Книжная полка»
- •1.3 Основные понятия систем баз данных
- •1.4 База данных
- •1.5 Архитектура системы баз данных
- •1.6 Модель данных
- •Глава II. Проектная часть
- •2.1 Постановка задачи
- •2.2 Входная и выходная информация
- •2.3 Описание предметной области
- •2.4 Модель предметной области
- •2.5 Описание отношений
- •Глава III. Экономическая часть
- •3.1 Расчет трудоемкости разработки программного продукта
- •3.2 Расчет численности работников и затрат на основную и дополнительную заработную плату
- •3.3 Расчет стоимости оборудования
- •3.4 Расчет эксплуатационных расходов
- •3.5 Составление сметы затрат на разработку программного обеспечения
- •3.6 Расчет годового эффекта по заработной плате
- •Глава VI. Техника безопасности
- •4.1 Основные положения об охране труда
- •4.2 Опасные и вредные производственные факторы
- •4.3 Производственная санитария
- •4.4 Определение потребного воздухообмена
- •4.5 Производственное освещение
- •4.6 Производственный шум, вибрация
- •4.7 Электробезопасность
- •4.8 Пожаробезопасность
- •4.9 Экологичность и безопасность
- •4.10 Охрана труда на рабочем месте
- •Заключение
- •Список использованной литературы
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;