Автоматизация учета коллекционных монет

Проектирование структуры базы данных. Технология обработки данных. Порядок установки и запуска программы. Описание объектов приложения и структура данных. Ввод и изменение исходных данных. Получение выходных документов и тестирование программы.

Рубрика Программирование, компьютеры и кибернетика
Вид отчет по практике
Язык русский
Дата добавления 22.07.2012
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Государственное бюджетное образовательное учреждение среднего профессионального образования

Тольяттинский политехнический техникум

(ГГОУ СПО ТПТ)

Учебно-производственное отделение № 4

Специальность 230105

«Программное обеспечение вычислительной техники и автоматизированных систем»

Отчет по учебной практике по дисциплине: «Технология разработки программных продуктов» на тему: «Автоматизация учета коллекционных монет»

Студент группы В-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 - Перечень и описание выходной информации

Наименование выходной информации

Идентификатор выходной информации

Форма представления

Сроки выдачи

Получатель информации

1

2

3

4

5

Полный список монет в коллекциях

Вх-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 - Перечень и описание входной информации

Наименование документа

Вид информации

Идентификатор

Форма представления

1

2

3

4

Монета

УПИ

В-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 - Перечень и описание реквизитов входной и выходной информации

Наименование реквизита

Идентификатор реквизита

Идентификатор документа

Характеристика реквизита

1

2

3

4

Монета

Монета

Вх-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

2

3

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 - Описание объектов приложения

Имя

Тип

Назначение

1

2

3

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_poisk2_00

Отчёт

Полный список данных

R_poisk2_10

Отчёт

Полный список данных с итоговой группировкой по коллекционеру

R_poisk2_11

Отчёт

Полный список данных с подробной группировкой по коллекционеру

R_poisk2_21

Отчёт

Полный список данных с итоговой группировкой по монетам

R_poisk2_22

Отчёт

Полный список данных с подробной группировкой по монетам

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-94157-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_poisk2_00: TRvDataSetConnection;

r_poisk2_10: TRvDataSetConnection;

r_poisk2_11: TRvDataSetConnection;

r_poisk2_20: TRvDataSetConnection;

r_poisk2_21: 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'+


Подобные документы

  • Склад ОАО "Ориенбанк", его специфика и структура. Описание структуры базы данных складского учета для предприятия. Разработка пользовательского интерфейса программы. Инструкция к применению базы данных. Автоматизация операций и учета средств банка.

    курсовая работа [4,7 M], добавлен 26.02.2010

  • Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.

    курсовая работа [81,7 K], добавлен 18.08.2014

  • Типы данных, использованные при создании базы данных. Структура программы, используемые переменные, выражения и указатели. Концептуальное (инфологическое), логическое (даталогическое) и физическое проектирование. Тестирование программы и описание полей.

    курсовая работа [398,4 K], добавлен 16.07.2012

  • Технологии и языки программирования, используемые при разработке программы. Проектирование и реализация социальной сети. Описание и обоснование выбора организации входных и выходных данных. Алгоритм функционирования программы, таблицы базы данных.

    курсовая работа [3,5 M], добавлен 10.06.2014

  • Сущности и функциональные зависимости базы данных. Атрибуты и связи. Таблицы базы данных. Построение ER-диаграммы. Организация ввода и корректировки данных. Реляционная схема базы данных. Реализация запросов, получение отчетов. Защита базы данных.

    курсовая работа [2,4 M], добавлен 06.02.2016

  • Проектирование базы данных для учета поступления пациентов и проведенного лечения, ведение архива выписанных пациентов. Определение требований поддержки целостности данных. Тестирование программы и руководство пользователю. Листинг программных модулей.

    курсовая работа [3,3 M], добавлен 28.04.2014

  • Особенности проектирования программы на языке С++ для обработки данных из таблиц базы данных. Основные функции программы, создание концептуальной модели базы данных и диаграммы классов, разработка интерфейса пользователя и запросов к базе данных.

    курсовая работа [2,1 M], добавлен 08.06.2012

  • Разработка базы данных для автоматизации учета и хранения сведений о заявках от работодателей. Проектирование приложения в СУБД Access. Описание запросов, отчетов и представлений данных. Интерфейс, условия выполнения и тестирование программного продукта.

    курсовая работа [3,7 M], добавлен 05.04.2012

  • Создание базы данных в среде MS Access. Создание и работа с базой данных на бирже труда. Алгоритм решения. Выбор пакета прикладных программ. Проектирование форм выходных документов и описание структуры таблиц базы данных. Отчеты по запросам и таблицам.

    курсовая работа [2,1 M], добавлен 30.01.2009

  • Проектирование базы данных для автоматизации деятельности по учету автотранспорта ГИБДД Вяземского района. Выбор инструментария для разработки базы данных и приложения по её ведению. Описание интерфейса и физической структуры приложения баз данных.

    курсовая работа [2,2 M], добавлен 28.06.2011

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.