Министерство сельского хозяйства Российской Федерации
Департамент научно-технологической политики и образования
Федеральное государственное образовательное учреждение
высшего профессионального образования
«Красноярский государственный аграрный университет»
Институт Менеджмента и Информатики
Кафедра «Информационных систем
и технологий в экономике»
Курсовой проект
на тему
Проектирование и разработка базы данных для предприятия ООО«Статус»
Выполнила студентка 3 курса,
группы ПИ-33, специальности 080800.62 - «Прикладная информатика»
Болтус Екатерина Юрьевна
Руководитель Титовская Наталья Викторовна
Красноярск 2012
Содержание
Введение
1. Анализ объекта исследования
1.1 Характеристика объекта исследования
1.2 Комплекс задач, решаемых объектом исследования
1.3Текущий уровень использования ИТ
1.4 Предложения по модернизации информационных технологий
1.5 Выбор методов и средств решения задач, подлежащих автоматизации
1.6 Определение общих требований к проектируемой системе
2. Проектирование программных средств информационной системы
2.1 Декомпозиция проектируемой системы
2.2 Определение состава и назначения подсистем проектируемой информационной системы
2.3 Проектирование и реализация подсистем
2.3.1 Проектирование и реализация подсистемы хранения
2.3.2 Проектирование и реализация подсистемы ввода
2.3.3 Проектирование и реализация подсистемы вывода
2.3.4 Проектирование и реализация подсистемы обработки
Заключение
Библиографический список
Приложения
база данный информационный подсистема
Введение
Базы данных - это свод определенной информации, разбитой по тематическим группам для удобства и экономии времени при поиске. В базах данных предприятий за основу берется предоставление полноценного перечня предприятий, организаций и фирм, различной направленности. Каждая сфера выведена в отдельную рубрику: Металлургия, Спорт, Медицина, Наука и образование и т.д.
Программное обеспечение, предназначенное для работы с базами данных, называется система управления базами данных (СУБД). СУБД используются для упорядоченного хранения и обработки больших объемов информации.
В современном мире применение и использование СУБД является неотъемлемой частью, как крупных, так и небольших предприятий и организаций. Ведь база данных -это не только информационная модель, которая хранит данные о группе объектов, но и организует хранение информации таким образом, чтобы ее удобно было:
просматривать,
пополнять,
изменять,
искать нужные сведения,
делать любые выборки,
осуществлять сортировку в любом порядке.
Базы данных являются одним из основных компонентов современных информационных систем. Информационная система-это взаимосвязанная совокупность средств, методов и персонала, используемых для хранения, обработки и выдачи информации.
Цель любой информационной системы - обработка информации конкретной предметной области.
Под предметной областью понимается совокупность связанных между собой функций, задач управления в некоторой области деятельности предприятия, с помощью которых достигается выполнение поставленной цели.
База данных - это приложение, обеспечивающее создание, хранение, обновление и поиск информации в базе данных, а также управление безопасностью и целостностью данных. В простейшем случае - это программа, которая обеспечивает работу с информацией. Информация в базе может быть любая, при этом, как правило, работа с информацией подразумевает следующие действия:
добавление новой информации;
поиск информации;
изменение информации;
удаление информации из базы данных;
Мир программных систем, позволяющих использовать базы данных, довольно многообразен. В настоящее время существует достаточно большое количество программных систем, позволяющих создавать и использовать локальные и удаленные базы данных. Среди наиболее известных можно отметить Paradox, dВase, FoxPro, MS Access, InterBase, Oracle, Infomix, MS SQL Server и другие.
Тема курсового проекта: проектирование базы данных для магазина продовольственных товаров «Статус».
Название проекта: проектирование базы данных на примере ООО «Статус».
Цель проекта: создание базы данных, включающей детальное представление структуры данных, изучение работы выбранного предприятия, на основе созданной логической и реляционной модели, закрепление знаний и навыков, приобретаемых на лекционных и практических занятиях.
Основание проекта: создание модели и базы данных ИП ООО «Статус».
Используемые программные средства: Oracle SQL Developer Data Modeler, Oracle SQL Developer, СУБД Oracle 10gXE.
1. Анализ предметной области
1.1 Характеристика объекта исследования
Бизнес-процесс- это целенаправленная совокупность взаимосвязанных видов деятельности, преобразующая ряд данных на входе в ряд данных на выходе (товары или услуги), представляющих ценность для потребителя.
Полное наименование: Общество с ограниченной ответственностью «Статус».
Юридический адрес: 662520, Россия, Красноярский край, пгт. Березовка, ул. Береговая-44.
Фактический адрес: 662520, Россия, Красноярский край, пгт. Березовка, ул. Береговая-44.
ИНН: 2404007245
КПП: 240401001
ОГРН: 1062404000592
Телефон: (39175) 2-14-37
Индивидуальный предприниматель: Янковская Т.В.
Деятельность ООО 'СТАТУС'
Розничная торговля пищевыми продуктами, включая напитки, и табачными изделиями в специализированных магазинах
Розничная торговля фруктами, овощами и картофелем
Розничная торговля мясом, мясом птицы, продуктами и консервами из мяса и мяса птицы
Розничная торговля рыбой, ракообразными и моллюсками
Розничная торговля консервами из рыбы и морепродуктов
Розничная торговля хлебом, хлебобулочными и кондитерскими изделиями
Розничная торговля сахаристыми кондитерскими изделиями, включая шоколад
Розничная торговля мороженым и замороженными десертами
Розничная торговля алкогольными и другими напитками
Розничная торговля молочными продуктами и яйцами
Розничная торговля пищевыми маслами и жирами
Розничная торговля животными маслами и жирами
Розничная торговля растительными маслами
Розничная торговля мукой и макаронными изделиями
Розничная торговля крупами
Розничная торговля чаем, кофе, какао
Розничная торговля прочими пищевыми продуктами, не включенными в другие группировки;
Об организации:
База данных была построена на основе бизнес-процессов ООО «Статус», которое занимается продажей продовольственных товаров и доведением их до потребителей. Продукты, предоставляемые на продажу потребителям, поставляются различными поставщиками с оптовых баз города непосредственно в сам магазин. Прежде чем продукты поступят в магазин, сотрудники (продавцы) делают заказ (заявку), в котором указывается перечень необходимых товаров, их объем. После этого сам ИП смотрит заказ и оценивает примерную сумму заявки и отдает эту сумму поставщику. Поскольку перечень товаров достаточно ёмкий, то один поставщик может поставлять несколько видов товара одновременно.
После закупки товара на базе осуществляется его отгрузка в магазин, основная часть товаров выкладывается на прилавок, но предварительно товар ставят на приход, т.е. осуществляют наценку товара на некоторый процент, который складывается из учета транспортных расходов, оплаты за электричество, заработной платы продавцам, оплаты за воду, оплаты за коммунальные услуги и из учета товара(чаще скоропортящегося),который списывают в конце каждого отчетного месяца. Что же касается остального товара, то его хранят в подсобном помещении, из которого потом пополняют закончившуюся продукцию. Фактуры с перечнем товаров и их закупочной ценой поставщики передают бухгалтеру. Информацию из этих фактур бухгалтер записывает в журнал учета товаров, где затем проверяется соответствие реальных сумм и сумм, записанных в накладных, учитываются недостачи и списанный товар. Вся работа ведется вручную, пока не автоматизирована.
Организационная структура:
Организационная структура определяет распределение ответственности и полномочий внутри организации. Структура предприятия устанавливается исходя из объёма и содержания задач, решаемых предприятием, направленности и интенсивности, сложившихся на предприятии информационных и документационных потоков, и с учётом его организационных и материальных возможностей.
Организационная структура ООО «Статус» включает непосредственно самого директора(он же бухгалтер), под его руководством находятся продавцы, наёмный поставщик и прочие мелкие сотрудники(технический работник и дворник). Такой пример организационной структуры носит название линейной
Общая численность персонала: 14 человек.
1.2 Комплекс задач, решаемых объектом исследования
Ранее упоминалось, что работа предприятия заключается в том, что товар, продаваемый покупателям, сначала закупают на различных оптовых базах города наемные поставщики, а также фирмы-сотрудники, затем отгружают его в сам магазин с учетом всех надбавок.
Поскольку основная работа предприятия состоит в привлечении клиентов, доведении товара до покупателя и получении прибыли, то со временем необходимо расширять ассортимент товара, следовательно, нужно увеличивать количество поставщиков, ведь объем работы будет больше. А расширение торговой площади позволит рационально распределить товар на полках магазина. Ну, и, конечно же, главная задача состоит в том, чтобы перевести предприятие с ручной системы ведения документации на автоматизированную. Система автоматизации торговли любого магазина - это самый важный элемент успеха владельца магазина. Система автоматизации торговли и управления позволяют намного увеличить эффективность работы магазина за счет сокращения различных затрат, которые связанны с продажей и складированием различных товаров, а также уменьшается количество работников и затраты на зарплату, повышается точности ведения учета.
Автоматизация торговли в магазине имеет огромное количество плюсов:
1.Учет продаваемого товара дает отличную возможность предотвратить различные хищения среди персонала, а так же дает возможность своевременно пополнять запасы товаров
2.Управлять магазином будет гораздо проще, так как все необходимые данные будут собраны в специальной товароучетной программе: остатки товара, выручка, оборачиваемость товаров и многое другое
3.Лояльность покупателей за счет скорости и качества предоставляемого обслуживания и систем различных скидок
4.Ценообразование - установленные программы упрощают процесс расчета цен, так как появляется возможность рассчитывать стоимость продажи, на основании стоимости закупок, также есть возможность автоматического округления.
В результате анализа комплекса задач выявлены следующие направления для модернизации:
Автоматизация торговли;
Расширение ассортимента товара;
Увеличение количества поставщиков;
Расширение торговой площади.
1.3 Текущий уровень использования информационных технологий объекта исследования
Поскольку на предприятии еще не внедрена ни одна из систем автоматизации, пока можно только предположить какие программные обеспечения будут необходимы для более оперативной работы.
1.4 Обоснование необходимости модернизации информационных технологий объекта исследования и предложения по модернизации информационных технологий
Исходя из того, что в ООО «Статус» вся работа ведется вручную, следует то, что уровень эффективности работ очень низкий. Таким образом, не только для отдельных подразделений, но и для предприятия в целом, необходима полная автоматизация работы во избежание несовершенства передачи и обработки информации, неоперативности учета, больших затрат времени и т.д.
Если говорить, непосредственно, о самой модернизации, то основными требованиями при выборе оборудования и программного обеспечения становятся следующие: экономичность, надежность и функциональность. В такой ситуации нужно исходить из принципа разумной достаточности. Магазин малой торговой площади не может иметь много кассовых рабочих мест для обслуживания покупателей, поэтому кассовое место должно быть максимально удобным и функциональным. Поскольку торговая площадь ООО «Статус» около 100 кв.м.- рекомендуемый стандарт 1 кассовый узел (для продуктового магазина).
В магазинах любого формата и специализации автоматизацию можно условно разделить на две части:
фронт-офис (программное обеспечение и ИТ-оборудование для торгового зала)
бэк-офис (программное обеспечение и ИТ-оборудование для главных отделов магазина, где работает администрация: директор, бухгалтерия, товаровед, кладовщик и т. д.)
1. Бэк-офис (Back Office) - программы для товароучета (приход, расход, списание товаров, проведение инвентаризации и т.д.)
Для продуктового магазина 'шаговой доступности' , каковым является ООО «Статус», хорошим решением будет программное обеспечение 'ШТРИХ-М' - надежное, удобное и недорогое, работающее на платформе '1С: Предприятие'.
С точки зрения управляющего и директора предприятия будут удобны программы отслеживания и учета товаров, а также ежемесячной отчетности. Но разработка программ будет направлена, непосредственно, для работы на ней бухгалтера и товароведа.
Ниже приведенные программы смогут не только оперативно автоматизировать работу сотрудников, но и помогут избежать погрешностей в подсчете и утере данных.
'ШТРИХ-М: Торговое предприятие v.4' - программа для оперативного учета на платформе '1С: Предприятие 7.7'
'ШТРИХ-М: Торговое предприятие v.5' - современное решение для управленческого учета на платформе '1С: Предприятие 8'
2. Фронт-офис (Front Office) - кассовые программы для учета продаж, устанавливаются на рабочие места кассиров:
'ШТРИХ-М: Кассир v.1/ v.2' - специализированное решение для магазинов проверенное временем, обладающее широкими функциональными возможностями
'ШТРИХ-М: Кассир v.5' - новое специализированное решение для магазинов на платформе '1С: Предприятие 8'
'ШТРИХ-М: РМК 6' - является принципиально новым бесплатформенным универсальным решением.
Функциональные возможности
Ведение партионного учета остатков товаров на складах предприятия и в торговых залах
Учет стоимости товаров ведется в закупочных ценах, а на розничных складах также и в розничных ценах
Списание товаров выполняется по одному из методов FIFO, LIFO, по среднему - в зависимости от настроек конфигурации
Реализация основных этапов товародвижения:
Поступление и возврат товаров поставщикам
Перемещение товаров между складами, инвентаризация, перевод товаров в некондицию
Ценообразование и переоценка товаров, включая автоматическую переоценку при поступлении товара на склад по новой розничной цене
Реализация товаров оптом и в розницу, возвраты от покупателей
Учет специфики розничной торговли и т.д.
При выборе ИТ-оборудования (кассовой техники, весов, оборудования штрих-кодирования) имеет значение специализация магазина, и главное - его проходимость, а, следовательно, нагрузка на кассовый узел. Поэтому очень важно правильно выбрать кассовую технику.
Рекомендуются также POS-системы с сенсорным экраном - они особенно хорошо подходят для элегантных бутиков, но в последнее время их все чаще выбирают магазины самых разных форматов. Причина - в удобном экранном интерфейсе, а также возможности сэкономить рабочее пространство (для такой POS-системы не нужна клавиатура). По своим возможностям они подойдут для магазина любого типа и формата. Могут быть укомплектованы любым фискальным регистратором 'ШТРИХ-М': 'ШТРИХ-LIGHT-ФР-К', 'ШТРИХ-М-ФР-К' или 'ШТРИХ-МИНИ-ФР-К' и т. д. (фискальный регистратор выбирается исходя из нагрузки на кассовый узел).
Примерные расходы:
ПК - 8000 монитор - 7000 ибп (источник бесперебойного питания) - 3000
сканер - 5000
фискальный регистратор - 25000
принтер этикеток - 15000
принтер лазерный (мфу) - 8000
весы с печатью - 25000
1.5 Выбор методов и средств решения задач, подлежащих автоматизации
В качестве среды разработки была выбрана СУБД Oracle Database 10g Express Edition, язык PL/SQL.
Для визуального моделирования ER-моделей, генерации схем данных, реверс-инжиниринга баз данных, разработки логической модели в нотациях Бахмана и Баркера, а также реляционной модели была выбрана расширенная версия SQL Developer- SQL Developer Data Modeler(ERwin).
Также использовлся язык Borland Delphi 7 - средство разработки приложений на основе объектно-ориентированного программирования (инструмент для реализации оконно-графического приложения для удобства работы пользователя с базой данных. Позволяет просматривать, а также осуществлять различные операции над таблицами, хранящимися в БД).
1.6 Определение общих требований к проектируемой системе
К любой проектируемой системе должны предъявляться определенные требования, которые будут удовлетворять запросы, как руководства, так и клиентов данной системы.
К проектируемой системе ООО «Статус» должны предъявляться следующие требования:
состав работников предприятия;
перечень видового состава продукции;
сбор заявок;
даты поставки товара;
количество поставщиков;
ежемесячная отчетность;
формирование счетов-фактур;
автоматизация системы;
удобный интерфейс;
актуальность данных;
эффективность работы;
надежная защита.
2. Проектирование программных средств информационной системы
Модель данных - это совокупность структур данных и операций их обработки. Некоторая абстракция, которая, будучи приложима к конкретным данным, позволяет пользователям и разработчикам трактовать их уже как информацию, т. е. сведения, содержащие не только данные, но и взаимосвязи между ними.
Физическая модель данных оперирует категориями, касающимися организации внешней памяти и структур хранения, используемых в данной операционной среде. В настоящий момент в качестве физических моделей используются различные методы размещения данных, основанные на файловых структурах: это организация файлов прямого и последовательного доступа, индексных файлов и инвертированных файлов, файлов, использующих различные методы хеширования, взаимосвязанных файлов. Физические модели данных, основанные на страничной организации, являются наиболее перспективными.
Инфологические и семантические модели отражают в естественной и удобной для разработчиков и других пользователей форме информационно-логический уровень абстрагирования, связанный с фиксацией и описанием объектов предметной области, их свойств и их взаимосвязей.
Инфологическая модель данных- обобщенное, непривязанное к каким-либо СУБД описание предметной области. Инфологическая модель отображает реальный мир в некоторые понятные человеку концепции, полностью независимые от параметров среды хранения данных. Поэтому инфологическая модель не должна изменяться до тех пор, пока какие-то изменения в реальном мире не потребуют изменения в ней некоторого определения, чтобы эта модель продолжала отражать предметную область.
Тезаурусные модели основаны на принципе организации словарей, содержат определенные языковые конструкции и принципы их взаимодействия в заданной грамматике. Эти модели эффективно используются в системах-Переводчиках, особенно многоязыковых переводчиках. Принцип хранения информации в этих системах и подчиняется тезаурусным моделям.
Дескрипторные модели - самые простые из документальных моделей, они широко использовались на ранних стадиях использования документальных баз данных. В этих моделях каждому документу назначался дескриптор, который описывал документ по некоторым ключевым характеристикам.
Реляционная модель данных - логическая модель данных, прикладная теория построения баз данных, которая является приложением к задачам обработки данных таких разделов математики как теории множеств и логика первого порядка. На реляционной модели данных строятся реляционные базы.
Реляционная модель данных включает следующие компоненты:
Структурный аспект (составляющая) -- данные в базе данных представляют собой набор отношений.
Аспект (составляющая) целостности -- отношения (таблицы) отвечают определенным условиям целостности. РМД поддерживает декларативные ограничения целостности уровня домена (типа данных), уровня отношения и уровня базы данных.
Аспект (составляющая) обработки (манипулирования) -- РМД поддерживает операторы манипулирования отношениями (реляционная алгебра, реляционное исчисление).
Рассмотрим основные операции над отношениями, которые могут представлять интерес с точки зрения извлечения данных из реляционных таблиц. Это объединение, пересечение, разность, расширенное декартово произведение отношений, а также специальные операции над отношениями: выборка, проекция и соединение.
Операция выборки - построение горизонтального подмножества, т.е. подмножества кортежей, обладающих заданными свойствами.
Операция проекции - построение вертикального подмножества отношения, т.е. подмножества кортежей, получаемого выбором одних и исключением других атрибутов.
Декартово произведение - двух отношений (двух таблиц) определяет новое отношение - результат конкатенации (т.е. сцепления) каждого кортежа (каждой записи) из первого отношения с каждым кортежем (каждой записью) из второго отношения.
Соединение - это процесс, когда две или более таблицы объединяются в одну. Способность объединять информацию из нескольких таблиц или запросов в виде одного логического набора данных обусловливает широкие возможности SQL.
Объединение (UNION) отношений можно получить в результате их конкатенации с образованием одного отношения с исключением кортежей-дубликатов. При этом отношения должны быть совместимы, т.е. иметь одинаковое количество полей с совпадающими типами данных. Иначе говоря, отношения должны быть совместимы по объединению.
Операция пересечения (INTERSECT) RS=R-(R-S) определяет отношение, которое содержит кортежи, присутствующие как в отношении R, так и в отношении S. Отношения R и S должны быть совместимы по объединению.
Разность (EXCEPT) R-S двух отношений R и S состоит из кортежей, которые имеются в отношении R, но отсутствуют в отношении S. Причем отношения R и S должны быть совместимы по объединению.
Результат операции деления R:S - набор кортежей отношения R, определенных на множестве атрибутов C, которые соответствуют комбинации всех кортежей отношения S.
Основные принципы реляционных баз данных можно сформулировать так:
все данные на концептуальном уровне представляются в виде упорядоченной организации, определенной в виде строк и столбцов и называемой отношением (relation). Более распространенный синоним слова 'отношение' - таблица (или 'набор записей', или набор результатов - result set. Именно от этого и происходит термин 'реляционные базы данных', а вовсе не от отношений между таблицами;
все значения являются скалярами. Это значит, что для любой строки и столбца любого отношения существует одно и только одно значение;
все операции выполняются над целым отношением и результатом этих операций также является целое отношение. Этот принцип называется замыканием. Поэтому результаты одной операции (например, запроса), можно использовать в качестве исходных данных для выполнения другой операции (подзапроса).
2.1 Декомпозиция проектируемой системы
Проектируемая система должна включать систему ввода данных, которая должна включать: модуль приветствия, авторизации (в БД реализован в виде таблицы, где запрашивается логин пользователя и пароль), аутентификации, главного меню, модуль окон просмотра и редактирования таблиц. Подсистема ввода реализуется в среде объектно-ориентированного языка программирования Borland Delphi 7.0.
Подсистема хранения включает в себя представление проектируемой БД в виде ER-диаграмм (логическая в нотациях Бахмана и Баркера, реляционная) с первичными, внешними и составными ключами, а также различными связями (один-к-одному, один-ко-многим, многие-ко-многим). Реализуется в среде SQL Developer Data Modeler.
Подсистема обработки так же, как и подсистема ввода, реализуется в среде объектно-ориентированного языка программирования Borland Delphi 7.0.
Она включает в себя следующие операции над таблицами:
добавление данных;
сортировка;
поиск информации;
выборка;
удаление.
Подсистема вывода содержит данные о пользователях в разделе справочник. В разделе реализуется система просмотра данных о сотрудниках, входящих в проектируемую БД. При желании можно редактировать некоторые пункты раздела, но при учете того, что пользователь обладает правами авторизованного пользователя. Реализуется в среде Borland Delphi 7.0.
2.2 Определение состава и назначения подсистем проектируемой информационной системы
Подсистема ввода:
Подсистема хранения- содержит таблицы с атрибутами, связями и ключами проектируемой БД:
Подсистема обработки предприятия ООО «Статус» осуществляет функции обработки данных, таких как:
выборка данных о сотрудниках, продажах, поставщиках, товарах, заказах;
редактирование данных о сотрудниках, продажах, поставщиках, товарах, заказах;
сортировка данных по сотрудникам, продажам, поставщикам, товарам, заказам;
добавление данных о сотрудниках, заказчиках, поставщиках, технике, продукции, заказах и поставках;
удаление данных о сотрудниках, продажах, поставщиках, товарах, заказах.
Подсистема вывода- хранит данные о предприятии в разделе «справочник»
Подсистема вывода ООО «Статус» осуществляет:
вывод справочника и информации о сотрудниках;
вывод справочника и информации о продажах;
вывод справочника и информации о поставщиках;
вывод справочника и информации о товарах;
вывод операции и информации о заказах;
2.3 Проектирование и реализация подсистем
Этапы физической реализации проектируемой базы данных
1.Концептуальное (инфологическое) проектирование построение формализованной модели предметной области. Такая модель строится с использованием стандартных языковых средств, обычно графических, например ER-диаграмм. Такая модель строится без ориентации на какую-либо конкретную СУБД.
Основные элементы данной модели:
Описание объектов предметной области и связей между ними.
Описание информационных потребностей пользователей (описание основных запросов к БД).
Описание алгоритмических зависимостей между данными.
Описание ограничений целостности, т.е. требований к допустимым значениям данных и к связям между ними.
2.Логическое (даталогическое) проектирование отображение инфологической модели на модель данных, используемую в конкретной СУБД, например на реляционную модель данных. Для реляционных СУБД даталогическая модель набор таблиц, обычно с указанием ключевых полей, связей между таблицами. Если инфологическая модель построена в виде ER-диаграмм (или других формализованных средств), то даталогическое проектирование представляет собой построение таблиц по определённым формализованным правилам, а также нормализацию этих таблиц. Этот этап может быть в значительной степени автоматизирован.
3.Физическое проектирование реализация даталогической модели средствами конкретной СУБД, а также выбор решений, связанных с физической средой хранения данных: выбор методов управления дисковой памятью, методов доступа к данным, методов сжатия данных и т.д. эти задачи решаются в основном средствами СУБД и скрыты от разработчика БД.
На этапе инфологического проектирования в ходе сбора информации о предметной области требуется выяснить:
основные объекты предметной области (объекты, о которых должна храниться информация в БД);
атрибуты объектов;
связи между объектами;
основные запросы к БД.
2.3.1 Проектирование и реализация подсистемы хранения
Сущность -нечто существуемое и различимое. Можно сказать, что под термином сущность понимается все, что может быть представлено в БД. Каждая сущность является множеством подобных индивидуальных
объектов, называемых экземплярами.
Каждый экземпляр сущности должен отличаться от всех остальных экземпляров этой же сущности. Все экземпляры определенной сущности обладают общими свойствами или атрибутами.
При разработке базы данных ООО «Статус» были выделены следующие сущности:
Сотрудник (продавец) - лицо, которое обслуживает покупателей магазина;
Поставщик - в данной фирме является лицом, поставляющим всю необходимую продукцию с базы в магазин;
Заказ - заявка в письменной форме, которая отражает список необходимых товаров, требующихся в магазин (заполняется продавцом и передается поставщику);
Товар - продукт труда, произведенный для продажи и, поставляемый поставщиком;
Продажа-итог работы продавца, подразумевающий покупку товара покупателем;
Поставка - этап передачи товара от поставщика к продавцу;
Товар Заказ- сущность, связывающая сущности Товар и Заказ
Продажа Сотрудник- сущность связывающая сущности Продажа и Сотрудник;
Сущность связывающая сущность Товар и Продажу- сущность Товар Продажа ;
Определение связей:
Связь-(relationship) - это функциональная зависимость между двумя
сущностями (возможна связь сущности с самой собой).
Если между некоторыми сущностями существует связь, то экземпляры одной сущности ссылаются или некоторым образом связаны с экземплярами другой сущности.
Сотрудник-Заказ: связь один-ко-многим(1:N Relation) ,один сотрудник может делать несколько заказов разным поставщикам;
Сотрудник-Продажа: связь многие-ко-могим(M:N Relation), каждый сотрудник может участвовать более, чем в одной продаже, а в каждой продаже может быть задействован более, чем один сотрудник;
Поставщик-Поставка: связь один-ко-могим (1:N Relation), один поставщик может осуществлять несколько поставок;
Поставщик-Заказ: связь один-ко-могим (1:N Relation), один поставщик может выполнять много заказов;
Товар-Заказ: связь многие-ко-многим (M:N Relation), несколько видов товара могут быть задействованы более, чем в одном заказе, а разные заказы могут включать множество видов товара
Товар-Поставка: связь один-ко-могим (1:N Relation), один вид товара может входить в состав различных поставок;
Товар-Продажа: связь многие-ко-могим(M:N Relation), каждый вид товара участвует более, чем в одной продаже, а в каждой продаже может быть задействован более, чем один товар;
Связь многие-ко-многим возможна только на уровне логической модели. При переходе к реляционной модели, должна быть произведена замена связи многие-ко-многим на один-ко-многим идентифицирующую (1:N Identifying Relation).
В результате такого преобразования создается новая таблица, называемая таблицей пересечения. Идентифицирующая связь устанавливается между независимой (родительский конец связи) и зависимой (дочерний конец связи) сущностями. Таким образом связи Товар-Продажа, Сотрудник-Продажа и Товар-Заказ из связей многие-ко-многим переименуются в один-ко-многим и появятся три новые таблицы- ТоварПродажа, ПродажаСотрудник, ТоварЗаказ.
Определение первичных ключей:
Некоторые атрибуты сущности не только описывают, но и уникальным образом идентифицируют её. Их называют первичным ключом. Первичный ключ (primary key) - это атрибут или группа атрибутов, однозначно идентифицирующая экземпляр сущности.
Для того что стать первичным, потенциальный ключ должен удовлетворять ряду требований:
Уникальность - два экземпляра не должны иметь одинаковых значений возможного ключа.
Компактность - при выборе первичного ключа предпочтение должно отдаваться более простым ключам.
Атрибуты не должны содержать null-значений.
Значение атрибутов ключа не должно меняться в течении всего времени существования экземпляра сущности.
Первичными ключами базы данных ООО «Статус» будут следующие атрибуты:
для сущности Сотрудник- атрибут код сотрудника(суррогатный ключ);
для сущности Поставщик - атрибут код_поставщика (суррогатный ключ);
для сущности Поставка - атрибут код_поставки(суррогатный ключ);
для сущности Заказ - атрибут код_заказа (суррогатный ключ);
для сущности Товар - атрибут код товара (суррогатный ключ);
для сущности Продажа- атрибут код_продажи(суррогатный ключ);
для сущности ТоварПродажа - атрибут код_товар-продажа (суррогатный ключ);
для сущности ПродажаСотрудник - атрибут код_продажа-сотрудник(суррогатный ключ);
для сущности ТоварЗаказ - атрибут код товар-заказ(суррогатный ключ);
Определение атрибутов:
Атрибутом сущности является любой признак (свойство), который служит для уточнения, идентификации, классификации, числовой характеристики или выражения состоянии сущности.
1) Определение атрибутов сущности Сотрудник: (код сотрудника,ФИО, опыт, адрес, номер телефона);
2) Определение атрибутов сущности Поставщик: (код поставщика, ФИО, фирма,телефон);
3) Определение атрибутов сущности Поставка: (код поставки, сумма, объем, дата поставки);
4) Определение атрибутов сущности Товар:(код товара, вид, торговая марка, закупочная цена, розничная цена, страна-производитель, срок годности, надбавка);
5) Определение атрибутов сущности Продажа:(код продажи, дата продажи, прибыль);
6) Определение атрибутов сущности Заказ:(код заказа, дата заказа, сумма, объем);
7) Определение атрибутов сущности ТоварПродажа:(код товар-продажа, код товара, код продажи);
8) Определение атрибутов сущности ПродажаСотрудник:(код продажа-сотрудник, код сотрудника, код продажи);
9) Определение атрибутов сущности ТоварЗаказ:(код товар-заказ, код товара, код заказа).
Построение ER-модели
Диаграмма сущность-связь (ERD) - инструмент разработки моделей данных, обеспечивающий стандартный способ определения данных и отношений между ними. Она включает сущности и связи, отражающие основные бизнес-правила предметной области.
Рис.1: Логическая модель в нотации Баркера
Рис.2: Логическая модель в нотации Бахмана
Рис.3: Реляционная модель данных
Проведение процесса нормализации и денормализации
Нормальная форма -- свойство отношения в реляционной модели данных, характеризующее его с точки зрения избыточности, которая потенциально может привести к логически ошибочным результатам выборки или изменения данных. Нормальная форма определяется как совокупность требований, которым должно удовлетворять отношение.
1НФ. Отношение находится в первой нормальной форме тогда и только тогда, когда в любом допустимом значении отношения каждый его кортеж содержит только одно значение для каждого из атрибутов. В реляционной модели отношение всегда находится в первой нормальной форме по определению понятия отношение. Что же касается таблиц в существующих реляционных СУБД (SQL-СУБД), то они могут не быть правильными отношениями и, соответственно, не находиться в 1NF.
Сущности Сотрудник, Поставщик, Заказ, Поставка, Товар, Продажа, ТоварПродажа, ПродажаСотрудник соответствуют 1НФ, так как:
имеют первичные ключи;
не имеют повторяющихся групп.
2НФ. Отношение находится во второй нормальной форме, если оно находится в первой нормальной форме, и при этом любой его атрибут, не входящий в состав потенциального ключа, функционально полно зависит от каждого возможного ключа. Функционально полная зависимость означает, что атрибут функционально зависит от всего составного потенциального ключа, но при этом не находится в функциональной зависимости от какой-либо из входящих в него частей. Или другими словами: в 2NF нет неключевых атрибутов, зависящих от части составного ключа.
Сущности Сотрудник, Поставщик, Заказ, Поставка, Товар, Продажа, ТоварПродажа, ПродажаСотрудник соответствуют 2НФ, так как:
представлены в 1НФ;
имеют простой первичный ключ.
3НФ. Согласно определению Кодда, таблица находится в 3НФ тогда и только тогда, когда выполняются следующие условия:
1) Отношение R (таблица) находится во второй нормальной форме;
2) Каждый непервичный атрибут R находится в нетранзитивной (то есть прямой) зависимости от каждого ключа R.
Таким образом, отношение находится в 3NF тогда и только тогда, когда оно находится во 2NF и отсутствуют транзитивные зависимости неключевых атрибутов от ключевых. Транзитивной зависимостью неключевых атрибутов от ключевых называется следующая: A > B и B > C, где A -- набор ключевых атрибутов (ключ), B и С -- различные множества неключевых атрибутов.
При решении практических задач в большинстве случаев третья нормальная форма является достаточной. Процесс проектирования реляционной базы данных, как правило, заканчивается приведением к 3NF.
Сущности Сотрудник, Поставщик, Заказ, Поставка, Товар, Продажа, ТоварПродажа, ПродажаСотрудник соответствуют 3НФ, так как:
представлены в 2НФ;
между неключевыми атрибутами нет взаимосвязей.
Денормализация -- намеренное приведение структуры базы данных в состояние, не соответствующее критериям нормализации, обычно проводимое с целью ускорения операций чтения из базы за счет добавления избыточных данных.
Анализ целостности данных представленной модели Базы данных.
Обеспечение целостности данных гарантирует качество данных таблице.
При планировании таблиц имеются два важных шага: определить допустимые значения для столбца и решить, каким образом обеспечить целостность данных в этом столбце. Целостность данных подразделяется на следующие категории:
Сущностная целостность
Доменная целостность
Ссылочная целостность
Пользовательская целостность
2.3.2 Проектирование и реализация подсистемы ввода
Подсистема ввода реализуется в среде объектно-ориентированного языка Borland Delphi 7.0.
Для автоматизированной информационной системы ООО «Статус» были разработаны:
Модуль авторизации и идентификации (UnitReg) появляется при запуске приложения и разрешает:
Вводить инициалы и пароль пользователя;
В случае прохождения авторизации пользователя появляется окно приветствия ООО «Статус»;
Затем появляется модуль главного меню. Модуль главного меню состоит из формы, где расположены пункты меню, в каждом пункте имеются подпункты для работы с приложением:
- Файл, содержится подпункт Выход - для выхода из приложения.
- Справочники, содержатся подпункты: Сотрудники, Продажи, Поставщики, Товары, Заказы):
- О программе, содержит подпункт с информацией о названии, версии программы и имени разработчика АИС:
На главной форме используются компоненты: Image - отображение картинки, MainMenu - создание главного меню и подпунктов.
2.3.3 Проектирование и реализация подсистемы вывода
Подсистема вывода содержит операции над работой с данными в разделе справочник, такие как: показ информации, изменение, добавление, удаление и сортировка информации.
На данной форме используются компоненты: Edit - для ввода текста, Button - кнопки для подтверждения или отмены , Label - отображение надписей (см. приложение 3).
ToolButton1 -кнопка добавления данных о сотруднике;
ToolButton2 - кнопка удаления данных о сотруднике;
ToolButton3 - кнопка изменения данных о сотруднике;
ToolButton4 - кнопка просмотра данных сотрудника;
ToolButton5 - кнопка сортировки данных о сотруднике;
PopupMenu - компонент, позволяющий выборку сортировки данных о сотруднике;
DBGrid1 - объект для отображения таблицы сотрудников.
Рис.1.Форма модуля для таблицы Сотрудники
Аналогичные кнопки с операциями, содержащимися в разделе справочник ,можно осуществлять и над остальными таблицами:
Рис.2.Форма модуля для таблицы Продажи
Рис.3.Форма модуля для таблицы Поставщики
Рис.4.Форма модуля для таблицы Товары
Рис.5.Форма модуля для таблицы Заказы
Таким образом, в данной подсистеме можно увидеть все разделы справочника, для созданных таблиц БД.
2.3.4 Подсистема обработки
С помощью функциональной структуры подсистемы обработки ООО «Статус» можно осуществить следующую обработку данных:
-сортировку данных;
-просмотр данных;
-добавление данных;
-изменение данных;
-удаление данных.
На форме присутствуют следующие элементы модуля:
Label1 - компонент, на котором расположена надпись «Номер сотрудника»;
Label2 - компонент, на котором расположена надпись «Фамилия»;
Label3 - компонент, на котором расположена надпись «Опыт»;
Label4 - компонент, на котором расположена надпись «Пароль»;
Label5 - компонент, на котором расположена надпись «Адрес»;
Label6 - компонент, на котором расположена надпись «Телефон»;
Label - компонент, на котором расположена надпись «Возраст»;
DBEdit1- компонент для отображения номера сотрудника;
DBEdit2- компонент для отображения фамилии, имени и отчества сотрудника;
DBEdit3 - компонент для отображения опыта работы сотрудника;
DBEdit4 - компонент для отображения адреса проживания сотрудника;
DBEdit5 - компонент для отображения даты рождения сотрудника;
DBEdit6- компонент для отображения телефона сотрудника;
DBEdit7- компонент для отображения телефона сотрудника
Button1 - кнопка «ОК;
Рис.6. Форма модуля данных сотрудника
Аналогичные компоненты для работы с данными присущи каждой таблице:
Рис.7.Форма модуля данных продажи
Рис.8.Форма модуля данных поставщика
Рис.9.Форма модуля данных товара
Рис.10.Форма модуля данных продажи
Заключение
Целью курсового проекта являлось создание информационной системы, которая бы в полной мере отражала информационные данные и технические составляющие реального предприятия, а также была проста в понимании и использовании ее на практике.
На этапе проектирования была использована программа по разработке логических и реляционных моделей данных, с наглядным отражением атрибутов, входящих в систему работы реального предприятия- CASE-средство Oracle SQL Developer Data Modeler.
В ходе выполнения проекта была применима программа по созданию базы данных предприятия, включающая информационную часть содержания данных - Oracle SQL Developer. Совместно с ней было разработано автоматизированное приложение на платформе Borland Delphi 7.0.
В результате выполнения курсового проекта была получена автоматизированная информационная система, включающая логическое и реляционное представление данных, непосредственно, саму базу данных, а также приложение, отражающее функциональную часть работы предприятия.
Данное приложение должно обеспечивать:
Ввод, хранение, обработку и вывод необходимой информации;
Конфедициальность данных;
Защиту запрещенного доступа;
Подлинность и своевременность данных;
Мобильность доступа к необходимым данным;
Сподручный и понятный интерфейс;
Библиографический список
1. Архангельский А.Я.Программирование в Delphi 5 2-е изд., перераб. и дополн. -М.: ЗАО «издательство БИНОМ», 2000г. 1072с.
2.Вендров А.М. Проектирование программного обеспечения экономических информационных систем: Учебник. - М.: Финансы и статистика, 2000. - 352 с.
3. Глушаков С.В., Ломотько Д.В. Базы данных: Учебный курс. -Харьков: Фашо; М.: ООО «Издательство АСТ», 2000. -504с.
4. Дейт К. Дж. Введение в системы баз данных: Пер. с англ. - Киев, М., СПб.: Изд. Дом «Вильямс», 1999. -848с.
5. Миндалёв И.В. Моделирование с помощью CASE -средства ERWIN за 8 дней: Учебное пособие / Краснояр. Гос. Аграрн. Ун-т. - Красноярск, 2001, -85с
6. Пейдж Вильям. Использование Oracle 8/8i. Специальное издание: пер. с англ. -М.: Издательский дом «Вильямс», 1999. -1024с.
7. Симонович С. В, Г. А Евсеев, А. Г Алексеев. Специальная информатика : Учебное пособие/ С. В Симонович, Г. А Евсеев, А. Г Алексеев. -М.: Аст-Пресс: Инфорком-Пресс, 2002, 400 с.
8.Фаронов В.В. Программирование баз данных в Delphi 7.0. Учебный курс-
СПб.: Питер, 2003.
Приложение 1
Создание таблиц БД ООО «Статус».:
create table Sotr(
kodsotr NUMBER NOT NULL ,
fio VARCHAR2 (35) ,
expir VARCHAR2 (10) ,
adr VARCHAR2 (30) ,
age VARCHAR2 (15) ,
tel NUMBER ,
primary key (kodsotr));
create table Postavchik (
kodpostavchika number NOT NULL ,
fio VARCHAR2 (35) ,
firm VARCHAR2 (20),
tel NUMBER ,
primary key (kodpostavchika));
create table Tovar (
kodtov NUMBER NOT NULL ,
vid VARCHAR2 (35) ,
torg_marka VARCHAR2 (45),
zakup_cena number,
rozn_cena number,
str_proizv VARCHAR2 (30),
srok_god VARCHAR2 (20) ,
nadbav VARCHAR2 (20) ,
primary key (kodtov ));
create table Prodaja (
kodprod NUMBER NOT NULL ,
data_prod VARCHAR2 (8) ,
profit VARCHAR2 (20) ,
primary key (kodprod));
create table Post (
kodpostavki NUMBER NOT NULL ,
kodtov number,
kodpostavchika number,
data_post VARCHAR2 (8) ,
summa VARCHAR2 (20) ,
volume VARCHAR2 (20) ,
primary key (kodpostavki),
foreign key(kodtov) references
Tovar,
foreign key(kodpostavchika) references
Postavchik);
create table Zakaz (
kodzakaz NUMBER NOT NULL ,
kodsotr number,
kodpostavki number,
data_zak VARCHAR2 (8) ,
summa VARCHAR2 (20) ,
volume VARCHAR2 (20) ,
primary key (kodzakaz) ,
foreign key (kodsotr) references
Sotr,
foreign key (kodpostavki)references Postavchik);
create table Prod_Sotr (
kodprodsotr number NOT NULL ,
kodprod number ,
kodsotr number ,
primary key (kodprodsotr),
foreign key(kodprod) references
Prodaja,
foreign key(kodsotr) references
Sotr);
create table Tov_Prod (
kodtovprod number NOT NULL ,
kodtov number ,
kodprod number ,
primary key(kodtovprod) ,
foreign key(kodtov) references
Tovar,
foreign key(kodprod) references
create table Tov_Zak (
kodtovzak number NOT NULL ,
kodtov number ,
kodzak number ,
primary key(kodtovzak) ,
foreign key(kodtov) references
Tovar,
foreign key(kodzak) references
Zakaz);
Prodaja);Заполнение данных в таблицы:
insert into Sotr values (1,'Облаева Т.В.','6 лет','ул.Пархоменко 12-3','42 года','21763');
insert into Sotr values (2,'Стюрьева Г.В.','3 года','ул.Весны 14-7','36 лет','21673');
insert into Sotr values (3,'Сорокина А.Г.','5 лет','ул.Мира 22-43','29 лет','21954');
insert into Sotr values (4,'Буряченко Ю.И.','7 лет','ул.Воронова 32-17','34 года','22644');
insert into Sotr values (5,'Плешакова Е.М.','2 года','ул.Пионерская 3-8','27 лет','27164');
insert into Sotr values (6,'Асташова О.А.','4 года','ул.Чкалова 21-16','32 года','23758');
insert into Sotr values (7,'Жигалова К.Ю.','6 лет','ул.Дружбы 1-12','35 лет','23691');
insert into Sotr values (8,'Юрьева Н.В.','3 года','ул.9 мая 15-18','30 лет','24267');
insert into Sotr values (9,'Волкова И.К.','8 лет','ул.Крупской 8-6','29 лет','21954');
insert into Sotr values (10,'Грачева С.Л.','5 лет','ул.Заводская 57-15','37 лет','21724');
insert into Postavchik values (1,'Вуккерт Ф.Ю.','Делси','29671');
insert into Postavchik values (2,'Милёхин А.А.','Троя','36955');
insert into Postavchik values (3,'Старков Б.Г.','Авангард','35742');
insert into Postavchik values (4,'Ермилов В.И.','Фаер','32921');
insert into Postavchik values (5,'Бекетов М.Л.','Авентин','25318');
insert into Postavchik values (6,'Ворничан Э.Е.','Лудинг','48912');
insert into Postavchik values (7,'Жаров К.С.','Прайм','37746');
insert into Postavchik values (8,'Прусов И.И.','Сибиряк','26385');
insert into Postavchik values (9,'Ларин П.Г.','Стар','45296');
insert into Postavchik values (10,'Янков Д.О.','Экор','28248');
insert into Tovar values (1,'Хлеб','Красноярский хлеб','14','16','Россия','48 часов','3процента');
insert into Tovar values (2,'Горбуша в банке','Синее море','30','35','Россия','3 года','4процента');
insert into Tovar values (3,'Орех мясной','Дымов','285','310','Украина','45 суток','6процентов');
insert into Tovar values (4,'Чай','Ахмад','28','33','Китай','1 год','4процента');
insert into Tovar values (5,'Кофе','Черная карта','180','202','Бразилия','3 года','4процента');
insert into Tovar values (6,'Шоколадная паста','Нутелла','73','77','Россия','96 часов','5процентов');
insert into Tovar values (7,'Спагетти','Макфа','13','18','Россия','2 года','4процента');
insert into Tovar values (8,'Шоколад','Бабаевский ','40','44','Украина','3 года','7процентов');
insert into Tovar values (9,'Сгущёнка','Простоквашино','39','45','Россия','3 года','6процентов');
insert into Tovar values (10,'Паштет грибной','Хамме','24','30','Германия','2 года','2процента');
insert into Prodaja values (1,'16.12','30000 тысяч');
insert into Prodaja values (2,'17.12','28000 тысяч');
insert into Prodaja values (3,'18.12','32000 тысячи');
insert into Prodaja values (4,'19.12','24000 тысячи');
insert into Prodaja values (5,'20.12','36000 тысяч');
insert into Prodaja values (6,'21.12','38000 тысяч');
insert into Prodaja values (7,'22.12','40000 тысяч');
insert into Prodaja values (8,'23.12','41000 тысяча');
insert into Prodaja values (9,'24.12','44000 тысячи');
insert into Prodaja values (10,'25.12','47000 тысяч');
insert into Post values (1,2,7,'14.12','18000','6 коробок');
insert into Post values (2,4,3,'11.12','22000','8 упаковок');
insert into Post values (3,6,10,'9.12','26000','7 ящиков');
insert into Post values (4,3,8,'15.12','31000','13 мешков');
insert into Post values (5,7,4,'13.12','18000','5 коробок');
insert into Post values (6,10,5,'19.12','24000','9 ящиков');
insert into Post values (7,8,3,'17.12','15000','4 упаковки');
insert into Post values (8,5,2,'18.12','21000','5 мешков');
insert into Post values (9,1,10,'12.12','17000','6 коробок');
insert into Post values (10,4,6,'20.12','35000','16 ящиков');
insert into Zakaz values (1,4,7,'11.12','22000','7 коробок');
insert into Zakaz values (2,3,9,'15.12','31000','13 мешков');
insert into Zakaz values (3,2,8,'14.12','18000','6 упаковок');
insert into Zakaz values (4,5,10,'12.12','17000','5 ящиков');
insert into Zakaz values (5,7,4,'19.12','24000','10 коробок');
insert into Zakaz values (6,8,6,'18.12','20000','6 мешков');
insert into Zakaz values (7,4,5,'13.12','19000','6 ящиков');
insert into Zakaz values (8,6,3,'9.12','25000','5 упаковок');
insert into Zakaz values (9,10,2,'20.12','34000','16 мешков');
insert into Zakaz values (10,9,8,'17.12','16000','6 коробок');
insert into Prod_Sotr values (1,2,3);
insert into Prod_Sotr values (2,5,6);
insert into Prod_Sotr values (3,7,8);
insert into Prod_Sotr values (4,9,10);
insert into Prod_Sotr values (5,8,2);
insert into Prod_Sotr values (6,4,9);
insert into Prod_Sotr values (7,1,4);
insert into Prod_Sotr values (8,3,7);
insert into Prod_Sotr values (9,6,5);
insert into Prod_Sotr values (10,10,1);
insert into Tov_Prod values (1,2,3);
insert into Tov_Prod values (2,5,6);
insert into Tov_Prod values (3,7,8);
insert into Tov_Prod values (4,9,10);
insert into Tov_Prod values (5,8,2);
insert into Tov_Prod values (6,4,9);
insert into Tov_Prod values (7,1,4);
insert into Tov_Prod values (8,3,7);
insert into Tov_Prod values (9,6,5);
insert into Tov_Prod values (10,10,1);
insert into Tov_Zak values (1,2,3);
insert into Tov_Zak values (2,5,6);
insert into Tov_Zak values (3,7,8);
insert into Tov_Zak values (5,9,10);
insert into Tov_Zak values (4,8,2);
insert into Tov_Zak values (7,4,9);
insert into Tov_Zak values (6,1,4);
insert into Tov_Zak values (8,3,7);
insert into Tov_Zak values (10,6,5);
insert into Tov_Zak values (9,10,1);
Простые и сложные запросы
1)вывести всю информацию о сотрудниках,при этом выводя их возраст в порядке возрастания.
select * from Sotr order by age ASC;
KODSOTR FIO EXPIR ADR AGE TEL
---------------------- ----------------------------------- ---------- ------------------------------ --------------- ----------------------
5 Плешакова Е.М. 2 года ул.Пионерская 3-8 27 лет 27164
9 Волкова И.К. 8 лет ул.Крупской 8-6 29 лет 21954
3 Сорокина А.Г. 5 лет ул.Мира 22-43 29 лет 21954
8 Юрьева Н.В. 3 года ул.9 мая 15-18 30 лет 24267
6 Асташова О.А. 4 года ул.Чкалова 21-16 32 года 23758
4 Буряченко Ю.И. 7 лет ул.Воронова 32-17 34 года 22644
7 Жигалова К.Ю. 6 лет ул.Дружбы 1-12 35 лет 23691
2 Стюрьева Г.В. 3 года ул.Весны 14-7 36 лет 21673
10 Грачева С.Л. 5 лет ул.Заводская 57-15 37 лет 21724
1 Облаева Т.В. 6 лет ул.Пархоменко 12-3 42 года 21763
10 rows selected
2)Вывести названия фирм,начинающихся на букву 'А' или 'С'
select firm from Postavchik where firm like 'А%' or firm like 'С%';
FIRM
--------------------
Авангард
Авентин
Сибиряк
Стар
4 rows selected
3)Вывести все товары,страна-производитель которых-Украина
select * from Tovar where str_proizv='Украина';
KODTOV VID TORG_MARKA ZAKUP_CENA ROZN_CENA STR_PROIZV SROK_GOD NADBAV
---------------------- ----------------------------------- --------------------------------------------- ---------------------- ---------------------- ------------------------------ -------------------- --------------------
3 Орех мясной Дымов 285 310 Украина 45 суток 6процентов
8 Шоколад Бабаевский 40 44 Украина 3 года 7процентов
2 rows selected
4)вывести стаж работы сотрудников в порядке убывания
select expir from Sotr order by expir DESC;
EXPIR
----------
8 лет
7 лет
6 лет
6 лет
5 лет
5 лет
4 года
3 года
3 года
2 года
10 rows selected
5)вывести все поставки,которые были сделаны 15.11
select data_post from Post where data_post='15.12';
KODPOSTAVKI KODTOV KODPOSTAVCHIKA DATA_POST SUMMA VOLUME
---------------------- ---------------------- ---------------------- --------- -------------------- --------------------
4 3 8 15.12 31000 13 мешков
1 rows selected
6)вывести коды продаж,которые были сделаны в интервале с 17.12 по 21.12
select kodprod from Prodaja where data_prod between '17.12' and '21.12';
KODPROD
----------------------
2
3
4
5
6
5 rows selected
7)вывести все даты,объемы и суммы заказов,где сумма заказа больше 25000
select data_zak, volume, summa from Zakaz where summa>'25000' ;
DATA_ZAK VOLUME SUMMA
-------- -------------------- --------------------
15.12 13 мешков 31000
20.12 16 мешков 34000
2 rows selected
8)select fio from Sotr where fio between 'Б' and 'К' UNION select fio from Postavchik where fio between 'Б' and 'К';
FIO
-----------------------------------
Бекетов М.Л.
Буряченко Ю.И.
Волкова И.К.
Ворничан Э.Е.
Вуккерт Ф.Ю.
Грачева С.Л.
Ермилов В.И.
Жаров К.С.
Жигалова К.Ю.
9 rows selected
9)Вывести информацию о сотруднике, выполнившего максимальное количество заказов
select fio
from sotr, zakaz
where (sotr.kodsotr = zakaz.kodsotr) and
(sotr.kodsotr in (select kodsotr from zakaz group by kodsotr having count(*)=
(select max(count(*)) from zakaz group by kodsotr))) group by fio;
FIO
-----------------------------------
Буряченко Ю.И.
1 rows selected
10)Вывести список поставок,сделанных поставщиком № 10;
select Post.kodpostavki, Post.kodpostavchika from Postavchik,Post
where Postavchik.kodpostavchika=Post.kodpostavchika and Post.kodpostavchika=10;
KODPOSTAVKI KODPOSTAVCHIKA
---------------------- ----------------------
3 10
9 10
2 rows selected
11)Вывести код продажи и товар,срок годности которого 3 года
select prodaja.kodprod,tovar.vid
from prodaja, tovar,Tov_Prod
where prodaja.kodprod=Tov_Prod.kodprod and Tov_Prod.kodtov=Tovar.kodtov and Tovar.srok_god='3 года';
KODPROD VID
---------------------- -----------------------------------
6 Горбуша в банке
2 Кофе
7 Шоколад
5 Сгущёнка
4 rows selected
12)Вывести код товара и вид поставленного товара, розничная цена которого больше 100
select post.kodtov,tovar.vid,tovar.rozn_cena
from post,tovar
where Tovar.kodtov=Post.kodtov and tovar.rozn_cena>100;
KODTOV VID ROZN_CENA
---------------------- ----------------------------------- ----------------------
3 Орех мясной 310
5 Кофе 202
2 rows selected
13) Вывести имя поставщика и торговую марку с датой поставки на 15.12
select postavchik.fio,post.kodpost,tovar.torg_marka
from postavchik,post,tovar
where postavchik.kodpostavсhika=post.kodpostavсhika and post.kodtov=tovar.kodtov and post.data_post='15.12';
FIO DATA_POST TORG_MARKA
----------------------------------- --------- ---------------------------------------------
Прусов И.И. 15.12 Дымов
14)Вывести код поставщика, который поставлял шоколад
select tovar.vid,Post.kodpostavchika from postavchik,post,tovar, tov_prod
where postavchik.kodpostavchika=post.kodpostavchika and tovar.kodtov=tov_prod.kodtov
and postavchik.kodpostavchika=4 and tovar.kodtov=8;
VID KODPOSTAVCHIKA
----------------------------------- ----------------------
Шоколад 4
1 rows selected
15)вывести все коды продаж,прибыль которых больше 41000 рублей за период с 21.12 по 24.12
select PRODAJA.kodprod,Prodaja.profit,Prodaja.data_prod from PRODAJA, SOTR, PROD_SOTR
where SOTR.Kodsotr=PROD_SOTR.Kodsotr and PRODAJA.Kodprod=PROD_SOTR.Kodprod and Prodaja.profit>'41000'
and Prodaja.data_prod between '21.12' and '24.12';
KODPROD PROFIT DATA_PROD
---------------------- -------------------- ---------
9 44000 тысячи 24.12
8 41000 тысяча 23.12
2 rows selected
16)Вывести номер поставки и дату, когда поставщик номер 5 сделал поставку паштета;
select POST.kodpostavki, POST.Data_post from POST, POSTAVCHIK, TOVAR
where (Postavchik.kodpostavchika=Post.kodpostavchika) and (Tovar.kodtov=Post.kodtov)
and ((POSTAVCHIK.Kodpostavchika=5) and (TOVAR.vid='Паштет грибной'));
KODPOSTAVKI DATA_POST
---------------------- ---------
6 19.12
1 rows selected
17)вывести объем,дату и сумму заказа,которые сделала сотрудник Стюрьева;
select Zakaz.volume, Zakaz.data_zak,Zakaz.summa FROM zakaz, sotr where Sotr.kodsotr=Zakaz.kodsotr and
Sotr.fio='Стюрьева Г.В.';
VOLUME DATA_ZAK SUMMA
-------------------- -------- --------------------
6 упаковок 14.12 18000
1 rows selected
18)вывести вид,оптовую цену и марку товара,который учавствовал в продаже с кодом №8
select Tovar.vid,Tovar.torg_marka,Tovar.zakup_cena FROM tovar, tov_prod
where tovar.kodtov=tov_prod.kodtov and tov_prod.kodprod=8;
VID TORG_MARKA ZAKUP_CENA
----------------------------------- --------------------------------------------- ----------------------
Орех мясной Дымов 285
1 rows selected
19)Найти информацию о товаре,розничная цена которого на 44 рубля меньше розничной цены шоколадной пасты;
select * FROM tovar where rozn_cena=(select rozn_cena-'44' FROM tovar where vid='Шоколадная паста');
KODTOV VID TORG_MARKA ZAKUP_CENA ROZN_CENA STR_PROIZV SROK_GOD NADBAV
---------------------- ----------------------------------- --------------------------------------------- ---------------------- ---------------------- ------------------------------ -------------------- --------------------
4 Чай Ахмад 28 33 Китай 1 год 4процента
1 rows selected
20)вывести фирму поставщика,его инициалы и телефон,поставляющих товар с кодом 3
select postavchik.firm,postavchik.fio,postavchik.tel FROM postavchik, tovar, post
WHERE (postavchik.kodpostavchika=post.kodpostavchika)
AND (tovar.kodtov=post.kodtov) AND tovar.kodtov=3;
FIRM FIO TEL
-------------------- ----------------------------------- ----------------------
Сибиряк Прусов И.И. 26385
1 rows selected
21)вывести код сотрудника,его инициалы и номер телефона,который сделал продажу с минимальной прибылью
select Sotr.kodsotr, Sotr.fio,Sotr.tel FROM sotr, prodaja, prod_sotr WHERE sotr.kodsotr=prod_sotr.kodprodsotr
AND prodaja.kodprod=prod_sotr.kodprod AND prodaja.profit=(SELECT min(profit ) FROM prodaja);
KODSOTR FIO TEL
---------------------- ----------------------------------- ----------------------
6 Асташова О.А. 23758
1 rows selected
Содержание всех таблиц:
22)select * from Sotr;
KODSOTR FIO EXPIR ADR AGE TEL
---------------------- ----------------------------------- ---------- ------------------------------ --------------- ----------------------
1 Облаева Т.В. 6 лет ул.Пархоменко 12-3 42 года 21763
2 Стюрьева Г.В. 3 года ул.Весны 14-7 36 лет 21673
3 Сорокина А.Г. 5 лет ул.Мира 22-43 29 лет 21954
4 Буряченко Ю.И. 7 лет ул.Воронова 32-17 34 года 22644
5 Плешакова Е.М. 2 года ул.Пионерская 3-8 27 лет 27164
6 Асташова О.А. 4 года ул.Чкалова 21-16 32 года 23758
7 Жигалова К.Ю. 6 лет ул.Дружбы 1-12 35 лет 23691
8 Юрьева Н.В. 3 года ул.9 мая 15-18 30 лет 24267
9 Волкова И.К. 8 лет ул.Крупской 8-6 29 лет 21954
10 Грачева С.Л. 5 лет ул.Заводская 57-15 37 лет 21724
10 rows selected
23)Select * from Postavchik;
KODPOSTAVCHIKA FIO FIRM TEL
---------------------- ----------------------------------- -------------------- ----------------------
1 Вуккерт Ф.Ю. Делси 29671
2 Милёхин А.А. Троя 36955
3 Старков Б.Г. Авангард 35742
4 Ермилов В.И. Фаер 32921
5 Бекетов М.Л. Авентин 25318
6 Ворничан Э.Е. Лудинг 48912
7 Жаров К.С. Прайм 37746
8 Прусов И.И. Сибиряк 26385
9 Ларин П.Г. Стар 45296
10 Янков Д.О. Экор 28248
10 rows selected
24)select * from Post;
KODPOSTAVKI KODTOV KODPOSTAVCHIKA DATA_POST SUMMA VOLUME
---------------------- ---------------------- ---------------------- --------- -------------------- --------------------
1 2 7 14.12 18000 6 коробок
2 4 3 11.12 22000 8 упаковок
3 6 10 9.12 26000 7 ящиков
4 3 8 15.12 31000 13 мешков
5 7 4 13.12 18000 5 коробок
6 10 5 19.12 24000 9 ящиков
7 8 3 17.12 15000 4 упаковки
8 5 2 18.12 21000 5 мешков
9 1 10 12.12 17000 6 коробок
10 4 6 20.12 35000 16 ящиков
10 rows selected
25)select * from tovar;
KODTOV VID TORG_MARKA ZAKUP_CENA ROZN_CENA STR_PROIZV SROK_GOD NADBAV
---------------------- ----------------------------------- --------------------------------------------- ---------------------- ---------------------- ------------------------------ -------------------- --------------------
1 Хлеб Красноярский хлеб 14 16 Россия 48 часов 3процента
2 Горбуша в банке Синее море 30 35 Россия 3 года 4процента
3 Орех мясной Дымов 285 310 Украина 45 суток 6процентов
4 Чай Ахмад 28 33 Китай 1 год 4процента
5 Кофе Черная карта 180 202 Бразилия 3 года 4процента
6 Шоколадная паста Нутелла 73 77 Россия 96 часов 5процентов
7 Спагетти Макфа 13 18 Россия 2 года 4процента
8 Шоколад Бабаевский 40 44 Украина 3 года 7процентов
9 Сгущёнка Простоквашино 39 45 Россия 3 года 6процентов
10 Паштет грибной Хамме 24 30 Германия 2 года 2процента
10 rows selected
26)select * from tov_zak;
KODTOVZAK KODTOV KODZAK
---------------------- ---------------------- ----------------------
1 2 3
4 5 6
3 7 8
5 9 10
2 8 2
7 4 9
6 1 4
8 3 7
10 6 5
9
27)select * from zakaz;
KODZAKAZ KODSOTR KODPOSTAVKI DATA_ZAK SUMMA VOLUME
---------------------- ---------------------- ---------------------- -------- -------------------- --------------------
1 4 7 11.12 22000 7 коробок
2 3 9 15.12 31000 13 мешков
3 2 8 14.12 18000 6 упаковок
4 5 10 12.12 17000 5 ящиков
5 7 4 19.12 24000 10 коробок
6 8 6 18.12 20000 6 мешков
7 4 5 13.12 19000 6 ящиков
8 6 3 9.12 25000 5 упаковок
9 10 2 20.12 34000 16 мешков
10 9 8 17.12 16000 6 коробок
10 rows selected
28)select * from prod_sotr;
KODPRODSOTR KODPROD KODSOTR
---------------------- ---------------------- ----------------------
1 2 3
2 5 6
3 7 8
4 9 10
5 8 2
6 4 9
7 1 4
8 3 7
9 6 5
10 10 1
10 rows selected
29)select * from tov_prod;
KODTOVPROD KODTOV KODPROD
---------------------- ---------------------- ----------------------
1 1 3
2 2 6
3 3 8
4 4 10
5 5 2
6 6 9
7 7 4
8 8 7
9 9 5
10 10 1
10 rows selected
30)select * from prodaja;
KODPROD DATA_PROD PROFIT
---------------------- --------- --------------------
1 16.12 30000 тысяч
2 17.12 28000 тысяч
3 18.12 32000 тысячи
4 19.12 24000 тысячи
5 20.12 36000 тысяч
6 21.12 38000 тысяч
7 22.12 40000 тысяч
8 23.12 41000 тысяча
9 24.12 44000 тысячи
10 25.12 47000 тысяч
10 rows selected
Индексы
drop index FIOIND;
Create index FIOIND on SOTR (Fio asc);
Create index succeeded.
drop index FIRMIND;
Create index FIRMIND on POSTAVCHIK (FIRM asc);
Create index succeeded.
drop index DATA_POSTIND;
Create index DATA_POSTIND on POST (DATA_POST asc);
Create index succeeded.
drop index SUMMAIND;
Create index SUMMAIND on ZAKAZ (SUMMA asc);
Create index succeeded.
drop index VIDINDAIND;
Create index VIDIND on TOVAR (VID asc);
Create index succeeded.
drop index DATA_PRODIND;
Create index DATA_PRODIND on PRODAJA (DATA_PROD asc);
Create index succeeded.
drop index KODPRODIND;
Create index KODPRODIND on PROD_SOTR (KODPROD asc);
Create index succeeded.
drop index KODTOVIND;
Create index KODTOVIND on TOV_PROD (KODTOV asc);
Create index succeeded.
drop index KODZAKIND;
Create index KODZAKIND on TOV_ZAK (KODZAK asc);
Create index succeeded.
Курсоры
Создание курсора Сотрудник
drop table Sotr;
drop table K_Sotr;
create table Sotr(
kodsotr NUMBER NOT NULL ,
fio VARCHAR2 (35) ,
expir VARCHAR2 (10) ,
adr VARCHAR2 (30) ,
age VARCHAR2 (15) ,
tel NUMBER ,
primary key (kodsotr));
create table K_Sotr(
kodsotr NUMBER NOT NULL ,
fio VARCHAR2 (35) ,
expir VARCHAR2 (10) ,
adr VARCHAR2 (30) ,
age VARCHAR2 (15) ,
tel NUMBER,
primary key (kodsotr));
insert into K_Sotr values (1,'Облаева Т.В.','6 лет','ул.Пархоменко 12-3','42 года','21763');
insert into K_Sotr values (2,'Стюрьева Г.В.','3 года','ул.Весны 14-7','36 лет','21673');
insert into K_Sotr values (3,'Сорокина А.Г.','5 лет','ул.Мира 22-43','29 лет','21954');
insert into K_Sotr values (4,'Буряченко Ю.И.','7 лет','ул.Воронова 32-17','34 года','22644');
insert into K_Sotr values (5,'Плешакова Е.М.','2 года','ул.Пионерская 3-8','27 лет','27164');
insert into K_Sotr values (6,'Асташова О.А.','4 года','ул.Чкалова 21-16','32 года','23758');
insert into K_Sotr values (7,'Жигалова К.Ю.','6 лет','ул.Дружбы 1-12','35 лет','23691');
insert into K_Sotr values (8,'Юрьева Н.В.','3 года','ул.9 мая 15-18','30 лет','24267');
insert into K_Sotr values (9,'Волкова И.К.','8 лет','ул.Крупской 8-6','29 лет','21954');
insert into K_Sotr values (10,'Грачева С.Л.','5 лет','ул.Заводская 57-15','37 лет','21724');
declare
K_kodsotr Sotr.kodsotr%type;
K_fio Sotr.fio%type;
K_expir Sotr.expir%type;
K_adr Sotr.adr%type;
K_age Sotr.age%type;
K_tel Sotr.tel%type;
cursor KURSORWE IS
select kodsotr, fio, expir, adr, age, tel from Sotr;
begin
open KURSORWE;
loop
fetch KURSORWE into K_kodsotr, K_fio, K_expir, K_adr, K_age, K_tel;
exit when KURSORWE%notfound;
insert into K_Sotr (kodsotr, fio, expir, adr, age, tel)
values (K_kodsotr, K_fio, K_expir, K_adr, K_age, K_tel);
end loop;
close KURSORWE;
commit;
end;
/
select * from k_Sotr;
create table succeeded.
create table succeeded.
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
anonymous block completed
KODSOTR FIO EXPIR ADR AGE TEL
---------------------- ----------------------------------- ---------- ------------------------------ --------------- ----------------------
1 Облаева Т.В. 6 лет ул.Пархоменко 12-3 42 года 21763
2 Стюрьева Г.В. 3 года ул.Весны 14-7 36 лет 21673
3 Сорокина А.Г. 5 лет ул.Мира 22-43 29 лет 21954
4 Буряченко Ю.И. 7 лет ул.Воронова 32-17 34 года 22644
5 Плешакова Е.М. 2 года ул.Пионерская 3-8 27 лет 27164
6 Асташова О.А. 4 года ул.Чкалова 21-16 32 года 23758
7 Жигалова К.Ю. 6 лет ул.Дружбы 1-12 35 лет 23691
8 Юрьева Н.В. 3 года ул.9 мая 15-18 30 лет 24267
9 Волкова И.К. 8 лет ул.Крупской 8-6 29 лет 21954
10 Грачева С.Л. 5 лет ул.Заводская 57-15 37 лет 21724
10 rows selected
Создание курсора Поставщик
drop table Postavchik;
drop table R_Postavchik;
create table Postavchik (
kodpostavchika number NOT NULL ,
fio VARCHAR2 (35) ,
firm VARCHAR2 (20),
tel NUMBER ,
primary key (kodpostavchika));
create table R_Postavchik(
kodpostavchika number NOT NULL ,
fio VARCHAR2 (35) ,
firm VARCHAR2 (20),
tel NUMBER ,
primary key (kodpostavchika));
insert into R_Postavchik values (1,'Вуккерт Ф.Ю.','Делси','29671');
insert into R_Postavchik values (2,'Милёхин А.А.','Троя','36955');
insert into R_Postavchik values (3,'Старков Б.Г.','Авангард','35742');
insert into R_Postavchik values (4,'Ермилов В.И.','Фаер','32921');
insert into R_Postavchik values (5,'Бекетов М.Л.','Авентин','25318');
insert into R_Postavchik values (6,'Ворничан Э.Е.','Лудинг','48912');
insert into R_Postavchik values (7,'Жаров К.С.','Прайм','37746');
insert into R_Postavchik values (8,'Прусов И.И.','Сибиряк','26385');
insert into R_Postavchik values (9,'Ларин П.Г.','Стар','45296');
insert into R_Postavchik values (10,'Янков Д.О.','Экор','28248');
declare
R_kodpostavchika Postavchik.kodpostavchika%type;
R_fio Postavchik.fio%type;
R_firm Postavchik.firm%type;
R_tel Postavchik.tel%type;
cursor KURSORWE IS
select kodpostavchika, fio, firm, tel from Postavchik;
begin
open KURSORWE;
loop
fetch KURSORWE into R_kodpostavchika, R_fio, R_firm, R_tel;
exit when KURSORWE%notfound;
insert into R_Postavchik (kodpostavchika, fio, firm, tel)
values (R_kodpostavchika, R_fio, R_firm, R_tel);
end loop;
close KURSORWE;
commit;
end;
/
select * from R_Postavchik;
create table succeeded.
create table succeeded.
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
1 rows inserted
anonymous block completed
KODPOSTAVCHIKA FIO FIRM TEL
---------------------- ----------------------------------- -------------------- ----------------------
1 Вуккерт Ф.Ю. Делси 29671
2 Милёхин А.А. Троя 36955
3 Старков Б.Г. Авангард 35742
4 Ермилов В.И. Фаер 32921
5 Бекетов М.Л. Авентин 25318
6 Ворничан Э.Е. Лудинг 48912
7 Жаров К.С. Прайм 37746
8 Прусов И.И. Сибиряк 26385
9 Ларин П.Г. Стар 45296
10 Янков Д.О. Экор 28248
10 rows selected
Триггеры
Триггер журнализации
create table SOTR(
kodsotr NUMBER NOT NULL ,
fio VARCHAR2 (80) ,
expir VARCHAR2 (80) ,
adr VARCHAR2 (80) ,
age VARCHAR2 (80) ,
tel NUMBER ,
primary key (kodsotr));
create table SOTR1(
kodsotr NUMBER NOT NULL ,
fio VARCHAR2(80) ,
expir VARCHAR2(80) ,
adr VARCHAR2(80) ,
age VARCHAR2(80) ,
tel NUMBER,
OPERATION varchar2(80));
create or replace trigger TRGG
before insert or delete or update on SOTR
for each row
declare
rw1 number;
rw2 varchar2(80);
rw3 varchar2(80);
rw4 varchar2(80);
rw5 VARCHAR2(80);
rw6 number;
rw7 varchar2(80);
begin
if updating then
begin
rw1:=:old.kodsotr;
rw2:=:old.fio;
rw3:=:old.expir;
rw4:=:old.adr;
rw5:=:old.age;
rw6:=:old.tel;
rw7:='update';
insert into SOTR1 values(rw1,rw2,rw3,rw4,rw5,rw6,rw7);
end;
elsif deleting then
begin
rw1:=:old.kodsotr;
rw2:=:old.fio;
rw3:=:old.expir;
rw4:=:old.adr;
rw5:=:old.age;
rw6:=:old.tel;
rw7:='delete';
insert into SOTR1 values(rw1,rw2,rw3,rw4,rw5,rw6,rw7);
end;
elsif inserting then
begin
rw1:=:new.kodsotr;
rw2:=:new.fio;
rw3:=:new.expir;
rw4:=:new.adr;
rw5:=:new.age;
rw6:=:new.tel;
rw7:='insert';
insert into SOTR1 values(rw1,rw2,rw3,rw4,rw5,rw6,rw7);
end;
end if;
end;
/
insert into SOTR values (5,'Плешакова Е.М.','2 года','ул.Пионерская 3-8','27 лет','27164');
insert into SOTR values (6,'Асташова О.А.','4 года','ул.Чкалова 21-16','32 года','23758');
insert into SOTR values (7,'Жигалова К.Ю.','6 лет','ул.Дружбы 1-12','35 лет','23691');
delete from SOTR where kodsotr=6;
update SOTR set fio='Плешакова Е.М.' where kodsotr=5;
SELECT * FROM SOTR1;
create table succeeded.
create table succeeded.
trigger TRGG Compiled.
1 rows inserted
1 rows inserted
1 rows inserted
1 rows deleted
1 rows updated
KODSOTR FIO EXPIR ADR AGE TEL OPERATION
---------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- ---------------------- --------------------------------------------------------------------------------
5 Плешакова Е.М. 2 года ул.Пионерская 3-8 27 лет 27164 insert
6 Асташова О.А. 4 года ул.Чкалова 21-16 32 года 23758 insert
7 Жигалова К.Ю. 6 лет ул.Дружбы 1-12 35 лет 23691 insert
6 Асташова О.А. 4 года ул.Чкалова 21-16 32 года 23758 delete
5 Плешакова Е.М. 2 года ул.Пионерская 3-8 27 лет 27164 update
5 rows selected
2create table Sotr(
id number primary key,
Триггер отслеживания критериев столбца
create table Tovar_LIMIT(
cod number NOT NULL,
maximym integer,
minimym integer,
primary key (cod));
insert into Tovar_LIMIT values (1, 200,0);
create or replace trigger TRG_LIMIT
before
insert or update of zakup_cena on Tovar
for each row
declare
mx INTEGER;
mn INTEGER;
begin
select maximym, minimym into mx, mn from Tovar_LIMIT;
if (:new.zakup_cena<= mn)
then raise_application_error(-20601, 'не принимается. маленькая цена.');
elsif (:new.zakup_cena > mx)
then raise_application_error(-20601, 'не принимается. большая цена.');
end if;
end;
/
insert into Tovar values (3,'Орех мясной','Дымов','0','310','Украина','45 суток','6процентов');
create table succeeded.
create table succeeded.
1 rows inserted
trigger TRG_LIMIT Compiled.
Error starting at line 35 in command:
insert into Tovar values (3,'Орех мясной','Дымов','0','310','Украина','45 суток','6процентов')
Error report:
SQL Error: ORA-20601: не принимается. маленькая цена.
ORA-06512: at 'HR.TRG_LIMIT', line 7
ORA-04088: error during execution of trigger 'HR.TRG_LIMIT'
Триггер автонумерации
create table Sotr(
kodsotr NUMBER NOT NULL ,
fio VARCHAR2 (35) ,
expir VARCHAR2 (10) ,
adr VARCHAR2 (30) ,
age VARCHAR2 (15) ,
tel NUMBER ,
primary key (kodsotr));
create table succeeded.
trigger Sotrkod Compiled
Процедура
Процедура на добавление нового сотрудника в таблицу «Сотрудник»
create or replace procedure new_sotr(
kodsotra in SOTR.kodsotr%TYPE,
FIO1 in varchar2, EXPIR1 varchar2, ADR1 varchar2, AGE1 varchar2, TEL1 NUMBER) as
begin
insert into SOTR(kodsotr, FIO, expir, ADR, age, tel )
values (kodsotra, FIO1, EXPIR1, ADR1, AGE1, TEL1 );
end new_sotr;
/
Execute new_sotr (11,':Жученко В.И.','6 лет','ул.Майская 19-15','39 лет','29774');
procedure new_sotr( Compiled.
anonymous block completed
Приложение 2
create table Sotr(
kodsotr VARCHAR (8),
fio VARCHAR (35) ,
expir VARCHAR (10) ,
adr VARCHAR (30) ,
age VARCHAR (15) ,
tel VARCHAR (8),
sotrudnikpasswd varchar(15),
primary key (kodsotr));
create table Prodaja (
kodprod VARCHAR (8),
data_prod VARCHAR (8) ,
profit VARCHAR (20) ,
primary key (kodprod));
create table Postavchik (
kodpostavchika VARCHAR (8),
fio VARCHAR (35) ,
firm VARCHAR (20),
tel VARCHAR (8),
primary key (kodpostavchika));
create table Tovar (
kodtov VARCHAR (8),
NazvTov VARCHAR (35) ,
cena VARCHAR (8),
primary key (kodtov ));
create table Zakaz (
kodzakaz VARCHAR (8),
kodsotr VARCHAR (8),
kodpostavchika VARCHAR (8),
data_zak VARCHAR (8) ,
primary key (kodzakaz) ,
foreign key (kodsotr) references Sotr,
foreign key (kodpostavchika) references Postavchik);
create table Tov_Zak (
kodtovzak VARCHAR (8),
kodtov VARCHAR (8),
kodzak VARCHAR (8),
primary key(kodtovzak) ,
foreign key(kodtov) references Tovar,
foreign key(kodzak) references Zakaz);
insert into Sotr values ('1','Облаева Т.В.','6 лет','ул.Пархоменко 12-3','42 года','21763','1');
insert into Sotr values ('2','Стюрьева Г.В.','3 года','ул.Весны 14-7','36 лет','21673','1');
insert into Sotr values ('3','Сорокина А.Г.','5 лет','ул.Мира 22-43','29 лет','21954','1');
insert into Sotr values ('4','Буряченко Ю.И.','7 лет','ул.Воронова 32-17','34 года','22644','1');
insert into Sotr values ('5','Плешакова Е.М.','2 года','ул.Пионерская 3-8','27 лет','27164','1');
insert into Sotr values ('6','Асташова О.А.','4 года','ул.Чкалова 21-16','32 года','23758','1');
insert into Sotr values ('7','Жигалова К.Ю.','6 лет','ул.Дружбы 1-12','35 лет','23691','1');
insert into Sotr values ('8','Юрьева Н.В.','3 года','ул.9 мая 15-18','30 лет','24267','1');
insert into Sotr values ('9','Волкова И.К.','8 лет','ул.Крупской 8-6','29 лет','21954','1');
insert into Sotr values ('10','Грачева С.Л.','5 лет','ул.Заводская 57-15','37 лет','21724','1');
insert into Postavchik values ('1','Вуккерт Ф.Ю.','Делси','29671');
insert into Postavchik values ('2','Милёхин А.А.','Троя','36955');
insert into Postavchik values ('3','Старков Б.Г.','Авангард','35742');
insert into Postavchik values ('4','Ермилов В.И.','Фаер','32921');
insert into Postavchik values ('5','Бекетов М.Л.','Авентин','25318');
insert into Postavchik values ('6','Ворничан Э.Е.','Лудинг','48912');
insert into Postavchik values ('7','Жаров К.С.','Прайм','37746');
insert into Postavchik values ('8','Прусов И.И.','Сибиряк','26385');
insert into Postavchik values ('9','Ларин П.Г.','Стар','45296');
insert into Postavchik values ('10','Янков Д.О.','Экор','28248');
insert into Tovar values ('1','Хлеб','16');
insert into Tovar values ('2','Горбуша в банке','35');
insert into Tovar values ('3','Орех мясной','310');
insert into Tovar values ('4','Чай','33');
insert into Tovar values ('5','Кофе','202');
insert into Tovar values ('6','Шоколадная паста','77');
insert into Tovar values ('7','Спагетти','18');
insert into Tovar values ('8','Шоколад','44');
insert into Tovar values ('9','Сгущёнка','45');
insert into Tovar values ('10','Паштет грибной','30');
insert into Prodaja values ('1','16.12','30000 тысяч');
insert into Prodaja values ('2','17.12','28000 тысяч');
insert into Prodaja values ('3','18.12','32000 тысячи');
insert into Prodaja values ('4','19.12','24000 тысячи');
insert into Prodaja values ('5','20.12','36000 тысяч');
insert into Prodaja values ('6','21.12','38000 тысяч');
insert into Prodaja values ('7','22.12','40000 тысяч');
insert into Prodaja values ('8','23.12','41000 тысяча');
insert into Prodaja values ('9','24.12','44000 тысячи');
insert into Prodaja values ('10','25.12','47000 тысяч');
insert into Zakaz values ('1','4','7','11.12');
insert into Zakaz values ('2','3','9','15.12');
insert into Zakaz values ('3','2','8','14.12');
insert into Zakaz values ('4','5','10','12.12');
insert into Zakaz values ('5','7','4','19.12');
insert into Zakaz values ('6','8','6','18.12');
insert into Zakaz values ('7','4','5','13.12');
insert into Zakaz values ('8','6','3','9.12');
insert into Zakaz values ('9','10','2','20.12');
insert into Zakaz values ('10','9','8','17.12');
insert into Tov_Zak values ('1','2','3');
insert into Tov_Zak values ('4','5','6');
insert into Tov_Zak values ('3','7','8');
insert into Tov_Zak values ('5','9','10');
insert into Tov_Zak values ('2','8','2');
insert into Tov_Zak values ('7','4','9');
insert into Tov_Zak values ('6','1','4');
insert into Tov_Zak values ('8','3','7');
insert into Tov_Zak values ('10','6','5');
insert into Tov_Zak values ('9','10','1');
Приложение 3
Программный код ООО «Статус»
program Magazin;
uses
Forms,
Unit1 in 'Unit1.pas' {FormMain},
Unit2 in 'Unit2.pas' {FormReg},
Unit3 in 'Unit3.pas' {FormSotr},
Unit4 in 'Unit4.pas' {DataModule4: TDataModule},
Unit5 in 'Unit5.pas' {FormDanSotr},
Unit6 in 'Unit6.pas' {FormKlient},
Unit7 in 'Unit7.pas' {FormDanKl},
Unit8 in 'Unit8.pas' {FormPostav},
Unit9 in 'Unit9.pas' {FormDanPost},
Unit10 in 'Unit10.pas' {FormTovar},
Unit11 in 'Unit11.pas' {FormDanTov},
Unit12 in 'Unit12.pas' {FormZakaz},
Unit13 in 'Unit13.pas' {FormDanZak};
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TFormMain, FormMain);
Application.CreateForm(TFormReg, FormReg);
Application.CreateForm(TFormSotr, FormSotr);
Application.CreateForm(TDataModule4, DataModule4);
Application.CreateForm(TFormDanSotr, FormDanSotr);
Application.CreateForm(TFormKlient, FormKlient);
Application.CreateForm(TFormDanKl, FormDanKl);
Application.CreateForm(TFormPostav, FormPostav);
Application.CreateForm(TFormDanPost, FormDanPost);
Application.CreateForm(TFormTovar, FormTovar);
Application.CreateForm(TFormDanTov, FormDanTov);
Application.CreateForm(TFormZakaz, FormZakaz);
Application.CreateForm(TFormDanZak, FormDanZak);
Application.Run;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, jpeg;
type
TFormMain = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
Image1: TImage;
procedure N2Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormMain: TFormMain;
implementation
uses Unit3, Unit6, Unit8, Unit10, unit4, Unit12, Unit14;
{$R *.dfm}
procedure TFormMain.N2Click(Sender: TObject);
begin
FormMain.close
end;
procedure TFormMain.N4Click(Sender: TObject);
begin
if Sender=N4 then FormSotrudnikSender:=None;
if not Assigned (FormKlient)
then FormSotr:=TFormsotr.Create(Application);
Formsotr.WindowState:=wsNormal;
Formsotr.show;
end;
procedure TFormMain.N5Click(Sender: TObject);
begin
FormKlient.show;
end;
procedure TFormMain.N6Click(Sender: TObject);
begin
if Sender=N6 then FormPostavchikSender:=None;
if not Assigned (FormPostav)
then FormPostav:=TFormPostav.Create(Application);
FormPostav.WindowState:=wsNormal;
FormPostav.show;
end;
procedure TFormMain.N7Click(Sender: TObject);
begin
FormTovar.Show;
end;
procedure TFormMain.N8Click(Sender: TObject);
begin
formZakaz.show;
end;
procedure TFormMain.N9Click(Sender: TObject);
begin
Formprog.show;
end;
end.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg;
type
TFormReg = class(TForm)
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormReg: TFormReg;
implementation
uses Unit4, Unit1;
{$R *.dfm}
procedure TFormReg.Button1Click(Sender: TObject);
begin
if DataModule4.TableSotrudnik.locate ('FIO;sotrudnikpasswd', vararrayof ([Edit1.text, Edit2.text]),[])
then
begin
showmessage('Добро пожаловать в базу данных ООО Статус');
FormReg.hide;
if Datamodule4.TableSotrudnik.Fieldbyname ('FIO').Value = '<Болтус Е.Ю.>'
then
begin
FormMain.N4.Enabled:=false;
FormMain.N5.Enabled:=false;
FormMain.N6.Enabled:=false;
FormMain.N7.Enabled:=false;
FormMain.show
end;
end
else
begin
showmessage('Ошибка в имени пользователя или пароле');
end;
end;
end.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, Buttons, Menus, ExtCtrls, jpeg, pngimage,
GIFImg;
type
TFormSotr = class(TForm)
DBGrid1: TDBGrid;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
PopupMenu1: TPopupMenu;
Gj1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
PopupMenu2: TPopupMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
N5: TMenuItem;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Gj1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormSotr: TFormSotr;
implementation
uses Unit5, Unit4, unit13;
{$R *.dfm}
procedure TFormSotr.BitBtn1Click(Sender: TObject);
var txt:string;
begin
if not Assigned (FormDanSotr)
then FormDanSotr:=TFormDanSotr.Create(Application);
FormDanSotr.WindowState:=wsNormal;
FormDanSotr.Show;
DataModule4.TableSotrudnik.Last;
txt:=FormDanSotr.DBEdit1.Text;
DataModule4.TableSotrudnik.Insert;
txt:=IntToStr(StrToInt(txt)+1);
FormDanSotr.DBEdit6.SetFocus;
FormDanSotr.DBEdit1.Text:=txt;
FormDanSotr.DBEdit6.Readonly:=False;
end;
procedure TFormSotr.BitBtn2Click(Sender: TObject);
begin
if application.MessageBox('Вы действительно хотите удалить строку?',
'Подтверждение удаления записи',
mb_YESNO)=idYes
then DataModule4.TableSotrudnik.Delete
end;
procedure TFormSotr.BitBtn3Click(Sender: TObject);
begin
if not Assigned (FormDanSotr)
then FormDanSotr:=TFormDanSotr.Create(Application);
FormDanSotr.WindowState:=wsNormal;
FormDanSotr.Show;
DataModule4.TableSotrudnik.Edit;
FormDanSotr.DBEdit6.Readonly:=False;
end;
procedure TFormSotr.BitBtn4Click(Sender: TObject);
begin
if not Assigned (FormDanSotr)
then FormDanSotr:=TFormDanSotr.Create(Application);
FormDanSotr.WindowState:=wsNormal;
FormDanSotr.Show;
FormDanSotr.DBEdit1.Readonly:=true;
FormDanSotr.DBEdit2.Readonly:=true;
FormDanSotr.DBEdit3.Readonly:=true;
FormDanSotr.DBEdit4.Readonly:=true;
FormDanSotr.DBEdit5.Readonly:=true;
FormDanSotr.DBEdit6.Readonly:=true;
end;
procedure TFormSotr.DBGrid1DblClick(Sender: TObject);
begin
case FormSotrudnikSender of
zakaz: begin
DataModule4.TableZakaz.FieldByName('FIO').Value:=
DataModule4.TableSotrudnik.FieldByName('FIO').Value;
FormDanZak.DBEdit5.Text:=
DataModule4.TableSotrudnik.FieldByName('FIO').Value;
DataModule4.TableZakaz.FieldByName('kodsotr').Value:=
DataModule4.TableSotrudnik.FieldByName('kodsotr').Value;
FormDanZak.DBEdit4.Text:=
DataModule4.TableSotrudnik.FieldByName('kodsotr').Value;
end;
end;
if FormSotrudnikSender<>None then Close
end;
procedure TFormSotr.Gj1Click(Sender: TObject);
begin
DataModule4.TableSotrudnik.IndexFieldNames:='kodsotr'
end;
procedure TFormSotr.N1Click(Sender: TObject);
begin
DataModule4.TableSotrudnik.IndexFieldNames:='FIO'
end;
procedure TFormSotr.N2Click(Sender: TObject);
begin
DataModule4.TableSotrudnik.IndexFieldNames:='expir'
end;
procedure TFormSotr.N3Click(Sender: TObject);
begin
DataModule4.TableSotrudnik.IndexFieldNames:='adr'
end;
procedure TFormSotr.N4Click(Sender: TObject);
begin
DataModule4.TableSotrudnik.IndexFieldNames:='age'
end;
end.
unit Unit4;
interface
uses
SysUtils, Classes, DB, DBTables;
type
TDataModule4 = class(TDataModule)
Sotrudnik: TDataSource;
TableSotrudnik: TTable;
Prodaja: TDataSource;
TableProdaja: TTable;
TablePostav: TTable;
Postav: TDataSource;
TableTovar: TTable;
Tovar: TDataSource;
TableZakaz: TTable;
Zakaz: TDataSource;
TableSotrudnikKODSOTR: TStringField;
TableSotrudnikFIO: TStringField;
TableSotrudnikEXPIR: TStringField;
TableSotrudnikADR: TStringField;
TableSotrudnikAGE: TStringField;
TableSotrudnikTEL: TStringField;
TableSotrudnikSOTRUDNIKPASSWD: TStringField;
TableProdajaKODPROD: TStringField;
TableProdajaDATA_PROD: TStringField;
TableProdajaPROFIT: TStringField;
TablePostavKODPOSTAVCHIKA: TStringField;
TablePostavFIO: TStringField;
TablePostavFIRM: TStringField;
TablePostavTEL: TStringField;
TableTovarKODTOV: TStringField;
TableTovarNAZVTOV: TStringField;
TableTovarCENA: TStringField;
TableZakazKODZAKAZ: TStringField;
TableZakazKODSOTR: TStringField;
TableZakazKODPOSTAVCHIKA: TStringField;
TableZakazDATA_ZAK: TStringField;
TableZakazFIO: TStringField;
TableZakazFIOP: TStringField;
private
{ Private declarations }
public
{ Public declarations }
end;
var
DataModule4: TDataModule4;
formSotrudnikSender, formPostavchikSender:(None, Zakaz, report);
implementation
{$R *.dfm}
end.
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, jpeg, ExtCtrls;
type
TFormDanSotr = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
Button1: TButton;
DBEdit7: TDBEdit;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormDanSotr: TFormDanSotr;
implementation
uses Unit4;
{$R *.dfm}
procedure TFormDanSotr.Button1Click(Sender: TObject);
begin
if not DBEdit2.ReadOnly
then DataModule4.TableSotrudnik.Post;
FormDanSotr.Close
end;
end.
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls, Buttons, Grids, DBGrids, ExtCtrls, jpeg, pngimage,
GIFImg;
type
TFormKlient = class(TForm)
DBGrid1: TDBGrid;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
PopupMenu1: TPopupMenu;
Gj1: TMenuItem;
N1: TMenuItem;
N3: TMenuItem;
PopupMenu2: TPopupMenu;
N2: TMenuItem;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
N5: TMenuItem;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Gj1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormKlient: TFormKlient;
implementation
uses Unit7, Unit4, Unit5, Unit13;
{$R *.dfm}
procedure TFormKlient.BitBtn1Click(Sender: TObject);
var txt:string;
begin
if not Assigned (FormDanKl)
then FormDanKl:=TFormDanKl.Create(Application);
FormDanKl.WindowState:=wsNormal;
FormDanKl.Show;
DataModule4.TableProdaja.Last;
txt:=FormDanKl.DBEdit1.Text;
DataModule4.TableProdaja.Insert;
txt:=IntToStr(StrToInt(txt)+1);
FormDanKl.DBEdit4.SetFocus;
FormDanKl.DBEdit1.Text:=txt;
FormDanKl.DBEdit4.Readonly:=False;
end;
procedure TFormKlient.BitBtn2Click(Sender: TObject);
begin
if application.MessageBox('Вы действительно хотите удалить строку?',
'Подтверждение удаления записи',
mb_YESNO)=idYes
then DataModule4.TableProdaja.Delete
end;
procedure TFormKlient.BitBtn3Click(Sender: TObject);
begin
if not Assigned (FormDanKl)
then FormDanKl:=TFormDanKl.Create(Application);
FormDanKl.WindowState:=wsNormal;
FormDanKl.Show;
DataModule4.TableProdaja.Edit;
FormDanKl.DBEdit4.Readonly:=False;
end;
procedure TFormKlient.BitBtn4Click(Sender: TObject);
begin
if not Assigned (FormDanKl)
then FormDanKl:=TFormDanKl.Create(Application);
FormDanKl.WindowState:=wsNormal;
FormDanKl.Show;
FormDanKl.DBEdit1.Readonly:=true;
FormDanKl.DBEdit2.Readonly:=true;
FormDanKl.DBEdit4.Readonly:=true;
end;
procedure TFormKlient.Gj1Click(Sender: TObject);
begin
DataModule4.TableProdaja.IndexFieldNames:='kodprod'
end;
procedure TFormKlient.N1Click(Sender: TObject);
begin
DataModule4.TableProdaja.IndexFieldNames:='Data_prod'
end;
procedure TFormKlient.N3Click(Sender: TObject);
begin
DataModule4.TableProdaja.IndexFieldNames:='Profit'
end;
end.
unit Unit7;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, jpeg, ExtCtrls;
type
TFormDanKl = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label4: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit4: TDBEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormDanKl: TFormDanKl;
implementation
uses Unit4;
{$R *.dfm}
procedure TFormDanKl.Button1Click(Sender: TObject);
begin
if not DBEdit2.ReadOnly
then DataModule4.TableProdaja.Post;
FormDanKl.Close
end;
end.
unit Unit8;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, Menus, StdCtrls, Buttons, ExtCtrls, jpeg, pngimage,
GIFImg;
type
TFormPostav = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
PopupMenu1: TPopupMenu;
Gj1: TMenuItem;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
DBGrid1: TDBGrid;
N2: TMenuItem;
PopupMenu2: TPopupMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
N5: TMenuItem;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Gj1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure DBGrid1DblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormPostav: TFormPostav;
implementation
uses Unit9, Unit4, unit13;
{$R *.dfm}
procedure TFormPostav.BitBtn1Click(Sender: TObject);
var txt:string;
begin
if not Assigned (FormDanPost)
then FormDanPost:=TFormDanPost.Create(Application);
FormDanPost.WindowState:=wsNormal;
FormDanPost.Show;
DataModule4.TablePostav.Last;
txt:=FormDanPost.DBEdit1.Text;
DataModule4.TablePostav.Insert;
txt:=IntToStr(StrToInt(txt)+1);
FormDanPost.DBEdit5.SetFocus;
FormDanPost.DBEdit1.Text:=txt;
FormDanPost.DBEdit5.Readonly:=False;
end;
procedure TFormPostav.BitBtn2Click(Sender: TObject);
begin
if application.MessageBox('Вы действительно хотите удалить строку?',
'Подтверждение удаления записи',
mb_YESNO)=idYes
then DataModule4.TablePostav.Delete
end;
procedure TFormPostav.BitBtn3Click(Sender: TObject);
begin
if not Assigned (FormDanPost)
then FormDanPost:=TFormDanPost.Create(Application);
FormDanPost.WindowState:=wsNormal;
FormDanPost.Show;
DataModule4.TablePostav.Edit;
FormDanPost.DBEdit5.Readonly:=False;
end;
procedure TFormPostav.BitBtn4Click(Sender: TObject);
begin
if not Assigned (FormDanPost)
then FormDanPost:=TFormDanPost.Create(Application);
FormDanPost.WindowState:=wsNormal;
FormDanPost.Show;
FormDanPost.DBEdit1.Readonly:=true;
FormDanPost.DBEdit2.Readonly:=true;
FormDanPost.DBEdit3.Readonly:=true;
FormDanPost.DBEdit5.Readonly:=true;
end;
procedure TFormPostav.DBGrid1DblClick(Sender: TObject);
begin
case FormPostavchikSender of
zakaz: begin
DataModule4.TableZakaz.FieldByName('FIOP').Value:=
DataModule4.TablePostav.FieldByName('FIO').Value;
FormDanZak.DBEdit6.Text:=
DataModule4.TablePostav.FieldByName('FIO').Value;
DataModule4.TableZakaz.FieldByName('kodpostavchika').Value:=
DataModule4.TablePostav.FieldByName('kodpostavchika').Value;
FormDanZak.DBEdit3.Text:=
DataModule4.TablePostav.FieldByName('kodpostavchika').Value;
end;
end;
if FormPostavchikSender<>None then Close
end;
procedure TFormPostav.Gj1Click(Sender: TObject);
begin
DataModule4.TablePostav.IndexFieldNames:='kodpostavchika'
end;
procedure TFormPostav.N1Click(Sender: TObject);
begin
DataModule4.TablePostav.IndexFieldNames:='FIO'
end;
procedure TFormPostav.N2Click(Sender: TObject);
begin
DataModule4.TablePostav.IndexFieldNames:='firm'
end;
procedure TFormPostav.N3Click(Sender: TObject);
begin
DataModule4.TablePostav.IndexFieldNames:='tel'
end;
end
unit Unit9;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, jpeg, ExtCtrls;
type
TFormDanPost = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label5: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit5: TDBEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormDanPost: TFormDanPost;
implementation
uses Unit4;
{$R *.dfm}
procedure TFormDanPost.Button1Click(Sender: TObject);
begin
if not DBEdit2.ReadOnly
then DataModule4.TablePostav.Post;
FormDanPost.Close
end;
end.
unit Unit10;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, Menus, StdCtrls, Buttons, ExtCtrls, jpeg, pngimage,
GIFImg;
type
TFormTovar = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
PopupMenu1: TPopupMenu;
Gj1: TMenuItem;
N1: TMenuItem;
N2: TMenuItem;
DBGrid1: TDBGrid;
PopupMenu2: TPopupMenu;
MenuItem1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Gj1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormTovar: TFormTovar;
implementation
uses Unit11, Unit4, Unit5, Unit13;
{$R *.dfm}
procedure TFormTovar.BitBtn1Click(Sender: TObject);
var txt:string;
begin
if not Assigned (FormDanTov)
then FormDanTov:=TFormDanTov.Create(Application);
FormDanTov.WindowState:=wsNormal;
FormDanTov.Show;
DataModule4.TableTovar.Last;
txt:=FormDanTov.DBEdit1.Text;
DataModule4.TableTovar.Insert;
txt:=IntToStr(StrToInt(txt)+1);
FormDanTov.DBEdit3.SetFocus;
FormDanTov.DBEdit1.Text:=txt;
FormDanTov.DBEdit3.Readonly:=False;
end;
procedure TFormTovar.BitBtn2Click(Sender: TObject);
begin
if application.MessageBox('Вы действительно хотите удалить строку?',
'Подтверждение удаления записи',
mb_YESNO)=idYes
then DataModule4.TableTovar.Delete
end;
procedure TFormTovar.BitBtn3Click(Sender: TObject);
begin
if not Assigned (FormDanTov)
then FormDanTov:=TFormDanTov.Create(Application);
FormDanTov.WindowState:=wsNormal;
FormDanTov.Show;
DataModule4.TableTovar.Edit;
FormDanTov.DBEdit3.Readonly:=False;
end;
procedure TFormTovar.BitBtn4Click(Sender: TObject);
begin
if not Assigned (FormDanTov)
then FormDanTov:=TFormDanTov.Create(Application);
FormDanTov.WindowState:=wsNormal;
FormDanTov.Show;
FormDanTov.DBEdit1.Readonly:=true;
FormDanTov.DBEdit2.Readonly:=true;
FormDanTov.DBEdit3.Readonly:=true;
end;
procedure TFormTovar.Gj1Click(Sender: TObject);
begin
DataModule4.TableTovar.IndexFieldNames:='Ntov'
end;
procedure TFormTovar.N1Click(Sender: TObject);
begin
DataModule4.TableTovar.IndexFieldNames:='Nazvtov'
end;
procedure TFormTovar.N2Click(Sender: TObject);
begin
DataModule4.TableTovar.IndexFieldNames:='Cena'
end;
end.
unit Unit11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, jpeg, ExtCtrls;
type
TFormDanTov = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormDanTov: TFormDanTov;
implementation
uses Unit4;
{$R *.dfm}
procedure TFormDanTov.Button1Click(Sender: TObject);
begin
if not DBEdit1.ReadOnly
then DataModule4.TableTovar.Post;
FormDanTov.Close
end;
end.
unit Unit12;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Grids, DBGrids, StdCtrls, Buttons, ExtCtrls, jpeg, pngimage,
GIFImg;
type
TFormZakaz = class(TForm)
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
BitBtn5: TBitBtn;
DBGrid1: TDBGrid;
PopupMenu1: TPopupMenu;
Gj1: TMenuItem;
N1: TMenuItem;
PopupMenu2: TPopupMenu;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Image1: TImage;
Image2: TImage;
Image3: TImage;
Image4: TImage;
Image5: TImage;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure Gj1Click(Sender: TObject);
procedure N1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormZakaz: TFormZakaz;
implementation
uses Unit13, Unit4;
{$R *.dfm}
procedure TFormZakaz.BitBtn1Click(Sender: TObject);
var txt:string;
begin
if not Assigned (FormDanZak)
then FormDanZak:=TFormDanZak.Create(Application);
FormDanZak.WindowState:=wsNormal;
FormDanZak.Show;
DataModule4.TableZakaz.Last;
txt:=FormDanZak.DBEdit1.Text;
DataModule4.TableZakaz.Insert;
txt:=IntToStr(StrToInt(txt)+1);
DataModule4.TableZakaz.FieldByName('Data_zak').Value:=Date;
FormDanZak.DBEdit6.SetFocus;
FormDanZak.DBEdit1.Text:=txt;
FormDanZak.DBEdit6.Readonly:=False;
end;
procedure TFormZakaz.BitBtn2Click(Sender: TObject);
begin
if application.MessageBox('Вы действительно хотите удалить строку?',
'Подтверждение удаления записи',
mb_YESNO)=idYes
then DataModule4.TableZakaz.Delete
end;
procedure TFormZakaz.BitBtn3Click(Sender: TObject);
begin
if not Assigned (FormDanZak)
then FormDanZak:=TFormDanZak.Create(Application);
FormDanZak.WindowState:=wsNormal;
FormDanZak.Show;
DataModule4.TableZakaz.Edit;
FormDanZak.DBEdit5.Readonly:=False;
end;
procedure TFormZakaz.BitBtn4Click(Sender: TObject);
begin
if not Assigned (FormDanZak)
then FormDanZak:=TFormDanZak.Create(Application);
FormDanZak.WindowState:=wsNormal;
FormDanZak.Show;
FormDanZak.DBEdit1.Readonly:=true;
FormDanZak.DBEdit2.Readonly:=true;
FormDanZak.DBEdit4.Readonly:=true;
FormDanZak.DBEdit5.Readonly:=true;
FormDanZak.DBEdit6.Readonly:=true;
end;
procedure TFormZakaz.Gj1Click(Sender: TObject);
begin
DataModule4.TableZakaz.IndexFieldNames:='kodzak'
end;
procedure TFormZakaz.N1Click(Sender: TObject);
begin
DataModule4.TableZakaz.IndexFieldNames:='DATA_zak'
end;
end.
unit Unit13;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Mask, DBCtrls, ExtCtrls, jpeg;
type
TFormDanZak = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
Button1: TButton;
Button2: TButton;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormDanZak: TFormDanZak;
implementation
uses Unit4, Unit1;
{$R *.dfm}
procedure TFormDanZak.Button1Click(Sender: TObject);
begin
if not DBEdit2.ReadOnly
then DataModule4.TableZakaz.Post;
FormDanZak.Close
end;
procedure TFormDanZak.Button3Click(Sender: TObject);
begin
FormSotrudnikSender:=Zakaz;
FormMain.N4Click(Sender);
DataModule4.TableSotrudnik.Locate('FIO',DataModule4.TableZakaz.FieldByName('FIO').Value,[]);
DataModule4.TableSotrudnik.Locate('kodsotr',DataModule4.TableZakaz.FieldByName('kodsotr').Value,[])
end;
procedure TFormDanZak.Button2Click(Sender: TObject);
begin
FormPostavchikSender:=Zakaz;
FormMain.N6Click(Sender);
DataModule4.TablePostav.Locate('FIO',DataModule4.TableZakaz.FieldByName('FIOP').Value,[]);
DataModule4.TablePostav.Locate('kodpostavchika',DataModule4.TableZakaz.FieldByName('kodpostavchika').Value,[])
end;
end.
unit Unit14;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, jpeg, ExtCtrls;
type
TFormProg = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
private
{ Private declarations }
public
{ Public declarations }
end;
var
FormProg: TFormProg;
implementation
{$R *.dfm}
end.