Автоматизация учета коллекционных монет
Коллекционеры монет часто начинают собирать, сохраняя обычные монеты регулярного обращения, которые они нашли по тем или иным причинам интересными. Это могут быть монеты, оставшиеся после поездки за границу или интересная монета, каким-либо образом, оказавшаяся в руках человека. Иногда коллекции переходят по наследству от коллекционера к будущему коллекционеру. Со временем, если интерес… Читать ещё >
Автоматизация учета коллекционных монет (реферат, курсовая, диплом, контрольная)
Государственное бюджетное образовательное учреждение среднего профессионального образования Тольяттинский политехнический техникум.
(ГГОУ СПО ТПТ) Учебно-производственное отделение № 4.
Специальность 230 105.
«Программное обеспечение вычислительной техники и автоматизированных систем».
Отчет по учебной практике по дисциплине: «Технология разработки программных продуктов» на тему: «Автоматизация учета коллекционных монет».
Студент группы В-31.
С.В. Кокалин.
Руководитель практики.
Н.П. Савельева.
Тольятти, 2012.
Государственное бюджетное образовательное учреждение среднего профессионального образования Тольяттинский политехнический техникум.
(ГГОУ СПО ТПТ) УТВЕРЖДАЮ:
Методист УПО № 4_____________ Л. Г. Светличная «31 «мая 2012 г.
ЗАДАНИЕ НА УЧЕБНУЮ ПРАКТИКУ.
Студенту Кокалину Сергею Владимировичу Тема:
Автоматизация учета коллекционных монет Краткое описание:
Имея сведения о коллекционных монетах и их владельцах, автоматизировать обработку информации в клубе коллекционеров. В результате работы программы необходимо рассчитать возраст каждой монеты, найти монеты заданного коллекционера, сведения о монетах заданной валюты, сведения о владельцах заданной монеты, самую дорогостоящую монету, провести количественный анализ по монетам.
Содержание отчета по практике Постановка задачи. Функции, выполняемые программой. Описание входных и выходных данных Контрольный пример Проектирование базы данных Результаты тестирования программы, анализ полученных результатов.
Список используемых источников
.
Приложение. Тексты программ.
Руководитель практики ______________________ (Н.П. Савельева).
РЕФЕРАТ Отчет по учебной практике: 58 c., 52 рис., 1 табл., 3 источник, 3 приложения учет МОНЕТ и КОЛЛЕКЦИОНЕРОВ в КЛУБЕ, расчет ВОЗРАСТА КАЖДОЙ МОНЕТЫ, ПОИСК ПО МОНЕТАМ, ПОИСК ПО КОЛЛЕКЦИЯМ, ПОИСК ПО КОЛЛЕКЦИОНЕРАМ, ПОИСК САМОЙ ДОРОГОЙ МОНЕТЫ, реляционная база данных, система управления базами данных Приложение _Collection предназначено для ведения учета коллекционных монет, коллекционеров и их коллекций. Использование программы позволит производить учёт, накопление и корректировку коллекций. Хранение данных о коллекционных монетах в виде реляционной базы данных позволит быстро осуществлять просмотр и поиск нужной информации, а при необходимости формирование отчетов для вывода на печать.
Содержание Введение.
1. Общий раздел.
1.1 Описание предметной области.
1.2 Проектирование структуры базы данных.
1.3 Технология обработки данных.
1.4 Разработка данных контрольного примера.
2. Специальный раздел.
2.1 Структура данных.
2.2 Описание объектов приложения.
2.3 Инструкции по работе с программой.
2.3.1 Техническое обеспечение задачи.
2.3.2 Порядок установки и запуска программы.
2.3.3 Ввод и изменение исходных данных.
2.3.4 Получение выходных документов.
2.4 Тестирование программы Заключение Список используемых источников Приложение, А Данные контрольного примера Приложение Б Результаты тестирования программы Приложение В Тексты программ, форм, отчетов, меню.
Коллекционеры монет часто начинают собирать, сохраняя обычные монеты регулярного обращения, которые они нашли по тем или иным причинам интересными. Это могут быть монеты, оставшиеся после поездки за границу или интересная монета, каким-либо образом, оказавшаяся в руках человека. Иногда коллекции переходят по наследству от коллекционера к будущему коллекционеру. Со временем, если интерес к собиранию монет не пропадает, это превращается в хобби. У некоторых людей увлечение коллекционированием монет может перерасти в интерес к изучению определённой страны, её культуры и истории.
Большинство коллекционеров со временем приходят к концентрированию внимания на более узком направлении. Поэтому многие коллекционеры собирают монеты определенных стран, исторических периодов, тематики или монеты со специфическими свойствами (например, монеты с ошибками, монеты всех стран мира ХХ-ХХІ веков).
Компьютерные технологии уже давно стали неотъемлемой частью современного человека. Они позволяют не только хранить, но обрабатывать информацию при помощи специальных программ с удобным интерфейсом. Поэтому актуальной становится проблема автоматизации этого процесса.
Среди современных технологий хранения данных наиболее распространены реляционные базы данных, так как они имеет простую структуру (состоят из взаимосвязанных двумерных таблиц), высокую скорость обработки данных. Для создания приложений имеется большой выбор систем управления базами данных, включающих в себя множество полезных функций по работе с базами данных и средства разработки форм ввода, программ поиска и печати данных.
Таким образом, необходимо автоматизировать учет коллекционных монет, а именно, спроектировать структуру реляционной базы данных средствами СУБД Microsoft Access и разработать приложение с удобным пользовательским интерфейсом для ввода, редактирования, обработки и вывода данных о монетах и их коллекционеров средствами системы Delphi.
1. Общий раздел.
1.1 Описание предметной области Клуб нумизматов помогает коллекционерам общаться и обмениваться информацией о монетах. При вступлении в клуб нового коллекционера его данные заносят в списки участников клуба, а так же записывают его коллекцию монет. Для анализа деятельности клуба председатель ведёт учёт коллекций участников клуба, вычисляет возраст монеты, находящаяся в коллекции участника. Председатель клуба может найти коллекционера по его анкете и монеты, содержащиеся в его коллекции. Он так же может осуществить поиск по приглянувшейся ему монете или коллекционеру.
Появилась необходимость автоматизировать учет монет в коллекциях участников клуба. Приложение должно обеспечивать выполнение следующих функции:
— Учет, накопление и корректировку данных о монетах;
— Учет, накопление и корректировку данных о коллекционерах и их коллекциях;
— Расчёт возраста монеты;
— Формирование полного списка монет в коллекциях;
— Формирование списка монет, указанного коллекционера;
— Формирование списка владельцев указанной монеты;
— Формирование списка самых дорогих монет среди указанной валюты;
— Анализ популярности монет;
При реализации данной задачи необходимо учитывать следующие ограничения:
— Монета может выпускаться только один раз;
— Коллекция может состоять из разных монет;
— Монеты могут находиться в разных коллекциях;
— Год выпуска монеты имеет формат ГГГГ;
1.2 Описание выходной информации В результате решения задачи необходимо получить выходные документы, описанные в таблице 1.1.
Таблица 1.1 — Перечень и описание выходной информации.
Наименование выходной информации. | Идентификатор выходной информации. | Форма представления. | Сроки выдачи. | Получатель информации. | |
Полный список монет в коллекциях. | Вх-001. | Документ. | По требованию. | Председатель, участник клуба. | |
Список монет коллекционера. | Вх-002. | Документ. | По требованию. | Председатель, участник клуба. | |
Список коллекционеров монеты. | Вх-003. | Документ. | По требованию. | Председатель, участник клуба. | |
Список самых дорогих монет среди валюты. | Вх-004. | Документ. | По требованию. | Председатель, участник клуба. | |
Общее количество монет. | Вх-005. | Документ. | По требованию. | Председатель. | |
Формы выходных документов представлены на рисунках 1.1−1.5.
Вх-001. Наименование клуба ___________________ Председатель________________. Полный список монет в коллекциях. | ||||||||||
Монета. | Год выпуска. | Цена. | Тираж. | Возраст монеты. | Коллекционер | Телефон. | Адрес. | |||
Найдено монет в коллекциях____________. | ||||||||||
Рисунок 1.1 — Форма выходного документа «Полный список монет в коллекциях».
Вх-002. Наименование клуба ___________________ Председатель________________. Список монет коллекционера Коллекционер___________________. | |
Валюта Номинал Количество Цена Возраст монеты. | |
Найдено монет в коллекциях____________. | |
Рисунок 1.2 — Форма выходного документа «Список монет коллекционера».
Вх-003. Наименование клуба ___________________ Владелец__________________. Список коллекционеров Монета___________________. | |
Коллекционер Телефон Адрес Количество. | |
Найдено коллекционеров____________. | |
Рисунок 1.3 — Форма выходного документа «Список владельцев монеты».
Вх-004. Наименование клуба ___________________ Владелец__________________. Список самых дорогих монет среди валюты Валюта___________________. | |
Монета Цена Коллекционер Адрес. | |
Найдено монет____________. | |
Рисунок 1.4 — Форма выходного документа «Список самых дорогих монет».
Вх-005. Наименование клуба ___________________ Владелец__________________. Общее количество коллекционных монет. | |
Монета Количество. | |
Общее количество монет____________. | |
Рисунок 1.5 — Форма выходного документа «Общее количество коллекционных монет».
1.3 Описание входной информации Входная информация для решения задачи делится на нормативно-справочную, условно-постоянную, оперативную информацию и запросные формы.
Перечень и описание входной информации представлен в таблице 1.2.
Таблица 1.2 — Перечень и описание входной информации.
Наименование документа. | Вид информации. | Идентификатор | Форма представления. | |
Монета. | УПИ. | В-001. | Документ. | |
Описание коллекции. | ОУИ. | В-002. | Документ. | |
Поиск монет коллекционера. | Запросная форма. | З-001. | Видеограмма. | |
Поиск коллекционеров монеты. | Запросная форма. | З-002. | Видеограмма. | |
Поиск самой дорогой монеты среди валюты. | Запросная форма. | З-003. | Видеограмма. | |
Формы выходных документов представлены на рисунках 1.6−1.10.
В-001. Монета ________. | ||
Валюта____________. Описание__________. __________________. __________________. __________________. | Номинал_____________. Год выпуска__________. Тираж_______________. Цена_________________. | |
Рисунок 1.6 — Форма входного документа «Описание Монет».
В-002. Коллекционер | |||
Номер коллекционера___. | Фамилия__________. Имя ____________. Отчество____________. | Адрес__________. Телефон_________. | |
Описание коллекции Монета Количество. _______________________. _______________________. | |||
Рисунок 1.7 — Форма входного документа «Коллекция».
З-001. Поиск монет коллекционера Коллекционер_________. | |
Рисунок 1.8 — Запросная форма «Поиск монет коллекционера».
З-002. Поиск коллекционеров монеты Монета______________. | |
Рисунок 1.9 — Запросная форма «Поиск коллекционеров монеты».
З-003. Поиск самой дорогой монеты среди валюты Валюта______________. | |
Рисунок 1.10 — Запросная форма «Поиск самой дорогой монеты среди валюты».
1.4 Описание реквизитов входной и выходной информации Информация из входных и выходных документов должна хранится в базе данных, а данные из запросных форм требуются для фильтрации хранимых данных по заданным критериям. Перечень и описание реквизитов входной информации представлены в таблице.1.3.
Таблица 1.3 — Перечень и описание реквизитов входной и выходной информации.
Наименование реквизита. | Идентификатор реквизита. | Идентификатор документа. | Характеристика реквизита. | |
Монета. | Монета. | Вх-001, Вх-003, Вх-004, Вх-005,В-001,В-002, З-002. | А (30). | |
Год выпуска. | Год. | Вх-001, В-001. | 9(4). | |
Цена. | Цена. | Вх-001, Вх-002, Вх-004, В-001. | 9(8). | |
Тираж. | Тираж. | Вх-001,В-001. | 9(8). | |
Возраст. | Возраст. | Вх-001, Вх-002. | 9(4). | |
Коллекционер | Коллекционер | Вх-001, Вх-003, Вх-004, З-001. | А (50). | |
Телефон. | Телефон. | Вх-001, Вх-003, В-002. | А (10). | |
Адрес. | Адрес. | Вх-001, Вх-003, Вх-004, В-002. | А (100). | |
Валюта. | Валюта. | Вх-002, Вх-004, В-001, З-003. | А (30). | |
Номинал. | Номинал. | Вх-002, В-001. | 9(10).9(2). | |
Количество. | Кол. | Вх-002, Вх-003, Вх-005, В-002. | 9(4). | |
Описание. | Описание. | В-001. | А (255). | |
Номер коллекционера. | Код_коллекционера. | В-002. | 9(6). | |
ФИО. | Фамилия, Имя, Отчество. | В-001. | А (30). | |
1.5 Математическое описание задачи Для расчёта возраста используется формула 1.1.
(1.1).
1.6 Проектирование структуры базы данных На основе анализа исходной информации предметной области проведена группировка реквизитов и выделение информационных объектов задачи с учётом требований нормализации отношений для построения реляционной модели данных. Связи между выявленными информационными объектами определяются реальными отношениями между парами объектов. При их определении учитывались сведения из описания предметной области. В таблице 1.4 представлено описание связей между информационными объектами задачи.
Таблица 1.4 — Описание связей между информационными объектами.
Главный объект. | Подчинённый объект. | Тип отношений. | Ключи связи. | |
Валюта. | Монета. | 1:М. | Код_валюты. | |
Монета. | Коллекция. | 1:М. | Код_монеты. | |
Коллекционер | Коллекция. | 1:М. | Код_коллекционера. | |
Графическое изображение информационно-логической модели в канонической форме, наглядно показывающей иерархические отношения подчинённости информационных объектов, приведено на рисунке 1.11.
Рисунок 1.11 — Информационно-логическая модель данных На рисунке 1.12 представлена Структура реляционной базы данных Рисунок 1.12 — Логическая структура базы данных.
1.7 Технология обработки данных Решение задачи необходимо проводить по следующим этапам:
1. Ввод данных о валютах через экранную форму с возможностью корректировки данных;
2. Ввод данных о коллекционерах через экранную форму с возможностью корректировки данных;
3. Ввод данных о монетах через экранную форму с возможностью корректировки данных;
4. Ввод данных о коллекциях через экранную форму с возможностью корректировки данных;
— Формирование полного списка монет в коллекциях;
— Формирование списка монет, указанного коллекционера;
— Формирование списка владельцев указанной монеты;
— Формирование списка самых дорогих монет среди указанной валюты;
— Анализ популярности монет;
Общая технология решения задачи представлена на рисунке 10, а на рисунке 11 представлена функциональная схема организации приложения.
1.8 Разработка данных контрольного примера Для последующего тестирования программы был разработан контрольный пример средствами MS EXCEL. Данные контрольного примера представлены в приложение А.
2. Специальный раздел.
2.1 Структура данных Для хранения данных о клубе коллекционеров средствами СУБД Access была создана база данных, содержащая 4 таблиц, для каждой из которых был определен первичный ключ и вспомогательные индексы. Кроме того, для хранения данных о клубе нумизматов было создана вспомогательная таблица. Описание базы данных и таблиц представлено на рисунках 2.1−2.5.
Рисунок 2.1 — Структура таблицы Коллекция Рисунок 2.2 — Структура таблицы Коллекционер Рисунок 2.3 — Структура таблицы Монета Рисунок 2.4 — Структура таблицы Валюта Рисунок 2.5 — Схема данных.
2.2 Описание объектов приложения Для обработки данных о клуба коллекционеров средствами СУБД FoxPro были созданы программы, формы ввода данных и критериев поиска, отчеты для печати, меню. Описание всех объектов приложения представлено в таблице 2.1 и на рисунке 2.6. На рисунке 2.7 представлена связь объектов приложения в меню.
Таблица 2.1 — Описание объектов приложения.
Имя. | Тип. | Назначение. | |
Dm_collection. | Модуль данных. | Доступ к информации из БД и связи с отчетами. | |
Fm_ob_avtore. | Форма. | Просмотр информации об авторе. | |
Fm_collections. | Форма. | Просмотр и редактирование данных о коллекционерах и их коллекциях. | |
Fm_valuta. | Форма. | Просмотр и редактирование данных о монетах. | |
Fm_o_prog. | Форма. | Просмотр информации о программе. | |
Fm_poisk1. | Форма. | Поиск монет коллекционера. | |
Fm_poisk3. | Форма. | Поиск владельцев заданной монеты. | |
Fm_poisk4. | Форма. | Поиск самых дорогих монет среди валюты. | |
Fm_cleardata. | Форма. | Очистка баз данных. | |
Fm_settings. | Форма. | Просмотр и редактирование данных о владельце клуба и его названии. | |
Fm_main. | Форма. | Главная форма. Начальные установки и запуск меню. | |
R_poisk1. | Отчёт. | Монеты коллекционера. | |
R_poisk200. | Отчёт. | Полный список данных. | |
R_poisk210. | Отчёт. | Полный список данных с итоговой группировкой по коллекционеру. | |
R_poisk211. | Отчёт. | Полный список данных с подробной группировкой по коллекционеру. | |
R_poisk221. | Отчёт. | Полный список данных с итоговой группировкой по монетам. | |
R_poisk222. | Отчёт. | Полный список данных с подробной группировкой по монетам. | |
R_poisk3. | Отчёт. | Коллекционеры монеты. | |
R_poisk4. | Отчёт. | Самая дорогая монета среди валюты и её владельцы. | |
Help1. | Справка. | Фаил помощи. | |
Рисунок 2.6 — Объекты приложения и отчёта.
2.3 Инструкции по работе с программой.
2.3.1 Техническое обеспечение задачи Для корректного функционирования программы необходимо иметь компьютер с следующими характеристиками:
— процессор не менее 500 МГЦ
— ОЗУ не менее 256 Мб.
— свободного места на диске не менее 30 Мб.
— принтер
— операционная система Windows XP, Vista, Windows 7.
— программы MS Access 2010.
2.3.2 Порядок установки и запуска программы Для установки программы нужно скопировать и запустить файл установки setup_collection.exe, 1мб и указать путь установки программы.(рисунок …).
Рисунок — Вид окна установки программы После установки в заданной папке будут содержаться следующие файлы:
— _Collection.exe (2мб) — файл запуска программы.
— Db. accdb (2мб) — фаил хранит базу данных.
— Reports. rav — (500кб) — фаил хранящий отчёты.
— Help1. chm — (300кб) — справочный фаил Для запуска програмы необходимо открыть фаил _collection.exe, после этого на экране появится диалог открытия базы данных. После правильного подключения данных будет открыт доступ к основному меню.
Для получения справки о программе нажмите на пункт меню «Справка» или нажмите клавишу F1 на клавиатуре. Программа выдаст справку.
2.3.3 Ввод и изменение исходных данных Перед началом работы можно провести очистку данных. Надо перейти в пункт основного меню «Данные» и выбрать пункт «Очистка данных». На форме, определить данные для удаления и нажать кнопку «Удалить».
Для ввода и редактирования справочных данных надо перейти в пункт меню «Справочники» и открыть форму «Валюта».
Данные представлены в виде таблицы, для перемещения по которой можно использовать полосу прокрутки, а также стрелки в нижней и верхней панели навигатора. Кроме кнопок перемещения навигатор имеет кнопку добавления новой записи, удаления, редактирование выбранной записи, сохранение изменений, отказ от изменений и обновление данных. Закрытие формы выполняется кнопками окна Х в верхней правой части и кнопкой «Выход». При вводе и редактировании данных автоматически рассчитывается возраст монеты.
Рисунок … Вид кнопок навигации Рисунок … Вид кнопки добавления записи Рисунок … Вид кнопки сохранения изменений Рисунок … Вид кнопки удаления записи Для ввода основной информации о коллекциях на главном меню (рисунок) надо выбрать пункт «Данные о коллекции». Форма представлена на рисунке. Она отображает данные в таблице, имеет навигатор и для удобного ввода поля со списками, в которых нужно просто выбрать подходящее значение. Использование навигатора аналогично.
2.3.4 Получение выходных документов Для получения других выходных документов выберите в главном меню пункт «Отчётность», а затем необходимый документ Данные отчетные документы имеют запросных форм для предварительного ввода критериев поиска данных, после выполнения поиска найденные данные можно вывести на печать через окно предварительного просмотра Для печати найденных данных с помощью кнопки «Печать» отчет отображается в окне предварительного просмотра.
2.4 Тестирование программы.
Тестирование программы проводилось по данным контрольного примера, и результаты представлены в Приложении Б. Оно показало, что программа работает стабильно, так как данные контрольного примера совпадают с результатами тестирования.
Программа обеспечивает контроль вводимых данные и защиту от неправильных действий пользователя.
Если при перемещении по данным на формах ввода указатель попадает на первую или последнюю запись, то кнопки навигатора для перемещения дальше блокируются.
Для обеспечения безопасности данных при попытке удаления выдается запрос на подтверждение, представленное на рисунке Доступ в поля с наименованием «Код» запрещён, т.к. программа сама проставит коды.
При выполнении поиска для формирования выходных документов выполняется проверка на количество найденных данных и при их отсутствии выводится сообщение, а так же производится проверка на выбор критериев поиска.
На остальных запросных формах проверки аналогичны.
Заключение.
В ходе прохождения практики были решена задача по автоматизации учёта коллекционных монет. Все необходимые функции реализованы, то есть программа выполнена в строгом соответствии с заданием и выполняет поставленную задачу полностью.
Была спроектирована реляционная база данных и приложение для ее обработки реализации в СУБД MS Access.
Приложение было протестировано по заранее разработанному контрольному примеру. Данные контрольного примера полностью совпадают с результатами работы приложения. Кроме того приложение адекватно реагирует на критические ситуации и своевременно сообщает о некорректности данных.
На основании сравнения данных контрольного примера и результатов тестирования программы можно сделать вывод о том, что приложение правильно обрабатывает исходные данные. Кроме того, при решении учтены критические ситуации по отсутствию выходных данных.
К недостаткам программы можно отнести:
— Неполная русификация сообщений и кнопок в ошибках, а так же при добавлении или удалении записей в составной форме.
— Неудобная справочная система.
— Отсутствие контроля при удалении полей Таким образом, приложение работоспособно и пригодно для использования его в клубе, даже с выявленными недостатками, на которые просто следует обращать внимание пользователя при работе.
Список используемых источников
.
1 Иванова Г. С. Технология программирования: Учебник для вузов.-М.: Изд-во МГТУ им. Н. Э. Баумана, 2002.-320с.:ил.
2 Вендров А. М. Практикум по проектированию программного обеспечения экономических информационных систем. — М.: Финансы и статистика, 2002.
3 М. Фленов. Библия Delphi, издательство: БХВ-Петербург, ISBN 5−94 157−456−8; 2005.
4 http://www.cyberforum.ru/delphi/.
Перечень принятых сокращений БД — база данных;
ПП — программный продукт;
ОУИ — оперативно-учетная информация;
УПИ — условно-постоянная информация;
НСИ — нормативно справочная информация;
ИО — информационный объект.
ПРИЛОЖЕНИЕ, А Данные контрольного примера Страница «Исходные данные».
Страница «Полный список».
Страница полный список с группировкой по коллекционеру.
ПРИЛОЖЕНИЕ Б Результаты тестирования программы программа база данное.
ПРИЛОЖЕНИЕ В Текст программ, форм, меню и отчетов.
unit main;
interface.
uses.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,.
Dialogs, StdCtrls, jpeg, ExtCtrls, Menus, dm, ob_avtore, Buttons,.
ImgList, ToolWin, ActnMan, ActnCtrls, ComCtrls, ShellAPI;
type.
Tfm_main = class (TForm).
MainMenu1: TMainMenu;
N11: TMenuItem;
N1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N21: TMenuItem;
N12: TMenuItem;
N6: TMenuItem;
N41: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
N14: TMenuItem;
N24: TMenuItem;
N31: TMenuItem;
N33: TMenuItem;
N15: TMenuItem;
N25: TMenuItem;
N34: TMenuItem;
N42: TMenuItem;
OpenDialog: TOpenDialog;
Image1: TImage;
BitBtn1: TBitBtn;
Label1: TLabel;
N2: TMenuItem;
ImageList1: TImageList;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
OpenDialogRep: TOpenDialog;
procedure FormActivate (Sender: TObject);
procedure N4Click (Sender: TObject);
procedure N15Click (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure FormCloseQuery (Sender: TObject; var CanClose: Boolean);
procedure N1Click (Sender: TObject);
procedure N14Click (Sender: TObject);
procedure BitBtn1Click (Sender: TObject);
procedure N24Click (Sender: TObject);
procedure N31Click (Sender: TObject);
procedure N22Click (Sender: TObject);
procedure N41Click (Sender: TObject);
procedure N2Click (Sender: TObject);
procedure N42Click (Sender: TObject);
procedure N25Click (Sender: TObject);
procedure N34Click (Sender: TObject);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
fm_main: Tfm_main;
flag:integer;
catalog:string;
APchar:array[0.254] of char;
implementation.
uses valuta, moneta, collections, poisk1, poisk3, poisk4, poisk2, settings,.
cleardata, avtor;
//uses Unit1;
{$R *.dfm}.
procedure Tfm_main.BitBtn1Click (Sender: TObject);
begin.
close;
end;
procedure Tfm_main.FormActivate (Sender: TObject);
var filename, prov, ds: string;
begin.
if dm_collection.Connectionbd.Connected = false then.
begin.
repeat.
if opendialog. Execute = true then.
begin.
filename:=opendialog.FileName;
prov:='Provider=Microsoft.ACE.OLEDB.12.0;Password="" ;User ID=Admin;';
ds:='Data Source='+filename;
dm_collection.Connectionbd.ConnectionString:=prov+ds;
end;
try.
dm_collection.Connectionbd.Connected:=true;
dm_collection.t_valuta.Active:=true;
dm_collection.t_moneta.active:=true;
dm_collection.t_kollektioner.active:=true;
dm_collection.t_collection.Active:=true;
dm_collection.t_monetaval.Active:=true;
dm_collection.t_settings.Active:=true;
except.
showmessage ('Неверная база данных. Пожалуйста выберите другую.');
end;
until (dm_collection.t_settings.active=True) or (opendialog.Execute = false);
{flag:=1;
close; }.
end;
end;
procedure Tfm_main.FormCloseQuery (Sender: TObject; var CanClose: Boolean);
begin.
if flag = 0 then.
begin.
if MessageDlg ('Подтвердите завершение работы с программой', mtInformation,[mbYes, mbNo], 0)=mrYes.
then CanClose:=true.
else CanClose:=false.
end.
end;
procedure Tfm_main.FormCreate (Sender: TObject);
begin.
dm_collection.Connectionbd.Connected:=false;
end;
procedure Tfm_main.N14Click (Sender: TObject);
begin.
fm_poisk1.showmodal;
end;
procedure Tfm_main.N15Click (Sender: TObject);
begin.
fm_ob_avtore.ShowModal;
end;
procedure Tfm_main.N22Click (Sender: TObject);
begin.
fm_poisk2.showmodal;
end;
procedure Tfm_main.N24Click (Sender: TObject);
begin.
fm_poisk3.showmodal;
end;
procedure Tfm_main.N25Click (Sender: TObject);
begin.
fm_o_prog.ShowModal;
end;
procedure Tfm_main.N31Click (Sender: TObject);
begin.
fm_poisk4.showmodal;
end;
procedure Tfm_main.N34Click (Sender: TObject);
begin.
ShellExecute (fm_main.Handle, nil, PChar (ExtractFilePath (Application.ExeName)+'help1.chm'), nil, nil, SW_RESTORE);
end;
procedure Tfm_main.N4Click (Sender: TObject);
begin.
fm_valuta.ShowModal;
end;
procedure Tfm_main.N1Click (Sender: TObject);
begin.
fm_collection.showmodal;
end;
procedure Tfm_main.N41Click (Sender: TObject);
begin.
fm_settings.showmodal;
end;
procedure Tfm_main.N2Click (Sender: TObject);
begin.
fm_cleardate.showmodal;
end;
procedure Tfm_main.N42Click (Sender: TObject);
begin.
self.Close;
end;
end.
unit ob_avtore;
interface.
uses.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,.
Dialogs, StdCtrls, jpeg, ExtCtrls, Buttons;
type.
Tfm_ob_avtore = class (TForm).
Label1: TLabel;
Image1: TImage;
BitBtn1: TBitBtn;
procedure BitBtn1Click (Sender: TObject);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
fm_ob_avtore: Tfm_ob_avtore;
implementation.
uses main;
{$R *.dfm}.
procedure Tfm_ob_avtore.BitBtn1Click (Sender: TObject);
begin.
fm_ob_avtore.Close;
end;
end.
unit dm;
interface.
uses.
Windows, Messages, SysUtils, Classes, DB, ADODB, Variants, Graphics, Controls, Forms,.
Dialogs, StdCtrls, jpeg, ExtCtrls, Menus, RpCon, RpConDS, RpDefine,.
RpRave, RpBase, RpSystem;
type.
Tdm_collection = class (TDataModule).
Connectionbd: TADOConnection;
t_valuta: TADOTable;
ds_valuta: TDataSource;
t_moneta: TADOTable;
ds_moneta: TDataSource;
t_kollektioner: TADOTable;
ds_kollektioner: TDataSource;
t_collection: TADOTable;
ds_collection: TDataSource;
Q: TADOQuery;
t_valutakod_valuta: TIntegerField;
t_valutavaluta: TWideStringField;
t_monetakod_moneta: TIntegerField;
t_monetakod_valuta: TIntegerField;
t_monetanominal: TFloatField;
t_monetagod: TIntegerField;
t_monetatirazh: TIntegerField;
t_monetaopisanie: TWideStringField;
t_monetaprice: TIntegerField;
t_kollektionerkod_kollek: TIntegerField;
t_kollektionerfam: TWideStringField;
t_kollektionerimy: TWideStringField;
t_kollektionerotch: TWideStringField;
t_kollektionertelefon: TWideStringField;
t_kollektioneradres: TWideStringField;
t_collectionkod_kollek: TIntegerField;
t_collectionkod_moneta: TIntegerField;
t_collectionkol: TIntegerField;
t_monetavozrast: TIntegerField;
t_monetaval: TADOTable;
ds_monetaval: TDataSource;
t_monetavalkod_moneta: TIntegerField;
t_monetavalkod_valuta: TIntegerField;
t_monetavalnominal: TFloatField;
t_monetavalgod: TIntegerField;
t_monetavaltirazh: TIntegerField;
t_monetavalopisanie: TWideStringField;
t_monetavalprice: TIntegerField;
t_monetavalvozrast: TIntegerField;
t_monetavalmoneta: TStringField;
t_monetaname: TStringField;
t_collectionmo: TStringField;
t_monetamoneta: TStringField;
t_kollektionerfio: TStringField;
ds_q: TDataSource;
q_calc: TADOQuery;
ds_q_calc: TDataSource;
q_dop: TADOQuery;
Reports: TRvProject;
RvSystem1: TRvSystem;
r_poisk1: TRvDataSetConnection;
r_poisk3: TRvDataSetConnection;
r_poisk4: TRvDataSetConnection;
r_poisk200: TRvDataSetConnection;
r_poisk210: TRvDataSetConnection;
r_poisk211: TRvDataSetConnection;
r_poisk220: TRvDataSetConnection;
r_poisk221: TRvDataSetConnection;
ds_settings: TDataSource;
t_settings: TADOTable;
r_settings: TRvDataSetConnection;
procedure t_valutaBeforeDelete (DataSet: TDataSet);
procedure t_monetaCalcFields (DataSet: TDataSet);
procedure t_monetavalCalcFields (DataSet: TDataSet);
procedure t_kollektionerBeforeDelete (DataSet: TDataSet);
procedure t_monetaBeforeDelete (DataSet: TDataSet);
procedure t_kollektionerCalcFields (DataSet: TDataSet);
procedure t_collectionAfterInsert (DataSet: TDataSet);
procedure t_collectionBeforeInsert (DataSet: TDataSet);
procedure t_collectionAfterPost (DataSet: TDataSet);
procedure t_collectionAfterDelete (DataSet: TDataSet);
procedure t_valutaBeforeInsert (DataSet: TDataSet);
procedure t_valutaAfterInsert (DataSet: TDataSet);
procedure t_monetaAfterInsert (DataSet: TDataSet);
procedure t_monetaBeforeInsert (DataSet: TDataSet);
procedure t_monetavalBeforeInsert (DataSet: TDataSet);
procedure t_monetavalAfterInsert (DataSet: TDataSet);
procedure t_kollektionerBeforeInsert (DataSet: TDataSet);
procedure t_kollektionerAfterInsert (DataSet: TDataSet);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
dm_collection: Tdm_collection;
kod_val, kod_kollek, kod_moneta, i: integer;
implementation.
uses valuta, collections;
{$R *.dfm}.
procedure Tdm_collection.t_collectionAfterDelete (DataSet: TDataSet);
var kol: integer;
begin.
if fm_collection.dbedit2.text<>'' then.
begin.
dm_collection.q.SQL.text:='SELECT * FROM t_collection WHERE kod_kollek='+fm_collection.dbedit1.text;
dm_collection.q.Open;
kol:=dm_collection.q.recordcount;
fm_collection.txt_itog.Caption:='Всего монет у коллекционера:'+inttostr (kol);
end;
end;
procedure Tdm_collection.t_collectionAfterInsert (DataSet: TDataSet);
var kol: integer;
begin.
if fm_collection.dbedit2.text<>'' then.
begin.
dm_collection.q.SQL.text:='SELECT * FROM t_collection WHERE kod_kollek='+fm_collection.dbedit1.text;
dm_collection.q.Open;
kol:=dm_collection.q.recordcount;
fm_collection.txt_itog.Caption:='Всего монет у коллекционера:'+inttostr (kol);
end;
end;
procedure Tdm_collection.t_collectionAfterPost (DataSet: TDataSet);
var kol: integer;
begin.
if fm_collection.dbedit2.text<>'' then.
begin.
dm_collection.q.SQL.text:='SELECT * FROM t_collection WHERE kod_kollek='+fm_collection.dbedit1.text;
dm_collection.q.Open;
kol:=dm_collection.q.recordcount;
fm_collection.txt_itog.Caption:='Всего монет у коллекционера:'+inttostr (kol);
end;
end;
procedure Tdm_collection.t_collectionBeforeInsert (DataSet: TDataSet);
var kol: integer;
begin.
if fm_collection.dbedit2.text<>'' then.
begin.
dm_collection.q.SQL.text:='SELECT * FROM t_collection WHERE kod_kollek='+fm_collection.dbedit1.text;
dm_collection.q.Open;
kol:=dm_collection.q.recordcount;
fm_collection.txt_itog.Caption:='Всего монет у коллекционера:'+inttostr (kol);
end;
end;
procedure Tdm_collection.t_kollektionerAfterInsert (DataSet: TDataSet);
begin.
t_kollektionerkod_kollek.Value:=kod_kollek;
end;
procedure Tdm_collection.t_kollektionerBeforeDelete (DataSet: TDataSet);
var i, prov: integer;
begin.
prov:=t_kollektionerkod_kollek.Value;
q.SQL.Text:='SELECT * FROM t_collection WHERE kod_kollek='+inttostr (prov);
q.Open;
if q. RecordCount>0 then.
begin.
If messagedlg ('В таблице коллекций у данного коллекционера имеются монеты. Удалить коллекционера и его коллекцию? ', mtConfirmation, [mbyes, mbno], 0) = mrno Then.
begin.
abort;
end;
end.
else.
begin.
if messagedlg (' Удалить коллекционера? ', mtConfirmation, [mbyes, mbno], 0) = mrno then.
abort;
end;
end;
procedure Tdm_collection.t_kollektionerBeforeInsert (DataSet: TDataSet);
begin.
i:=1;
t_kollektioner.First;
while i=t_kollektionerkod_kollek.value do.
begin.
i:=i+1;
t_kollektioner.Next;
end;
kod_kollek:=i;
end;
procedure Tdm_collection.t_kollektionerCalcFields (DataSet: TDataSet);
begin.
t_kollektionerfio.value := t_kollektionerfam.value+' '+t_kollektionerimy.value+' '+t_kollektionerotch.value;
end;
procedure Tdm_collection.t_monetaAfterInsert (DataSet: TDataSet);
begin.
t_monetakod_moneta.value:=kod_moneta;
end;
procedure Tdm_collection.t_monetaBeforeDelete (DataSet: TDataSet);
var i, prov: integer;
begin.
if messagedlg (' Удалить монету? ', mtConfirmation, [mbyes, mbno], 0) = mrno then.
abort.
else.
begin.
prov:=t_monetakod_moneta.Value;
q.SQL.Text:='SELECT * FROM t_collection WHERE kod_moneta='+inttostr (prov);
q.Open;
if q. RecordCount>0 then.
begin.
// messagedlg ('Удаление невозможно. Данная монета состоит в коллекциях.');
end;
end;
end;
procedure Tdm_collection.t_monetaBeforeInsert (DataSet: TDataSet);
begin.
i:=1;
t_moneta.First;
while i=t_monetakod_moneta.value do.
begin.
i:=i+1;
t_moneta.Next;
end;
kod_moneta:=i;
end;
procedure Tdm_collection.t_monetaCalcFields (DataSet: TDataSet);
var Year, Month, Day: word;
begin.
decodedate (now (), year, month, day);
t_monetavozrast.value:=year — t_monetagod.value;
t_monetamoneta.value:=trim (t_monetaname.value)+' '+trim (varToStr (t_monetanominal.Value));
end;
procedure Tdm_collection.t_monetavalAfterInsert (DataSet: TDataSet);
begin.
t_monetavalkod_moneta.value:=kod_moneta;
end;
procedure Tdm_collection.t_monetavalBeforeInsert (DataSet: TDataSet);
var kol, i: integer;
begin.
q.SQL.Text:='SELECT * FROM t_moneta';
q.Open;
i:=1;
for I := 1 to q. RecordCount do.
begin.
q.SQL.Text:='SELECT * FROM t_moneta WHERE kod_moneta='+inttostr (i);
q.Open;
if q. RecordCount = 0 then.
begin.
kod_moneta:=i;
break;
end;
end;
kod_moneta:=i;
end;
procedure Tdm_collection.t_monetavalCalcFields (DataSet: TDataSet);
var Year, Month, Day: word;
begin.
decodedate (now (), year, month, day);
t_monetavalvozrast.value:=year — t_monetavalgod.value;
//t_monetavalmoneta.Value:=trim (t_monetavalname.value)+' '+trim (varToStr (t_monetavalnominal.value));
end;
procedure Tdm_collection.t_valutaBeforeDelete (DataSet: TDataSet);
var i, prov: integer;
begin.
prov:=t_valutakod_valuta.Value;
q.SQL.Text:='SELECT * FROM t_moneta WHERE kod_valuta='+inttostr (prov);
q.Open;
if q. RecordCount>0 then.
begin.
If messagedlg ('В таблице монета имеются монеты этой валюты. Удалить валюту и монеты? ', mtConfirmation, [mbyes, mbno], 0) = mrno Then.
begin.
abort;
end;
end.
else.
begin.
if messagedlg (' Удалить валюту? ', mtConfirmation, [mbyes, mbno], 0) = mrno then.
abort;
end;
end;
procedure Tdm_collection.t_valutaBeforeInsert (DataSet: TDataSet);
begin.
i:=1;
t_valuta.First;
while i=t_valutakod_valuta.value do.
begin.
i:=i+1;
t_valuta.Next;
end;
kod_val:=i;
end;
procedure Tdm_collection.t_valutaAfterInsert (DataSet: TDataSet);
begin.
t_valutakod_valuta.Value:=kod_val;
end;
end.
unit valuta;
interface.
uses.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,.
Dialogs, Grids, DBGrids, dm, StdCtrls, ExtCtrls, DBCtrls, Buttons;
type.
Tfm_valuta = class (TForm).
DBGrid1: TDBGrid;
DBNavigator1: TDBNavigator;
BitBtn1: TBitBtn;
DBGrid2: TDBGrid;
DBNavigator2: TDBNavigator;
Label1: TLabel;
procedure btn_backClick (Sender: TObject);
procedure BitBtn1Click (Sender: TObject);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
fm_valuta: Tfm_valuta;
implementation.
uses main;
{$R *.dfm}.
procedure Tfm_valuta.BitBtn1Click (Sender: TObject);
begin.
self.Close;
end;
procedure Tfm_valuta.btn_backClick (Sender: TObject);
begin.
fm_valuta.close;
end;
end.
unit collections;
interface.
uses.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,.
Dialogs, StdCtrls, Buttons, dm, Mask, DBCtrls, ExtCtrls, Grids, DBGrids;
type.
Tfm_collection = class (TForm).
BitBtn1: TBitBtn;
DBNavigator1: TDBNavigator;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
DBGrid1: TDBGrid;
DBNavigator2: TDBNavigator;
Txt_itog: TLabel;
Label7: TLabel;
procedure BitBtn1Click (Sender: TObject);
procedure DBNavigator1Click (Sender: TObject; Button: TNavigateBtn);
procedure FormActivate (Sender: TObject);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
fm_collection: Tfm_collection;
implementation.
{$R *.dfm}.
procedure Tfm_collection.BitBtn1Click (Sender: TObject);
begin.
self.Close;
end;
procedure Tfm_collection.DBNavigator1Click (Sender: TObject;
Button: TNavigateBtn);
var kol: integer;
begin.
if dbedit1. text<>'' then.
begin.
dm_collection.q.SQL.text:='SELECT * FROM t_collection WHERE kod_kollek='+dbedit1.text;
dm_collection.q.Open;
kol:=dm_collection.q.recordcount;
txt_itog.Caption:='Всего монет у коллекционера:'+inttostr (kol);
end;
end;
procedure Tfm_collection.FormActivate (Sender: TObject);
var kol: integer;
begin.
if dbedit1. text<>'' then.
begin.
dm_collection.q.SQL.text:='SELECT * FROM t_collection WHERE kod_kollek='+dbedit1.text;
dm_collection.q.Open;
kol:=dm_collection.q.recordcount;
txt_itog.Caption:='Всего монет у коллекционера:'+inttostr (kol);
end;
end;
end.
unit poisk1;
interface.
uses.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,.
Dialogs, dm, StdCtrls, DBCtrls, Buttons, Grids, DBGrids, ExtCtrls;
type.
Tfm_poisk1 = class (TForm).
Label1: TLabel;
BitBtn1: TBitBtn;
LB_koll: TDBLookupListBox;
btn_find: TBitBtn;
btn_print: TBitBtn;
DBGrid1: TDBGrid;
lb_kol: TLabel;
lb_summa: TLabel;
Btn_cancel: TBitBtn;
label2: TLabel;
rg_sort: TRadioGroup;
procedure BitBtn1Click (Sender: TObject);
procedure btn_findClick (Sender: TObject);
procedure FormCreate (Sender: TObject);
procedure Btn_cancelClick (Sender: TObject);
procedure rg_sortClick (Sender: TObject);
procedure btn_printClick (Sender: TObject);
procedure zag ();
procedure FormActivate (Sender: TObject);
procedure FormDeactivate (Sender: TObject);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
fm_poisk1: Tfm_poisk1;
global:string;
implementation.
uses main;
{$R *.dfm}.
procedure Tfm_poisk1.zag ();
begin.
self.DBGrid1.Columns[0]. Title. Caption:='Валюта';
self.DBGrid1.Columns[0].Width:=150;
self.DBGrid1.columns[0].Alignment:=tacenter;
self.DBGrid1.Columns[1].Title.Caption:='Номинал';
self.DBGrid1.Columns[1].Width:=50;
self.DBGrid1.columns[1].Alignment:=tacenter;
self.DBGrid1.Columns[2].Title.Caption:='Количество';
self.DBGrid1.Columns[2].Width:=70;
self.DBGrid1.columns[2].Alignment:=tacenter;
self.DBGrid1.Columns[3].Title.Caption:='Цена';
self.DBGrid1.Columns[3].Width:=50;
self.DBGrid1.columns[3].Alignment:=tacenter;
self.DBGrid1.Columns[4].Title.Caption:='Возраст';
self.DBGrid1.Columns[4].Width:=50;
self.DBGrid1.columns[4].Alignment:=tacenter;
end;
procedure Tfm_poisk1.BitBtn1Click (Sender: TObject);
begin.
self.close;
end;
procedure Tfm_poisk1.btn_findClick (Sender: TObject);
begin.
global:='SELECT t_valuta.valuta, t_moneta.nominal, t_collection.kol, t_moneta.price ,'+.
' Year (Date ()) — god AS vozrast FROM t_valuta INNER JOIN (t_moneta INNER JOIN (t_kollektioner INNER JOIN t_collection ON t_kollekti'+.
'oner.kod_kollek = t_collection.kod_kollek) ON t_moneta.kod_moneta = t_collection.kod_moneta) ON t_va'+.
'luta.kod_valuta = t_moneta.kod_valuta';
if lb_koll.KeyValue<=0 then // Если не выбран коллекционер
messagedlg ('Вы не выбрали коллекционера', mtInformation,[mbOk], 0).
else.
begin.
global:=global+' WHERE t_collection.kod_kollek='+inttostr (lb_koll.KeyValue);
dm_collection.Q.SQL.Text:=global;
dm_collection.Q.Open;
zag;
if dm_collection.Q.RecordCount=0 then.
begin //Если не найдены данные.
messagedlg ('Монет у коллекционера не найдено', mtInformation,[mbOk], 0);
end.
else.
begin // Если найдено.
btn_print.enabled:=true;
lb_kol.Caption:='Количество типов монет:'+inttostr (dm_collection.Q.RecordCount);
dm_collection.Q_calc.SQL.text:='SELECT sum (kol) as summa FROM t_collection WHERE kod_kollek='+inttostr (lb_koll.KeyValue);
dm_collection.q_calc.Open;
lb_summa.caption:='Всего монет:'+dm_collection.Q_calc.FieldByName ('summa').AsString;
end;
end;
end;
procedure Tfm_poisk1.Btn_cancelClick (Sender: TObject);
begin.
global:='SELECT t_valuta.valuta, t_moneta.nominal, t_collection.kol, t_moneta.price ,'+.
' Year (Date ()) — god AS vozrast FROM t_valuta INNER JOIN (t_moneta INNER JOIN (t_kollektioner INNER JOIN t_collection ON t_kollekti'+.
'oner.kod_kollek = t_collection.kod_kollek) ON t_moneta.kod_moneta = t_collection.kod_moneta) ON t_va'+.
'luta.kod_valuta = t_moneta.kod_valuta';
dm_collection.Q.SQL.Text:=global;
dm_collection.Q.Open;
lb_kol.Caption:='';
lb_summa.Caption:='';
btn_print.Enabled:=false;
rg_sort.ItemIndex:=-1;
LB_koll.KeyValue:=-1;
zag;
end;
procedure Tfm_poisk1.FormActivate (Sender: TObject);
begin.
global:='SELECT t_valuta.valuta, t_moneta.nominal, t_collection.kol, t_moneta.price ,'+.
' Year (Date ()) — god AS vozrast FROM t_valuta INNER JOIN (t_moneta INNER JOIN (t_kollektioner INNER JOIN t_collection ON t_kollekti'+.
'oner.kod_kollek = t_collection.kod_kollek) ON t_moneta.kod_moneta = t_collection.kod_moneta) ON t_va'+.
'luta.kod_valuta = t_moneta.kod_valuta';
dm_collection.Q.SQL.Text:=global;
dm_collection.Q.Open;
zag;
btn_print.Enabled:=false;
rg_sort.ItemIndex:=-1;
LB_koll.KeyValue:=-1;
end;
procedure Tfm_poisk1.FormCreate (Sender: TObject);
begin.
btn_print.Enabled:=false;
{ }.
end;
procedure Tfm_poisk1.rg_sortClick (Sender: TObject);
var sort: string;
begin.
case rg_sort.ItemIndex of.
0: sort:=' ORDER BY t_valuta.valuta ASC';
1: sort:=' ORDER BY t_moneta.nominal ASC';
2: sort:=' ORDER BY t_collection.kol ASC';
3: sort:=' ORDER BY t_moneta.price ASC';
4: sort:=' ORDER BY Year (Date ()) — god ASC';
end;
dm_collection.Q.SQL.Text:=global+sort;
dm_collection.Q.Open;
zag;
end;
procedure Tfm_poisk1.btn_printClick (Sender: TObject);
var txt, filename: string;
begin.
zag;
txt:=lb_koll.SelectedItem;
try.
dm_collection.Reports.SetParam ('poisk1', txt);
dm_collection.Reports.ExecuteReport ('r_poisk1');
except.
MessageDlg ('Неправильный фаил отчётов. Пожалуйста укажите путь к корректному фаилу.', mtInformation,[mbOk], 0);
repeat.
if fm_main.opendialogrep.Execute = true then.
begin.
filename:=fm_main.opendialogrep.FileName;
dm_collection.reports.ProjectFile:=filename;
end;
until (dm_collection.reports.projectfile=ExtractFilePath (Application.ExeName)+'Reports.rav') or (fm_main.OpenDialogRep.Execute = false).
end;
end;
procedure Tfm_poisk1.FormDeactivate (Sender: TObject);
begin.
dm_collection.Q.SQL.Text:=global;
dm_collection.Q.Open;
zag;
end;
end.
unit poisk3;
interface.
uses.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,.
Dialogs, dm, DBCtrls, StdCtrls, Grids, DBGrids, Buttons, ExtCtrls;
type.
Tfm_poisk3 = class (TForm).
Label1: TLabel;
lb_mon: TDBLookupListBox;
label2: TLabel;
btn_find: TBitBtn;
btn_print: TBitBtn;
Btn_cancel: TBitBtn;
DBGrid1: TDBGrid;
lb_kol: TLabel;
rg_sort: TRadioGroup;
BitBtn1: TBitBtn;
procedure btn_findClick (Sender: TObject);
procedure FormActivate (Sender: TObject);
procedure Btn_cancelClick (Sender: TObject);
procedure rg_sortClick (Sender: TObject);
procedure BitBtn1Click (Sender: TObject);
procedure zag ();
procedure btn_printClick (Sender: TObject);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
fm_poisk3: Tfm_poisk3;
global:string;
implementation.
uses main;
{$R *.dfm}.
procedure Tfm_poisk3.zag ();
begin.
self.DBGrid1.Columns[0]. Title. Caption:='Фамилия';
self.DBGrid1.Columns[0].Width:=100;
self.DBGrid1.columns[0].Alignment:=tacenter;
self.DBGrid1.Columns[1].Title.Caption:='Имя';
self.DBGrid1.Columns[1].Width:=100;
self.DBGrid1.columns[1].Alignment:=tacenter;
self.DBGrid1.Columns[2].Title.Caption:='Отчество';
self.DBGrid1.Columns[2].Width:=100;
self.DBGrid1.columns[2].Alignment:=tacenter;
self.DBGrid1.Columns[3].Title.Caption:='Телфон';
self.DBGrid1.Columns[3].Width:=100;
self.DBGrid1.columns[3].Alignment:=tacenter;
self.DBGrid1.Columns[4].Title.Caption:='Адрес';
self.DBGrid1.Columns[4].Width:=100;
self.DBGrid1.columns[4].Alignment:=tacenter;
self.DBGrid1.Columns[5].Title.Caption:='Количество';
self.DBGrid1.Columns[5].Width:=100;
self.DBGrid1.columns[5].Alignment:=tacenter;
end;
procedure Tfm_poisk3.Btn_cancelClick (Sender: TObject);
begin.
global:='SELECT t_kollektioner.fam, t_kollektioner.imy, t_kollektioner.otch, t_kollektioner.telefon, '+.
't_kollektioner.adres, t_collection.kol '+.
'FROM t_kollektioner INNER JOIN t_collection ON t_kollektioner.kod_kollek = t_collection.kod_kollek';
dm_collection.Q.SQL.Text:=global;
dm_collection.q.open;
lb_kol.Caption:='';
btn_print.Enabled:=false;
lb_mon.KeyValue:=-1;
rg_sort.ItemIndex:=-1;
zag ();
end;
procedure Tfm_poisk3.btn_findClick (Sender: TObject);
var sort: string;
begin.
if lb_mon.KeyValue<=0 then // Если не выбран коллекционер
begin.
messagedlg ('Вы не выбрали монету', mtInformation,[mbOk], 0);
end.
else.
begin.
global:='SELECT t_kollektioner.fam, t_kollektioner.imy, t_kollektioner.otch, t_kollektioner.telefon, '+.
't_kollektioner.adres, t_collection.kol '+.
'FROM t_kollektioner INNER JOIN t_collection ON t_kollektioner.kod_kollek = t_collection.kod_kollek';
dm_collection.Q.SQL.Text:=global;
global:=global+' WHERE t_collection.kod_moneta='+inttostr (lb_mon.KeyValue);
case rg_sort.ItemIndex of.
— 1: sort:='';
0: sort:=' ORDER BY t_kollektioner.fam ASC ';
1: sort:=' ORDER BY t_kollektioner.telefon ASC ';
2: sort:=' ORDER BY t_kollektioner.adres ASC ';
3: sort:=' ORDER BY t_collection.kol ASC ';
end;
dm_collection.Q.SQL.Text:=global+sort;
dm_collection.Q.Open;
zag ();
if dm_collection.Q.RecordCount=0 then.
begin //Если не найдены данные.
messagedlg ('У данной монеты нет коллекционеров', mtInformation,[mbOk], 0);
end.
else.
begin // Если найдено.
btn_print.Enabled:=true;
lb_kol.Caption:='Количество коллекционеров:'+inttostr (dm_collection.Q.RecordCount);
end;
end;
end;
procedure Tfm_poisk3.FormActivate (Sender: TObject);
begin.
global:='SELECT t_kollektioner.fam, t_kollektioner.imy, t_kollektioner.otch, t_kollektioner.telefon, '+.
't_kollektioner.adres, t_collection.kol '+.
'FROM t_kollektioner INNER JOIN t_collection ON t_kollektioner.kod_kollek = t_collection.kod_kollek';
dm_collection.Q.SQL.Text:=global;
dm_collection.q.open;
zag ();
lb_kol.Caption:='';
btn_print.Enabled:=false;
end;
procedure Tfm_poisk3.rg_sortClick (Sender: TObject);
var sort: string;
begin.
dm_collection.Q.SQL.Text:=global;
case rg_sort.ItemIndex of.
0: sort:=' ORDER BY t_kollektioner.fam ASC ';
1: sort:=' ORDER BY t_kollektioner.telefon ASC ';
2: sort:=' ORDER BY t_kollektioner.adres ASC ';
3: sort:=' ORDER BY t_collection.kol ASC ';
end;
dm_collection.Q.SQL.Text:=global+sort;
dm_collection.Q.Open;
zag ();
end;
procedure Tfm_poisk3.BitBtn1Click (Sender: TObject);
begin.
self.Close;
end;
procedure Tfm_poisk3.btn_printClick (Sender: TObject);
var txt, filename: string;
begin.
txt:=lb_mon.SelectedItem;
try.
dm_collection.Reports.SetParam ('poisk3', txt);
dm_collection.Reports.ExecuteReport ('r_poisk3');
except.
MessageDlg ('Неправильный фаил отчётов. Пожалуйста укажите путь к корректному фаилу.', mtInformation,[mbOk], 0);
repeat.
if fm_main.opendialogrep.Execute = true then.
begin.
filename:=fm_main.opendialogrep.FileName;
dm_collection.reports.ProjectFile:=filename;
end;
until (dm_collection.reports.projectfile=ExtractFilePath (Application.ExeName)+'Reports.rav') or (fm_main.OpenDialogRep.Execute = false).
end;
end;
end.
unit poisk4;
interface.
uses.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,.
Dialogs, DBCtrls, Grids, DBGrids, StdCtrls, dm, Buttons;
type.
Tfm_poisk4 = class (TForm).
Label1: TLabel;
DBGrid1: TDBGrid;
DBGrid2: TDBGrid;
lb_val: TDBLookupListBox;
Label2: TLabel;
Label3: TLabel;
BitBtn1: TBitBtn;
btn_print: TBitBtn;
procedure lb_valClick (Sender: TObject);
procedure FormActivate (Sender: TObject);
procedure BitBtn1Click (Sender: TObject);
procedure zag ();
procedure zag2();
procedure btn_printClick (Sender: TObject);
private.
{ Private declarations }.
public.
{ Public declarations }.
end;
var.
fm_poisk4: Tfm_poisk4;
global:string;
implementation.
uses main;
{$R *.dfm}.
procedure Tfm_poisk4.zag ();
var i: integer;
begin.
self.DBGrid2.Columns[0]. Title. Caption:='Валюта';
self.DBGrid2.Columns[0].Width:=150;
self.DBGrid2.columns[0].Alignment:=tacenter;
self.DBGrid2.Columns[1].Title.Caption:='Номинал';
self.DBGrid2.Columns[1].Width:=50;
self.DBGrid2.columns[1].Alignment:=tacenter;
self.DBGrid2.Columns[2].Title.Caption:='Цена';
self.DBGrid2.Columns[2].Width:=50;
self.DBGrid2.columns[2].Alignment:=tacenter;
self.DBGrid2.Columns[3].Title.Caption:='Фамилия';
self.DBGrid2.Columns[3].Width:=100;
self.DBGrid2.columns[3].Alignment:=tacenter;
self.DBGrid2.Columns[4].Title.Caption:='Имя';
self.DBGrid2.Columns[4].Width:=100;
self.DBGrid2.columns[4].Alignment:=tacenter;
self.DBGrid2.Columns[5].Title.Caption:='Отчество';
self.DBGrid2.Columns[5].Width:=100;
self.DBGrid2.columns[5].Alignment:=tacenter;
self.DBGrid2.Columns[6].Title.Caption:='Адрес';
self.DBGrid2.Columns[6].Width:=100;
self.DBGrid2.columns[6].Alignment:=tacenter;
end;
procedure Tfm_poisk4.zag2();
var i: integer;
begin.
self.DBGrid1.Columns[0]. Title. Caption:='Валюта';
self.DBGrid1.Columns[0].Width:=150;
self.DBGrid1.columns[0].Alignment:=tacenter;
self.DBGrid1.Columns[1].Title.Caption:='Номинал';
self.DBGrid1.Columns[1].Width:=50;
self.DBGrid1.columns[1].Alignment:=tacenter;
self.DBGrid1.Columns[2].Title.Caption:='Цена';
self.DBGrid1.Columns[2].Width:=50;
self.DBGrid1.columns[2].Alignment:=tacenter;
self.DBGrid1.Columns[3].Title.Caption:='Фамилия';
self.DBGrid1.Columns[3].Width:=100;
self.DBGrid1.columns[3].Alignment:=tacenter;
self.DBGrid1.Columns[4].Title.Caption:='Имя';
self.DBGrid1.Columns[4].Width:=100;
self.DBGrid1.columns[4].Alignment:=tacenter;
self.DBGrid1.Columns[5].Title.Caption:='Отчество';
self.DBGrid1.Columns[5].Width:=100;
self.DBGrid1.columns[5].Alignment:=tacenter;
self.DBGrid1.Columns[6].Title.Caption:='Адрес';
self.DBGrid1.Columns[6].Width:=100;
self.DBGrid1.columns[6].Alignment:=tacenter;
end;
procedure Tfm_poisk4.btn_printClick (Sender: TObject);
var txt, filename: string;
begin.
txt:=lb_val.SelectedItem;
try.
dm_collection.Reports.SetParam ('poisk4', txt);
dm_collection.Reports.ExecuteReport ('r_poisk4');
except.
MessageDlg ('Неправильный фаил отчётов. Пожалуйста укажите путь к корректному фаилу.', mtInformation,[mbOk], 0);
repeat.
if fm_main.opendialogrep.Execute = true then.
begin.
filename:=fm_main.opendialogrep.FileName;
dm_collection.reports.ProjectFile:=filename;
end;
until (dm_collection.reports.projectfile=ExtractFilePath (Application.ExeName)+'Reports.rav') or (fm_main.OpenDialogRep.Execute = false).
end;
end;
procedure Tfm_poisk4.FormActivate (Sender: TObject);
var sql: string;
begin.
btn_print.Enabled:=false;
sql:='SELECT t_valuta.valuta, t_moneta.nominal, t_moneta.price, t_kollektioner.fam, t_kollektioner.imy, t_kollektioner.otch, t_kollektioner.adres '+.
'FROM t_valuta INNER JOIN (t_moneta INNER JOIN (t_kollektioner INNER JOIN t_collection ON t_kollektioner.kod_kollek = t_collection.kod_kollek)'+.
' ON t_moneta.kod_moneta = t_collection.kod_moneta) ON t_valuta.kod_valuta = t_moneta.kod_valuta ORDER BY t_moneta.price DESC';
dm_collection.Q.SQL.Text:=sql;
dm_collection.q.Open;
zag;
end;
procedure Tfm_poisk4.lb_valClick (Sender: TObject);
var kol: integer;
begin.
global:='SELECT t_valuta.valuta, t_moneta.nominal, t_moneta.price,'+.
' t_kollektioner.fam, t_kollektioner.imy, t_kollektioner.otch, t_kollektioner.adres '+.
' FROM t_valuta INNER JOIN (t_moneta INNER JOIN (t_kollektioner INNER JOIN t_collection '+.
' ON t_kollektioner.kod_kollek = t_collection.kod_kollek)'+.
' ON t_moneta.kod_moneta = t_collection.kod_moneta) ON t_valuta.kod_valuta = t_moneta.kod_valuta'+.