Модель данных по стандарту IDEF1X диаграммы "сущность - связь"
Назначение и характеристики пакета Designer/2000. Анализ предметной области для разработки информационной системы, определение ее целей и задач. Построение моделей данных, разработка базы данных и клиентского приложения. Практические навыки разработки.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 10.04.2014 |
Размер файла | 2,7 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Содержание
- Введение
- 1. Теоретическая часть. CASE средство Designer/2000
- 2. Проектная часть
- 2.1 Постановка задачи
- 2.2 Анализ предметной области
- 2.3 Функциональная модель по стандарту IDEF0
- 2.4 Модель данных по стандарту IDEF1X диаграммы "сущность-связь”
- 2.5 Описание таблиц базы данных
- 2.6 Дерево программных модулей
- 2.7 Схема взаимосвязей модулей и массивов данных
- 2.8 Алгоритм работы модуля dati
- 2.9 Инструкция пользователя
- 2.10 Способы и результаты тестирования программного продукта
- 3. Проверка в работы программы в исключительных ситуациях
- Заключение
- Список использованных источников
- Приложения
Введение
Тенденции развития современных информационных технологий приводят к постоянному возрастанию сложности информационных систем (ИС), создаваемых в различных сферах деятельности человека. Современные крупные проекты ИС характеризуются, как правило: сложностью описания, требующей тщательного моделирования и анализа данных и процессов; наличием совокупности тесно взаимодействующих компонентов (подсистем), имеющих свои локальные задачи и цели функционирования.
Для успешной реализации проекта объект проектирования (ИС) должен быть, прежде всего, адекватно описан, должны быть построены полные и непротиворечивые функциональные и информационные модели ИС. Кроме того, в процессе создания и функционирования ИС информационные потребности пользователей могут изменяться или уточняться, что еще более усложняет разработку и сопровождение таких систем.
Данная курсовая работа посвящена теоретическому изучению CASE-средства Designer/2000 фирмы ORACLE и разработке информационной системы для автоматизации учета ремонта жилищного фонда в муниципальном жилищно-ремонтном эксплуатационном предприятии.
Задачи, поставленные в курсовой работе:
изучение назначения и основных характеристик case средства Designer/2000;
анализ предметной области для разработки ИС;
определение целей и задач системы;
построение моделей данных;
разработка БД и клиентского приложения;
закрепление и развитие теоретических знаний по проектированию ИС;
приобретение практических навыков разработки ИС.
При разработке системы будет применяться структурно-функциональный подход. Для разработки клиентского приложения ИС был выбран язык программирования Borland Delphi 7.0 Enterprise, в связи с имеющимся опытом разработки ИС с помощью данного средства. С помощью Borland Delphi 7.0 Enterprise легко реализуется технология "файл-сервер”, путем прямого доступа к таблицам БД, так и с помощью языка запросов SQL. СУБД выбран MS Access.
1. Теоретическая часть. CASE средство Designer/2000
CASE-средство Designer/2000 2.0 фирмы ORACLE [23] является интегрированным CASE-средством, обеспечивающим в совокупности со средствами разработки приложений Developer/2000 поддержку полного ЖЦ ПО для систем, использующих СУБД ORACLE.
Структура и функции
Designer/2000 представляет собой семейство методологий и поддерживающих их программных продуктов. Базовая методология Designer/2000 (CASE*Method) - структурная методология проектирования систем, полностью охватывающая все этапы жизненного цикла ИС [8,9]. В соответствии с этой методологией на этапе планирования определяются цели создания системы, приоритеты и ограничения, разрабатывается системная архитектура и план разработки ИС. В процессе анализа строятся модель информационных потребностей (диаграмма "сущность-связь"), диаграмма функциональной иерархии (на основе функциональной декомпозиции ИС), матрица перекрестных ссылок и диаграмма потоков данных.
На этапе проектирования разрабатывается подробная архитектура ИС, проектируется схема реляционной БД и программные модули, устанавливаются перекрестные ссылки между компонентами ИС для анализа их взаимного влияния и контроля за изменениями.
На этапе реализации создается БД, строятся прикладные системы, производится их тестирование, проверка качества и соответствия требованиям пользователей. Создается системная документация, материалы для обучения и руководства пользователей. На этапах эксплуатации и сопровождения анализируются производительность и целостность системы, выполняется поддержка и, при необходимости, модификация ИС;
Designer/2000 обеспечивает графический интерфейс при разработке различных моделей (диаграмм) предметной области. В процессе построения моделей информация о них заносится в репозиторий. В состав Designer/2000 входят следующие компоненты:
Repository Administrator - средства управления репозиторием (создание и удаление приложений, управление доступом к данным со стороны различных пользователей, экспорт и импорт данных);
Repository Object Navigator - средства доступа к репозиторию, обеспечивающие многооконный объектно-ориентированный интерфейс доступа ко всем элементам репозитория;
Process Modeller - средство анализа и моделирования деловой деятельности, основывающееся на концепциях реинжиниринга бизнес-процессов и глобальной системы управления качеством;
Systems Modeller - набор средств построения функциональных и информационных моделей проектируемой ИС, включающий средства для построения диаграмм "сущность-связь" (Entity-Relationship Diagrammer), диаграмм функциональных иерархий (Function Hierarchy Diagrammer), диаграмм потоков данных (Data Flow Diagrammer) и средство анализа и модификации связей объектов репозитория различных типов (Matrix Diagrammer);
Systems Designer - набор средств проектирования ИС, включающий средство построения структуры реляционной базы данных (Data Diagrammer), а также средства построения диаграмм, отображающих взаимодействие с данными, иерархию, структуру и логику приложений, реализуемую хранимыми процедурами на языке PL/SQL (Module Data Diagrammer, Module Structure Diagrammer и Module Logic Navigator);
Server Generator - генератор описаний объектов БД ORACLE (таблиц, индексов, ключей, последовательностей и т.д.). Помимо продуктов ORACLE, генерация и реинжиниринг БД может выполняться для СУБД Informix, DB/2, Microsoft SQL Server, Sybase, а также для стандарта ANSI SQL DDL и баз данных, доступ к которым реализуется посредством ODBC;
база приложение информационная система
Forms Generator - генератор приложений. Генерируемые приложения включают в себя различные экранные формы, средства контроля данных, проверки ограничений целостности и автоматические подсказки. Дальнейшая работа с приложением выполняется в среде Developer/2000;
Repository Reports - генератор стандартных отчетов, интегрированный с ORACLE Reports и позволяющий русифицировать отчеты, а также изменять структурное представление информации.
Репозиторий Designer/2000 представляет собой хранилище всех проектных данных и может работать в многопользовательском режиме, обеспечивая параллельное обновление информации несколькими разработчиками. В процессе проектирования автоматически поддерживаются перекрестные ссылки между объектами словаря и могут генерироваться более 70 стандартных отчетов о моделируемой предметной области. Физическая среда хранения репозитория - база данных ORACLE.
Взаимодействие с другими средствами
Designer/2000 можно интегрировать с другими средствами, используя открытый интерфейс приложений API (Application Programming Interface). Кроме того, можно использовать средство ORACLE CASE Exchange для экспорта/импорта объектов репозитория с целью обмена информацией с другими CASE-средствами.
Developer/2000 обеспечивает разработку переносимых приложений, работающих в графической среде Windows, Macintosh или Motif. В среде Windows интеграция приложений Developer/2000 с другими средствами реализуется через механизм OLE и управляющие элементы VBX. Взаимодействие приложений с другими СУБД (DB/2, DB2/400, Rdb) реализуется с помощью средств ORACLE Client Adapter для ODBC, ORACLE Open Gateway и API.
Среда функционирования
Среда функционирования Designer/2000 и Developer/2000 - Windows 3. x, Windows 95, Windows NT.
2. Проектная часть
2.1 Постановка задачи
ИС должна содержать следующую информацию:
Сведения обо всем, жилищном фонде, обслуживаемом муниципальным жилищно-ремонтным эксплуатационным предприятием (МЖРЭП). Основные характеристики жилья (адрес, тип дома, тип и площадь крыши, наличие лифта и т.д.)
Сведения о жильцах проживающих в жилищном фонде (ответственный квартирообладатель и т.д.)
Сведения о видах ремонтных работ (с их стоимостью), которые может осуществлять МРЭП (вид работы, стоимость за единицу и т. д).
Сведения о выполненных ремонтах жилищного фонда (Даты проведения, объем работ, общая стоимость, где проводилась и т.д.).
Сведения о заявках на ремонт от квартирообладателей с предполагаемой датой их выполнения. (Дата заявки, предполагаемая дата выполнения, кто делал заявку и т.д.).
Сведения о невыполненных заявках с указанием причины их невыполнения (заявка, причина отказа и т.д.).
ИС должна обеспечивать:
Ввод, удаление и редактирование той или иной информации, с возможностью автоматизации (подстановок из других таблиц, фиксированных наборов данных и т.д.) и входного контроля от некорректных действий.
Многопользовательский режим работы.
Разграничение прав доступа к ИС с помощью идентификации и аутентификации пользователей (пользователь - соответствующий пароль). Обеспечить возможность оперативного изменения пароля. Количество различных пользователей - не менее 3.
пользователя (только администратора).
Осуществлять поиск по разнообразным признакам (не менее одного в каждой из информационных категорий, например, адрес и т.д.).
Осуществлять сортировку по различным признакам (не менее одного в каждой из информационных категорий, например, по адресу и т.д.).
Вывод информации обо всех жилых объектах, которые были отремонтированы за выбранный промежуток времени, а также общей суммы затраченной на ремонт.
Вывод информации о том, как изменялась стоимость ремонтных работ (стоимость за единицу) за заданный пользователем промежуток времени.
Формирование списка объектов, которые необходимо отремонтировать в периоде, заданном пользователем. Организовать возможность вывода списка объектов в MSWord (или MSExcel).
Формирование отчета (с возможностью вывода на печать) всех своевременно не обеспеченных заявках на текущую дату с указанием причины.
2.2 Анализ предметной области
Предметной областью разрабатываемой информационной системы является деятельность муниципального жилищно-ремонтного эксплуатационного предприятия. Основным назначением ИС является автоматизация учета ремонта жилищного фонда.
Возможностями разрабатываемой ИС являются хранение и обработка информации о заявках на ремонт от квартирообладателей, о жильцах проживающих в жилищном фонде, о жилищном фонде, о видах ремонтных работ.
Целью разрабатываемой ИС является автоматизация учета ремонта жилищного фонда в муниципальном жилищно-ремонтном эксплуатационном предприятии и данных о поступивших заявках на ремонт.
Пользователями разрабатываемой системы будут:
Администратор (доступны все возможности, предусмотренные в программе)
Работник (имеет доступ к работе с заявками, назначению работ по заявкам, а также имеет возможность просматривать отчетность)
Гость (Может подать заявку и просмотреть отчет о выполненных ремонтах жилых объектах)
Для выполнения требований, предъявляемых пользователями, ИС кроме хранения информации должна выполнять следующие функции:
1. Формирование требуемых отчетов, с возможностью вывода на печать.
2. Выводить информацию о том как изменялась цена на ремонтные работы за период.
3. Производить расчет итоговой суммы по заявке.
4. Осуществлять быстрый поиск и сортировку по различным критериям.
Входными документами в разрабатываемой ИС будут являться:
Паспортные данные жильцов
Заявление на проведение ремонтных работ
Выходными документами для разрабатываемой ИС будут являться:
Отчет об отремонтированных жилых объектах
Отчет об изменении стоимости ремонтных работ за период
Отчет обо всех своевременно не обеспеченных заявках на текущую дату с указанием причины
2.3 Функциональная модель по стандарту IDEF0
Функциональная модель по стандарту IDEF0 и методологии SADT была разработана с помощью CASE - средства BPwin v.2.5 Модель разрабатываемой ИС по стандарту IDEF0 представлена в приложении А.
Нулевой уровень |
К-т уровня |
К-т Сбалансированности |
К-т функциональности |
|
Первый уровень |
||||
Второй уровень |
||||
Третий уровень |
||||
Четвертый уровень |
||||
Рассчитанные коэффициенты находятся в пределах нормы и соответствуют всем требованиям. Коэффициент Кь при переходе от одного уровня к другому колеблется в небольших пределах от 0 до 2, что соответствует норме. Коэффициент уровня убывает, что говорит о том что на диаграммах более нижнего уровня количество функций не увеличивается.
Согласно приведенным коэффициентам модель декомпозирована в достаточно степени и корректно. Будем считать, что уровень декомпозиции рассмотренных диаграмм достаточен для отражения цели моделирования, и на диаграммах нижнего уровня в качестве наименований работ используются элементарные функции (с точки зрения пользователя системы).
Элементарными функциями моделируемой ИС являются:
1. Определение категории пользователя
2. Определение полномочий
3. Открытие доступа к БД системы
4. Блокировка записи
5. Добавление, удаление, редактирование записей справочника "Жилищный фонд"
6. Добавление, удаление, редактирование записей справочника "Жильцы"
7. Добавление, удаление, редактирование записей справочника "Ремонтные работы"
8. Разблокирование записи
9. Добавление заявки
10. Назначение работ по заявке
11. Выполнение заявки
12. Отклонение заявки
13. Обновление
14. Смена пароля
15. Резервная копия
16. Поиск по ФИО
17. Поиск по адресу
18. Поиск по заявке
19. Сортировка по адресу
20. Сортировка по ФИО
21. Сортировка по заявкам
22. Формирование отчета об изменении стоимости ремонтных работ за период
23. Формирование отчета "отремонтированные жилые объекты"
24. Формирование отчета "Невыполненные заявки"
23. Формирование отчета "Предполагаемый ремонт жилых объектов"
2.4 Модель данных по стандарту IDEF1X диаграммы "сущность-связь”
Для построения диаграммы "сущность-связь” необходимо определить сущности, обозначающие объекты предметной области, связи между ними и атрибуты. На рисунке 1 изображена модель данных по стандарту IDEF1X.
Рисунок 1 - ER-диаграмма
На рисунке 1 отображены связи, все они относятся к типу не идентифицирующей связи один-ко-многим, так как:
В одном доме могут проживать много человек, один человек проживает только в одном доме.
Жильцы могут оставлять много заявок, но одна заявка соответствует одному жильцу
По заявке назначаются работы, на дну заявку могут быть назначено несколько работ, но одна назначенная работа может соответствовать только одной заявке.
Назначенные работы соответствуют ремонтным работам, одной ремонтной работе может соответствовать несколько назначенных ремонтных работ по заявкам.
Одной ремонтной работе может соответствовать несколько изменений цены. Физическая модель представлена в приложении Б.
2.5 Описание таблиц базы данных
База данных реализована в MS Access и состоит из семи таблиц. Таблица "Zil" содержит информацию о жилищном фонде, описание атрибутов приведено в таблице 2
Таблица 2
Таблица "Zil”
Наименование поля |
Тип даных |
Описание |
|
id_z |
Счетчик |
Код дома, ключевое поле |
|
adr_z |
Текстовый |
Адрес дома, не индексированное |
|
tipdom_z |
Текстовый |
Тип дома |
|
tipkr_z |
Текстовый |
Тип крыши |
|
pl_z |
Числовой |
Площадь |
|
lift_z |
Текстовый |
Лифт |
Таблица Zilci содержит данные о жильцах.
Описание всех атрибутов отражено в таблице 3.
Таблица 3 - Таблица Zilci
Наименование поля |
Тип даных |
Описание |
|
Id_zl |
Счетчик |
Код жильца, ключевое поле |
|
Fio_zl |
Текстовый |
Фамилия имя отчество жильца |
|
Kv_zl |
Числовой |
Номер квартиры жильца |
|
Id_z_zl |
Числовой |
Код дома, подстановка из таблицы "Zil” |
Таблица remr содержит информацию о ремонтных работах и стоимости на них
Таблица 4 - Таблица remr
Наименование поля |
Тип даных |
Описание |
|
Id_rr |
Счетчик |
Код работы, ключевое поле |
|
Nazv_rr |
Текстовый |
Наименование работы |
|
St_rr |
Числовой |
Стоимость за единицу |
|
Edi_rr |
Текстовый |
Единицы измерения |
Таблица Zayavka содержит информацию о сделанных жильцами заявках, предполагаемой дате выполнения.
Таблица 5 - Таблица Zayavka
Наименование поля |
Тип даных |
Описание |
|
id_za |
Счетчик |
Код заявки |
|
id_zl_za |
Числовой |
Адрес жильца делающего заявку, подстановка из таблицы Zilci |
|
dataz_za |
Дата/время |
Дата заявки |
|
datapv_za |
Дата/время |
Предполагаемая дата выполнения заявки |
|
prich_za |
Текстовый |
Причина отказа |
|
datav_za |
Дата/время |
Дата выполнения заявки |
Таблица NaznR содержит информацию о назначенных работах на заявку.
Таблица 6 - Таблица NaznR
Наименование поля |
Тип даных |
Описание |
|
id_nr |
Счетчик |
Код назначенной работы |
|
id_rr_nr |
Числовой |
Код работы, подстановка из таблицы remr |
|
st_rr_nr |
Числовой |
Стоимость работы |
|
ob_nr |
Числовой |
Объем работ |
|
st_nr |
Числовой |
Общая стоимость |
|
id_za_nr |
Числовой |
Код заявки, подстановка из таблицы Zayavka |
Таблица RCen содержит информацию об изменении цен на работы
Таблица 7 - Таблица RCen
Наименование поля |
Тип даных |
Описание |
|
id_rc |
Счетчик |
Код изменения |
|
id_rr_rc |
Числовой |
Код работы, подстановка из таблицы remr |
|
data_rc |
Дата/время |
Дата изменения |
|
cena_rc |
Числовой |
Измененная цена |
На рисунке 2 представлена структура всех таблиц и связи между ними.
Рисунок 2 - Схема данных
2.6 Дерево программных модулей
Разрабатываемая ИС состоит из 13 модулей, их описание представлено в таблице 8.
Таблица 8 - Программные модули ИС
Название модуля |
Описание |
|
DataM |
Модуль подключения к БД |
|
Main |
Модуль главной формы |
|
Zilci |
Модуль формы редактирования и ввода жильцов |
|
Zil |
Модуль формы редактирования и ввода жилищного фонда |
|
Zayavka |
Модуль формы оформления заявки |
|
Remr |
Модуль формы для ввода ремонтных работ |
|
naznr |
Модуль формы назначения ремонтных работ по заявке |
|
zotk |
Модуль формы отказа выполнения заявки |
|
vipz |
Модуль формы выполненные заявки |
|
Pass |
Модуль формы входа в программу |
|
dati |
Модуль формы вывод отчета за определенные период |
|
chpass |
Модуль формы смены пароля |
Дерево программных модулей изображено на рисунке 3.
Рисунок 3 - Дерево программных модулей
2.7 Схема взаимосвязей модулей и массивов данных
Схема взаимосвязей модулей и массивов данных представлена на рисунке 4
Рисунок 4 - Схема взаимосвязей модулей и массивов данных
2.8 Алгоритм работы модуля dati
Данный модуль реализует процедуру вывода отчета об отремонтированных объектах за период заданный пользователем.
2.9 Инструкция пользователя
Рекомендуемые системные требования: процессор 2000 МГц; оперативная память 1024 Мбайт; 100 Мбайт свободного места на жестком диске; мышь и клавиатура; операционная система Microsoft Windows XP/Vista /7; Microsoft Office 2003/2007.
Для входа в программу необходимо выбрать пользователя и ввести пароль. При запуске программы открывается основная форма, которая представлена на рисунке 6
Рисунок 6 - главная форма программы
В пункте меню Справочники доступны три справочника: Жилищный фонд, Жильцы и Ремонтные работы. В меню заявки доступны следующие пункты: Оформление заявки, Невыполненные заявки, Выполненные заявки.
При выборе в меню "Жилищный фонд", откроется соответствующее окно, где можно работать с этим справочником. При нажатии правой клавиши мыши на форме справочника появиться контекстное меню, где можно выбрать соответствующий пункт. В данном разделе возможно осуществлять поиск по адресу и сортировку по площади крыши.
Работа со справочником "Жилищный фонд" представлена на рисунке 7
Рисунок 7 - справочник "Жилищный фонд"
Работа с другими справочниками проводится аналогичным образом.
При выборе пункта "Оформление заявки", появляется окно в котором пользователь может оформить заявку, для этого необходимо щелкнуть правой кнопкой мыши и в появившемся контекстном меню выбрать необходимый пункт. В контекстном меню также доступен поиск и сортировка записей. Для выполнения заявке необходимо на добавленной заявке назначить ремонтные работы. При назначении ремонтной работы также появиться новая форма, где и можно добавить ремонтную работу. После того как ремонтная работа назначена, можно выполнить заявку. Для этого необходимо выбрав заявку в контекстном меню нажать на пункт "Выполнить заявку"
В пункте меню "Сервис" возможно изменение пароля и также резервное копирование базы данных.
В пункте меню "Отчеты" возможен просмотр предусмотренных программой отчетов.
2.10 Способы и результаты тестирования программного продукта
Тестирование проводиться с целью определения корректности работы информационной системы на всех вариантах наборов данных.
Проверка проводилась в трех различных режимах:
1. Проверка в нормальных условиях.
В процессе разработки информационной системы все программные модули были протестированы в нормальном режиме работы. При тестировании программы в данном режиме ошибок в программе выявлено не было. Пример работы программы при тестировании в данном режиме представлен на рисунке на рисунке 5
Рисунок 5 - тестирование программы в нормальном режиме
2. Проверка в экстремальных условиях.
В процессе разработки информационной системы все программные модули были протестированы в экстремальном режиме работы. При попытке ввести буквенные значения в поля с числовым или денежным форматом, система сообщала об этом пользователю. На рисунке 6 представлено тестирование программы в экстремальных условиях. При попытке ввести текстовые данные в поле с числовыми данными программа сообщила об этом пользователю.
Рисунок 6 - тестирование программы в экстремальных условиях
Так же программа была протестирована на ввод двух одинаковых значений.
При попытке ввода двух домов с одинаковым адресом в справочник жилищный фонд, программа выдала соответствующее сообщение. Пример тестирования на наличие двух одинаковых записей представлен на рисунке 7
Рисунок 7 - тестирование программы при добавлении двух одинаковых записей
После проведения тестирования можно сделать вывод, что в целом программа работает корректно.
3. Проверка в работы программы в исключительных ситуациях
При тестировании программы в исключительных ситуациях проверяется устойчивость. Такие ситуации могут возникнуть, если при редактирований какой - либо записи возникли неполадки с электричеством. В этом случае может возникнуть ситуация что при восстановлении работы данная запись будет недоступна, так как в базе данных Access логическое поле, которое является признаком занятости, будет иметь значение истинна. Эту проблему можно решить лишь открыв базу данных Access и исправив значение логического поля.
Заключение
В процессе выполнения данной курсовой работы была создана ИС для автоматизации учета ремонта жилищного фонда в муниципальном жилищно-ремонтном эксплуатационном предприятии. Данная ИС отвечает требованиям технического задания и в целом соответствует реальной предметной области.
Также в ходе выполнения работы была проанализирована предметная область, разработана функциональная модель по стандарту IDEF0, соответствующая техническому заданию, модель данных по стандарту IDEF1X.
Были успешно достигнуты поставленные цели, а именно:
закрепление и развитие теоретических знаний, полученных студентом в процессе изучения курса "Проектирование информационных систем";
развитие умения осуществлять выбор варианта технологии проектирования информационных систем (ИС);
приобретение студентами практических навыков разработки методических материалов проектировщика;
умение вырабатывать и реализовывать решения.
Однако созданная в соответствии с техническим заданием система имеет ряд недостатков, которые возможно устранить будущем, одним из которых является небольшое количество выводимых отчетов.
Список использованных источников
1. Вендров А.М. CASE-технологии: Современные методы и средства проектирования информационных систем. М: Финансы и статистика 1998;
2. Вендров А.М. Проектирование программного обеспечения экономических информационных систем: Учебник для студентов вузов - М.: Финансы и статистика, 2000;
3. Вендров А.М. Практикум по проектированию программного обеспечения экономических информационных систем: Учебное пособие для студентов вузов. - М: Финансы и статистика, 2002;
4. Базы данных. Учебник для вузов. /Под ред. Хоменко А.Д., - М.: 2000.
5. Карпова Т.С. Базы данных: Модели, разработка, реализация. - СПб: Питер, 2001.
6. Дарахвелидзе, П.Г. Программирование в Delphi 7/П.Г. Дарахвелидзе, Е.П. Марков. - Спб.: БХВ-Петербург, 2005. - 784 с
Приложения
Приложение А
Модель ИС по стандарту IDEF0 и методологии SADT
Рисунок Б.1 - Уровень A0 - автоматизация учета ремонта в МЖРЭП
Рисунок Б.2 - Уровень A1
Рисунок Б.3 - Уровень A2 - определение уровня доступа
Рисунок Б.4 - Уровень A2 - декомпозиция блока изменение БД
Рисунок Б.5 - Уровень A3 - декомпозиция блока работа с БД
Рисунок Б.6 - Уровень A3 - декомпозиция блока добавление, удаление, редактирование записей
Рисунок Б.6 - Уровень A4 - Оформление заявки
Рисунок Б.7 - Уровень A2 - выполнение запросов пользователей
Приложение Б - Физическая модель данных
Рисунок Б1 - Физическая модель денных
Приложение В - Программный код созданной ИС
procedure TFpass. FormCloseQuery (Sender: TObject; var CanClose: Boolean);
begin
if application. MessageBox ('Вы хотите выйти из программы? ','Выход из программы',mb_yesno+mb_iconquestion) =idyes then
begin
application. Terminate;
end
else canclose: =false;
end;
procedure TFpass. BitBtn1Click (Sender: TObject);
begin
closequery;
end;
procedure TFpass. SpeedButton1Click (Sender: TObject);
var inifile: tinifile;
dbp: string;
begin
dm. od. InitialDir: =ExtractFilePath (Application. ExeName);
if dm. od. Execute then
begin
e2. Text: =dm. od. FileName;
try
dm. ADO. Connected: =false;
dm. ADO. ConnectionString: ='Provider=Microsoft. Jet. OLEDB.4.0; Data Source='+dm. od. FileName+'; Persist Security Info=False';
dm. ADO. Connected: =true;
except
showmessage ('Произошла ошибка при подключении к базе');
exit;
end;
IniFile: = TIniFile. Create (ExtractFilePath (Application. ExeName) +'options. ini'); // загрузка из фала настроек пути к базе
inifile. WriteString ('Options', 'DBPath', dm. od. FileName);
IniFile. Free;
dm. TEMP. Active: =false;
dm. TEMP.commandText: ='Select login fROM pass';
dm. TEMP. Active: =true;
cb. Clear;
While not dm. TEMP. Eof do
begin
cb. Items. Add (dm. TEMP. Fields [0]. AsString);
dm. TEMP. Next;
end;
end;
end;
procedure TFpass. FormShow (Sender: TObject);
var inifile: tinifile;
dbp: string;
begin
fpass. Caption: =application. Title;
IniFile: = TIniFile. Create (ExtractFilePath (Application. ExeName) +'options. ini'); // загрузка из фала настроек пути к базе
DBP: = IniFile. ReadString ('Options', 'DBPath', ExtractFilePath (Application. ExeName) +'');
e2. Text: =dbp;
IniFile. Free;
if fileexists (dbp) =false then
begin
showmessage ('База данных по указанному пути не была найдена! ');
exit;
end;
try
dm. ADO. Connected: =false;
dm. ADO. ConnectionString: ='Provider=Microsoft. Jet. OLEDB.4.0; Data Source='+dbp+'; Persist Security Info=False';
dm. ADO. Connected: =true;
except
showmessage ('Произошла ошибка при подключении к базе');
exit;
end;
cb. Clear; e. Clear;
dm. TEMP. Active: =false;
dm. TEMP.commandText: ='Select login fROM pass';
dm. TEMP. Active: =true;
While not dm. TEMP. Eof do
begin
cb. Items. Add (dm. TEMP. Fields [0]. AsString);
dm. TEMP. Next;
end;
end;
procedure TFpass. BitBtn2Click (Sender: TObject);
begin
if cb. Text='' then showmessage ('Пользователь не выбран')
else if e. Text='' then showmessage ('Пароль не введен')
else
begin
dm. temp. Active: =false;
dm. temp.commandText: ='select login from pass where (login="'+cb. Text+'") and (pass="'+e. Text+'") ';
dm. temp. Active: =true;
if dm. temp. RecordCount>0 then
begin
if cb. text='Администратор' then
begin
fpass. Hide;
fmain. sb. Panels [0]. Text: =cb. Text+', вошел в программу в: '+ timetostr (time);
fmain. showmodal;
end
else if cb. Text='Работник' then
begin
fpass. Hide;
fmain. n99. Visible: =false;
fmain. n5. Visible: =false;
fmain. sb. Panels [0]. Text: =cb. Text+', вошел в программу в: '+ timetostr (time);
fmain. showmodal;
end
else if cb. Text='Гость' then
begin
// fmain. n10. Visible: =false;
fmain. n11. Visible: =false;
fmain. n12. Visible: =false;
fmain. n15. Visible: =false;
fmain. n16. Visible: =false;
fmain. n17. Visible: =false;
fmain. n99. Visible: =false;
fmain. n5. Visible: =false;
fzayavka. N2. Visible: =false;
fzayavka. N3. Visible: =false;
fzayavka. N4. Visible: =false;
fzayavka. N5. Visible: =false;
fzayavka. N6. Visible: =false;
fzayavka. N7. Visible: =false;
fzayavka. N8. Visible: =false;
fzayavka. N9. Visible: =false;
fzayavka. N10. Visible: =false;
fzayavka. N11. Visible: =false;
fzayavka. N12. Visible: =false;
fzayavka. N13. Visible: =false;
fzayavka. N14. Visible: =false;
fzayavka. N15. Visible: =false;
fpass. Hide;
fmain. sb. Panels [0]. Text: =cb. Text+', вошел в программу в: '+ timetostr (time);
fmain. showmodal;
end;
end
else
begin
showmessage ('Проверьте правильность пароля');
exit;
end;
end;
end;
procedure TFpass. cbKeyPress (Sender: TObject; var Key: Char);
begin
key: =#0;
end;
end.
procedure TFChPAss. FormShow (Sender: TObject);
begin
cb. Clear;
dm. temp. Active: =false;
dm. temp.commandText: ='Select login from pass WHERE (login<>"Гость") order by login';
dm. temp. Active: =true;
while not dm. temp. Eof do
begin
cb. Items. Add (dm. temp. Fields [0]. AsString);
dm. temp. Next;
end;
end;
procedure TFChPAss. cbKeyPress (Sender: TObject; var Key: Char);
begin
key: =#0;
end;
procedure TFChPAss. BitBtn2Click (Sender: TObject);
begin
if cb. Text='' then showmessage ('Вы не выбрали имя пользователя')
else if e1. Text='' then showmessage ('Вы не ввели пароль')
else if e2. Text='' then showmessage ('Вы не ввели подтверждение пароля')
else if e2. Text<>e1. Text then showmessage ('Пароль и подтверждение пароля не совпадают')
else
begin
dm.com.commandtext: ='Update pass Set pass="'+e2. Text+'" where (login = "'+cb. Text+'") ';
dm.com. Execute;
showmessage ('Пароль изменен');
closequery;
end;
end;
procedure TFChPAss. FormCloseQuery (Sender: TObject; var CanClose: Boolean);
begin
cb. Clear;
e1. Text: =''; e2. Text: ='';
close;
end;
procedure TFChPAss. BitBtn1Click (Sender: TObject);
begin
closequery;
end;
end.
procedure TFdati. BitBtn1Click (Sender: TObject);
begin
closequery;
end;
procedure TFdati. FormCloseQuery (Sender: TObject; var CanClose: Boolean);
begin
dtp1. Date: =date;
dtp2. Date: =date;
close;
end;
procedure TFdati. FormShow (Sender: TObject);
begin
dtp1. Date: =date;
dtp2. Date: =date;
end;
procedure TFdati. BitBtn2Click (Sender: TObject);
var
Template,NewTemplate,FindText, NewStr, Replace,ReplaceWith: OleVariant;
LinkToFile,SaveWithDocument,Range: OleVariant;
Table1: Table;
i: integer;
flag: boolean;
Reg: TRegistry;
summa: real;
begin
if dtp1. Date>dtp2. Date then
begin
showmessage ('Ошибка в последовательности дат');
exit;
end;
// Проверяем, инсталлирован ли Word
Reg: = TRegistry. Create;
Reg. RootKey: = HKEY_CLASSES_ROOT;
flag: =reg. KeyExists ('Word. Application');
reg. Free;
// flag: =true;
if flag=false then
begin
application. MessageBox ('Word не устанволен','Отчет',mb_ok+mb_iconstop);
exit;
end;
if tm=0 then
begin
WordApplication1. Visible: =false;
WordApplication1. Connect; // Устанавливаем связь с сервером
// Открываем шаблон otchet. dot в Word
Template: =ExtractFilePath (Application. EXEName) +'\Dot\Ремонт. dot'; // путь к шаблону документа
WordApplication1. Documents. Add (Template,EmptyParam,EmptyParam,EmptyParam); // создаем документ на основе шаблона
WordDocument1. ConnectTo (WordApplication1. ActiveDocument); // Связываем компонент WordDocument1 c активным документом (т.е. с только что созданным документом)
// Заполняем таблицу списка объектов
Table1: =WordDocument1. Tables. Item (1); // связываем имя Table1 с первой таблицей документа
// WordDocument1. Tables - это массив таблиц документа (тип Tables), а WordDocument1. Tables. Item (i) - i-ая таблица
Replace: =true; // параметр, задающий режим замены
FindText: ='#1'; // что меняем
ReplaceWith: ='с '+datetostr (dtp1. Date) +' по '+datetostr (dtp2. Date); // на что меняем
WordDocument1. Range. Find. Execute (FindText,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,ReplaceWith,Replace,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
dm. temp. Active: =false;
dm. temp.commandText: ='Select adr_z,sum (st_nr) FROM zil,zilci,zayavka,naznR WHERE (id_z=id_z_zl) and (id_zl=id_zl_za) and (id_za=id_za_nr) and (datav_za BETWEEN #'+fmain. data (dtp1. Date) +'# and #'+fmain. data (dtp2. Date) +'#) GROUP BY adr_z';
dm. temp. Active: =true;
i: =2;
summa: =0;
While (not dm. temp. Eof) do
begin
Table1. Rows. Add (EmptyParam);
Table1. Cell (i, 1). Range. Text: = dm. temp. Fields [0]. AsString;
Table1. Cell (i,
2). Range. Text: = dm. temp. Fields [1]. AsString;
summa: =summa+dm. temp. Fields [1]. asfloat;
inc (i); dm. temp. next;
end;
Replace: =true; // параметр, задающий режим замены
FindText: ='#2'; // что меняем
ReplaceWith: =floattostr (summa); // на что меняем
WordDocument1. Range. Find. Execute (FindText,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,ReplaceWith,Replace,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
Table1. Rows. Item (i). Delete;
WordApplication1. Visible: =true; // делаем приложение MS Word видимым
WordApplication1. Disconnect; // Разрываем связь с серверо
end
else if tm=1 then
begin
WordApplication1. Visible: =false;
WordApplication1. Connect; // Устанавливаем связь с сервером
// Открываем шаблон otchet. dot в Word
Template: =ExtractFilePath (Application. EXEName) +'\Dot\Изменение. dot'; // путь к шаблону документа
WordApplication1. Documents. Add (Template,EmptyParam,EmptyParam,EmptyParam); // создаем документ на основе шаблона
WordDocument1. ConnectTo (WordApplication1. ActiveDocument); // Связываем компонент WordDocument1 c активным документом (т.е. с только что созданным документом)
// Заполняем таблицу списка объектов
Table1: =WordDocument1. Tables. Item (1); // связываем имя Table1 с первой таблицей документа
// WordDocument1. Tables - это массив таблиц документа (тип Tables), а WordDocument1. Tables. Item (i) - i-ая таблица
Replace: =true; // параметр, задающий режим замены
FindText: ='#1'; // что меняем
ReplaceWith: ='с '+datetostr (dtp1. Date) +' по '+datetostr (dtp2. Date); // на что меняем
WordDocument1. Range. Find. Execute (FindText,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,ReplaceWith,Replace,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
dm. temp. Active: =false;
dm. temp.commandText: ='Select nazv_rr,ocena_rc,cena_rc,data_rc from remr,rcen where (id_rr=id_rr_rc) and (data_rc BETWEEN #'+fmain. data (dtp1. Date) +'# and #'+fmain. data (dtp2. Date) +'#) ORDER BY data_rc';
dm. temp. Active: =true;
i: =2;
While (not dm. temp. Eof) do
begin
Table1. Rows. Add (EmptyParam);
Table1. Cell (i, 1). Range. Text: = dm. temp. Fields [0]. AsString;
Table1. Cell (i,
2). Range. Text: = dm. temp. Fields [1]. AsString;
Table1. Cell (i,
3). Range. Text: = dm. temp. Fields [2]. AsString;
Table1. Cell (i,
4). Range. Text: = dm. temp. Fields [3]. AsString;
inc (i); dm. temp. next;
end;
Replace: =true; // параметр, задающий режим замены
FindText: ='#2'; // что меняем
ReplaceWith: =floattostr (summa); // на что меняем
WordDocument1. Range. Find. Execute (FindText,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,ReplaceWith,Replace,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
Table1. Rows. Item (i). Delete;
WordApplication1. Visible: =true; // делаем приложение MS Word видимым
WordApplication1. Disconnect; // Разрываем связь с серверо
end
else if tm=2 then
begin
WordApplication1. Visible: =false;
WordApplication1. Connect; // Устанавливаем связь с сервером
// Открываем шаблон otchet. dot в Word
Template: =ExtractFilePath (Application. EXEName) +'\Dot\План. dot'; // путь к шаблону документа
WordApplication1. Documents. Add (Template,EmptyParam,EmptyParam,EmptyParam); // создаем документ на основе шаблона
WordDocument1. ConnectTo (WordApplication1. ActiveDocument); // Связываем компонент WordDocument1 c активным документом (т.е. с только что созданным документом)
// Заполняем таблицу списка объектов
Table1: =WordDocument1. Tables. Item (1); // связываем имя Table1 с первой таблицей документа
// WordDocument1. Tables - это массив таблиц документа (тип Tables), а WordDocument1. Tables. Item (i) - i-ая таблица
Replace: =true; // параметр, задающий режим замены
FindText: ='#1'; // что меняем
ReplaceWith: ='с '+datetostr (dtp1. Date) +' по '+datetostr (dtp2. Date); // на что меняем
WordDocument1. Range. Find. Execute (FindText,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,ReplaceWith,Replace,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
dm. temp. Active: =false;
dm. temp.commandText: ='Select adr_z,datapv_za from zil,zilci,zayavka where (id_z=id_z_zl) and (id_zl=id_zl_za) and (datav_za is Null) and (dataot_za is Null) and (datapv_za BETWEEN #'+fmain. data (dtp1. Date) +'# and #'+fmain. data (dtp2. Date) +'#) ';
dm. temp. Active: =true;
i: =2;
While (not dm. temp. Eof) do
begin
Table1. Rows. Add (EmptyParam);
Table1. Cell (i, 1). Range. Text: = dm. temp. Fields [0]. AsString;
Table1. Cell (i,
2). Range. Text: = dm. temp. Fields [1]. AsString;
inc (i); dm. temp. next;
end;
Replace: =true; // параметр, задающий режим замены
FindText: ='#2'; // что меняем
ReplaceWith: =floattostr (summa); // на что меняем
WordDocument1. Range. Find. Execute (FindText,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,ReplaceWith,Replace,EmptyParam,EmptyParam,EmptyParam,EmptyParam);
Table1. Rows. Item (i). Delete;
WordApplication1. Visible: =true; // делаем приложение MS Word видимым
WordApplication1. Disconnect; // Разрываем связь с серверо
end;
end;
end.
rocedure TFmain. FormCloseQuery (Sender: TObject; var CanClose: Boolean);
begin
if application. MessageBox ('Вы хотите выйти из программы? ','Выход из программы',mb_yesno+mb_iconquestion) =idyes then
begin
application. Terminate;
end
else canclose: =false;
end;
procedure TFmain. N2Click (Sender: TObject);
begin
closequery;
end;
procedure TFmain. FormShow (Sender: TObject);
begin
if fileexists ('photo. jpg') then
begin
image1. Picture. LoadFromFile ('photo. jpg');
end;
end;
function TFmain. data (data: tdatetime): string;
var g,m,d: word;
begin
decodedate (data,g,m,d);
result: =''+currtostr (m) +'/'+currtostr (d) +'/'+currtostr (g) +'';
end;
function TFmain. Update (rs,tab: string): boolean;
begin
dm. temp. Active: =false;
dm. temp.commandText: ='Select log_'+rs+' from '+tab+' where (id_'+rs+'='+tmp+') ';
dm. temp. Active: =true;
if dm. temp. Fields [0]. AsBoolean=true then
begin
result: =false;
end
else
begin
dm.com.commandText: ='Update '+tab+' set log_'+rs+'=TRUE where id_'+rs+'='+tmp+'';
dm.com. Execute;
result: =true;
end;
end;
function TFmain. Delete (rs,tab,temp: string): boolean;
begin
dm. temp. Active: =false;
dm. temp.commandText: ='Select log_'+rs+' from '+tab+' where (id_'+rs+'='+tmp+') ';
dm. temp. Active: =true;
if dm. temp. Fields [0]. AsBoolean=true then
begin
result: =false;
end
else if application. MessageBox ('Вы хотите удалить запись? ','Удаление',mb_yesno+mb_iconquestion) =idyes then
begin
dm.com.commandText: ='Delete * from '+tab+' where (id_'+rs+'='+tmp+') ';
dm.com. Execute;
result: =true;
showmessage ('Удаление прошло успешно');
end;
end;
procedure TFmain. N4Click (Sender: TObject);
var inifile: tinifile;
dbp: string;
begin
IniFile: = TIniFile. Create (ExtractFilePath (Application. ExeName) +'options. ini'); // загрузка из фала настроек пути к базе
DBP: = IniFile. ReadString ('options', 'dbpath', '');
IniFile. Free;
// showmessage (dbp);
copyfile (pchar (DBP),pchar (ExtractFilePath (Application. ExeName) +'Архив\base_'+datetostr (date) +'_'+stringreplace (timetostr (time),': ','. ', [rfReplaceAll, rfIgnoreCase]) +'. mdb'),true);
if fileexists (ExtractFilePath (Application. ExeName) +'Архив\base_'+datetostr (date) +'_'+stringreplace (timetostr (time),': ','. ', [rfReplaceAll, rfIgnoreCase]) +'. mdb') =true then showmessage ('Резервная копия создана успешно')
else showmessage ('Ошибка при создании резервной копии');
end;
procedure TFmain. N3Click (Sender: TObject);
begin
fchpass. Caption: =n3. Caption;
fchpass. ShowModal;
end;
procedure TFmain. N6Click (Sender: TObject);
begin
fzil. Caption: =n6. Caption;
fzil. DBGrid1. PopupMenu: =fzil. PopupMenu1;
fzil. DBGrid1. DataSource: =dm. zs;
dm. z. Active: =false;
dm. z.commandText: ='select id_z, adr_z, tdom_z, tkr_z, pl_z, lift_z from Zil';
dm. z. Active: =true;
fzil. ShowModal;
end;
procedure TFmain. N7Click (Sender: TObject);
begin
fzilci. Caption: =n7. Caption;
fzilci. DBGrid1. PopupMenu: =fzilci. PopupMenu1;
fzilci. DBGrid1. DataSource: =dm. zls;
dm. zl. Active: =false;
dm. zl.commandText: ='Select id_zl,fio_zl,adr_z,kv_zl from zil,zilci where (id_z=id_z_zl) ';
dm. zl. Active: =true;
fzilci. ShowModal;
end;
procedure TFmain. N8Click (Sender: TObject);
begin
fremr. Caption: =n8. Caption;
fremr. DBGrid1. PopupMenu: =fremr. PopupMenu1;
fremr. DBGrid1. DataSource: =dm. rrs;
dm. rr. Active: =false;
dm. rr.commandText: ='Select id_rr,nazv_rr,st_rr,edi_rr from RemR';
dm. rr. Active: =true;
fremr. ShowModal;
end;
procedure TFmain. N10Click (Sender: TObject);
begin
fzayavka. Caption: =n10. Caption;
fzayavka. DBGrid1. PopupMenu: =fzayavka. PopupMenu1;
dm. za. Active: =false;
dm. za.commandText: ='Select id_za, ([adr_z] &", кв. "& [kv_zl]) as adr,soder_za,dataz_za,datapv_za from zayavka,zil,zilci where (id_z=id_z_zl) and (id_zl=id_zl_za) and (datav_za is null) and (dataot_za is null) ';
dm. za. Active: =true;
fzayavka. ShowModal;
end;
procedure TFmain. N11Click (Sender: TObject);
begin
fVipZ. Caption: =n11. Caption;
fVipZ. DBGrid1. PopupMenu: =fVipZ. PopupMenu1;
dm. vz. Active: =false;
dm. vz.commandText: ='Select id_za, ([adr_z] &", кв. "& [kv_zl]) as adr,soder_za,datav_za, sum (st_nr) as summa from zayavka,zil,zilci,naznR '+
'where (id_z=id_z_zl) and (id_zl=id_zl_za) and (id_za=id_za_nr) and (datav_za is not NULL) GROUP BY id_za, ([adr_z] &", кв. "& [kv_zl]),soder_za,datav_za';
dm. vz. Active: =true;
fVipZ. ShowModal;
end;
procedure TFmain. N12Click (Sender: TObject);
begin
fZotk. Caption: =n12. Caption;
fZotk. DBGrid1. PopupMenu: =fZotk. PopupMenu1;
dm. otz. Active: =false;
dm. otz.commandText: ='Select id_za, ([adr_z] &", кв. "& [kv_zl]) as adr,soder_za,prich_za from zayavka,zil,zilci where (id_z=id_z_zl) and (id_zl=id_zl_za) and (dataot_za is not null) ';
dm. otz. Active: =true;
fZotk. ShowModal;
end;
procedure TFmain. N14Click (Sender: TObject);
begin
tm: =0;
fdati. Caption: =n14. Caption;
fdati. ShowModal;
end;
procedure TFmain. N15Click (Sender: TObject);
begin
tm: =1;
fdati. Caption: =n15. Caption;
fdati. ShowModal;
end;
procedure TFmain. N16Click (Sender: TObject);
begin
tm: =2;
fdati. Caption: =n16. Caption;
fdati. ShowModal;
end;
procedure TFmain. N17Click (Sender: TObject);
var
Template,NewTemplate,FindText, NewStr, Replace,ReplaceWith: OleVariant;
LinkToFile,SaveWithDocument,Range: OleVariant;
Table1: Table;
i: integer;
flag: boolean;
Reg: TRegistry;
summa: real;
begin
// Проверяем, инсталлирован ли Word
Reg: = TRegistry. Create;
Reg. RootKey: = HKEY_CLASSES_ROOT;
flag: =reg. KeyExists ('Word. Application');
reg. Free;
// flag: =true;
if flag=false then
begin
application. MessageBox ('Word не устанволен','Отчет',mb_ok+mb_iconstop);
exit;
end;
WordApplication1. Visible: =false;
WordApplication1. Connect; // Устанавливаем связь с сервером
// Открываем шаблон otchet. dot в Word
Template: =ExtractFilePath (Application. EXEName) +'\Dot\Отказ. dot'; // путь к шаблону документа
WordApplication1. Documents. Add (Template,EmptyParam,EmptyParam,EmptyParam); // создаем документ на основе шаблона
WordDocument1. ConnectTo (WordApplication1. ActiveDocument); // Связываем компонент WordDocument1 c активным документом (т.е. с только что созданным документом)
// Заполняем таблицу списка объектов
Table1: =WordDocument1. Tables. Item (1); // связываем имя Table1 с первой таблицей документа
// WordDocument1. Tables - это массив таблиц документа (тип Tables), а WordDocument1. Tables. Item (i) - i-ая таблица
dm. temp. Active: =false;
dm. temp.commandText: ='Select adr_z,prich_za FROM zil,zilci,zayavka WHERE (id_z=id_z_zl) and (id_zl=id_zl_za) and (dataot_za is not null) ';
dm. temp. Active: =true;
i: =2;
While (not dm. temp. Eof) do
begin
Table1. Rows. Add (EmptyParam);
Table1. Cell (i, 1). Range. Text: = dm. temp. Fields [0]. AsString;
Table1. Cell (i,
2). Range. Text: = dm. temp. Fields [1]. AsString;
inc (i); dm. temp. next;
end;
Table1. Rows. Item (i). Delete;
WordApplication1. Visible: =true; // делаем приложение MS Word видимым
WordApplication1. Disconnect; // Разрываем связь с серверо
end;
end.
procedure TFNaznR. BitBtn2Click (Sender: TObject);
begin
e1. Clear; e3. Clear; cb1. Clear;
if tm=1 then
begin
dm.com.commandText: ='Update naznr set log_nr=FALSE WHERE (id_nr='+tmp2+') ';
dm.com. Execute;
end;
if id_rr<>'' then
begin
dm.com.commandText: ='Update RemR Set log_rr=FALSE WHERE (id_rr='+id_rr+') ';
dm.com. Execute;
id_rr: ='';
end;
panel1. Visible: =false;
end;
procedure TFNaznR. FormCloseQuery (Sender: TObject; var CanClose: Boolean);
begin
if panel1. Visible=true then
begin
BitBtn2Click (Sender);
end;
end;
procedure TFNaznR. N1Click (Sender: TObject);
begin
panel1. Visible: =true;
tm: =0;
e1. Clear; e3. Clear; cb1. Clear;
dm. temp. Active: =false;
dm. temp.commandText: ='Select nazv_rr from RemR';
dm. temp. Active: =true;
While not dm. temp. Eof do
begin
cb1. Items. Add (dm. temp. Fields [0]. AsString);
dm. temp. Next;
end;
end;
procedure TFNaznR. N2Click (Sender: TObject);
begin
if dm. nr. Fields [0]. AsString='' then
begin
showmessage ('Запись для редактирования отсутствует');
exit;
end;
tmp2: =dm. nr. Fields [0]. AsString; tm: =1;
// ******************************
if fmain. Update ('nr','naznR') =false then
begin
showmessage ('Данная запись используется другим пользователем');
exit;
end;
// ******************************
cb1. Clear;
dm. temp. Active: =false;
dm. temp.commandText: ='Select nazv_rr from RemR';
dm. temp. Active: =true;
While not dm. temp. Eof do
begin
cb1. Items. Add (dm. temp. Fields [0]. AsString);
dm. temp. Next;
end;
e1. Text: =dm. nr. fieldbyname ('ob_nr'). AsString;
cb1. Text: =dm. nr. fieldbyname ('nazv_rr'). AsString;
// e2. Text: =dm. nr. fieldbyname ('st_nr'). AsString;
e3. text: =dm. nr. fieldbyname ('st_rr_nr'). AsString;
cb1Change (Sender);
panel1. Visible: =true;
end;
procedure TFNaznR. N4Click (Sender: TObject);
begin
if dm. nr. Fields [0]. AsString='' then
begin
showmessage ('Запись для редактирования отсутствует');
exit;
end;
tmp2: =dm. nr. Fields [0]. AsString; tm: =1;
if fmain. Delete ('nr','naznR',tmp) =false then
begin
showmessage ('Данная запись используется другим пользователем');
exit;
end
else dm. nr. Requery ();
end;
procedure TFNaznR. cb1Change (Sender: TObject);
begin
if id_rr<>'' then
begin
dm.com.commandText: ='Update RemR Set log_rr=FALSE WHERE (id_rr='+id_rr+') ';
dm.com. Execute;
id_rr: ='';
end;
dm. temp. Active: =false;
dm. temp.commandText: ='Select id_rr,st_rr from RemR WHERE (nazv_rr="'+cb1. Text+'") and (log_rr=false) ';
dm. temp. Active: =true;
if dm. temp. RecordCount=0 then
begin
showmessage ('Текущая запись занята');
cb1. Text: ='';
end
else
begin
id_rr: =dm. temp. fields [0]. asstring;
e3. Text: =dm. temp. fields [1]. asstring;
dm.com.commandText: ='Update RemR Set log_rr=TRUE WHERE (id_rr='+id_rr+') ';
dm.com. Execute;
end;
end;
procedure TFNaznR. BitBtn1Click (Sender: TObject);
var
summa: real;
begin
if (cb1. Text='') OR (e1. Text='') then showmessage ('Вы не заполнили одно или несколько полей')
else
begin
try
e1. Text: =floattostr (roundto (strtofloat (e1. Text),-2));
summa: =roundto (strtofloat (e1. Text) *strtofloat (e3. Text),-2);
except
showmessage ('Ошибка при вводе числовых значений');
end;
if tm=0 then
begin
dm. temp. Active: =false;
dm. temp.commandText: ='Select id_nr from naznR where (id_rr_nr='+id_rr+') and (id_za_nr='+tmp+') ';
dm. temp. Active: =true;
if dm. temp. RecordCount>0 then showmessage ('Подобная запись уже существует')
else
begin
dm.com.commandText: ='Insert into naznr (id_rr_nr,st_rr_nr,ob_nr,st_nr, id_za_nr) values ('+id_rr+',"'+e3. Text+'","'+e1. Text+'","'+floattostr (summa) +'",'+tmp+') ';
dm.com. Execute;
showmessage ('Запись успешно добавлена');
dm. nr. Requery ();
BitBtn2Click (Sender);
end;
end
else
begin
dm. temp. Active: =false;
dm. temp.commandText: ='Select id_nr from naznR where (id_rr_nr='+id_rr+') and (id_za_nr='+tmp+') ';
dm. temp. Active: =true;
// if (dm. temp. RecordCount>0) and (tmp<>dm. temp. Fields [0]. asstring) then showmessage ('Подобная запись уже существует')
// else
begin
dm.com.commandText: ='Update naznr SET id_rr_nr="'+id_rr+'",st_rr_nr="'+e3. Text+'",ob_nr="'+e1. Text+'",st_nr="'+floattostr (summa) +'", id_za_nr="'+tmp+'" WHERE (id_nr='+tmp2+') ';
dm.com. Execute;
showmessage ('Запись успешно изменена');
dm. nr. Requery ();
BitBtn2Click (Sender);
end;
end;
end;
end;
procedure TFNaznR. N7Click (Sender: TObject);
begin
dm. nr. Active: =false;
dm. nr.commandText: ='Select id_nr,nazv_rr,edi_rr,st_rr_nr,st_rr,ob_nr,st_nr from naznR,Remr where (id_rr=id_rr_nr) and (id_za_nr='+tmp+') ';
dm. nr. Active: =true;
end;
procedure TFNaznR. N9Click (Sender: TObject);
begin
dm. nr. Active: =false;
dm. nr.commandText: ='Select id_nr,nazv_rr,edi_rr,st_rr_nr,st_rr,ob_nr,st_nr from naznR,Remr where (id_rr=id_rr_nr) and (id_za_nr='+tmp+') ORDER BY st_nr';
dm. nr. Active: =true;
end;
procedure TFNaznR. N6Click (Sender: TObject);
begin
tmpc: ='';
while trim (tmpc) ='' do
begin
tmpc: =inputbox (n6. Caption,'Задайте фильтр','');
if trim (tmpc) ='' then showmessage ('Задайте фильтр')
else
begin
dm. nr. Active: =false;
dm. nr.commandText: ='Select id_nr,nazv_rr,edi_rr,st_rr_nr,st_rr,ob_nr,st_nr from naznR,Remr where (id_rr=id_rr_nr) and (id_za_nr='+tmp+') and (nazv_rr like "%'+tmpc+'%") ';
dm. nr. Active: =true;
end;
end;
end;
end.
procedure TFremR. BitBtn2Click (Sender: TObject);
begin
e1. Clear; e2. Clear; e3. Clear;
if tm=1 then
begin
dm.com.commandText: ='Update remr set log_rr=FALSE WHERE (id_rr='+tmp+') ';
dm.com. Execute;
end;
panel1. Visible: =false;
end;
procedure TFremR. FormCloseQuery (Sender: TObject; var CanClose: Boolean);
begin
if panel1. Visible=true then
begin
BitBtn2Click (Sender);
end;
end;
procedure TFremR. BitBtn1Click (Sender: TObject);
begin
Подобные документы
Описание предметной области, определение функциональных требований к системе и построение диаграммы потока данных. Построение модели "сущность-связь", описание сущностей и атрибутов модели. Построение реляционной базы данных и описание ее таблицы.
курсовая работа [624,5 K], добавлен 30.05.2019Системный анализ и анализ требований к базе данных. Концептуальная и инфологическая модель предметной области. Типы атрибутов в логической модели базы. Физическая модель проектируемой базы данных в методологии IDEF1X. Требования к пользователям системы.
курсовая работа [2,3 M], добавлен 21.11.2013Системный анализ и оценка требований к базе данных. Концептуальная (инфологическая) модель предметной области. Построение ERD-диаграммы и физической модели в методологии IDEF1X. Составление форм, запросов и отчетов в среде СУБД Visual FoxPro 8.0.
курсовая работа [1,3 M], добавлен 24.06.2013Автоматизация системы снятия показаний счетчиков энергии. Разработка базы данных и клиентского приложения для структур жилищно-коммунального хозяйства, занимающихся составлением квитанций. Описание предметной области. Тестирование клиентского приложения.
курсовая работа [953,3 K], добавлен 01.09.2016Оценка предметной области: концептуальные требования; выявление информационных объектов и связей между ними; построение базы данных. Описание входных и выходных данных информационной системы "Магазин компьютерной техники". Анализ диаграммы прецедентов.
курсовая работа [294,8 K], добавлен 13.04.2014Этапы создания и разработки базы данных. Построение модели предметной области. Разработка даталогической и физической моделей данных, способы обработки данных о сотрудниках организации. Проектирование приложений пользователя. Создание кнопочной формы.
курсовая работа [2,1 M], добавлен 14.02.2011Модели данных в управлении базами данных. Концептуальные модели данных. Роль баз данных в информационных системах. Реляционная модель данных. Определение предметной области. Построение модели базы данных для информационной системы "Домашние животные".
курсовая работа [1,9 M], добавлен 19.04.2011Разработка приложения, позволяющего автоматизировать документооборот предприятия по списанию основных средств. Мероприятия по защите и обеспечению целостности базы данных. Разработка клиентского приложения. Запросы к базе данных, руководство пользователя.
курсовая работа [700,0 K], добавлен 14.01.2015Информационно-логическая модель предметной области по нотациям Ричарда Баркера. Даталогическая модель реляционной базы данных в виде диаграммы схемы отношений. Приложение интерфейса для базы данных на языке программирования С# в среде Visual Studio.
курсовая работа [3,6 M], добавлен 23.12.2014Определение понятия и общее описание базы данных как упорядоченной информационной системы на носителе информации. Описание предметной области и разработка приложения базы данных, содержащей информацию о расписании занятий, для преподавателей кафедры.
курсовая работа [1,3 M], добавлен 08.08.2012