Приложение, позволяющее быстро и просто анализировать содержание книжных складов
ВВЕДЕНИЕ
Каждая организация, занимающаяся хранением и
продажей какой-либо продукции, оперирует с большим объемом информации,
касающейся конкретным видом деятельности. Возьмем, к примеру, сеть книжных
складов. Здесь наиболее важной информацией для организаторов является
информация о наличии видов товаров на складах и хронология их продаж. Для того,
чтобы эти данные было легко хранить, обрабатывать, просматривать и исследовать
возникает необходимость в создании программы, которая позволит выполнять все
вышеуказанные действия над информацией в форме, удобной и понятной
пользователю.
Данная работа состоит из четырех частей. Первая
часть работы посвящена выбору и конкретизации предметной области.
Во второй части необходимая для автоматизируемой
технологии обработки данных информация формализуется в инфологической модели.
В третьей части на основе инфологической модели
разрабатывается даталогическая модель БД, конкретизированная для используемых
вида и версии СУБД.
Четвертая часть - функциональное проектирование:
описывается набор операций, необходимых для автоматизируемой технологии
обработки данных, форма и способ их выполнения пользователем. Приводится
описание интерфейса программы.
1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ
Функцией этого приложения является хранение
информации о книжных складах, о наличии на них различных видов книг, о
продажах, произведенных с данных складов и составления сметы на покупку товара.
Потенциальные пользователи приложения - менеджеры по продажам книг с книжных
складов и люди, которые занимаются закупкой товара (книг). Бланк заказа на
покупку является выходным документом данного приложения, в котором указываются
наименование выбранной покупателем книги, кол-во, цена и данное о складе, с
которого был продан товар.
Задачей персонала, занимающегося пополнением
склада, является внесение информации в базу данных о закупленных книгах.
Менеджер по продажам должен вносить данные о проданных товарах и получать от
программы бланк заказа.
Ниже приводится описание данных, которые
собираются, сопровождаются и используются для обеспечения нормального
производственного процесса.
.1 Требования к данным
Склады
Организация имеет в наличии некоторое кол-во
складов, которое может с течением времени изменяться (постройка нового склада,
снос старого). Здесь содержатся данные о месте нахождения склада (адрес),
телефон склада, его наименование и информация о главном менеджере склада.
Книги
Этот справочник содержит данные о книгах, с
которыми будут оперировать склады. В этой категории хранится информация об
авторе, издательстве, тираже, цене книги.
Наличие на складе
Здесь хранится информация о количестве упаковок
и количестве книг в одной упаковке для каждой имеющейся на определенном складе
книги.
Продажи
После выбора покупателем книги составляется
бланк заказа и вносится информация о дате продажи, о проданной книге, о выручке
и т. д.
1.2 Требования к транзакциям
Ниже перечислены транзакции, включающие
обработку данных, необходимую для исполнения повседневных обязанностей. Каждая
транзакция связана с конкретными функциями.
Транзакция А. Создание и сопровождение записей
со сведениями о складах.
Транзакция B. Создание и сопровождение записей
со сведениями о книгах.
Транзакция C. Создание и сопровождение записей
со сведениями о наличии на складах.
Транзакция D. Создание и сопровождение записей
со сведениями о продажах.
Транзакция Е. Подготовить выручку от реализации
товара за день, месяц.
Транзакция F. Создание и вывод на принтер бланка
заказа на приобретение книги.
Транзакция G. Поиск конкретной книги,
конкретного автора.
2. ИНФОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ
.1 Определение сущностей и их атрибутов
Исходя из представленных в описании предметной
области данных, требуемых для автоматизации операций моделируемой системы
согласно теории построения ER-моделей можно выделить ряд необходимых сущностей
вместе с их атрибутами.
Рассмотрим выделенные сущности вместе с их
атрибутами:
данные о складах
название склада
адрес
телефон
ФИО директора
данные о книгах
название книги
автор
издательство
год выпуска
тираж
область знаний
цена издательства
наличие на складе
номер записи
количество упаковок
количество экземпляров в упаковке
номер книги
номер склада
информация о продажах
номер продажи
дата продажи
отпускная цена за экземпляр
количество упаковок
общая стоимость
номер книги
номер склада
Как видим, в каждой таблице значения первичных
ключей будут иметь довольно большую длину (до 50 символов), что может привести
к неоправданному увеличению объема информационной базы и замедлению работы при
связывании таблиц. Поэтому введем в каждую таблицу поле «ID», которое будет
являться первичным ключом и уникально идентифицировать каждую запись таблицы.
Это позволит снять требования уникальности с полей «Название», что отразится
при задании ограничений целостности.
.2 Ограничения целостности
Сущность «Склады»
Атрибут «ID» - целое число от 1 до 2 147 483
648. Уникален для каждой записи.
Атрибут «Название» - символьное значение
размером 30 символов. Обязателен для заполнения. Ограничений на уникальность
нет.
Атрибут «Адрес» - символьное значение размером
30 символов. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Телефон» - числовое значение размером
12 символов.
Атрибут «ФИО менеджера» - символьное значение
размером 30 символов. Обязателен для заполнения. Ограничений на уникальность
нет.
Сущность «Книги»
Атрибут «ID» - целое число от 1 до 2 147 483
648. Уникален для каждой записи.
Атрибут «Название» - символьное значение
размером 30 символов. Обязателен для заполнения. Ограничений на уникальность
нет.
Атрибут «Автор» - символьное значение размером
30 символов. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Издательство» - символьное значение
размером 30 символов. Обязателен для заполнения. Ограничений на уникальность
нет.
Атрибут «Тираж» - положительное числовое
значение. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Год выпуска» - положительное числовое
значение. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Область знаний» - символьное значение
размером 30 символов. Обязателен для заполнения. Ограничений на уникальность
нет.
Атрибут «Цена издательства» - положительное
числовое значение. Обязателен для заполнения. Ограничений на уникальность нет.
Сущность «Наличие на складе»
Атрибут «ID» - целое число от 1 до 2 147 483
648. Уникален для каждой записи.
Атрибут «Кол-во упаковок» - положительное
числовое значение. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Кол-во в упаковке» - положительное
числовое значение. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Номер склада» - положительное числовое
значение. Обязателен для заполнения. Ограничений на уникальность нет. Значение
равно «ID» в сущности «Склады».
Атрибут «Номер книги» - положительное числовое
значение. Обязателен для заполнения. Ограничений на уникальность нет. Значение
равно «ID» в сущности «Книги».
Сущность «Продажи»
Атрибут «ID» - целое число от 1 до 2 147 483
648. Уникален для каждой записи.
Атрибут «Дата продажи» -значение типа Date.
Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Кол-во упаковок» - положительное
числовое значение. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Цена экземпляр» - положительное
числовое значение. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Общая стоимость» - положительное
числовое значение. Обязателен для заполнения. Ограничений на уникальность нет.
Атрибут «Номер склада» - положительное числовое
значение. Обязателен для заполнения. Ограничений на уникальность нет. Значение
равно «ID» в сущности «Склады».
Атрибут «Номер книги» - положительное числовое
значение. Обязателен для заполнения. Ограничений на уникальность нет. Значение
равно «ID» в сущности «Книги».
.3 Схема связей между сущностями
Рисунок 1- Схема связей между сущностями
.4 Предполагаемые информационные запросы
Строятся запросы, формы и отчеты, позволяющие
получать следующую информацию:
какие книги по конкретной тематике имеются на
складе
подготовить бланк заказа на приобретение
конкретной книги
какие книги конкретного автора имеются на складе
подготовить выручку от реализации за день,
месяц.
просмотр данных о складах
просмотр данных о книгах
просмотр данных о наличии на складе
просмотр данных о продажах
3. ДАТАЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ
.1 Получение начальной модели
После того как была разработана инфологическая
модель предметной области, можно приступать к построению даталогической модели
применительно к конкретной СУБД (InterBase 5.6).
Для реляционной базы данных проектирование
логической структуры (или даталогическое проектирование) заключается в том,
чтобы разбить всю информацию по файлам (или в терминах реляционной модели - по
отношениям), а также определить состав полей (в терминах реляционной модели -
атрибутов) для каждого из этих файлов.
Для перехода от инфологической модели к
даталогической воспользуемся методологией, подробно описанной в [2].
. На начальной стадии построения сущности
инфологической модели будут представлены в виде отношений, причем атрибуты
сущностей будут являться их полями, а ограничения целостности - форматами
полей.
Соответственно, каждая сущность инфомодели будет
представлена в виде отдельной таблицы с уникальным первичным ключом «ID».
. При наличии связи М:М согласно методологии
следует ввести дополнительное отношение, содержащее идентификаторы связываемых
объектов. Все связи в проектируемой модели 1:M
.2 Нормализация отношений
Теперь после получения начальной даталогической
модели проведем ее нормализацию по правилам, указанным в [3].
. Таблица находится в первой нормальной форме
(1НФ) тогда и только тогда, когда ни одна из ее строк не содержит в любом своем
поле более одного значения и ни одно из ее ключевых полей не пусто.
Все таблицы разработанной БД соответствуют этому
определению.
. Таблица находится во второй нормальной форме
(2НФ), если она удовлетворяет определению 1НФ и все ее поля, не входящие в
первичный ключ, связаны полной функциональной зависимостью с первичным ключом.
Так как во всех таблицах первичным ключом
является «безликий» ID, то все таблицы разработанной БД соответствуют этому
определению.
. Таблица находится в третьей нормальной форме
(3НФ), если она удовлетворяет определению 2НФ и не одно из ее неключевых полей
не зависит функционально от любого другого неключевого поля.
Этому требованию соответствуют все таблицы
разрабатываемой БД
Таким образом, получив из инфологической
даталогическую модель и проведя ее нормализацию до соответствия 3НФ, можно
графически представить структуру разработанной реляционной БД (рисунок 2).
Рисунок 2 - Даталогическая модель
4. ФУНКЦИОНАЛЬНОЕ ПРОЕКТИРОВАНИЕ
В данном разделе описывается набор операций,
необходимых для автоматизируемой технологии обработки данных, форма и способ их
выполнения пользователем.
Определим необходимые операции для каждой базы
данных:
просмотр содержащихся записей
добавление записи
редактирование записи
удаление записи
Определим специфические операции:
продать товар
вернуть товар на склад
просмотр бланка заказа
печать бланка заказа
поиск интересующей книги
просмотр информации о программе
Для реализации всех операций разработаем схему
диалога.
Во-первых, рассмотрим главное окно приложения и
опишем все его элементы.
Рисунок 3 - Диалоговое окно основной формы
Кнопки «Работа с БД» открывает основное окно
работы с БД.
Кнопка «Поиск кинги» открывает окно поиска
интересующей пользователя книги.
Выход: выход из приложения с закрытием всех
таблиц и окон.
Все кнопки дублируются в главном меню программы.
Далее более подробно остановимся на схеме
организации диалога.
Рисунок 4 - Структура диалога
Окно Редактирование БД загружающий по нажатию
клавиши «Работа с БД» главного окна, представлен ниже:
Рисунок 5 - Окно Редактирование БД (Имущество)
Компонент DBDrid представляет общую информацию о
складах, показывая их название, адрес, телефон и менеджера склада. При выборе
определенного элемента компонента в полях вывода ниже появляются данные о
наличии на складе (кол-во упаковок, кол-во в упаковке) конкретной книги
(название, автор, издательство, год, тираж, область знаний, цена).
У каждой таблицы имеются быстрые кнопки для
вызова диалоговых окон добавления и изменения записей, а также кнопки удаления
текущей записи. Удаление происходит только после подтверждения пользователя.
При нажатии на кнопку "Добавить склад"
загружается окно Добавление.
Рисунок 6 - Окно добавления склада
Для добавления нового склада достаточно
заполнить все поля и нажать “OK” (при нажатии «Cancel» данные не запишутся) и
переход к окну Редактирование БД.
Если поля формы, обязательные для заполнения,
останутся пустыми, то будет выдано сообщение об ошибке.
Рисунок 7 - Сообщение об ошибке
Такое сообщение об ошибке будет выдаваться
каждый раз при незаполнении ключевых полей и в дальнейших окнах добавления и
редактирования записей.
При нажатии на кнопку "Изменить
инф-ию" загружается окно Изменение.
Рисунок 7 - Окно редактирования
По-прежнему изначально необходимо заполнить все
ключевые поля. Кнопка «ОК» сохраняет введенные изменения, кнопка «Cancel» осуществляет
переход к окну Редактирование БД.
При нажатии на кнопку «Удалить» запрашивается
подтверждение на удаление.
Рисунок 8 - Подтверждение удаления
При нажатии «Да» выбранная запись удаляется и
загружается экран Редактирование БД, при нажатии «Нет» просто загружается окно
Редактирование БД.
Аналогично для таблиц «Наличие на складе» и
«Книги» при нажатии на кнопки «Добавить», «Изменить», «Удалить» появляются окна
с информацией о редактируемой записи:
Рисунок 9 - Добавление книг на склад
Рисунок 10 - Изменение данных о книге
Кнопка «Продать» позволяет продать выбранный
товар с выбранного склада и соответственно поместить информацию о продаже в таблицу
«Продажи»
Рисунок 11 - Продажа
Кнопка «Назад» позволяет вернуться к начальной
форме.
Вторая вкладка окна Редактирование БД:
Рисунок 12 - Окно Редактирование БД (Продажи)
Здесь показывается таблица продаж книг,
передвигаясь по которой в нижней части окна показывается информация о книге,
которую продали, и о складе, с которого была произведена продажа.
Кнопка «Удалить инф-ию» вызывает окно
подтверждения удаления. После нажатия кнопки «ОК» запись о продаже будет
удалена.
Кнопка «Вернуть на склад» позволяет отменить
какую-либо продажу, вернув книги обратно на склад, с которого они были проданы.
Кнопка «Подсчет» позволяет подсчитать доход от
продаж. Предварительно нужно ввести период времени, за который необходимо
получить инф-ию о доходах:
Рисунок 13 - Отрывок окна Редактирование БД
(Продажи)
Кнопка «Бланк заказа» формирует окно, в котором
показывается бланк. Здесь же его можно распечатать:
Рисунок 14 - Окно бланка заказа на покупку книг
Перейдем снова к главной форме. Нажав кнопку
«Поиск книги» на экране появится окно «Поиск книг и сравнение цен»:
Рисунок 15 - Окно поиска книг
Вначале данная форма выводит все имеющиеся в
справочнике книги, а также информацию о наличии этих книг на складах фирмы
(внизу окна). Вверху выбирается название поля, по которому будет производиться
отбор, и значение этого поля:
Рисунок 16 -Отрывок окна поиска книг
После нажатия на кнопку «Поиск» производится
отбор по выбранным параметрам. Найденные записи отображаются в таблице на
экране. Нажав кнопку «Отмена» на экране снова появляются все книги, имеющиеся в
базе.
После нажатия на кнопку «Отмена» возвращаемся в
главное окно.
Кнопка «О Программе» в меню главного окна
предоставляет инф-ию о программе (название программы, разработчик):
Рисунок 17 - Окно «О программе»
ЗАКЛЮЧЕНИЕ
В данной практической работе были рассмотрены
основные принципы инфологического и даталогического проектирования на основании
выбранной предметной области.
Было спроектировано и разработано приложение,
позволяющее быстро и просто анализировать содержание книжных складов, а также
сопровождать данные по всем имеющимся в наличии книгам. Освоены навыки
написания SQL-запросов, изучена работа с InterBase и связанными компонентами в
C++Builder.
В первой части работы было дано описание
предметной области, сформулированы требования к данным и транзакциям.
Во второй части был определен состав сущностей и
их атрибутов, необходимый для решения поставленной задачи, представлены
ограничения целостности. В результате была разработана инфологическая модель
предметной области.
На следующем этапе в третьей части после
проведения нормализации отношений была сформулирована и представлена графически
даталогическая модель.
В четвертой части был реализован алгоритм
общения программы с пользователем, проведено функциональное проектирование. В
результате была представлена структурная схема диалога и приведено описание
основных форм.
Можно сказать, что поставленная задача выполнена
в полном объеме.
инфологическое даталогическое
атрибут запрос
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
Архангельский
А.Я. Программирование в C++Builder 6. - М.: «Издательство Бином», 2003 - 1152с.
Диго
С.М. Проектирование и использование баз данных: Учебник .- М.: Финансы и
статистика, 1995
Кириллов
В.В. Основы проектирования реляционных баз данных .- СПб.: ГИТМО
Хансен
Г.,Хансен Д. Базы данных: разработка и управление.- М.:Бином, 1999
ПРИЛОЖЕНИЕ А (обязательное)
Листинг скрипта создания базы данных
CREATE
DATABASE "SKLAD.gdb"
USER "sysdba"
PASSWORD "masterkey";
CREATE GENERATOR
Warhouses_ID;GENERATOR Presences_ID;GENERATOR Books_ID;GENERATOR
Sales_ID;GENERATOR Warhouses_ID TO 0;GENERATOR Presences_ID TO 0;GENERATOR
Books_ID TO 0;GENERATOR Sales_ID TO 0;TABLE Warhouses (_warhousesINTEGER NOT
NULL Primary Key,VARCHAR(30) NOT NULL,(40) NOT NULL,(15),(30) NOT NULL
);TERM !! ;TRIGGER SET_Warhouses_ID
FOR WarhousesINSERT AS.id_warhouses = GEN_ID(Warhouses_ID, 1);!!TERM ; !!TABLE
Books (_bookINTEGER NOT NULL Primary Key,(30) NOT NULL,(30) NOT NULL,(40) NOT
NULL,(4,0) NOT NULL,NOT NULL,(30) NOT NULL,(5,2) NOT NULL
);
TERM !! ;TRIGGER SET_Books_ID FOR
BooksINSERT AS.id_book = GEN_ID(Books_ID, 1);!!TERM ; !!TABLE Presences (NOT
NULL Primary Key,_amountINTEGER NOT NULL,_amountINTEGER NOT
NULL,_warhousesINTEGER REFERENCES Warhouses(id_warhouses) ON UPDATE CASCADE ON
DELETE SET NULL,_bookINTEGER REFERENCES Books(id_book) ON UPDATE CASCADE ON
DELETE SET NULL
);
TERM !! ;TRIGGER SET_Presences_ID
FOR PresencesINSERT AS.id = GEN_ID(Presences_ID, 1);!!TERM ; !!TABLE Sales (NOT
NULL Primary Key,_dateDATE NOT NULL,(5,2) NOT NULL,NOT NULL,_costINTEGER NOT
NULL,_warhousesINTEGER REFERENCES Warhouses(id_warhouses) ON UPDATE CASCADE ON
DELETE SET NULL,_bookINTEGER REFERENCES Books(id_book) ON UPDATE CASCADE ON
DELETE SET NULL
);
TERM !! ;TRIGGER SET_Sales_ID FOR
SalesINSERT AS.id = GEN_ID(Sales_ID, 1);!!TERM ; !!INTO Books
VALUES (1, "Горе от ума",
"Грибоедов", "Русская
литература",1985,10000,"Литература",120);INTO Books(2,
"Ромео и Джульетта", "Шекспир",
"Мир",1993,15000,"Литература",185);INTO Books(3,
"Анатомия человека", "Березин, Феофанов", "Учебная
литература",2001,3500,"Биология",75.30);INTO Books(4,
"Учебник по Физике", "Мякишев",
"Ключ",2003,32000,"Физика",99.99);INTO
Warhouses(1,"Склад на холме","г.Киров, ул.Ленина-26","537823",
"Усков М.Ю.");INTO Warhouses(2,"Большой
склад","г.Слободской, ул.Короленко-3","273055",
"Альгина Н.П.");INTO Warhouses(3,"Главный
склад","г.Киров, ул.Пугачева-9","560019", "Шихова
Е.Г.");
INSERT INTO
Presences(1,27,50,1,1);INTO Presences(2,12,50,1,2);INTO
Presences(3,56,50,1,4);INTO Presences(4,53,20,2,1);INTO Presences(5,8,35,2,4);INTO
Presences(6,16,8,3,2);INTO Presences(7,28,36,3,3);INTO
Presences(8,37,45,3,4);INTO Sales(1,'6/6/2003',130,87,25000,1,3);INTO
Sales(2,'8/25/2003',59,36,32500,2,4);INTO
Sales(3,'11/7/2003',150,21,5637,1,1);INTO Sales(4,'3/30/2003',80.56,56,31000,3,2);INTO
Sales(5,'6/15/2004',96.78,46,10000,3,1);
COMMIT;
ПРИЛОЖЕНИЕ Б (обязательное)
Листинги основных функций
Работа с БД (sclad_unit.cpp)
#include <vcl.h>
#pragma hdrstop
#include "Sclad_unit.h"
#include "Sclad_Red.h"
#include "Nal_Red.h"
#include "Book_Red.h"
#include "Sales.h"
#include "QRep.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource
"*.dfm"*FormSclad;
//---------------------------------------------------------------------------
__fastcall
TFormSclad::TFormSclad(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall
TFormSclad::Button4Click(TObject *Sender)
{->Clear();sum=0;{->SQL->Clear();->SQL->Add("Select
* from Sales where SALE_Date between
'"+DateToStr(DateTimePicker1->Date)+"' AND
'"+DateToStr(DateTimePicker2->Date)+"'");->Open();
}(...) {>MessageBox("-хтхЁэю
ттхфхэ_
фрээ_х",
"+°шсър",
MB_OK + MB_ICONSTOP);}(!IBQuery4->Eof)
{=sum+IBQuery4->FieldByName("ALL_COST")->AsInteger;->Next();
}->SQL->Clear();->SQL->Add("Select
* from Sales");->Open();->Text=sum;
}
//---------------------------------------------------------------------------
void __fastcall TFormSclad::Button1Click(TObject
*Sender)
{>Caption="-юсртыхэшх";>GroupBox1->Caption="-юсртыхэшх
шэЇюЁьрЎшш
ю
ёъырфх";=1;>Edit1->Visible=false;>Label1->Visible=false;>Edit1->Clear();>Edit2->Clear();>Edit3->Clear();>Edit4->Clear();>Edit5->Clear();>Edit2->Enabled=true;>Edit3->Enabled=true;>Edit4->Enabled=true;>Edit5->Enabled=true;>ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::Button2Click(TObject *Sender)
{(IBQuery1->FieldByName("id_warhouses")->AsInteger==0)
return;=2;id=IBQuery1->FieldByName("ID_WARHOUSES")->AsInteger;>Edit1->Text=IntToStr(id);>Edit2->Text=IBQuery1->FieldByName("NAME")->AsString;>Edit3->Text=IBQuery1->FieldByName("ADDRESS")->AsString;>Edit4->Text=IBQuery1->FieldByName("PHONE")->AsString;>Edit5->Text=IBQuery1->FieldByName("MANAGER")->AsString;>Edit1->Enabled=false;>Edit1->Visible=true;>Label1->Visible=true;>Edit2->Enabled=true;>Edit3->Enabled=true;>Edit4->Enabled=true;>Edit5->Enabled=true;>Caption="+чьхэхэшх";>GroupBox1->Caption="+чьхэхэшх
шэЇюЁьрЎшш
ю
ёъырфх";>ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::Button3Click(TObject *Sender)
{(IBQuery1->FieldByName("id_warhouses")->AsInteger==0)
return;=3;id=IBQuery1->FieldByName("ID_WARHOUSES")->AsInteger;>Edit1->Text=IntToStr(id);>Edit2->Text=IBQuery1->FieldByName("NAME")->AsString;>Edit3->Text=IBQuery1->FieldByName("ADDRESS")->AsString;>Edit4->Text=IBQuery1->FieldByName("PHONE")->AsString;>Edit5->Text=IBQuery1->FieldByName("MANAGER")->AsString;>Edit1->Enabled=false;>Edit1->Visible=true;>Label1->Visible=true;>Edit2->Enabled=false;>Edit3->Enabled=false;>Edit4->Enabled=false;>Edit5->Enabled=false;>Caption="+фрыхэшх";>GroupBox1->Caption="+фрыхэшх
шэЇюЁьрЎшш
ю
ёъырфх";>ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::Button5Click(TObject *Sender)
{>Caption="-юсртыхэшх";>GroupBox1->Caption="-юяюыэхэшх
ёъырфр";=1;
>Edit1->Visible=false;>Label1->Visible=false;>Edit1->Clear();>Edit2->Clear();>Edit3->Clear();>Edit2->Enabled=true;>Edit3->Enabled=true;>Edit4->Clear();>Edit5->Clear();>Edit6->Visible=false;>ComboBox1->Clear();>ComboBox2->Clear();>ComboBox2->Enabled=true;>ComboBox1->Enabled=true;>ComboBox1->Visible=true;>Edit4->Text=IBQuery1->FieldByName("ID_WARHOUSES")->AsInteger;>Edit5->Text=IBQuery1->FieldByName("NAME")->AsString;>Edit4->Enabled=false;>Edit5->Enabled=false;->SQL->Clear();->SQL->Add("select
* from BOOKS order by NAME");->Open();(!IBQuery3->Eof)
{>ComboBox2->Items->Add(IBQuery3->FieldByName("ID_BOOK")->AsInteger);>ComboBox1->Items->Add(IBQuery3->FieldByName("NAME")->AsString);->Next();
}>ComboBox2->ItemIndex=0;>ComboBox1->ItemIndex=0;>Edit6->Text=FormBkRed->ComboBox1->Text;->SQL->Clear();->SQL->Add("select
* from BOOKS B where(B.ID_BOOK=:ID_BOOK)");->Open();>ShowModal();
}
//---------------------------------------------------------------------------
__fastcall
TFormSclad::Button6Click(TObject *Sender)
{(IBQuery2->FieldByName("id")->AsInteger==0)
return;
//FormBkRed->ComboBox1->Style=TComboBoxStyle(csDropDown);=2;>Edit6->Visible=true;id=IBQuery2->FieldByName("id")->AsInteger;>Edit1->Text=IntToStr(id);>ComboBox2->Clear();>ComboBox1->Clear();>ComboBox1->Visible=false;>Edit5->Text=IBQuery1->FieldByName("NAME")->AsString;>Edit5->Enabled=false;>Edit2->Text=IBQuery2->FieldByName("PACK_AMOUNT")->AsInteger;>Edit3->Text=IBQuery2->FieldByName("ITEM_AMOUNT")->AsInteger;>Edit4->Text=IBQuery2->FieldByName("ID_WARHOUSES")->AsInteger;>ComboBox2->Text=IBQuery2->FieldByName("ID_BOOK")->AsInteger;>Edit6->Text=IBQuery3->FieldByName("NAME")->AsString;>ComboBox1->Enabled=false;>Edit1->Enabled=false;>Edit1->Visible=true;>Label1->Visible=true;>Edit2->Enabled=true;>Edit3->Enabled=true;>Edit4->Enabled=true;>ComboBox2->Enabled=false;>Caption="+чьхэхэшх";>GroupBox1->Caption="+чьхэхэшх
шэЇюЁьрЎшш
ю
эрышўшш
эр
ёъырфх";>ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::Button7Click(TObject *Sender)
{(IBQuery2->FieldByName("id")->AsInteger==0)
return;=3;
//FormBkRed->ComboBox1->Style=csDropDown;id=IBQuery2->FieldByName("id")->AsInteger;>ComboBox1->Visible=false;>Edit6->Visible=true;>Edit6->Text=IBQuery3->FieldByName("NAME")->AsString;>Edit1->Text=IntToStr(id);>Edit2->Text=IBQuery2->FieldByName("PACK_AMOUNT")->AsInteger;>Edit3->Text=IBQuery2->FieldByName("ITEM_AMOUNT")->AsInteger;>Edit4->Text=IBQuery2->FieldByName("ID_WARHOUSES")->AsInteger;>Edit5->Text=IBQuery1->FieldByName("NAME")->AsString;>ComboBox2->Text=IBQuery2->FieldByName("ID_BOOK")->AsInteger;>ComboBox1->Text=IBQuery3->FieldByName("NAME")->AsString;>Edit1->Enabled=false;>Edit1->Visible=true;>Label1->Visible=true;>Edit2->Enabled=false;>Edit3->Enabled=false;>Edit4->Enabled=false;>Edit5->Enabled=false;>ComboBox2->Enabled=false;>ComboBox1->Enabled=false;>Caption="+фрыхэшх";>GroupBox1->Caption="+ўшёЄър
ёъырфр";>ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::Button8Click(TObject *Sender)
{>Caption="-юсртыхэшх";>GroupBox1->Caption="-юсртыхэшх
ъэшуш";=1;>Edit1->Visible=false;>Label1->Visible=false;>Edit1->Clear();>Edit2->Clear();>Edit3->Clear();>Edit4->Clear();>Edit5->Clear();>Edit6->Clear();>Edit7->Clear();>Edit8->Clear();
>Edit2->Enabled=true;>Edit3->Enabled=true;>Edit4->Enabled=true;>Edit5->Enabled=true;>Edit6->Enabled=true;>Edit7->Enabled=true;>Edit8->Enabled=true;>Edit2->Visible=true;>ComboBox1->Visible=false;>ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::Button9Click(TObject *Sender)
{=2;
id=IBQuery3->FieldByName("id_book")->AsInteger;>Edit1->Text=IntToStr(id);>Edit2->Text=IBQuery3->FieldByName("NAME")->AsString;>Edit3->Text=IBQuery3->FieldByName("AUTHOR")->AsString;>Edit4->Text=IBQuery3->FieldByName("PUBLISHER")->AsString;>Edit5->Text=IBQuery3->FieldByName("YEAR")->AsInteger;>Edit6->Text=IBQuery3->FieldByName("CIRCUATION")->AsInteger;>Edit7->Text=IBQuery3->FieldByName("KNOWLEDGE")->AsString;>Edit8->Text=IBQuery3->FieldByName("COST")->AsInteger;>Edit1->Enabled=false;>Edit1->Visible=true;>Label1->Visible=true;>Edit2->Enabled=true;>Edit3->Enabled=true;>Edit4->Enabled=true;>Edit5->Enabled=true;>Edit6->Enabled=true;>Edit7->Enabled=true;>Edit8->Enabled=true;>Edit2->Visible=true;>ComboBox1->Visible=false;>Caption="+чьхэхэшх";>GroupBox1->Caption="+чьхэхэшх
шэЇюЁьрЎшш
ю
ъэшух";>ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::Button10Click(TObject *Sender)
{=3;id=IBQuery3->FieldByName("id_book")->AsInteger;>Edit1->Text=IntToStr(id);>Edit1->Enabled=false;>Edit1->Clear();>Edit2->Clear();>Edit3->Clear();>Edit4->Clear();>Edit5->Clear();>Edit6->Clear();>Edit7->Clear();>Edit8->Clear();>Label1->Visible=true;>Edit2->Enabled=false;>Edit3->Enabled=false;>Edit4->Enabled=false;>Edit5->Enabled=false;>Edit6->Enabled=false;>Edit7->Enabled=false;>Edit8->Enabled=false;>Caption="+фрыхэшх";>GroupBox1->Caption="+фрыхэшх
шэЇюЁьрЎшш
ю
ъэшух";
>ComboBox1->Clear();>ComboBox2->Clear();>Edit1->Visible=false;>Edit2->Visible=false;>Label1->Visible=false;>ComboBox1->Visible=true;->SQL->Clear();->SQL->Add("select
* from BOOKS order by NAME");->Open();
while (!IBQuery3->Eof)
{>ComboBox2->Items->Add(IBQuery3->FieldByName("ID_BOOK")->AsInteger);>ComboBox1->Items->Add(IBQuery3->FieldByName("NAME")->AsString);->Next();
}>ComboBox1->ItemIndex=0;>ComboBox2->ItemIndex=0;=StrToInt(FormKnRed->ComboBox2->Text);->SQL->Clear();->SQL->Add("select
* from BOOKS where ID_BOOK="+IntToStr(id));->Open();>Edit2->Text=IBQuery3->FieldByName("NAME")->AsString;>Edit3->Text=IBQuery3->FieldByName("AUTHOR")->AsString;>Edit4->Text=IBQuery3->FieldByName("PUBLISHER")->AsString;>Edit5->Text=IBQuery3->FieldByName("YEAR")->AsInteger;>Edit6->Text=IBQuery3->FieldByName("CIRCUATION")->AsInteger;>Edit7->Text=IBQuery3->FieldByName("KNOWLEDGE")->AsString;>Edit8->Text=IBQuery3->FieldByName("COST")->AsInteger;
->SQL->Clear();->SQL->Add("select
* from BOOKS B where(B.ID_BOOK=:ID_BOOK)");->Open();>ShowModal();
}
//---------------------------------------------------------------------------__fastcall
TFormSclad::BitBtn2Click(TObject *Sender)
{();
}
//---------------------------------------------------------------------------
__fastcall
TFormSclad::BitBtn3Click(TObject *Sender)
{();
}
//---------------------------------------------------------------------------
__fastcall
TFormSclad::Button14Click(TObject *Sender)
{(IBQuery4->FieldByName("id")->AsInteger==0)
ShowMessage("+эЇюЁьрЎшш
ю
яЁюфрцрї
эхЄ!!!");
{if (Application->MessageBox("-_
фхщёЄтшЄхы№эю
їюЄшЄх
єфрышЄ№
чряшё№?",
"-юфЄтхЁцфхэшх",
MB_YESNO +
MB_ICONQUESTION)==IDNO);id=IBQuery4->FieldByName("id")->AsInteger;->SQL->Clear();->SQL->Add("delete
from Sales where id="+IntToStr(id));->ExecSQL();
->SQL->Clear();->SQL->Add("select
* from Sales");->Open();
}
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::BitBtn1Click(TObject *Sender)
{(IBQuery2->FieldByName("id")->AsInteger==0)
ShowMessage("+ яЁюфртрЄ№-Єю
эхўхую,
ёъырф
яєёЄющ!!!");
{>ComboBox1->Clear();>Edit3->Clear();col=IBQuery2->FieldByName("PACK_AMOUNT")->AsInteger;(int
i=1;i<=col;i++)
FormSales->ComboBox1->Items->Add(i);>ComboBox1->ItemIndex=0;>Edit1->Text=IBQuery1->FieldByName("NAME")->AsString;>Edit2->Text=IBQuery3->FieldByName("NAME")->AsString;>ShowModal();
}
}
//---------------------------------------------------------------------------
__fastcall
TFormSclad::BitBtn4Click(TObject *Sender)
{(IBQuery4->FieldByName("id")->AsInteger==0)
ShowMessage("+эЇюЁьрЎшш
ю
яЁюфрцрї
эхЄ!!!");
{>QRLabel3->Caption=DBEdit15->Text;>QRLabel5->Caption=DBEdit14->Text;>QRLabel7->Caption=IBQuery4->FieldByName("AMOUNT")->AsString;>QRLabel11->Caption=(IBQuery4->FieldByName("ALL_COST")->AsInteger)/((IBQuery4->FieldByName("COST")->AsInteger)*(IBQuery4->FieldByName("AMOUNT")->AsInteger));>QRLabel13->Caption=IBQuery4->FieldByName("COST")->AsString;>QRLabel16->Caption=IBQuery4->FieldByName("ALL_COST")->AsString;>QRLabel20->Caption=IBQuery4->FieldByName("SALE_DATE")->AsString;
>QuickRep1->Preview();
}
}
//---------------------------------------------------------------------------
void __fastcall
TFormSclad::Button11Click(TObject *Sender)
{(IBQuery4->FieldByName("id")->AsInteger==0)
ShowMessage("+эЇюЁьрЎшш
ю
яЁюфрцрї
эхЄ!!!");
{idw=IBQuery4->FieldByName("id_warhouses")->AsInteger;idb=IBQuery4->FieldByName("id_book")->AsInteger;s_pa=IBQuery4->FieldByName("amount")->AsInteger;ia=IBQuery4->FieldByName("all_cost")->AsInteger/(IBQuery4->FieldByName("cost")->AsInteger*s_pa);;->SQL->Clear();->SQL->Add("select
* from Presences where id_warhouses="+IntToStr(idw)+" and
id_book="+IntToStr(idb));->Open();ids=IBQuery2->FieldByName("id")->AsInteger;pa=IBQuery2->FieldByName("PACK_AMOUNT")->AsInteger;
(ids!=0)
{->SQL->Clear();->SQL->Add("update
Presences Set PACK_AMOUNT=" +IntToStr(pa+s_pa)+ " where
id="+IntToStr(ids));->ExecSQL();
}
{flag_close=true;->SQL->Clear();{->SQL->Add("insert
into Presences (PACK_AMOUNT, ITEM_AMOUNT, ID_WARHOUSES, ID_BOOK) values ("
+IntToStr(s_pa)+", "+IntToStr(ia)+",
" +(idw)+ ", "+IntToStr(idb)+ ")");->ExecSQL();
}(...) {>MessageBox("-хтхЁэю
ттхфхэ_
фрээ_х",
"+°шсър",
MB_OK + MB_ICONSTOP);_close=false;
}
}->SQL->Clear();->SQL->Add("select
* from PRESENCES P where(P. ID_WARHOUSES=:ID_WARHOUSES)");->Open();
id=IBQuery4->FieldByName("id")->AsInteger;->SQL->Clear();->SQL->Add("delete
from Sales where id="+IntToStr(id));->ExecSQL();
->SQL->Clear();->SQL->Add("select
* from Sales");->Open();
}
}
//---------------------------------------------------------------------------
Редактирование таблицы
«Склады»(Sclad_red.cpp)
#include <vcl.h>
#pragma hdrstop
#include "Sclad_Red.h"
#include "Sclad_unit.h"
//---------------------------------------------------------------------------
#pragma resource
"*.dfm"*FormScRed;
//---------------------------------------------------------------------------
__fastcall
TFormScRed::TFormScRed(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall
TFormScRed::Button2Click(TObject *Sender)
{();
}
//---------------------------------------------------------------------------__fastcall
TFormScRed::Button1Click(TObject *Sender)
{id;((Edit2->Text=="")||(Edit3->Text=="")||(Edit5->Text=="")||(StrLen(Edit2->Text.c_str())>=30)||(StrLen(Edit3->Text.c_str())>=40)||(StrLen(Edit4->Text.c_str())>=15)||(StrLen(Edit5->Text.c_str())>=30))
ShowMessage("Неправильно
введены
данные");
{(FormSclad->k==1)
{flag_close=true;>IBQuery1->SQL->Clear();{>IBQuery1->SQL->Add("insert
into Warhouses (NAME, ADDRESS, PHONE, MANAGER) values ('" +->Text +
"', '"+Edit3->Text + "', '" +->Text + "',
'"+Edit5->Text + "')");>IBQuery1->ExecSQL();
}(...) {>MessageBox("Неверно
введены
данные",
"Ошибка",
MB_OK + MB_ICONSTOP);_close=false;
}>IBQuery1->SQL->Clear();>IBQuery1->SQL->Add("select
* from WARHOUSES order by NAME");>IBQuery1->Open();(flag_close)
FormScRed->Close();
}(FormSclad->k==3)
{(Application->MessageBox("Вы
действительно
хотите
удалить
запись?",
"Подтверждение",
MB_YESNO +
MB_ICONQUESTION)==IDNO);=StrToInt(Edit1->Text);>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("delete
from Presences where
id_warhouses="+IntToStr(id));>IBQuery2->ExecSQL();
>IBQuery4->SQL->Clear();>IBQuery4->SQL->Add("delete
from Sales where id_warhouses="+IntToStr(id));>IBQuery4->ExecSQL();
>IBQuery1->SQL->Clear();>IBQuery1->SQL->Add("delete
from Warhouses where
id_warhouses="+IntToStr(id));>IBQuery1->ExecSQL();
>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from Presences where
id_warhouses=:id_warhouses");>IBQuery2->Open();>IBQuery4->SQL->Clear();>IBQuery4->SQL->Add("select
* from SALES");>IBQuery4->Open();>IBQuery1->SQL->Clear();>IBQuery1->SQL->Add("select
* from Warhouses order by NAME");>IBQuery1->Open();>Close();
}(FormSclad->k==2)
{
idt=FormSclad->IBQuery1->FieldByName("id_warhouses")->AsInteger;flag_close=true;>IBQuery1->SQL->Clear();{>IBQuery1->SQL->Add("update
Warhouses Set NAME='" + Edit2->Text + "', ADDRESS= '" +->Text
+ "', PHONE= '" +->Text + "',MANAGER='" +
Edit5->Text+ "' where
id_warhouses="+IntToStr(idt));>IBQuery1->ExecSQL();
}(...) {>MessageBox("Неверно
введены
данные",
"Ошибка",
MB_OK + MB_ICONSTOP);_close=false;
}>IBQuery1->SQL->Clear();>IBQuery1->SQL->Add("select
* from WARHOUSES order by NAME");>IBQuery1->Open();(flag_close)
FormScRed->Close();
}
}
}
//---------------------------------------------------------------------------__fastcall
TFormScRed::Edit4KeyPress(TObject *Sender, char &Key)
{((Key<'0')||(Key>'9'))
{Key=0;Beep();}
}
//---------------------------------------------------------------------------
Редактирование таблицы «Наличие на
складе»(Nal_red.cpp)
#include <vcl.h>
#pragma hdrstop
#include "Nal_Red.h"
#include "Sclad_unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource
"*.dfm"*FormBkRed;
//---------------------------------------------------------------------------
__fastcall TFormBkRed::TFormBkRed(TComponent*
Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall
TFormBkRed::Button2Click(TObject *Sender)
{();
}
//---------------------------------------------------------------------------__fastcall
TFormBkRed::Button1Click(TObject *Sender)
{id;((Edit2->Text=="")||(Edit3->Text=="")||(Edit4->Text=="")||(Edit6->Text==""))
ShowMessage("Неправильно
введены
данные");
{(FormSclad->k==1)
{flag_close=true;->ItemIndex=ComboBox1->ItemIndex;>IBQuery2->SQL->Clear();{>IBQuery2->SQL->Add("insert
into Presences (PACK_AMOUNT, ITEM_AMOUNT, ID_WARHOUSES, ID_BOOK) values ("
+Edit2->Text+",
"+Edit3->Text+", " +->Text + ",
"+ComboBox2->Text+ ")");>IBQuery2->ExecSQL();
}(...) {>MessageBox("Неверно
введены
данные",
"Ошибка",
MB_OK + MB_ICONSTOP);_close=false;
}>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from PRESENCES P where(P.
ID_WARHOUSES=:ID_WARHOUSES)");>IBQuery2->Open();(flag_close)
FormBkRed->Close();
}
(FormSclad->k==2)
{idt=FormSclad->IBQuery2->FieldByName("id")->AsInteger;flag_close=true;>IBQuery2->SQL->Clear();{>IBQuery2->SQL->Add("update
Presences Set PACK_AMOUNT=" + Edit2->Text+ ", ITEM_AMOUNT= "
+->Text+ " where id="+IntToStr(idt));>IBQuery2->ExecSQL();
}(...) {>MessageBox("Неверно
введены
данные",
"Ошибка",
MB_OK + MB_ICONSTOP);_close=false;
}>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from PRESENCES P where(P.
ID_WARHOUSES=:ID_WARHOUSES)");>IBQuery2->Open();(flag_close)
FormBkRed->Close();
}
}(FormSclad->k==3)
{(Application->MessageBox("Вы
действительно
хотите
удалить
запись?",
"Подтверждение",
MB_YESNO +
MB_ICONQUESTION)==IDNO);=StrToInt(Edit1->Text);>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("delete
from Presences where id="+IntToStr(id));>IBQuery2->ExecSQL();
>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from PRESENCES P where(P.
ID_WARHOUSES=:ID_WARHOUSES)");>IBQuery2->Open();>Close();
}
}
//---------------------------------------------------------------------------
__fastcall
TFormBkRed::Edit2KeyPress(TObject *Sender, char &Key)
{((Key<'0')||(Key>'9'))
{Key=0;Beep();}
}
//---------------------------------------------------------------------------
__fastcall
TFormBkRed::Edit3KeyPress(TObject *Sender, char &Key)
{((Key<'0')||(Key>'9'))
{Key=0;Beep();}
}
//---------------------------
Редактирование таблицы «Книги»(Book_red.cpp)
#include <vcl.h>
#pragma hdrstop
#include "Book_Red.h"
#include "Sclad_unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource
"*.dfm"*FormKnRed;
//---------------------------------------------------------------------------
__fastcall
TFormKnRed::TFormKnRed(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall
TFormKnRed::Button2Click(TObject *Sender)
{>IBQuery3->SQL->Clear();>IBQuery3->SQL->Add("select
* from BOOKS B where(B.ID_BOOK=:ID_BOOK)");>IBQuery3->Open();();
}
//---------------------------------------------------------------------------__fastcall
TFormKnRed::Button1Click(TObject *Sender)
{id;
(FormSclad->k==3)
{(Application->MessageBox("Вы
действительно
хотите
удалить
запись?",
"Подтверждение",
MB_YESNO + MB_ICONQUESTION)==IDNO);->ItemIndex=ComboBox1->ItemIndex;=StrToInt(ComboBox2->Text);
>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from Presences where
id_book="+IntToStr(id));>IBQuery2->Open();(FormSclad->IBQuery2->FieldByName("id")->AsInteger!=0)
{("Данную книгу нельзя удалить,\nтак как
она имеется на складах!!!");
FormSclad->IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from PRESENCES P where(P.
ID_WARHOUSES=:ID_WARHOUSES)");>IBQuery2->Open();>IBQuery3->SQL->Clear();>IBQuery3->SQL->Add("select
* from BOOKS B where(B.ID_BOOK=:ID_BOOK)");>IBQuery3->Close();>IBQuery3->Open();
}
{>IBQuery3->SQL->Clear();>IBQuery3->SQL->Add("delete
from Books where id_book="+IntToStr(id));>IBQuery3->ExecSQL();
>IBQuery3->SQL->Clear();>IBQuery3->SQL->Add("select
* from BOOKS B where(B.ID_BOOK=:ID_BOOK)");>IBQuery3->Close();>IBQuery3->Open();>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from PRESENCES P where(P.
ID_WARHOUSES=:ID_WARHOUSES)");>IBQuery2->Open();
}>Close();
}((FormSclad->k==1)||(FormSclad->k==2))
{((Edit2->Text=="")||(Edit3->Text=="")||(Edit4->Text=="")||
(Edit5->Text=="")||(Edit6->Text=="")||(Edit7->Text=="")||(Edit8->Text=="")||
(StrLen(Edit2->Text.c_str())>=30)||(StrLen(Edit3->Text.c_str())>=30)||
(StrLen(Edit4->Text.c_str())>=40)||(StrLen(Edit7->Text.c_str())>=30)||
(StrLen(Edit5->Text.c_str())>4)||(StrLen(Edit8->Text.c_str())>4))
ShowMessage("Неправильно
введены
данные");
{(FormSclad->k==1)
{flag_close=true;>IBQuery3->SQL->Clear();{>IBQuery3->SQL->Add("insert
into BOOKS (NAME, AUTHOR, PUBLISHER, YEAR, CIRCUATION, KNOWLEDGE,COST) values
('" +->Text + "', '"+Edit3->Text + "', '"
+->Text + "', "+Edit5->Text + ","+Edit6->Text
+", '"+Edit7->Text + "',"+Edit8->Text
+")");>IBQuery3->ExecSQL();
}(...) {>MessageBox("Неверно
введены
данные",
"Ошибка",
MB_OK + MB_ICONSTOP);_close=false;
}>IBQuery3->SQL->Clear();>IBQuery3->SQL->Add("select
* from BOOKS B
where(B.ID_BOOK=:ID_BOOK)");>IBQuery3->Close();>IBQuery3->Open();(flag_close)
FormKnRed->Close();
}
(FormSclad->k==2)
{
idt=FormSclad->IBQuery3->FieldByName("id_book")->AsInteger;flag_close=true;>IBQuery3->SQL->Clear();{>IBQuery3->SQL->Add("update
Books Set NAME='" + Edit2->Text + "', AUTHOR= '" +->Text +
"', PUBLISHER= '" +->Text + "',YEAR=" + Edit5->Text+
",CIRCUATION=" + Edit6->Text+ ",KNOWLEDGE='" +
Edit7->Text+ "',COST="+ Edit8->Text+" where
id_book="+IntToStr(idt));>IBQuery3->ExecSQL();
}(...) {>MessageBox("Неверно
введены
данные",
"Ошибка",
MB_OK + MB_ICONSTOP);_close=false;
}>IBQuery3->SQL->Clear();>IBQuery3->SQL->Add("select
* from BOOKS B
where(B.ID_BOOK=:ID_BOOK)");>IBQuery3->Close();>IBQuery3->Open();(flag_close)
FormKnRed->Close();
}
}
}
}
//---------------------------------------------------------------------------
__fastcall TFormKnRed::Edit5KeyPress(TObject
*Sender, char &Key)
{((Key<'0')||(Key>'9'))
{Key=0;Beep();}
}
//---------------------------------------------------------------------------
__fastcall
TFormKnRed::Edit6KeyPress(TObject *Sender, char &Key)
{((Key<'0')||(Key>'9'))
{Key=0;Beep();}
}
//---------------------------------------------------------------------------
__fastcall
TFormKnRed::Edit8KeyPress(TObject *Sender, char &Key)
{((Key<'0')||(Key>'9'))
{Key=0;Beep();}
}
//---------------------------------------------------------------------------
__fastcall
TFormKnRed::ComboBox1Change(TObject *Sender)
{->ItemIndex=ComboBox1->ItemIndex;id=StrToInt(ComboBox2->Text);>IBQuery3->SQL->Clear();>IBQuery3->SQL->Add("select
* from BOOKS where
id_book="+IntToStr(id));>IBQuery3->Open();->Text=FormSclad->IBQuery3->FieldByName("NAME")->AsString;->Text=FormSclad->IBQuery3->FieldByName("AUTHOR")->AsString;->Text=FormSclad->IBQuery3->FieldByName("PUBLISHER")->AsString;->Text=FormSclad->IBQuery3->FieldByName("YEAR")->AsInteger;->Text=FormSclad->IBQuery3->FieldByName("CIRCUATION")->AsInteger;->Text=FormSclad->IBQuery3->FieldByName("KNOWLEDGE")->AsString;->Text=FormSclad->IBQuery3->FieldByName("COST")->AsInteger;
}
//---------------------------------------------------------------------------
Редактирование таблицы «Продажи»(Sales.cpp)
#include <vcl.h>
#pragma hdrstop
#include "Sales.h"
#include "Sclad_unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource
"*.dfm"*FormSales;
//---------------------------------------------------------------------------
__fastcall
TFormSales::TFormSales(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall
TFormSales::Button2Click(TObject *Sender)
{();
}
//---------------------------------------------------------------------------
__fastcall
TFormSales::Button1Click(TObject *Sender)
{(StrLen(Edit3->Text.c_str())>5)
ShowMessage("Слишком
уж,
Вы,
цену
загибаете!!!");
if (Edit3->Text=="")
ShowMessage("Бесплатно-то зачем отдавать!!!");
if
((StrLen(Edit3->Text.c_str())<=5)&&(Edit3->Text!=""))
{flag_close=true;all=StrToInt(ComboBox1->Text)*(FormSclad->IBQuery2->FieldByName("ITEM_AMOUNT")->AsInteger)*StrToInt(Edit3->Text);>IBQuery4->SQL->Clear();{>IBQuery4->SQL->Add("insert
into Sales (SALE_DATE, COST, AMOUNT,ALL_COST, ID_WARHOUSES, ID_BOOK) values
('" +(DateTimePicker1->Date)+ "', "+Edit3->Text + ",
" +->Text + ","+all+","+
FormSclad->IBQuery1->FieldByName("id_warhouses")->AsInteger
+
","+FormSclad->IBQuery3->FieldByName("id_book")->AsInteger+
")");>IBQuery4->ExecSQL();
}(...) {>MessageBox("Неверно
введены
данные",
"Ошибка",
MB_OK + MB_ICONSTOP);_close=false;
}>IBQuery4->SQL->Clear();>IBQuery4->SQL->Add("select
* from SALES");>IBQuery4->Open();
pi=FormSclad->IBQuery2->FieldByName("PACK_AMOUNT")->AsInteger;=pi-StrToInt(ComboBox1->Text);(pi==0)
{id=FormSclad->IBQuery2->FieldByName("id")->AsInteger;>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("delete
from Presences where id="+IntToStr(id));>IBQuery2->ExecSQL();
>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from PRESENCES P where(P.
ID_WARHOUSES=:ID_WARHOUSES)");>IBQuery2->Open();
}
{idt=FormSclad->IBQuery2->FieldByName("id")->AsInteger;flag_close=true;>IBQuery2->SQL->Clear();{>IBQuery2->SQL->Add("update
Presences Set PACK_AMOUNT=" + IntToStr(pi)+ "where
id="+IntToStr(idt));>IBQuery2->ExecSQL();
}(...) {>MessageBox("Неверно
введены
данные",
"Ошибка",
MB_OK + MB_ICONSTOP);_close=false;
}>IBQuery2->SQL->Clear();>IBQuery2->SQL->Add("select
* from PRESENCES P where(P.
ID_WARHOUSES=:ID_WARHOUSES)");>IBQuery2->Open();
}(flag_close) FormSales->Close();
}
}
//---------------------------------------------------------------------------
__fastcall
TFormSales::Edit3KeyPress(TObject *Sender, char &Key)
{((Key<'0')||(Key>'9'))
{Key=0;Beep();}
}
//---------------------------------------------------------------------------
Поиск книг
(FindBook.cpp)
#include <vcl.h>
#pragma hdrstop
#include "FindBook.h"
#include "Sclad_unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource
"*.dfm"*FormFind;
//---------------------------------------------------------------------------
__fastcall
TFormFind::TFormFind(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------__fastcall
TFormFind::Button1Click(TObject *Sender)
{(ComboBox1->ItemIndex==0)
{IBQuery1->SQL->Clear();->SQL->Add("select
* from BOOKS where AUTHOR='"+Edit1->Text+"'order by NAME");
->Open();
}(ComboBox1->ItemIndex==1)
{IBQuery1->SQL->Clear();->SQL->Add("select
* from BOOKS where PUBLISHER='"+Edit1->Text+"'order by
NAME");->Open();
}(ComboBox1->ItemIndex==2)
{IBQuery1->SQL->Clear();->SQL->Add("select
* from BOOKS where KNOWLEDGE='"+Edit1->Text+"'order by
NAME");->Open();
}
}
//---------------------------------------------------------------------------
__fastcall
TFormFind::Button2Click(TObject *Sender)
{->SQL->Clear();->SQL->Add("select
* from BOOKS order by NAME");->Open();
}
//---------------------------------------------------------------------------
__fastcall
TFormFind::Button3Click(TObject *Sender)
{();
}
//---------------------------------------------------------------------------