Проектирование автоматизированной информационной системы книжного склада
Программа «Книжный склад» предназначенная для автоматизации учета и отчетности товарооборота фирм, торгующих печатной продукцией и выпусками периодических изданий. Программа позволяет вести полноценный количественный и суммовой складской учет. Интерфейс программы эргономичен и интуитивно понятен пользователю. Ввод информации осуществляется через форму, имитирующую вид накладной, т. е. привычный… Читать ещё >
Проектирование автоматизированной информационной системы книжного склада (реферат, курсовая, диплом, контрольная)
СОДЕРЖАНИЕ ВВЕДЕНИЕ ГЛАВА 1. ТЕОРИТИЧЕСКАЯ ЧАСТЬ.СРЕДА РАЗРАБОТКИ И ИСТОРИЯ ЯЗЫКА DELPHI.
1.1 Среда разработки Delphi
1.2История языка
1.3 Обзор современной АИС «Книжный склад»
ГЛАВА 2. ПРАКТИЧЕСКАЯ ЧАСТЬ.ПРОЕКТИРОВАНИЕ АИС КНИЖНЫЙ СКЛАД
2.1Анализ предметной области
2.2Постановка задачи
2.3ER-диаграмма Книжного склада
2.4Алгоритм программы
2.5Инструкция пользователя ЗАКЛЮЧЕНИЕ СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ ПРИЛОЖЕНИЕ, А ВВЕДЕНИЕ Актуальность проектирования АИС «Книжный склад» обусловлено тем, что в данный момент на книжных складах используется не систематизированные учеты хранения книг и неструктурированные отчеты по закупкам и продажам.
Основная цель курсового проекта проанализировать аналоги существующих программ автоматизирующих работу книжных складов, выявить их достоинства и недостатки и исходя из этого определить функционал программы. Основываясь на этом спроектировать и разработать АИС «Книжный склад».
Для того что бы спроектировать конкурентоспособную АИС «книжный склад» необходимо выполнить следующие задачи: рассмотреть современные АИС «книжный склад», выбрать язык программирования и среду разработки.
Проектирование программы «Книжный склад» ведется для упрощения работы библиотекаря со всем ассортиментом предложенных книг и учебных пособий, а также для учёта взятых и оставшихся в наличии книг.
Актуальность разработки программы заключается в следующем:
— приложение «Книжный склад» представляет собой программу для управления базой данных;
— программа полностью автоматизирует труд оператора ПЭВМ: автоматически заносит вводимые пользователем данные в таблицы базы данных, изменяет структуру таблиц (добавление/удаление записей).
при использовании программы значительно снижается трудоёмкость ведения базы данных взятых и оставшихся книг.
ГЛАВА 1. ТЕОРИТИЧЕСКАЯ ЧАСТЬ. СРЕДА РАЗРАБОТКИ И ИСТОРИЯ ЯЗЫКА DELPHI
1.1 Среда разработки Delphi
ImageDelphi — интегрированная среда разработки программного обеспечения корпорации Borland. Delphi является средой RAD (от англ. rapidapplicationdevelopment — быстрая разработка приложений). По сути является наследником языка Pascal с объектно-ориентированными расширениями. Изначально язык был предназначен исключительно для разработки приложений MicrosoftWindows, затем был реализован также для платформ Linux (как Kylix), однако после выпуска в 2002 году Kylix 3 его разработка была прекращена, и, вскоре после этого, было объявлено о поддержке Microsoft .NET. Реализация языка Delphi проектом FreePascal позволяет использовать его для создания приложений для таких платформ, как Mac OS, Windows[1].
1.2 История языка
Delphi — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль начиная с версии 5.5 добавил в Паскаль объектно-ориентированные свойства, а Delphi — объектно-ориентированный язык программирования с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, и воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию. Также отличительным свойством Дельфи от С++ является отсутствие возможности располагать объекты в стеке (объекты, унаследованные из Турбо Паскаля, располагаться в стеке могут) — все объекты попадают в динамически выделяемую область (кучу). Де-факто ObjectPascal, а затем и язык Delphi являются функциональными наращиваниями TurboPascal. Об этом говорят обозначения версий компилятора. Так, в Delphi 7 компилятор имеет номер версии 15.0 (Последняя версия BorlandPascal / TurboPascal обозначалась 7.0, в Delphi 1 компилятор имеет версию 8.0, в Delphi 2 — 9.0, и т. д. Номер версии 11.0 носит компилятор Pascal, входивший в состав среды C++Builder). Delphi оказал огромное влияние на создание концепции языка C# для платформы .NET. Многие его элементы и концептуальные решения вошли в состав С#. Одной из причин называют переход Андерса Хейлсберга, одного из ведущих разработчиков Дельфи, из компании BorlandLtd. в MicrosoftCorp[2].
Версия 1 была предназначена для разработки под 16-ти разрядную платформу Win16;
Версии со второй компилируют программы под 32-х разрядную платформу Win32;
Вместе с 6-й версией Delphi вышла совместимая с ним по языку и библиотекам среда Kylix, предназначенная для компиляции программ под операционную систему Linux;
Версия 8 способна генерировать байт-код исключительно для платформы .NET. Это первая среда, ориентированная на разработку мультиязычных приложений (лишь для платформы .NET);
Последующие версии (обозначаемые годами выхода, а не порядковыми номерами, как это было ранее) могут создавать как приложения Win32, так и байт-код для платформы .NET;
Delphifor .NET — среда разработки Delphi, а так же язык Delphi (ObjectPascal), ориентированные на разработку приложений для .NET. Первая версия полноценной среды разработки Delphi для .NET — Delphi 8. Она позволяла писать приложения только для .NET. В настоящее время, в Delphi 2006, можно писать приложения для .NET используя стандартную библиотеку классов .NET, VCL для .NET. Среда также позволяет писать .NET-приложения на C# и Win32-приложения на C++. Delphi 2006 содержит функции для написания обычных приложений с использованием билиотек VCL и CLX. Delphi 2006 поддерживает технологию MDA с помощью ECO (EnterpriseCoreObjects) версии 3.0. В марте 2006 года компания Borland приняла решение о прекращении дальнейшего совершенствования интегрированных сред разработки JBuilder, Delphi и C++Builder по причине убыточности этого направления. Планируется продажа IDE-сектора компании. Группа сторонников свободного программного обеспечения организовала сбор средств для покупки у Borland прав на среду разработки и компилятор[1].
Однако в ноябре того же года было принято решение отказаться от продажи IDE бизнеса. Тем не менее, разработкой IDE продуктов теперь будет заниматься новая компания — CodeGear, которая будет финансово полностью подконтрольна Borland. Borland продолжил развитие IDE систем под именем Turbo: TurboDelphi, TurboDelphifor .NET, Turbo C#, Turbo C++ А в марте 2007 года CodeGear порадовала пользователей обновленной линейкой продуктов Delphi 2007 for Win32 и выходом совершенно нового продукта Delphi 2007 for PHP[3].
1.3 Обзор современной АИС «Книжный склад»
Программа «Книжный склад» предназначенная для автоматизации учета и отчетности товарооборота фирм, торгующих печатной продукцией и выпусками периодических изданий. Программа позволяет вести полноценный количественный и суммовой складской учет. Интерфейс программы эргономичен и интуитивно понятен пользователю. Ввод информации осуществляется через форму, имитирующую вид накладной, т. е. привычный для сотрудников фирмы, работающих с материальными ценностями, документ. Дублирование ввода информации исключается наличием всех необходимых справочников, предусмотрена сквозная автоматическая нумерация первичных документов с возможностью ручной коррекции. Программа позволяет обрабатывать и выводить на печать основные первичные документы — накладные, счета, счета фактуры, платежки, приходные и расходные ордера, формировать книгу покупок и продаж. При выписке документов можно использовать различные виды скидок (суммовая, процентная), при необходимости сам пользователь может добавить новые виды скидок. Непосредственно после выписки накладной на отпуск книг оператор может получить складскую справку по месту хранения книг.
Рис. 1.1 Программа «КС:Книжный склад»
Разработан специальный справочник для учета книжной продукции — «Картотека книг», где учтены все выходные данные книги: издательство, тираж, стандарт, год выпуска и т. д. Для удобства работы с большой номенклатурой печатной продукции предусмотрена возможность деления всех книг по тематикам. Для работы с различными категориями партнеров введен многоколоночный прайс-лист. Написан уникальный многострочный прайс-лист (есть вариант для рассылки по факсу), прайс-лист поступивших новинок. В программу введены такие часто используемые в работе книжных предприятий операции как, например, книгообмен; можно сформировать и распечатать специфичный для этой операции документ «Договор мены» .
Рис. 1.2 Прайс-лист книга автоматизированный информационный учет Товарный учет в программе ведется по схемам FIFO, LIFO, Средних и Средневзвешенных. На складе товары учитываются в ценах себестоимости, хранится информация о цене, по которой товар был продан. Информация об остатках книг на складе предоставляется пользователю оперативно, в момент выписки документа, товар можно зарезервировать по счету или по предоплате. Аналитический отчет по остаткам товара меньшим минимальной партии поможет пользователю вовремя составить заказ поставщику на допоставку нужных номенклатурных позиций, причем сделать это можно в автоматическом режиме.
Большое внимание в программе уделено работе с поставщиками и реализаторами. Книжную продукцию можно брать и выдавать на реализацию, делать возврат с реализации, частичную оплату за наличный или безналичный расчет, бартер, обмен, пересчет задолженности и другие формы взаиморасчетов. При оформлении операции выдачи или взятия на реализацию, можно указывать срок оплаты, то есть дату, по истечении которой накладная должна быть оплачена. Программа позволяет проводить операции по изменению долга, например, списали с реализатора весь или часть долга, увеличили его задолженность из-за просрочек с оплатой и т. п. Если Вы берете товары на реализацию и должны рассчитаться за них до определенного срока, то Вам помогут отчеты по просроченным документам. Если Вы берете товары на консигнацию и должны расплачиваться с поставщиком по мере их продажи, то Вам поможет отчет «Реализация товаров по поставщикам», в котором Вы можете увидеть, сколько и каких товаров по каждому поставщику продано за указанный период. Таким образом, оформляя в программе различные операции с контрагентами, Вы можете увидеть, какую выручку и какой доход принес каждый из них и какова рентабельность работы с ним.
Рис. 1.3 Реализация товаров В базовую поставку программы «КС:Книжный склад» включен модуль «Управление закупками/продажами». Он дает пользователям возможность оформлять в программе различные виды Договоров, в т. ч. Договора купли-продажи. В любой момент времени Вам будет доступна информация о том, какие товары/услуги, в каком количестве и на какую сумму Вам осталось получить или поставить по каждому Договору. Полноценное ведение Договоров позволит предприятию планировать исполнение своих обязательств таким образом, чтобы свести к минимуму различные издержки (например, расходы по хранению товара), составить план закупок в соответствии с заключенными Договорами.
Руководящему звену фирмы будет интересен модуль «Управленческий анализ». Цель этого модуля — дать пользователю возможность на основе анализа происшедших явлений выработать для себя рекомендации на будущее. Вы сможете проследить по дням, начиная с сегодня, какими темпами будете получать деньги с должников и как должны расплачиваться сами (с балансом на каждый день). Пользователю будут интересны отчеты по товарным запасам в днях, динамике изменения товарного запаса, динамике движения товара за период в суммовом выражении (с учетом, сколько денег приносит товар в единицу времени, и какова от него прибыль). Использование в программе информации по затратам, включаемым в себестоимость товара, поможет пользователю оценить рентабельность получения одного и того же товара от различных поставщиков, соотношение между выручкой от реализации товара, затратами и прибылью. Отчет по планируемым прибылям даст пользователю оперативную информацию о том, сколько ему должны отдать денег по отгруженным товарам, на какую сумму фирма выставила счета за предыдущий период, по которым еще ничего не отгружено и которые пока не оплачены и многое другое. Информацию можно просмотреть в виде графиков и диаграмм. Многие фирмы для реализации своих товаров используют услуги менеджеров. По результатам работы менеджеров фирма определяет оплату их труда. Программа позволяет автоматизировать и этот участок работы, причем не только в плане учета сдельной части оплаты менеджеров, но и для общего контроля над их работой, например, насколько интенсивно менеджер работает с потенциальными клиентами, выписавшими счет на оплату. Мощная система разграничения уровня доступа пользователей поможет руководству фирмы исключить случаи недобросовестной работы персонала.
Программа позволяет сформировать бухгалтерские проводки и построить все основные бухгалтерские отчеты. Можно перенести всю информацию (проводки и аналитические признаки) в специализированные бухгалтерские программы, например, «КС:Предприятие», «1С:Бухгалтерию», «Инфо-Бухгалтер», «Турбо Бухгалтер», «Парус», «Бэст», «Инфин» и другие.
ГЛАВА 2. ПРАКТИЧЕСКАЯ ЧАСТЬ. ПРОЕКТИРОВАНИЕ АИС КНИЖНЫЙ СКЛАД
2.1 Анализ предметной области База данных — поименная совокупность структурированных данных, относящихся к определенной предметной области. Под предметной областью принято понимать часть реального мира, подлежащую изучению для организации управления и автоматизации (предприятия, организации). Анализ предметной области позволяет определить, какие данные содержатся в БД. Пользователями БД могут быть различные прикладные программы, программы-комплексы, а также специалисты предметной области, которые называются конечными пользователями.
Модель предметной области. Модель предметной области — это наши знания о предметной области. Знания могут быть как в виде неформальных знаний в мозгу эксперта, так и выражены формально при помощи каких-либо средств. В качестве таких средств могут выступать текстовые описания предметной области, наборы должностных инструкций, правила ведения дел в компании и т. п. Опыт показывает, что текстовый способ представления модели предметной области крайне неэффективен. Гораздо более информативными и полезными при разработке баз данных являются описания предметной области, выполненные при помощи специализированных графических нотаций. Имеется большое количество методик описания предметной области. Из наиболее известных можно назвать методику структурного анализа SADT и основанную на нем IDEF0, диаграммы потоков данных Гейна-Сарсона, методику объектно-ориентированного анализа UML, и др. Модель предметной области описывает скорее процессы, происходящие в предметной области и данные, используемые этими процессами. От того, насколько правильно смоделирована предметная область, зависит успех дальнейшей разработки приложений.
Предметной областью моей базы является книжный склад.
Каждая книга, хранящаяся в книжном складу имеет следующие параметры: название, автор, издание, год издания.
Также можно вносить некоторые изменения в базу данных, а в частности: запись новых книг, тираж и номер склада на котором хранятся книги.
2.2 Постановка задачи
Разработать структуру базы данных для книжного склада. Эта база данных должна содержать следующую информацию:
1. данные о складах
· название склада
· адрес
· телефон
· ФИО директора
2. данные о книгах
· название книги
· автор
· издательство
· год выпуска
· тираж
· область знаний
· цена издательства
3. наличие на складе
· количество упаковок
· количество экземпляров в упаковке
4. информация о продажах
· дата продажи
· название книги
· автор
· отпускная цена за экземпляр
· количество экземпляров
Построить запросы, формы и отчеты, позволяющие получать следующую информацию:
· какие книги по конкретной тематике имеются на складе
· подготовить бланк заказа на приобретение конкретной книги
· сравнить отпускные цены по конкретной книге на различных складах
· какие книги конкретного автора имеются на складе
· подготовить выручку от реализации за день, месяц.
2.3ER-диаграмма
Рис. 2.1ER-диаграмма книжного склада
2.4 Алгоритм программы
Алгоритм — заранее определенное, точное предписание, которое задает дискретный (пошаговый) процесс, начинающийся определенным образом и приводящий к результату за конечное число шагов. Каждый алгоритм должен обладать следующими свойствами:
— дискретность — каждый алгоритм должен быть разбит на конечное число законченных действий;
— результативность — каждый алгоритм направлен на решение конкретной задачи, а следовательно, на получение определенного результата;
— массовость — алгоритм необходимо составить так, чтобы с его помощью можно было решать подобные задачи.
Способы записи алгоритма:
1. Формальный — запись алгоритма словесно, на естественном языке.
2. Графический — изображение алгоритма в виде блок-схемы.
2.5 Инструкция пользователя
Главная форма программы. Содержит четыре вкладки меню: «Файл», «Таблицы», «Запросы», «Ввод данных».
Рис. 2.2"Главная форма"
Вкладка «Файл» содержит только функцию «Выход».
Рис. 2.3 Вкладка «Таблицы»
Вкладка «Таблицы» содержит пункты меню: «Склады», «Наличие», «Книги», «Продажи».
Меню «Склады» содержит таблицу складов организации и Содержит такие данные как: идентификатор, название склада, адрес склада, телефон склада и контактное лицо.
Рис. 2.4 Меню «Склады»
Меню «Наличие» содержит таблицу, в которой записываются идентификаторы книг, их кол-во, наличие на складе.
Рис. 2.5 Меню «Наличие»
Меню «Книги» содержит таблицу, в которой записываются наименования книг, авторы, год издания, издательство. Добавление новых позиций осуществляется с помощью навигации внизу формы.
Рис. 2.6 Меню «Книги»
Меню «Продажи» содержит таблицу, в которой записываются дата продажи книги, цена, идентификатор и количество.
Рис. 2.7 Меню «Продажи»
Вкладка «Запросы» содержит 5 подменю: «SQL», «Книги по тематике», «Отпускные цены», «Книги по автору» и «Выручка».
Рис. 2.8 Вкладка «Запросы»
Меню «Запрос» формирует отчет по книгам с параметром «Книги по тематике». Отчет содержит данные об авторе, названии книги, наличии на складах и количество.
Рис. 2.9 Меню «Запрос»
Меню «Отпускные цены» формирует отчет по ценам на книги.
Рис. 2.10 Меню «Отпускные цены»
Форма «Книжные склады» служит для добавления новых складов организации.
Рис. 2.11 Форма «Книжные склады»
Форма «Результаты» из меню «Наличие» служит для добавления новых книг на склады компании.
Рис. 2.12 Форма «Результаты»
Форма «Книги» служит для добавления новых книг в каталог.
Рис. 2.13 Форма «Книги»
Форма «Продажи» служит для добавления проданных книг со складов организации.
Рис. 2.14 Форма «Продажи»
ЗАКЛЮЧЕНИЕ
В первой главе были рассмотрены теоретические понятия в области автоматизированных информационных систем и приведен пример работы ведущей программы «книжный склад». На основе анализа был сделан вывод о целесообразности проектирования и последующей разработки информационной системы «книжного склада».
Во второй главе была выбрана среда разработки, описана инструкция пользователя и структура программы. В качестве среды разработки была выбранаDELPHI, среда очень понравилась своим дружелюбным интерфейсом и простотой использования. Данная программа позволяет работникам книжного склада осуществлять структурированное добавление новых данных, также осуществлять удобный поиск по данным вести учет проданный и купленных книг. Также во второй главе описана инструкция пользователя, позволяющая пользователю ознакомиться с функционалом программы и рассмотрен пример работы с программой.
ПРИЛОЖЕНИЕА
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ExtCtrls, StdCtrls;
type
TForm_Main = class (TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
SQL1: TMenuItem;
Button_Close: TButton;
Bevel1: TBevel;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
N17: TMenuItem;
Label1: TLabel;
procedure N2Click (Sender: TObject);
procedure N4Click (Sender: TObject);
procedure N5Click (Sender: TObject);
procedure N6Click (Sender: TObject);
procedure N7Click (Sender: TObject);
procedure N9Click (Sender: TObject);
procedure N11Click (Sender: TObject);
procedure N10Click (Sender: TObject);
procedure N12Click (Sender: TObject);
procedure SQL1Click (Sender: TObject);
procedureButton_CloseClick (Sender: TObject);
procedure N14Click (Sender: TObject);
procedure N15Click (Sender: TObject);
procedure N16Click (Sender: TObject);
procedure N17Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_Main: TForm_Main;
implementation
usesWarhouses, 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;
procedureTForm_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;
end.
unit Presences;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;
type
TForm_Presences = class (TForm)
Table_Presences: TTable;
DataSource_Presences: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Button_Close: TButton;
procedureButton_CloseClick (Sender: TObject);
procedureTable_PresencesBeforeDelete (DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_Presences: TForm_Presences;
implementation
{$R *.DFM}
procedureTForm_Presences.Button_CloseClick (Sender: TObject);
begin
Close;
end;
procedureTForm_Presences.Table_PresencesBeforeDelete (DataSet: TDataSet);
begin
ifMessageDlg ('Текущая запись и все связанные с ней записи будут удалены.'
+#13+'Продолжить?',
mtConfirmation,[mbOK, mbCancel], 0)=mrCancel then begin
Abort;
end;
end;
end.
unitQGain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables, DBCtrls, ComCtrls;
type
TForm_QGain = class (TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button_Close: TButton;
Button_Execute: TButton;
DateTimePicker_Start: TDateTimePicker;
DateTimePicker_Last: TDateTimePicker;
Label1: TLabel;
Label2: TLabel;
procedureButton_CloseClick (Sender: TObject);
procedureButton_ExecuteClick (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_QGain: TForm_QGain;
implementation
{$R *.DFM}
procedureTForm_QGain.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_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;
end.
unitQAuthor;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables, DBCtrls;
type
TForm_QAuthor = class (TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button_Close: TButton;
Button_Execute: TButton;
DBLookupComboBox1: TDBLookupComboBox;
Table_Books1: TTable;
DataSource_Books1: TDataSource;
Label1: TLabel;
procedureButton_CloseClick (Sender: TObject);
procedureButton_ExecuteClick (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_QAuthor: TForm_QAuthor;
implementation
{$R *.DFM}
procedureTForm_QAuthor.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_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;
end.
unitQKnowledge;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables, DBCtrls;
type
TForm_QKnowledge = class (TForm)
Query1: TQuery;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
Button_Close: TButton;
Button_Execute: TButton;
DBLookupComboBox1: TDBLookupComboBox;
Table_Books1: TTable;
DataSource_Books1: TDataSource;
Label1: TLabel;
procedureButton_CloseClick (Sender: TObject);
procedureButton_ExecuteClick (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_QKnowledge: TForm_QKnowledge;
implementation
{$R *.DFM}
procedureTForm_QKnowledge.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_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;
end
unitQSale_Cost;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, DBCtrls, DBTables, Db, Grids, DBGrids;
type
TForm_QSale_Cost = class (TForm)
DBGrid1: TDBGrid;
Query1: TQuery;
DataSource1: TDataSource;
Table_Books1: TTable;
DataSource_Books1: TDataSource;
DBLookupComboBox1: TDBLookupComboBox;
Button_Execute: TButton;
Button_Close: TButton;
Label1: TLabel;
procedureButton_CloseClick (Sender: TObject);
procedureButton_ExecuteClick (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_QSale_Cost: TForm_QSale_Cost;
implementation
{$R *.DFM}
procedureTForm_QSale_Cost.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_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;
end.
unit Sales;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;
type
TForm_Sales = class (TForm)
Table_Sales: TTable;
DataSource_Sales: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Button_Close: TButton;
procedureButton_CloseClick (Sender: TObject);
procedureTable_SalesBeforeDelete (DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_Sales: TForm_Sales;
implementation
{$R *.DFM}
procedureTForm_Sales.Button_CloseClick (Sender: TObject);
begin
Close;
end;
procedureTForm_Sales.Table_SalesBeforeDelete (DataSet: TDataSet);
begin
ifMessageDlg ('Текущая запись и все связанные с ней записи будут удалены.'
+#13+'Продолжить?',
mtConfirmation,[mbOK, mbCancel], 0)=mrCancel then begin
Abort;
end;
end;
end.
unitSQL_Query;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables;
type
TForm_SQL_Query = class (TForm)
Query1: TQuery;
DataSource1: TDataSource;
Button_Execute: TButton;
Button_Clear: TButton;
Button_Close: TButton;
GroupBox1: TGroupBox;
Memo1: TMemo;
GroupBox2: TGroupBox;
DBGrid1: TDBGrid;
Button_Save: TButton;
Button_Load: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedureButton_ExecuteClick (Sender: TObject);
procedureButton_ClearClick (Sender: TObject);
procedureButton_CloseClick (Sender: TObject);
procedureButton_LoadClick (Sender: TObject);
procedureButton_SaveClick (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_SQL_Query: TForm_SQL_Query;
implementation
{$R *.DFM}
procedureTForm_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;
procedureTForm_SQL_Query.Button_ClearClick (Sender: TObject);
begin
Form_SQL_Query.Memo1.Lines.Clear;
end;
procedureTForm_SQL_Query.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_SQL_Query.Button_LoadClick (Sender: TObject);
begin
if OpenDialog1. Execute then begin
Memo1.Lines.LoadFromFile (OpenDialog1.FileName);
end;
end;
procedureTForm_SQL_Query.Button_SaveClick (Sender: TObject);
begin
if SaveDialog1. Execute then begin
Memo1.Lines.SaveToFile (ChangeFileExt (SaveDialog1.FileName,'.sql'));
end;
end;
end.
unitWarhouses;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;
type
TForm_Warhouses = class (TForm)
Table_Warhouses: TTable;
DataSource_Warhouses: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Button_Close: TButton;
Query_Delete: TQuery;
procedureButton_CloseClick (Sender: TObject);
procedureTable_WarhousesBeforeDelete (DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_Warhouses: TForm_Warhouses;
implementation
uses Presences, Sales;
{$R *.DFM}
procedureTForm_Warhouses.Button_CloseClick (Sender: TObject);
begin
Close;
end;
procedureTForm_Warhouses.Table_WarhousesBeforeDelete (DataSet: TDataSet);
var
id: string;
begin
//подтверждение удаления записи
ifMessageDlg ('Текущая запись и все связанные с ней записи будут удалены.'
+#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;
end.
unit Books;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, DBCtrls, Grids, DBGrids, Db, DBTables;
type
TForm_Books = class (TForm)
Table_Books: TTable;
DataSource_Books: TDataSource;
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
Button_Close: TButton;
Query_Delete: TQuery;
procedureButton_CloseClick (Sender: TObject);
procedureTable_BooksBeforeDelete (DataSet: TDataSet);
procedureFormCreate (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_Books: TForm_Books;
implementation
uses Presences, Sales;
{$R *.DFM}
procedureTForm_Books.Button_CloseClick (Sender: TObject);
begin
Close;
end;
procedureTForm_Books.Table_BooksBeforeDelete (DataSet: TDataSet);
var
id: string;
begin
ifMessageDlg ('Текущая запись и все связанные с ней записи будут удалены.'
+#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;
procedureTForm_Books.FormCreate (Sender: TObject);
begin
end;
end.
unitIn_Book;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables, DBCtrls, ExtCtrls, ComCtrls;
type
TForm_In_Book = class (TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button_Add: TButton;
Button_Close: TButton;
Label6: TLabel;
Label4: TLabel;
Bevel1: TBevel;
Edit_Author: TEdit;
Edit_Circuation: TEdit;
Edit_Year: TEdit;
Edit_Publisher: TEdit;
Edit_Name: TEdit;
Label5: TLabel;
Label7: TLabel;
Edit_Knowledge: TEdit;
Edit_Cost: TEdit;
procedureButton_CloseClick (Sender: TObject);
procedureButton_AddClick (Sender: TObject);
procedureFormCreate (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_In_Book: TForm_In_Book;
implementation
uses Books;
{$R *.DFM}
procedurefill_result_data;
begin
withForm_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;
procedureTForm_In_Book.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_In_Book.Button_AddClick (Sender: TObject);
begin
Form_Books.Table_Books.Last;
ry
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;
procedureTForm_In_Book.FormCreate (Sender: TObject);
begin
fill_result_data;
end;
end.
unitIn_Presence;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables, DBCtrls, ExtCtrls, ComCtrls;
type
TForm_In_Presence = class (TForm)
Label1: TLabel;
Label2: TLabel;
Button_Add: TButton;
Button_Close: TButton;
DBLookupComboBox_Warhouse: TDBLookupComboBox;
Label6: TLabel;
Table_Warhouses1: TTable;
DataSource_Warhouses1: TDataSource;
Table_Warhouses2: TTable;
DataSource_Warhouses2: TDataSource;
Label4: TLabel;
DBLookupComboBox_Book: TDBLookupComboBox;
Table_Books1: TTable;
DataSource_Books1: TDataSource;
Table_Books2: TTable;
DataSource_Books2: TDataSource;
Bevel1: TBevel;
Edit_Item_Amount: TEdit;
Edit_Pack_Amount: TEdit;
procedureButton_CloseClick (Sender: TObject);
procedureButton_AddClick (Sender: TObject);
procedureFormCreate (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_In_Presence: TForm_In_Presence;
implementation
uses Presences;
{$R *.DFM}
procedurefill_result_data;
begin
withForm_In_Presence do begin
Edit_Pack_Amount.Text:='0';
Edit_Item_Amount.Text:='0';
end;
end;
procedureTForm_In_Presence.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_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;
procedureTForm_In_Presence.FormCreate (Sender: TObject);
begin
fill_result_data;
end;
end.
unitIn_Sale;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables, DBCtrls, ExtCtrls, ComCtrls;
type
TForm_In_Sale = class (TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button_Add: TButton;
Button_Close: TButton;
DBLookupComboBox_Warhouse: TDBLookupComboBox;
Label6: TLabel;
Table_Warhouse1: TTable;
DataSource_Warhouse1: TDataSource;
Table_Warhouse2: TTable;
DataSource_Warhouse2: TDataSource;
Label4: TLabel;
DBLookupComboBox_Book: TDBLookupComboBox;
Table_Book1: TTable;
DataSource_Book1: TDataSource;
Table_Book2: TTable;
DataSource_Book2: TDataSource;
Bevel1: TBevel;
Edit_Cost: TEdit;
Edit_Amount: TEdit;
Edit_Date: TEdit;
procedureButton_CloseClick (Sender: TObject);
procedureButton_AddClick (Sender: TObject);
procedureFormCreate (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_In_Sale: TForm_In_Sale;
implementation
uses Sales;
{$R *.DFM}
procedurefill_result_data;
begin
withForm_In_Sale do begin
Edit_Date.Text:='01.01.01';
Edit_Cost.Text:='0';
Edit_Amount.Text:='0';
end;
end;
procedureTForm_In_Sale.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_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;
procedureTForm_In_Sale.FormCreate (Sender: TObject);
begin
fill_result_data;
end;
end.
unitIn_Warhouse;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, DBTables, DBCtrls, ExtCtrls, ComCtrls;
type
TForm_In_Warhouse = class (TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Button_Add: TButton;
Button_Close: TButton;
Label6: TLabel;
Bevel1: TBevel;
Edit_Address: TEdit;
Edit_Name: TEdit;
Edit_Phone: TEdit;
Edit_Manager: TEdit;
procedureButton_CloseClick (Sender: TObject);
procedureButton_AddClick (Sender: TObject);
procedureFormCreate (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_In_Warhouse: TForm_In_Warhouse;
implementation
usesWarhouses;
{$R *.DFM}
procedurefill_result_data;
begin
withForm_In_Warhouse do begin
Edit_Name.Text:='Name';
Edit_Address.Text:='Address';
Edit_Phone.Text:='000−00−00';
Edit_Manager.Text:='Manager';
end;
end;
procedureTForm_In_Warhouse.Button_CloseClick (Sender: TObject);
begin
close;
end;
procedureTForm_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;
procedureTForm_In_Warhouse.FormCreate (Sender: TObject);
begin
fill_result_data;
end;
end.