Приложение, позволяющее быстро и просто анализировать содержание книжных складов
Требования к данным Склады Организация имеет в наличии некоторое кол-во складов, которое может с течением времени изменяться (постройка нового склада, снос старого). Здесь содержатся данные о месте нахождения склада (адрес), телефон склада, его наименование и информация о главном менеджере склада. Было спроектировано и разработано приложение, позволяющее быстро и просто анализировать содержание… Читать ещё >
Приложение, позволяющее быстро и просто анализировать содержание книжных складов (реферат, курсовая, диплом, контрольная)
ВВЕДЕНИЕ
Каждая организация, занимающаяся хранением и продажей какой-либо продукции, оперирует с большим объемом информации, касающейся конкретным видом деятельности. Возьмем, к примеру, сеть книжных складов. Здесь наиболее важной информацией для организаторов является информация о наличии видов товаров на складах и хронология их продаж. Для того, чтобы эти данные было легко хранить, обрабатывать, просматривать и исследовать возникает необходимость в создании программы, которая позволит выполнять все вышеуказанные действия над информацией в форме, удобной и понятной пользователю.
Данная работа состоит из четырех частей. Первая часть работы посвящена выбору и конкретизации предметной области.
Во второй части необходимая для автоматизируемой технологии обработки данных информация формализуется в инфологической модели.
В третьей части на основе инфологической модели разрабатывается даталогическая модель БД, конкретизированная для используемых вида и версии СУБД.
Четвертая часть — функциональное проектирование: описывается набор операций, необходимых для автоматизируемой технологии обработки данных, форма и способ их выполнения пользователем. Приводится описание интерфейса программы.
1. ОПИСАНИЕ ПРЕДМЕТНОЙ ОБЛАСТИ Функцией этого приложения является хранение информации о книжных складах, о наличии на них различных видов книг, о продажах, произведенных с данных складов и составления сметы на покупку товара. Потенциальные пользователи приложения — менеджеры по продажам книг с книжных складов и люди, которые занимаются закупкой товара (книг). Бланк заказа на покупку является выходным документом данного приложения, в котором указываются наименование выбранной покупателем книги, кол-во, цена и данное о складе, с которого был продан товар.
Задачей персонала, занимающегося пополнением склада, является внесение информации в базу данных о закупленных книгах. Менеджер по продажам должен вносить данные о проданных товарах и получать от программы бланк заказа.
Ниже приводится описание данных, которые собираются, сопровождаются и используются для обеспечения нормального производственного процесса.
1.1 Требования к данным Склады Организация имеет в наличии некоторое кол-во складов, которое может с течением времени изменяться (постройка нового склада, снос старого). Здесь содержатся данные о месте нахождения склада (адрес), телефон склада, его наименование и информация о главном менеджере склада.
Книги Этот справочник содержит данные о книгах, с которыми будут оперировать склады. В этой категории хранится информация об авторе, издательстве, тираже, цене книги.
Наличие на складе Здесь хранится информация о количестве упаковок и количестве книг в одной упаковке для каждой имеющейся на определенном складе книги.
Продажи После выбора покупателем книги составляется бланк заказа и вносится информация о дате продажи, о проданной книге, о выручке и т. д.
1.2 Требования к транзакциям Ниже перечислены транзакции, включающие обработку данных, необходимую для исполнения повседневных обязанностей. Каждая транзакция связана с конкретными функциями.
Транзакция А. Создание и сопровождение записей со сведениями о складах.
Транзакция B. Создание и сопровождение записей со сведениями о книгах.
Транзакция C. Создание и сопровождение записей со сведениями о наличии на складах.
Транзакция D. Создание и сопровождение записей со сведениями о продажах.
Транзакция Е. Подготовить выручку от реализации товара за день, месяц.
Транзакция F. Создание и вывод на принтер бланка заказа на приобретение книги.
Транзакция G. Поиск конкретной книги, конкретного автора.
2. ИНФОЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ
2.1 Определение сущностей и их атрибутов Исходя из представленных в описании предметной области данных, требуемых для автоматизации операций моделируемой системы согласно теории построения ER-моделей можно выделить ряд необходимых сущностей вместе с их атрибутами.
Рассмотрим выделенные сущности вместе с их атрибутами:
данные о складах название склада адрес
телефон ФИО директора данные о книгах название книги автор издательство год выпуска тираж область знаний цена издательства наличие на складе номер записи количество упаковок количество экземпляров в упаковке номер книги номер склада информация о продажах номер продажи дата продажи отпускная цена за экземпляр количество упаковок общая стоимость номер книги номер склада Как видим, в каждой таблице значения первичных ключей будут иметь довольно большую длину (до 50 символов), что может привести к неоправданному увеличению объема информационной базы и замедлению работы при связывании таблиц. Поэтому введем в каждую таблицу поле «ID», которое будет являться первичным ключом и уникально идентифицировать каждую запись таблицы. Это позволит снять требования уникальности с полей «Название», что отразится при задании ограничений целостности.
2.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» в сущности «Книги».
2.3 Схема связей между сущностями Рисунок 1- Схема связей между сущностями
2.4 Предполагаемые информационные запросы Строятся запросы, формы и отчеты, позволяющие получать следующую информацию:
какие книги по конкретной тематике имеются на складе подготовить бланк заказа на приобретение конкретной книги какие книги конкретного автора имеются на складе подготовить выручку от реализации за день, месяц.
просмотр данных о складах просмотр данных о книгах просмотр данных о наличии на складе просмотр данных о продажах
3. ДАТАЛОГИЧЕСКОЕ ПРОЕКТИРОВАНИЕ
3.1 Получение начальной модели После того как была разработана инфологическая модель предметной области, можно приступать к построению даталогической модели применительно к конкретной СУБД (InterBase 5.6).
Для реляционной базы данных проектирование логической структуры (или даталогическое проектирование) заключается в том, чтобы разбить всю информацию по файлам (или в терминах реляционной модели — по отношениям), а также определить состав полей (в терминах реляционной модели — атрибутов) для каждого из этих файлов.
Для перехода от инфологической модели к даталогической воспользуемся методологией, подробно описанной в.
1. На начальной стадии построения сущности инфологической модели будут представлены в виде отношений, причем атрибуты сущностей будут являться их полями, а ограничения целостности — форматами полей.
Соответственно, каждая сущность инфомодели будет представлена в виде отдельной таблицы с уникальным первичным ключом «ID».
2. При наличии связи М: М согласно методологии следует ввести дополнительное отношение, содержащее идентификаторы связываемых объектов. Все связи в проектируемой модели 1: M
3.2 Нормализация отношений Теперь после получения начальной даталогической модели проведем ее нормализацию по правилам, указанным в.
1. Таблица находится в первой нормальной форме (1НФ) тогда и только тогда, когда ни одна из ее строк не содержит в любом своем поле более одного значения и ни одно из ее ключевых полей не пусто.
Все таблицы разработанной БД соответствуют этому определению.
2. Таблица находится во второй нормальной форме (2НФ), если она удовлетворяет определению 1НФ и все ее поля, не входящие в первичный ключ, связаны полной функциональной зависимостью с первичным ключом.
Так как во всех таблицах первичным ключом является «безликий» ID, то все таблицы разработанной БД соответствуют этому определению.
3. Таблица находится в третьей нормальной форме (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;
CREATE GENERATOR Presences_ID;
CREATE GENERATOR Books_ID;
CREATE GENERATOR Sales_ID;
SET GENERATOR Warhouses_ID TO 0;
SET GENERATOR Presences_ID TO 0;
SET GENERATOR Books_ID TO 0;
SET GENERATOR Sales_ID TO 0;
CREATE TABLE Warhouses (
id_warhousesINTEGER NOT NULL Primary Key,
name VARCHAR (30) NOT NULL,
addressVARCHAR (40) NOT NULL,
phoneVARCHAR (15),
managerVARCHAR (30) NOT NULL
);
SET TERM !! ;
CREATE TRIGGER SET_Warhouses_ID FOR Warhouses
BEFORE INSERT AS
BEGIN
NEW.id_warhouses = GEN_ID (Warhouses_ID, 1);
END !!
SET TERM; !!
CREATE TABLE Books (
id_bookINTEGER NOT NULL Primary Key,
nameVARCHAR (30) NOT NULL,
authorVARCHAR (30) NOT NULL,
publisherVARCHAR (40) NOT NULL,
yearDECIMAL (4,0) NOT NULL,
circuationINTEGER NOT NULL,
knowledgeVARCHAR (30) NOT NULL,
costDECIMAL (5,2) NOT NULL
);
SET TERM !! ;
CREATE TRIGGER SET_Books_ID FOR Books
BEFORE INSERT AS
BEGIN
NEW.id_book = GEN_ID (Books_ID, 1);
END !!
SET TERM; !!
CREATE TABLE Presences (
idINTEGER NOT NULL Primary Key,
pack_amountINTEGER NOT NULL,
item_amountINTEGER NOT NULL,
id_warhousesINTEGER REFERENCES Warhouses (id_warhouses) ON UPDATE CASCADE ON DELETE SET NULL,
id_bookINTEGER REFERENCES Books (id_book) ON UPDATE CASCADE ON DELETE SET NULL
);
SET TERM !! ;
CREATE TRIGGER SET_Presences_ID FOR Presences
BEFORE INSERT AS
BEGIN
NEW.id = GEN_ID (Presences_ID, 1);
END !!
SET TERM; !!
CREATE TABLE Sales (
idINTEGER NOT NULL Primary Key,
sale_dateDATE NOT NULL,
costDECIMAL (5,2) NOT NULL,
amountINTEGER NOT NULL,
all_costINTEGER NOT NULL,
id_warhousesINTEGER REFERENCES Warhouses (id_warhouses) ON UPDATE CASCADE ON DELETE SET NULL,
id_bookINTEGER REFERENCES Books (id_book) ON UPDATE CASCADE ON DELETE SET NULL
);
SET TERM !! ;
CREATE TRIGGER SET_Sales_ID FOR Sales
BEFORE INSERT AS
BEGIN
NEW.id = GEN_ID (Sales_ID, 1);
END !!
SET TERM; !!
INSERT INTO Books
VALUES (1, «Горе от ума», «Грибоедов», «Русская литература», 1985,10 000," Литература", 120);
INSERT INTO Books
VALUES (2, «Ромео и Джульетта», «Шекспир», «Мир», 1993,15 000," Литература", 185);
INSERT INTO Books
VALUES (3, «Анатомия человека», «Березин, Феофанов», «Учебная литература», 2001,3500," Биология", 75.30);
INSERT INTO Books
VALUES (4, «Учебник по Физике», «Мякишев», «Ключ», 2003,32 000," Физика", 99.99);
INSERT INTO Warhouses
VALUES (1," Склад на холме" ," г. Киров, ул. Ленина-26″ ," 537 823″, «Усков М.Ю.»);
INSERT INTO Warhouses
VALUES (2," Большой склад" ," г. Слободской, ул. Короленко-3″ ," 273 055″, «Альгина Н.П.»);
INSERT INTO Warhouses
VALUES (3," Главный склад" ," г. Киров, ул. Пугачева-9″ ," 560 019″, «Шихова Е.Г.»);
INSERT INTO Presences
VALUES (1,27,50,1,1);
INSERT INTO Presences
VALUES (2,12,50,1,2);
INSERT INTO Presences
VALUES (3,56,50,1,4);
INSERT INTO Presences
VALUES (4,53,20,2,1);
INSERT INTO Presences
VALUES (5,8,35,2,4);
INSERT INTO Presences
VALUES (6,16,8,3,2);
INSERT INTO Presences
VALUES (7,28,36,3,3);
INSERT INTO Presences
VALUES (8,37,45,3,4);
INSERT INTO Sales
VALUES (1,'6/6/2003', 130,87,25 000,1,3);
INSERT INTO Sales
VALUES (2,'8/25/2003', 59,36,32 500,2,4);
INSERT INTO Sales
VALUES (3,'11/7/2003', 150,21,5637,1,1);
INSERT INTO Sales
VALUES (4,'3/30/2003', 80.56,56,31 000,3,2);
INSERT INTO Sales
VALUES (5,'6/15/2004', 96.78,46,10 000,3,1);
COMMIT;
ПРИЛОЖЕНИЕ Б (обязательное) Листинги основных функций Работа с БД (sclad_unit.cpp)
#include
#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»
TFormSclad *FormSclad;
//—————————————————————————————————————;
__fastcall TFormSclad: TFormSclad (TComponent* Owner)
: TForm (Owner)
{
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button4Click (TObject *Sender)
{
Edit1->Clear ();
int sum=0;
try{
IBQuery4->SQL->Clear ();
IBQuery4->SQL->Add («Select * from Sales where SALE_Date between '» +DateToStr (DateTimePicker1->Date)+" ' AND '" +DateToStr (DateTimePicker2->Date)+" '");
IBQuery4->Open ();
}
catch (…) {
Application->MessageBox («-хтхЁэю ттхфхэ_ фрээ_х», «+°шсър», MB_OK + MB_ICONSTOP);}
while (!IBQuery4->Eof)
{
sum=sum+IBQuery4->FieldByName («ALL_COST»)->AsInteger;
IBQuery4->Next ();
}
IBQuery4->SQL->Clear ();
IBQuery4->SQL->Add («Select * from Sales»);
IBQuery4->Open ();
Edit1->Text=sum;
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button1Click (TObject *Sender)
{
FormScRed->Caption="-юсртыхэшх" ;
FormScRed->GroupBox1->Caption="-юсртыхэшх шэЇюЁьрЎшш ю ёъырфх" ;
k=1;
FormScRed->Edit1->Visible=false;
FormScRed->Label1->Visible=false;
FormScRed->Edit1->Clear ();
FormScRed->Edit2->Clear ();
FormScRed->Edit3->Clear ();
FormScRed->Edit4->Clear ();
FormScRed->Edit5->Clear ();
FormScRed->Edit2->Enabled=true;
FormScRed->Edit3->Enabled=true;
FormScRed->Edit4->Enabled=true;
FormScRed->Edit5->Enabled=true;
FormScRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button2Click (TObject *Sender)
{
if (IBQuery1->FieldByName («id_warhouses»)->AsInteger==0) return;
k=2;
int id=IBQuery1->FieldByName («ID_WARHOUSES»)->AsInteger;
FormScRed->Edit1->Text=IntToStr (id);
FormScRed->Edit2->Text=IBQuery1->FieldByName («NAME»)->AsString;
FormScRed->Edit3->Text=IBQuery1->FieldByName («ADDRESS»)->AsString;
FormScRed->Edit4->Text=IBQuery1->FieldByName («PHONE»)->AsString;
FormScRed->Edit5->Text=IBQuery1->FieldByName («MANAGER»)->AsString;
FormScRed->Edit1->Enabled=false;
FormScRed->Edit1->Visible=true;
FormScRed->Label1->Visible=true;
FormScRed->Edit2->Enabled=true;
FormScRed->Edit3->Enabled=true;
FormScRed->Edit4->Enabled=true;
FormScRed->Edit5->Enabled=true;
FormScRed->Caption="+чьхэхэшх" ;
FormScRed->GroupBox1->Caption="+чьхэхэшх шэЇюЁьрЎшш ю ёъырфх" ;
FormScRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button3Click (TObject *Sender)
{
if (IBQuery1->FieldByName («id_warhouses»)->AsInteger==0) return;
k=3;
int id=IBQuery1->FieldByName («ID_WARHOUSES»)->AsInteger;
FormScRed->Edit1->Text=IntToStr (id);
FormScRed->Edit2->Text=IBQuery1->FieldByName («NAME»)->AsString;
FormScRed->Edit3->Text=IBQuery1->FieldByName («ADDRESS»)->AsString;
FormScRed->Edit4->Text=IBQuery1->FieldByName («PHONE»)->AsString;
FormScRed->Edit5->Text=IBQuery1->FieldByName («MANAGER»)->AsString;
FormScRed->Edit1->Enabled=false;
FormScRed->Edit1->Visible=true;
FormScRed->Label1->Visible=true;
FormScRed->Edit2->Enabled=false;
FormScRed->Edit3->Enabled=false;
FormScRed->Edit4->Enabled=false;
FormScRed->Edit5->Enabled=false;
FormScRed->Caption="+фрыхэшх" ;
FormScRed->GroupBox1->Caption="+фрыхэшх шэЇюЁьрЎшш ю ёъырфх" ;
FormScRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button5Click (TObject *Sender)
{
FormBkRed->Caption="-юсртыхэшх" ;
FormScRed->GroupBox1->Caption="-юяюыэхэшх ёъырфр" ;
k=1;
FormBkRed->Edit1->Visible=false;
FormBkRed->Label1->Visible=false;
FormBkRed->Edit1->Clear ();
FormBkRed->Edit2->Clear ();
FormBkRed->Edit3->Clear ();
FormBkRed->Edit2->Enabled=true;
FormBkRed->Edit3->Enabled=true;
FormBkRed->Edit4->Clear ();
FormBkRed->Edit5->Clear ();
FormBkRed->Edit6->Visible=false;
FormBkRed->ComboBox1->Clear ();
FormBkRed->ComboBox2->Clear ();
FormBkRed->ComboBox2->Enabled=true;
FormBkRed->ComboBox1->Enabled=true;
FormBkRed->ComboBox1->Visible=true;
FormBkRed->Edit4->Text=IBQuery1->FieldByName («ID_WARHOUSES»)->AsInteger;
FormBkRed->Edit5->Text=IBQuery1->FieldByName («NAME»)->AsString;
FormBkRed->Edit4->Enabled=false;
FormBkRed->Edit5->Enabled=false;
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add («select * from BOOKS order by NAME»);
IBQuery3->Open ();
while (!IBQuery3->Eof)
{
FormBkRed->ComboBox2->Items->Add (IBQuery3->FieldByName («ID_BOOK»)->AsInteger);
FormBkRed->ComboBox1->Items->Add (IBQuery3->FieldByName («NAME»)->AsString);
IBQuery3->Next ();
}
FormBkRed->ComboBox2->ItemIndex=0;
FormBkRed->ComboBox1->ItemIndex=0;
FormBkRed->Edit6->Text=FormBkRed->ComboBox1->Text;
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add («select * from BOOKS B where (B.ID_BOOK=:ID_BOOK)»);
IBQuery3->Open ();
FormBkRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button6Click (TObject *Sender)
{
if (IBQuery2->FieldByName («id»)->AsInteger==0) return;
//FormBkRed->ComboBox1->Style=TComboBoxStyle (csDropDown);
k=2;
FormBkRed->Edit6->Visible=true;
int id=IBQuery2->FieldByName («id»)->AsInteger;
FormBkRed->Edit1->Text=IntToStr (id);
FormBkRed->ComboBox2->Clear ();
FormBkRed->ComboBox1->Clear ();
FormBkRed->ComboBox1->Visible=false;
FormBkRed->Edit5->Text=IBQuery1->FieldByName («NAME»)->AsString;
FormBkRed->Edit5->Enabled=false;
FormBkRed->Edit2->Text=IBQuery2->FieldByName («PACK_AMOUNT»)->AsInteger;
FormBkRed->Edit3->Text=IBQuery2->FieldByName («ITEM_AMOUNT»)->AsInteger;
FormBkRed->Edit4->Text=IBQuery2->FieldByName («ID_WARHOUSES»)->AsInteger;
FormBkRed->ComboBox2->Text=IBQuery2->FieldByName («ID_BOOK»)->AsInteger;
FormBkRed->Edit6->Text=IBQuery3->FieldByName («NAME»)->AsString;
FormBkRed->ComboBox1->Enabled=false;
FormBkRed->Edit1->Enabled=false;
FormBkRed->Edit1->Visible=true;
FormBkRed->Label1->Visible=true;
FormBkRed->Edit2->Enabled=true;
FormBkRed->Edit3->Enabled=true;
FormBkRed->Edit4->Enabled=true;
FormBkRed->ComboBox2->Enabled=false;
FormBkRed->Caption="+чьхэхэшх" ;
FormBkRed->GroupBox1->Caption="+чьхэхэшх шэЇюЁьрЎшш ю эрышўшш эр ёъырфх" ;
FormBkRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button7Click (TObject *Sender)
{
if (IBQuery2->FieldByName («id»)->AsInteger==0) return;
k=3;
//FormBkRed->ComboBox1->Style=csDropDown;
int id=IBQuery2->FieldByName («id»)->AsInteger;
FormBkRed->ComboBox1->Visible=false;
FormBkRed->Edit6->Visible=true;
FormBkRed->Edit6->Text=IBQuery3->FieldByName («NAME»)->AsString;
FormBkRed->Edit1->Text=IntToStr (id);
FormBkRed->Edit2->Text=IBQuery2->FieldByName («PACK_AMOUNT»)->AsInteger;
FormBkRed->Edit3->Text=IBQuery2->FieldByName («ITEM_AMOUNT»)->AsInteger;
FormBkRed->Edit4->Text=IBQuery2->FieldByName («ID_WARHOUSES»)->AsInteger;
FormBkRed->Edit5->Text=IBQuery1->FieldByName («NAME»)->AsString;
FormBkRed->ComboBox2->Text=IBQuery2->FieldByName («ID_BOOK»)->AsInteger;
FormBkRed->ComboBox1->Text=IBQuery3->FieldByName («NAME»)->AsString;
FormBkRed->Edit1->Enabled=false;
FormBkRed->Edit1->Visible=true;
FormBkRed->Label1->Visible=true;
FormBkRed->Edit2->Enabled=false;
FormBkRed->Edit3->Enabled=false;
FormBkRed->Edit4->Enabled=false;
FormBkRed->Edit5->Enabled=false;
FormBkRed->ComboBox2->Enabled=false;
FormBkRed->ComboBox1->Enabled=false;
FormBkRed->Caption="+фрыхэшх" ;
FormBkRed->GroupBox1->Caption="+ўшёЄър ёъырфр" ;
FormBkRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button8Click (TObject *Sender)
{
FormKnRed->Caption="-юсртыхэшх" ;
FormKnRed->GroupBox1->Caption="-юсртыхэшх ъэшуш" ;
k=1;
FormKnRed->Edit1->Visible=false;
FormKnRed->Label1->Visible=false;
FormKnRed->Edit1->Clear ();
FormKnRed->Edit2->Clear ();
FormKnRed->Edit3->Clear ();
FormKnRed->Edit4->Clear ();
FormKnRed->Edit5->Clear ();
FormKnRed->Edit6->Clear ();
FormKnRed->Edit7->Clear ();
FormKnRed->Edit8->Clear ();
FormKnRed->Edit2->Enabled=true;
FormKnRed->Edit3->Enabled=true;
FormKnRed->Edit4->Enabled=true;
FormKnRed->Edit5->Enabled=true;
FormKnRed->Edit6->Enabled=true;
FormKnRed->Edit7->Enabled=true;
FormKnRed->Edit8->Enabled=true;
FormKnRed->Edit2->Visible=true;
FormKnRed->ComboBox1->Visible=false;
FormKnRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button9Click (TObject *Sender)
{
k=2;
int id=IBQuery3->FieldByName («id_book»)->AsInteger;
FormKnRed->Edit1->Text=IntToStr (id);
FormKnRed->Edit2->Text=IBQuery3->FieldByName («NAME»)->AsString;
FormKnRed->Edit3->Text=IBQuery3->FieldByName («AUTHOR»)->AsString;
FormKnRed->Edit4->Text=IBQuery3->FieldByName («PUBLISHER»)->AsString;
FormKnRed->Edit5->Text=IBQuery3->FieldByName («YEAR»)->AsInteger;
FormKnRed->Edit6->Text=IBQuery3->FieldByName («CIRCUATION»)->AsInteger;
FormKnRed->Edit7->Text=IBQuery3->FieldByName («KNOWLEDGE»)->AsString;
FormKnRed->Edit8->Text=IBQuery3->FieldByName («COST»)->AsInteger;
FormKnRed->Edit1->Enabled=false;
FormKnRed->Edit1->Visible=true;
FormKnRed->Label1->Visible=true;
FormKnRed->Edit2->Enabled=true;
FormKnRed->Edit3->Enabled=true;
FormKnRed->Edit4->Enabled=true;
FormKnRed->Edit5->Enabled=true;
FormKnRed->Edit6->Enabled=true;
FormKnRed->Edit7->Enabled=true;
FormKnRed->Edit8->Enabled=true;
FormKnRed->Edit2->Visible=true;
FormKnRed->ComboBox1->Visible=false;
FormKnRed->Caption="+чьхэхэшх" ;
FormKnRed->GroupBox1->Caption="+чьхэхэшх шэЇюЁьрЎшш ю ъэшух" ;
FormKnRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button10Click (TObject *Sender)
{
k=3;
int id=IBQuery3->FieldByName («id_book»)->AsInteger;
FormKnRed->Edit1->Text=IntToStr (id);
FormKnRed->Edit1->Enabled=false;
FormKnRed->Edit1->Clear ();
FormKnRed->Edit2->Clear ();
FormKnRed->Edit3->Clear ();
FormKnRed->Edit4->Clear ();
FormKnRed->Edit5->Clear ();
FormKnRed->Edit6->Clear ();
FormKnRed->Edit7->Clear ();
FormKnRed->Edit8->Clear ();
FormKnRed->Label1->Visible=true;
FormKnRed->Edit2->Enabled=false;
FormKnRed->Edit3->Enabled=false;
FormKnRed->Edit4->Enabled=false;
FormKnRed->Edit5->Enabled=false;
FormKnRed->Edit6->Enabled=false;
FormKnRed->Edit7->Enabled=false;
FormKnRed->Edit8->Enabled=false;
FormKnRed->Caption="+фрыхэшх" ;
FormKnRed->GroupBox1->Caption="+фрыхэшх шэЇюЁьрЎшш ю ъэшух" ;
FormKnRed->ComboBox1->Clear ();
FormKnRed->ComboBox2->Clear ();
FormKnRed->Edit1->Visible=false;
FormKnRed->Edit2->Visible=false;
FormKnRed->Label1->Visible=false;
FormKnRed->ComboBox1->Visible=true;
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add («select * from BOOKS order by NAME»);
IBQuery3->Open ();
while (!IBQuery3->Eof)
{
FormKnRed->ComboBox2->Items->Add (IBQuery3->FieldByName («ID_BOOK»)->AsInteger);
FormKnRed->ComboBox1->Items->Add (IBQuery3->FieldByName («NAME»)->AsString);
IBQuery3->Next ();
}
FormKnRed->ComboBox1->ItemIndex=0;
FormKnRed->ComboBox2->ItemIndex=0;
id=StrToInt (FormKnRed->ComboBox2->Text);
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add («select * from BOOKS where ID_BOOK="+IntToStr (id));
IBQuery3->Open ();
FormKnRed->Edit2->Text=IBQuery3->FieldByName («NAME»)->AsString;
FormKnRed->Edit3->Text=IBQuery3->FieldByName («AUTHOR»)->AsString;
FormKnRed->Edit4->Text=IBQuery3->FieldByName («PUBLISHER»)->AsString;
FormKnRed->Edit5->Text=IBQuery3->FieldByName («YEAR»)->AsInteger;
FormKnRed->Edit6->Text=IBQuery3->FieldByName («CIRCUATION»)->AsInteger;
FormKnRed->Edit7->Text=IBQuery3->FieldByName («KNOWLEDGE»)->AsString;
FormKnRed->Edit8->Text=IBQuery3->FieldByName («COST»)->AsInteger;
IBQuery3->SQL->Clear ();
IBQuery3->SQL->Add («select * from BOOKS B where (B.ID_BOOK=:ID_BOOK)»);
IBQuery3->Open ();
FormKnRed->ShowModal ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: BitBtn2Click (TObject *Sender)
{
Close ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: BitBtn3Click (TObject *Sender)
{
Close ();
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button14Click (TObject *Sender)
{
if (IBQuery4->FieldByName («id»)->AsInteger==0) ShowMessage («+эЇюЁьрЎшш ю яЁюфрцрї эхЄ!!!»);
else
{if (Application->MessageBox («-_ фхщёЄтшЄхы№эю їюЄшЄх єфрышЄ№ чряшё№?», «-юфЄтхЁцфхэшх», MB_YESNO + MB_ICONQUESTION)==IDNO)
return;
int id=IBQuery4->FieldByName («id»)->AsInteger;
IBQuery4->SQL->Clear ();
IBQuery4->SQL->Add («delete from Sales where id="+IntToStr (id));
IBQuery4->ExecSQL ();
IBQuery4->SQL->Clear ();
IBQuery4->SQL->Add («select * from Sales»);
IBQuery4->Open ();
}
}
//—————————————————————————————————————;
void __fastcall TFormSclad: BitBtn1Click (TObject *Sender)
{
if (IBQuery2->FieldByName («id»)->AsInteger==0) ShowMessage («+ яЁюфртрЄ№-Єю эхўхую, ёъырф яєёЄющ!!!»);
else
{
FormSales->ComboBox1->Clear ();
FormSales->Edit3->Clear ();
int col=IBQuery2->FieldByName («PACK_AMOUNT»)->AsInteger;
for (int i=1;i<=col;i++) FormSales->ComboBox1->Items->Add (i);
FormSales->ComboBox1->ItemIndex=0;
FormSales->Edit1->Text=IBQuery1->FieldByName («NAME»)->AsString;
FormSales->Edit2->Text=IBQuery3->FieldByName («NAME»)->AsString;
FormSales->ShowModal ();
}
}
//—————————————————————————————————————;
void __fastcall TFormSclad: BitBtn4Click (TObject *Sender)
{
if (IBQuery4->FieldByName («id»)->AsInteger==0) ShowMessage («+эЇюЁьрЎшш ю яЁюфрцрї эхЄ!!!»);
else
{
FormBlank->QRLabel3->Caption=DBEdit15->Text;
FormBlank->QRLabel5->Caption=DBEdit14->Text;
FormBlank->QRLabel7->Caption=IBQuery4->FieldByName («AMOUNT»)->AsString;
FormBlank->QRLabel11->Caption=(IBQuery4->FieldByName («ALL_COST»)->AsInteger)/((IBQuery4->FieldByName («COST»)->AsInteger)*(IBQuery4->FieldByName («AMOUNT»)->AsInteger));
FormBlank->QRLabel13->Caption=IBQuery4->FieldByName («COST»)->AsString;
FormBlank->QRLabel16->Caption=IBQuery4->FieldByName («ALL_COST»)->AsString;
FormBlank->QRLabel20->Caption=IBQuery4->FieldByName («SALE_DATE»)->AsString;
FormBlank->QuickRep1->Preview ();
}
}
//—————————————————————————————————————;
void __fastcall TFormSclad: Button11Click (TObject *Sender)
{
if (IBQuery4->FieldByName («id»)->AsInteger==0) ShowMessage («+эЇюЁьрЎшш ю яЁюфрцрї эхЄ!!!»);
else
{
int idw=IBQuery4->FieldByName («id_warhouses»)->AsInteger;
int idb=IBQuery4->FieldByName («id_book»)->AsInteger;
int s_pa=IBQuery4->FieldByName («amount»)->AsInteger;
int ia=IBQuery4->FieldByName («all_cost»)->AsInteger/(IBQuery4->FieldByName («cost»)->AsInteger*s_pa);;
IBQuery2->SQL->Clear ();
IBQuery2->SQL->Add («select * from Presences where id_warhouses="+IntToStr (idw)+» and id_book="+IntToStr (idb));
IBQuery2->Open ();
int ids=IBQuery2->FieldByName («id»)->AsInteger;
int pa=IBQuery2->FieldByName («PACK_AMOUNT»)->AsInteger;
if (ids≠0)
{
IBQuery2->SQL->Clear ();
IBQuery2->SQL->Add («update Presences Set PACK_AMOUNT=» +IntToStr (pa+s_pa)+ «where id="+IntToStr (ids));
IBQuery2->ExecSQL ();
}
else
{
bool flag_close=true;
IBQuery2->SQL->Clear ();
try {
IBQuery2->SQL->Add («insert into Presences (PACK_AMOUNT, ITEM_AMOUNT, ID_WARHOUSES, ID_BOOK) values («
+IntToStr (s_pa)+", «+IntToStr (ia)+», «+
IntToStr (idw)+ «, «+IntToStr (idb)+ «)»);
IBQuery2->ExecSQL ();
}
catch (…) {
Application->MessageBox («-хтхЁэю ттхфхэ_ фрээ_х», «+°шсър», MB_OK + MB_ICONSTOP);
flag_close=false;
}
}
IBQuery2->SQL->Clear ();
IBQuery2->SQL->Add («select * from PRESENCES P where (P. ID_WARHOUSES=:ID_WARHOUSES)»);
IBQuery2->Open ();
int id=IBQuery4->FieldByName («id»)->AsInteger;
IBQuery4->SQL->Clear ();
IBQuery4->SQL->Add («delete from Sales where id="+IntToStr (id));
IBQuery4->ExecSQL ();
IBQuery4->SQL->Clear ();
IBQuery4->SQL->Add («select * from Sales»);
IBQuery4->Open ();
}
}
//—————————————————————————————————————;
Редактирование таблицы «Склады"(Sclad_red.cpp)
#include
#pragma hdrstop
#include «Sclad_Red.h»
#include «Sclad_unit.h»
//—————————————————————————————————————;
#pragma package (smart_init)
#pragma resource «*.dfm»
TFormScRed *FormScRed;
//—————————————————————————————————————;
__fastcall TFormScRed: TFormScRed (TComponent* Owner)
: TForm (Owner)
{
}
//—————————————————————————————————————;
void __fastcall TFormScRed: Button2Click (TObject *Sender)
{
Close ();
}
//—————————————————————————————————————;
void __fastcall TFormScRed: Button1Click (TObject *Sender)
{
int id;
if ((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 («Неправильно введены данные»);
else
{
if (FormSclad->k==1)
{
bool flag_close=true;
FormSclad->IBQuery1->SQL->Clear ();
try {
FormSclad->IBQuery1->SQL->Add («insert into Warhouses (NAME, ADDRESS, PHONE, MANAGER) values ('» +
Edit2->Text + «', '» +Edit3->Text + «', '» +
Edit4->Text + «', '» +Edit5->Text + «')»);
FormSclad->IBQuery1->ExecSQL ();
}
catch (…) {
Application->MessageBox («Неверно введены данные», «Ошибка», MB_OK + MB_ICONSTOP);
flag_close=false;
}
FormSclad->IBQuery1->SQL->Clear ();
FormSclad->IBQuery1->SQL->Add («select * from WARHOUSES order by NAME»);
FormSclad->IBQuery1->Open ();
if (flag_close) FormScRed->Close ();
}
if (FormSclad->k==3)
{
if (Application->MessageBox («Вы действительно хотите удалить запись?», «Подтверждение», MB_YESNO + MB_ICONQUESTION)==IDNO)
return;
id=StrToInt (Edit1->Text);
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («delete from Presences where id_warhouses="+IntToStr (id));
FormSclad->IBQuery2->ExecSQL ();
FormSclad->IBQuery4->SQL->Clear ();
FormSclad->IBQuery4->SQL->Add («delete from Sales where id_warhouses="+IntToStr (id));
FormSclad->IBQuery4->ExecSQL ();
FormSclad->IBQuery1->SQL->Clear ();
FormSclad->IBQuery1->SQL->Add («delete from Warhouses where id_warhouses="+IntToStr (id));
FormSclad->IBQuery1->ExecSQL ();
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («select * from Presences where id_warhouses=:id_warhouses»);
FormSclad->IBQuery2->Open ();
FormSclad->IBQuery4->SQL->Clear ();
FormSclad->IBQuery4->SQL->Add («select * from SALES»);
FormSclad->IBQuery4->Open ();
FormSclad->IBQuery1->SQL->Clear ();
FormSclad->IBQuery1->SQL->Add («select * from Warhouses order by NAME»);
FormSclad->IBQuery1->Open ();
FormScRed->Close ();
}
if (FormSclad->k==2)
{
int idt=FormSclad->IBQuery1->FieldByName («id_warhouses»)->AsInteger;
bool flag_close=true;
FormSclad->IBQuery1->SQL->Clear ();
try {
FormSclad->IBQuery1->SQL->Add («update Warhouses Set NAME='» + Edit2->Text + «', ADDRESS= '» +
Edit3->Text + «', PHONE= '» +
Edit4->Text + «', MANAGER='» + Edit5->Text+ «' where id_warhouses="+IntToStr (idt));
FormSclad->IBQuery1->ExecSQL ();
}
catch (…) {
Application->MessageBox («Неверно введены данные», «Ошибка», MB_OK + MB_ICONSTOP);
flag_close=false;
}
FormSclad->IBQuery1->SQL->Clear ();
FormSclad->IBQuery1->SQL->Add («select * from WARHOUSES order by NAME»);
FormSclad->IBQuery1->Open ();
if (flag_close) FormScRed->Close ();
}
}
}
//—————————————————————————————————————;
void __fastcall TFormScRed: Edit4KeyPress (TObject *Sender, char &Key)
{
if ((Key<'0')||(Key>'9')) {Key=0;Beep ();}
}
//—————————————————————————————————————;
Редактирование таблицы «Наличие на складе"(Nal_red.cpp)
#include
#pragma hdrstop
#include «Nal_Red.h»
#include «Sclad_unit.h»
//—————————————————————————————————————;
#pragma package (smart_init)
#pragma resource «*.dfm»
TFormBkRed *FormBkRed;
//—————————————————————————————————————;
__fastcall TFormBkRed: TFormBkRed (TComponent* Owner)
: TForm (Owner)
{
}
//—————————————————————————————————————;
void __fastcall TFormBkRed: Button2Click (TObject *Sender)
{
Close ();
}
//—————————————————————————————————————;
void __fastcall TFormBkRed: Button1Click (TObject *Sender)
{
int id;
if ((Edit2->Text=="")||(Edit3->Text=="")||(Edit4->Text=="")||(Edit6->Text=="")) ShowMessage («Неправильно введены данные»);
else
{
if (FormSclad->k==1)
{
bool flag_close=true;
ComboBox2->ItemIndex=ComboBox1->ItemIndex;
FormSclad->IBQuery2->SQL->Clear ();
try {
FormSclad->IBQuery2->SQL->Add («insert into Presences (PACK_AMOUNT, ITEM_AMOUNT, ID_WARHOUSES, ID_BOOK) values («
+Edit2->Text+", «+Edit3->Text+», «+
Edit4->Text + «, «+ComboBox2->Text+ «)»);
FormSclad->IBQuery2->ExecSQL ();
}
catch (…) {
Application->MessageBox («Неверно введены данные», «Ошибка», MB_OK + MB_ICONSTOP);
flag_close=false;
}
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («select * from PRESENCES P where (P. ID_WARHOUSES=:ID_WARHOUSES)»);
FormSclad->IBQuery2->Open ();
if (flag_close) FormBkRed->Close ();
}
if (FormSclad->k==2)
{
int idt=FormSclad->IBQuery2->FieldByName («id»)->AsInteger;
bool flag_close=true;
FormSclad->IBQuery2->SQL->Clear ();
try {
FormSclad->IBQuery2->SQL->Add («update Presences Set PACK_AMOUNT=» + Edit2->Text+ «, ITEM_AMOUNT= «+
Edit3->Text+ «where id="+IntToStr (idt));
FormSclad->IBQuery2->ExecSQL ();
}
catch (…) {
Application->MessageBox («Неверно введены данные», «Ошибка», MB_OK + MB_ICONSTOP);
flag_close=false;
}
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («select * from PRESENCES P where (P. ID_WARHOUSES=:ID_WARHOUSES)»);
FormSclad->IBQuery2->Open ();
if (flag_close) FormBkRed->Close ();
}
}
if (FormSclad->k==3)
{
if (Application->MessageBox («Вы действительно хотите удалить запись?», «Подтверждение», MB_YESNO + MB_ICONQUESTION)==IDNO)
return;
id=StrToInt (Edit1->Text);
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («delete from Presences where id="+IntToStr (id));
FormSclad->IBQuery2->ExecSQL ();
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («select * from PRESENCES P where (P. ID_WARHOUSES=:ID_WARHOUSES)»);
FormSclad->IBQuery2->Open ();
FormBkRed->Close ();
}
}
//—————————————————————————————————————;
void __fastcall TFormBkRed: Edit2KeyPress (TObject *Sender, char &Key)
{
if ((Key<'0')||(Key>'9')) {Key=0;Beep ();}
}
//—————————————————————————————————————;
void __fastcall TFormBkRed: Edit3KeyPress (TObject *Sender, char &Key)
{
if ((Key<'0')||(Key>'9')) {Key=0;Beep ();}
}
//—————————————;
Редактирование таблицы «Книги"(Book_red.cpp)
#include
#pragma hdrstop
#include «Book_Red.h»
#include «Sclad_unit.h»
//—————————————————————————————————————;
#pragma package (smart_init)
#pragma resource «*.dfm»
TFormKnRed *FormKnRed;
//—————————————————————————————————————;
__fastcall TFormKnRed: TFormKnRed (TComponent* Owner)
: TForm (Owner)
{
}
//—————————————————————————————————————;
void __fastcall TFormKnRed: Button2Click (TObject *Sender)
{
FormSclad->IBQuery3->SQL->Clear ();
FormSclad->IBQuery3->SQL->Add («select * from BOOKS B where (B.ID_BOOK=:ID_BOOK)»);
FormSclad->IBQuery3->Open ();
Close ();
}
//—————————————————————————————————————;
void __fastcall TFormKnRed: Button1Click (TObject *Sender)
{
int id;
if (FormSclad->k==3)
{
if (Application->MessageBox («Вы действительно хотите удалить запись?», «Подтверждение», MB_YESNO + MB_ICONQUESTION)==IDNO)
return;
ComboBox2->ItemIndex=ComboBox1->ItemIndex;
id=StrToInt (ComboBox2->Text);
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («select * from Presences where id_book="+IntToStr (id));
FormSclad->IBQuery2->Open ();
if (FormSclad->IBQuery2->FieldByName («id»)->AsInteger≠0)
{
ShowMessage («Данную книгу нельзя удалить, nтак как она имеется на складах!!!»);
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («select * from PRESENCES P where (P. ID_WARHOUSES=:ID_WARHOUSES)»);
FormSclad->IBQuery2->Open ();
FormSclad->IBQuery3->SQL->Clear ();
FormSclad->IBQuery3->SQL->Add («select * from BOOKS B where (B.ID_BOOK=:ID_BOOK)»);
FormSclad->IBQuery3->Close ();
FormSclad->IBQuery3->Open ();
}
else
{
FormSclad->IBQuery3->SQL->Clear ();
FormSclad->IBQuery3->SQL->Add («delete from Books where id_book="+IntToStr (id));
FormSclad->IBQuery3->ExecSQL ();
FormSclad->IBQuery3->SQL->Clear ();
FormSclad->IBQuery3->SQL->Add («select * from BOOKS B where (B.ID_BOOK=:ID_BOOK)»);
FormSclad->IBQuery3->Close ();
FormSclad->IBQuery3->Open ();
FormSclad->IBQuery2->SQL->Clear ();
FormSclad->IBQuery2->SQL->Add («select * from PRESENCES P where (P. ID_WARHOUSES=:ID_WARHOUSES)»);
FormSclad->IBQuery2->Open ();
}
FormKnRed->Close ();
}
if ((FormSclad->k==1)||(FormSclad->k==2))
{
if ((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 («Неправильно введены данные»);
else
{
if (FormSclad->k==1)
{
bool flag_close=true;
FormSclad->IBQuery3->SQL->Clear ();
try {
FormSclad->IBQuery3->SQL->Add («insert into BOOKS (NAME, AUTHOR, PUBLISHER, YEAR, CIRCUATION, KNOWLEDGE, COST) values ('» +
Edit2->Text + «', '» +Edit3->Text + «', '» +
Edit4->Text + «', „+Edit5->Text + „,“ +Edit6->Text +“, '» +Edit7->Text + «',» +Edit8->Text +")");
FormSclad->IBQuery3->ExecSQL ();
}
catch (…) {
Application->MessageBox («Неверно введены данные», «Ошибка», MB_OK + MB_ICONSTOP);
flag_close=false;
}
FormSclad->IBQuery3->SQL->Clear ();
FormSclad->IBQuery3->SQL->Add («select * from BOOKS B where (B.ID_BOOK=:ID_BOOK)»);
FormSclad->IBQuery3->Close ();
FormSclad->IBQuery3->Open ();
if (flag_close) FormKnRed->Close ();
}
if (FormSclad->k==2)
{
int idt=FormSclad->IBQuery3->FieldByName («id_book»)->AsInteger;
bool flag_close=true;
FormSclad->IBQuery3->SQL->Clear ();
try {
FormSclad->IBQuery3->SQL->Add («update Books Set NAME='» + Edit2->Text + «', AUTHOR= '» +
Edit3->Text + «', PUBLISHER= '» +
Edit4->Text + «', YEAR=» + Edit5->Text+ «, CIRCUATION=» + Edit6->Text+ «, KNOWLEDGE='» + Edit7->Text+ «', COST="+ Edit8->Text+» where id_book="+IntToStr (idt));
FormSclad->IBQuery3->ExecSQL ();
}
catch (…) {
Application->MessageBox («Неверно введены данные», «Ошибка», MB_OK + MB_ICONSTOP);
flag_close=false;
}
FormSclad->IBQuery3->SQL->Clear ();
FormSclad->IBQuery3->SQL->Add («select * from BOOKS B where (B.ID_BOOK=:ID_BOOK)»);
FormSclad->IBQuery3->Close ();
FormSclad->IBQuery3->Open ();
if (flag_close) FormKnRed->Close ();
}
}
}
}
//—————————————————————————————————————;
void __fastcall TFormKnRed: Edit5KeyPress (TObject *Sender, char &Key)
{
if ((Key<'0')||(Key>'9')) {Key=0;Beep ();}
}
//—————————————————————————————————————;
void __fastcall TFormKnRed: Edit6KeyPress (TObject *Sender, char &Key)
{
if ((Key<'0')||(Key>'9')) {Key=0;Beep ();}
}
//—————————————————————————————————————;