Автоматизация работы фирмы по продаже квартир

Волжский Университет имени В.Н. Татищева

	Факультет «Информатики и телекоммуникаций»

	Кафедра «Информатика и системы управления»

	

	

	

	Курсовая работа

	по дисциплине

	«Базы данных и знаний»

	

	на тему:

	«Автоматизация работы фирмы

	по продаже квартир»

	

	

	

	

	

	Выполнил студент группы ИТ-204

	Семёнов Е.А.

	Проверил

	Краснов С.В.

	

	

	

	

	

	Тольятти

	2002 г.

	
СОДЕРЖАНИЕ

	

	Введение

	1. Теоретическая часть 

	1.1 Предметная область автоматизации

	1.1.1 Описание предметной области и функции решаемой задачи 

	1.2 Постановка задачи

	1.2.1 Организационно-экономическая сущность задачи

	1.2.2 Документы предметной области, содержащие информацию, необходимую для решения задачи 

	1.2.3 Структурный анализ с помощью диаграмм потоков данных 

	1.2.4 Структурный анализ с помощью диаграмм «сущность-связь» 

	2. Реализация информационной системы средствами объектно-ориентированного языка Delphi

	2.1 Аппаратная часть задачи 

	2.2 Обоснование выбора среды разработки и стиля программирования 

	2.3 Создание таблиц баз данных

	2.4 Форма 1(меню программы) 

	2.4.1 Форма 3(изменение базы данных по сотрудникам ) 

	2.5. Форма 2(сотрудники) 

	2.6. Форма 4(форма по работе с клиентами)  

	2.6.1 Форма 5(чек) 

	2.6.2 Форма 7(изменение базы данных по квартирам продавцов)

	2.7 Форма 6(отчёт) 

	Заключение

	Список используемой литературы 

	Приложение А 

	Приложение Б

	
ВВЕДЕНИЕ

	

	Задача накопления, обработки и распространения (обмена) информации стояла перед человечеством на всех этапах его развития. В течение долгого времени основными инструментами для ее решения были мозг, язык и слух человека. Первое кардинальное изменение произошло с приходом письменности, а затем изобретением книгопечатания. Поскольку в эпоху книгопечатания основным носителем информации стала бумага, то технологию накопления и распространения информации естественно называть “бумажной информатикой”.

	Положение в корне изменилось с появлением электронных вычислительных машин (ЭВМ). Первые ЭВМ использовались как большие автоматические арифмометры. Принципиально новый шаг был совершен, когда от применения ЭВМ для решения отдельных задач перешли к их использованию для комплексной автоматизации тех или иных законченных участков деятельности человека по переработке информации.

	Одним из первых примеров подобного системного применения ЭВМ в мировой практике были так называемые административные системы обработки данных: автоматизация банковских операций, бухгалтерского учета, резервирования и оформления билетов и т.п. Решающее значение для эффективности систем подобного рода имеет то обстоятельство, что они опираются на автоматизированные информационные базы. Это означает, что в памяти ЭВМ постоянно сохраняется информация, нужная для решения тех задач, на которые рассчитана система. Она и составляет содержимое информационной базы соответствующей системы. 

	При решении очередной задачи система нуждается во вводе только небольшой порции дополнительной информации, - остальное берется из информационной базы. Каждая порция вновь вводимой информации изменяет информационную базу системы. Эта база (информационная, или база данных) находится, таким образом, в состоянии непрерывного обновления, отражая все изменения, происходящие в реальном объекте, с которым имеет дело система. 

	Сложившийся в прошлом подход к проектированию систем сбора и накопления информации и ее эффективного использования для всевозможных целей состоял в автоматизации отдельных процессов в рамках фрагментов предметной области, или как говорят, в создании множества локальных приложений. В силу значительной независимости приложений одни и те же данные многократно представлялись в памяти ЭВМ, а их соответствие действительным значениям обеспечивалось периодическим применением процедур обновления. При изменении каких-либо сведений приходилось корректировать от нескольких до сотен и даже тысяч записей.

	При переходе от автоматизации отдельных процессов предметной области к созданию автоматизированных информационных систем требуется не только взаимоувязка приложений, но и качественно новый подход к организации данных. Этот подход состоит в использовании единого хранилища – базы данных. Отдельные пользователи перестают быть владельцами тех или иных данных. Все данные накапливаются и хранятся централизованно. В памяти ЭВМ создается динамически обновляемая модель предметной области. 

	За последние годы в области систем баз данных были проведены исключительно продуктивные исследования. Полученные результаты можно считать очень важным достижением информатики. Базы данных стали основой информационных систем и в корне изменили методы работы многих организаций. Например появились системы весьма мощные и интуитивно понятные. Преимуществом компьютерной обработки перед ручной работой является скорость обработки данных, удобное представление данных, автоматическое заполнение некоторых данных, богатые возможности по обработке данных, например, оператор легко может вычислить, какие квартиры есть в наличии, просмотреть отчёт о сделках, и т.д. В моём случае для автоматизации был выбран объект фирма занимающаяся риэлторской деятельностью. Он содержит множество повторяющихся действий по оформлению документов, в основном при работе с клиентами. Проблема в том, что всё это делается в ручную, поэтому имеет смысл автоматизировать хотя бы часть работы таким образом, чтобы сотрудник мог без особых усилий оформлять заказы, предъявлять клиенту накладную со стоимостью оказанной услуги и необходимую информацию и т.д. Основная работа будет выполнятся программой, а также она позволит лучше и быстрее обрабатывать информацию. К тому же автоматизация сервисных служб, повышает уровень сервиса, а значит популярность фирмы. Подводя итог, можно сказать, что выбор темы по автоматизации данной фирмы основывается на достаточно низком уровне сервиса и наличии большого объема ручной работы. В настоящее время серьезные фирмы используют компьютеры в своей работе. Информативность и скорость, постоянно растущие возможности это преимущества автоматизации. В добавок, если связать свою базу данных с INTERNETOM, поиск нужных данных будет намного быстрее чем ездить по фирмам и собирать данные, а это принципиально иной подход к обслуживанию клиентов. Автоматизаций в этой области великое множество, но в моей курсовой работе делается упор на автоматизацию работы с клиентами.

	

	
1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

	

	1.1 Предметная область автоматизации

	

	1.1.1 Описание предметной области и функции решаемой задачи

	Рассмотрим некоторые аспекты решаемой задачи по автоматизации.

	В работе фирмы можно выделить следующие пункты:

	Учёт и запись сотрудников

	Запись заказа клиента

	Выполнение заказа

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

	Ведение отчётной деятельности

	Высокий уровень сервиса предполагает:

	Оперативность при оформлении заказов и выдаче документов ( информационного чека и т.д.)

	Учет клиентов, ведение статистики по посещаемости

	Учет квартир, их быстрый поиск по требованию клиентом

	Некоторые другие возможности по обработке информации для удобного поиска нужной квартиры 

	Особенности поставленной задачи:

	Функцию заполнения дат при чека целесообразнее переложить на программу с учетом обычных временных затрат на выполнение тех или иных видов услуг(можно корректировать самому по необходимости)

	После того как клиент получает информационный чек, вся информация о нем должна быть удалена

	Соблюдаются правила оформления чеков. Эта функция возложена на программу

	

	
1.2 Постановка задачи

	

	1.2.1 Организационно-экономическая сущность задачи

	Рассмотрим организацию выполняемых функций в задаче.

	Главная работа заключается в оформлении заказов и выдаче соответствующих документов с учётом правил оформления документов. В соответствии с этим строится интерфейс программы, позволяющий оператору быстро вводить необходимые данные и сохранять их в базе данных. Если учитывать тот факт, что некоторые данные заполняются автоматически и при этом проверяется соответствие данных, вдобавок, данные отображаются в удобном формате, можно говорить об экономии временных ресурсов. К тому же документы в любой момент могут быть просмотрены и изменены по необходимости. Вся информация компактно храниться на магнитном носителе, а это значит что необходимость ведения ненужной бумажной документации отпадает. Интерфейс программы также предусматривает облегчение процесса оформления заказа, поэтому эта функция обособлена. Все возможности программы доступны оператору почти на любом этапе работы. Оператор также имеет доступ к любой информации. Предполагается предоставление различных статистик оператору по запросу. С учетом этого разработаны стандартные запросы к базе данных. Учитывая возможности языка SQL и то, что запросы также могут быть сохранены на магнитном носителе, можно повысить оперативность и информативность программы. Работа с информацией обособлена от работы с клиентами, но тем не менее может быть быстро получена за счет наличия функций поиска. Изменение информации по сотрудникам и базы данных продавцов доступно для опытных пользователей, но не рекомендуется. В целом решается задача экономии временных ресурсов и задача информативности.

	

	
1.2.2 Документы предметной области, содержащие информацию, необходимую для решения задачи

	При оформлении заказа оператору потребуются паспортные данные, точнее фамилия, имя клиента, а также номер телефона. Остальная информация(адрес проживания и заказ по квартире) вводится со слов клиента. Накладные и документы по оценке стоимости квартир не используются в данном курсовом проекте из-за сложности реализации задачи, вдобавок менталитет сотрудников фирмы таков что не позволяет этим заниматься. Перечень квартир предоставляемых продавцами содержит индефикационный номер квартиры, адрес, оценочную стоимость, операцию с данной квартирой(продажа или обмен), различные данные по квартире(тип планировки, владелец и др.). В конце работы фирма предоставляет клиенту информационный чек, в котором содержатся данные по выполненному заказу и данные по оплате услуги фирмы. Подводя итог, можно сказать, что для разработки программы потребуются документы из риэлторской фирмы, по отчётности, по клиентам, примерный образец информационного чека. Остальную информацию, в частности бланки документов и описание их назначения можно найти в справочной системе «Гарант» и в своде кодексов и законов РФ, поставляемые на компакт-дисках. В этих системах можно найти правила работы с клиентами, установленные законом, в том числе гарантийные обязательства.

	

	1.2.3 Структурный анализ с помощью диаграмм потоков данных

	При проектировании автоматизированной системы необходимо описать разработку и внедрение всего комплекса проблем, которые необходимо решить, а также показать какие функции системы должны быть автоматизированы, определением точек интерфейса человек-машина и того, как взаимодействует система со своим окружением. Иными словами, этап проектирования системы является главным для создания высококачественных систем. Системное проектирование – это дисциплина, определяющая подсистемы, компоненты и способы их соединения, задающая ограничения, при которых система должна функционировать, выбирающая наиболее эффективное сочетание людей, машин и программного обеспечения для реализации системы. SADT – одна из известных систем проектирования. SADT – аббревиатура слов Structured Analysis and Design Technique (Технология структурнрго анализа и проектирования)–это графическое обозначение и подход к написанию систем.

	Для структурного анализа с помощью диаграмм потоков данных было использовано три уровня SADT – диаграммы.

	На нулевом уровне SADT – диаграммы (см. приложение) показана главная функция – оказание бытовых услуг в фирме. Выполнение этой функции возможно благодаря входным данным, к которым относятся заказ (заявка), рыночная информация, информация от клиентов. Выполнение основной функции возложено на оператора и компьютер (механизм исполнения), управляющие потоки контролируют процесс выполнения функции. К управляющим потокам относятся законы, налоги, рыночные условия, требования клиентов. Личную карточку заводят сотрудники отдела кадров. К выходным потокам относятся выручка (прибыль), документы .

	На первом уровне SADT – диаграммы (см. приложение) детализируется главная функция. На этом уровне отражены главные функции фирмы: поиск квартиры, покупка и регистрация, продажа и учёт. Все эти подфункции с точки зрения потоков данных связаны между собой.

	На втором уровне SADT – диаграммы (см. приложение) детализируется подфункция «Продажа и учёт». Данная подфункция включает в себя: оформление, продажа, учёт.

	

	1.2.4 Структурный анализ с помощью диаграмм «сущность-связь»

	В автоматизируемой подфункции «продажа и учёт» можно выделить несколько сущностей, вытекающих из используемых документов и процесса бытового обслуживания в фирме. Главной сущностью является «Фирма» с первичным ключом (расчётный_счёт), внешним ключом для неё является (имя) сущности «Покупатель» с первичным ключом(имя), который делает заказ(обращается). «Фирма» запрашивает(обращается) к «Продавец» с первичным ключом(расчётный_счет), поэтому внешними ключами у него будут(расчётный_счёт сущности «Фирма») и (имя сущности «Покупатель»). «Продавец» предлагает «Квартиры» с первичным ключом (инд_номер), внешними ключами у «Квартиры» будут ключи «Продавец». У сущности «Квартиры_фирмы» с первичным ключом(инд_ном) внешними ключами будут ключи сущностей «Покупатель» и «Фирма». У сущности «Чек» внешние ключи ключи сущностей «Покупатель» и «Фирма». Для «Чек» с первичным ключом(имя_покупателя) внешними ключами будут ключи сущности «Фирма».

	

	
2. РЕАЛИЗАЦИЯ ИНФОРМАЦИОННОЙ СИСТЕМЫ СРЕДСТВАМИ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ЯЗЫКА DELPHI

	

	2.1 Аппаратная часть задачи 

	

	Программа тестировалась на компьютере следующей конфигурации:

	процессор Pentiun 233;

	64 Мб оперативной памяти;

	500 Мб свободного пространства на жестком диске;

	видеорежим 800 на 600 точек (минимальное допустимое), 16 бит на цвет;

	манипулятор «мышь»;

	операционная система Windows 98 SE;

	Для функционирования программы необходимо наличие следующих файлов:

	project2.exe (исполнимый модуль программы);

	chekinf.db (сущность «чек»);

	kv.db (сущность «квартиры»);

	svoi_kv.db (сущность «квартиры_фирмы»);

	otchet.db (сущность «отчет»);

	pokup.db (сущность «покупатель»);

	prod.db (сущность «продавец»);

	sort.db;

	другие файлы, с названиями, соответствующими названиям сущностей;

	

	2.2 Обоснование выбора среды разработки и стиля программирования

	

	В качестве стиля программирования, выбран объектно-ориентированный язык, основанный на Object Pascal. В качестве среды программирования – интегрированная среда разработки Delphi 5, которая является одной из лучших ИСР для быстрого создания приложений благодаря библиотеке VCL (библиотека визуальных компонентов). Из всех известных средств разработки программных продуктов, Delphi является одним из самых лучших по следующим причинам: 

	пакет Delphi совместно с включёнными в него дополнительными программами предоставляет разработчику большой объём возможностей по созданию программ, предназначенных для работы с базами данных. Borland Database Engine (BDE) является мировым стандартом ядра для СУБД;

	в пакете Delphi есть возможность вывода информации из баз данных на принтер с использованием генератора отчётов;

	в Delphi реализован язык SQL, который используется при работе с базами данных;

	в Delphi есть возможность подключения дополнительных модулей различного назначения. Это позволяет создавать нестандартные компоненты, изменять существующие. Благодаря этому, улучшается восприятие пользователем данного программного продукта;

	несомненным плюсом является технология автодополнения кода и всплывающих подсказок, быстрое обнаружение идентификаторов в подключенных модулях;

	компилятор Delphi является одним из самых быстрых, он драматически снижает временные затраты на перекомпиляцию проектов, что очень полезно на стадии отладки приложения;

	такие модули, как Object Inspector (Инспектор объектов) и менеджер проектов, являются незаменимыми инструментами инструментами по настройке интерфейса разрабатываемого приложения, значительно экономящими время разработки программы на начальном этапе.

	Визуальная библиотека компонентов (VCL) содержит исходные тексты стандартных компонентов Delphi, что предоставляет разработчику широкие возможности по изучению и изменению кода. Кроме того эта библиотека используется также в других ИСР выпущенных Borland (Inprise). Delphi оправдывает название среды быстрой разработки приложений (RAD), многие функции реализуются прозрачно для программиста, например, чаще всего программист не заботится о написании кода для создания форм в приложении, для их прорисовки и т.д. Часто можно разработать полноценную программу, не написав при этом ни строчки кода.

	Структурированный подход при написании кода лучшим образом отвечает запросам программиста, так как при этом намного проще разобраться в исходном коде программы, отлаживать программу и вносить изменения. Буквально двойным щелчком на компоненте можно задавать стандартные процедуры обработки.

	

	2.3 Создание таблиц базы данных

	

	Для осуществления поставленной задачи выбраны реляционные базы данных. Их создание осуществлялось в специальном приложении Delphi, которое называется Database Desktop, таблицы написаны в Paradox 7.0. При проектировании полей таблиц учитывались бланки документов (квитанций, талона, паспорта).

	Структура необходимых таблиц представлена наглядно в таблицах 1,2,3,4,5,6,7.

	

	Таблица 1. Логическая структура таблицы «Чек».

	Обозначение

	Наименование

	Ключ

	Тип данных

	Длина

	Точность

	Ras_schet

	Расч_счёт

	*

	Числовой

	

	0

	Data_pol

	Дата_получения

	

	Дата

	

	0

	Stoimost_kv

	Стоимость квартиры

	

	Числовой

	

	0

	Adress_kv

	Адресс квартиры

	

	Строковый

	10

	0

	Adress_prod

	Адресс продавца

	

	Строковой

	10

	0

	
Таблица 2. Логическая структура таблицы «Квартиры».

	Обозначение

	Наименование

	Ключ

	Тип данных

	Длина

	Точность

	Inomer

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

	квартиры

	*

	Числовой

	

	0

	Oper

	Операция

	

	Строковый

	10

	0

	Tipplan

	Тип планировки

	

	Строковый

	10

	0

	Rayon

	Район

	

	Строковый

	10

	0

	Adress

	Адресс

	

	Строковый

	10

	

	Obpl

	Общая площадь

	

	Числовой

	

	

	Plkux

	Площадь кухни

	

	Числовой

	

	

	Sostkv

	Состояние квартиры

	

	Строковый

	10

	

	Kolroom

	Количество комнат

	

	Числовой

	

	

	Sityname

	Город

	

	Строковый

	10

	

	Zena

	Цена

	

	Числовой

	

	

	Dopsv

	Дополнительные сведения

	

	Строковый

	10

	

	Vlad

	Владелец

	Внеш.

	Строковый

	10

	

	

	Таблица 3. Логическая структура таблицы «Отчёт».

	Обозначение

	Наименование

	Ключ

	Тип данных

	Длина

	Точность

	Name_pokyp

	Имя покупателя

	*

	Строковый

	10

	0

	Date

	Дата

	

	Дата

	

	0

	Stoimost_kv

	Стоимость 

	квартиры

	

	Числовой

	

	0

	Inomer_kv

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

	квартиры

	

	Числовой

	

	0

	Name_prod

	Имя продавца

	

	Строковый

	15

	0

	

	Таблица 4. Логическая структура таблицы «Покупатель».

	Обозначение

	Наименование

	Ключ

	Тип данных

	Длина

	Точность

	Name

	Имя

	*

	Строковый

	10

	0

	Surname

	Фамилия

	

	Строковый

	10

	0

	Adress

	Адресс

	

	Строковый

	10

	0

	Telefhone

	Телефон

	

	Числовой

	

	

	RayonKv

	Требуемый район квартиры

	

	Строковый

	10

	

	Tipplan

	Требуемый тип планировки квартиры

	

	Строковый

	10

	

	

	Таблица 5. Логическая структура таблицы «Продавец».

	Обозначение

	Наименование

	Ключ

	Тип данных

	Длина

	Точность

	Vlad

	Владелец

	*

	Строковый

	10

	0

	Rschet

	Расчётный счёт

	

	Числовой

	

	0

	Adress

	Адресс

	

	Строковый

	10

	0

	Telephone

	Телефон

	

	Числовой

	

	0

	

	Таблица 6. Логическая структура таблицы «Квартиры фирмы».

	Обозначение

	Наименование

	Ключ

	Тип данных

	Длина

	Точность

	Inomer

	Индефикацион

	ный номер

	квартиры

	*

	Числовой

	

	0

	Oper

	Операция

	

	Строковый

	10

	0

	Tipplan

	Тип планировки

	

	Строковый

	10

	0

	Rayon

	Район

	

	Строковый

	10

	0

	Adress

	Адресс

	

	Строковый

	10

	

	Obpl

	Общая площадь

	

	Числовой

	

	

	Plkux

	Площадь кухни

	

	Числовой

	

	

	Sostkv

	Состояние квартиры

	

	Строковый

	10

	

	Kolroom

	Количество комнат

	

	Числовой

	

	

	Sityname

	Город

	

	Строковый

	10

	

	Zena

	Цена

	

	Числовой

	

	

	Dopsv

	Дополнительные сведения

	

	Строковый

	10

	

	Vlad

	Владелец

	

	Строковый

	10

	

	Adress_prod

	Адресс продавца

	

	Строковый

	10

	

	

	Таблица 7. Логическая структура таблицы «Сотрудники».

	Обозначение

	Наименование

	Ключ

	Тип данных

	Длина

	Точность

	Firstname

	Имя

	*

	Строковый

	10

	0

	Secondname

	Фамилия

	

	Строковый

	10

	0

	Otchestvo

	Отчество

	

	Строковый

	10

	0

	Npassporta

	Номер паспорта

	

	Числовой

	

	

	Adress

	Адресс

	

	Строковый

	10

	

	Phone

	Телефон

	

	Числовой

	

	

	Obrazov

	Образование

	

	Строковый

	10

	

	Opwork

	Опыт работы

	

	

	

	

	DataBorn

	Дата рождения

	

	Дата

	

	

	Family

	Семейное положение

	

	Строковый

	10

	

	Dolgnost

	Должность

	

	Строковый

	10

	

	Oklad

	Оклад

	

	Числовой

	

	

	DataPostWork

	Дата поступления на работу

	

	Дата

	

	

	

	2.4 Форма 1(меню программы и принятие заказа)

	

	Форма представляет собой рабочее меню программы и информацию о покупателях. Информация о покупателях включает в себя как информацию о самих покупателях так и их заказ на квартиру(район где находится квартира и тип её планировки). Добавление данных осуществляется при помощи кнопок <добавить> и <ок>, кнопка <добавить> добавляет в список пустую строку для заполнения, нажатием <ок> мы сохраним информацию. Кнопка удалить служит для удаления записи, достаточно выбрать из списка запись и нажать кнопку. 

	Меню формы состоит из двух разделов <программа> и <работа фирмы>.

	Первый содержит подпункты <выход>, для выхода из программы, <цвет>, появляется список цветов при нажатии на цвет, цвет фона программы изменится на требуемый, <о фирме>, выбрав этот пункт главная форма изменится, на ней появится изображение и информация по фирме, представляющая собой расчётный счёт фирмы и стоимость услуги(стоимость продаваемой фирмой квартиры увеличивается на 5% из за издержек работы), щёлкнув левой кнопкой на форме информация исчезнет и снова появится информация о клиентах.

	Второй раздел меню включает в себя подразделы: <сотрудники>, <квартиры> и <отчёт>, при выборе пункта <сотрудники> главная форма закроется и появится форма 2 для работы с базами данных по сотрудникам, выбрав <квартиры> закроется главная форма и появится форма для работы с квартирами и заказом форма 4, при выборе последнего пункта <отчёт> главная форма исчезнет и появится форма 6 в которой отображается информация о сделках.

	

	2.5 Форма 2(сотрудники)

	

	Эта форма представляет собой базу данных по сотрудникам. Данные о них отображаются в отдельных ячейках. Ниже расположен <навигатор> для перехода по записям, также с помощью него можно изменить данные по нужному сотруднику, если в процессе добавления сотрудника была допущена ошибка для этого достаточно нажать ‘▲’, после изменения данных нужно либо согласиться, либо нет нажав соответственно ‘v’ или ‘x’. Для необходимости быстро найти нужную информацию по сотруднику есть возможность быстрого поиска. Она представлена окошком для ввода данных и выбор поиска по ‘фамилии’ или ‘должности’,

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

	Также эта форма содержит кнопку <добавить или удалить сотрудника>, после её нажатия эта форма свернётся и появится форма 3 для изменения базы данных по сотрудникам.

	Для возврата на основную форму есть кнопка <вернуться в главную>.

	

	2.5.1 Форма 3(изменение базы данных по сотрудникам)

	Как видно на рисунке ниже здесь также данные отображаются в ячейках.

	Также в эти ячейки заносим данные о сотруднике для добавления их в базу данных.

	Для добавления сотрудника есть две кнопки: <добавить>, при нажатии которой добавляются пустые поля для заполнения, <ок>, при нажатии которой информация введённая в ячейки добавляется в базу сотрудников и эта база сохраняется.

	Чтобы удалить нужного сотрудника сначала надо его найти, для этого предусмотрен быстрый поиск. Поиск представлен ячейкой для ввода данных и выбором для поиска по: <фамилии>, <должности> и <номеру_паспорта>.

	Для поиска достаточно выбрать пункт и начать вводить данные в ячейку(по мере того как их вводят(по мере схожести данных) будет появляться нужная информация). После того как нужный сотрудник найден достаточно нажать кнопку удалить и вся информация о сотруднике будет удалена.

	Для возврата в предыдущую форму нужно нажать кнопку <Cancel>.

	

	2.6 Форма 4(работа с заказом)

	

	Это рабочая форма. Здесь идёт выполнение заказа клиента. Опишем работу данной формы.

	Форма как бы разделена на две части: на первой осуществляется поиск квартир предлагаемых продавцами. Стоит отметить что поиск весьма разнообразен:

	Для того чтобы показать квартиры от определённого продавца предусмотрена ячейка, которая связана с базой продавцов. В ячейке организована функция, которая позволяет при выборе значения изменять список предлагаемых квартир.

	Удобен поиск по заказу клиента, достаточно выбрать клиента(покупателя) сразу отобразиться его заказ в ячейках выше(если после осуществления поиска, не будет найдена нужная квартира, то можно выбирать различные типы и районы квартир, после чего снова осуществлять поиск). Правее представлены операции с квартирами. Для поиска достаточно выбрать покупателя, операцию(по обмену поиск осуществлён, но эта операция здесь не обязательна так как эта фирма по продаже квартир, но если эту программу расширить до работы риэлторской фирмы, эта операция необходима. Обмен здесь нужен лишь для того, чтобы не удалять квартиры с этой операцией из списка ), тип планировки и район (можно указать или нет поставив галочку) и нажать кнопку <поиск>.

	Также удобен поиск по цене, ведь после поиска заказанной квартиры появится список квартир, а клиенту нужна квартира подешевле. Для поиска выбираем поиск: 

	от, это поиск от указанной цены и выше, при этом не нужная ячейка до исчезнет;

	до, это поиск до указанной цены, ненужная ячейка от будет убрана;

	от и до, это поиск квартир со стоимостью в пределе от и до;

	после выбора поиска в ячейку заносим требуемые данные и нажимаем кнопку <поиск>.

	После нахождения нужной квартиры среди предлагаемых продавцами, нажимаем кнопку <купить>, квартира и все данные о ней будут добавлены в список квартир фирмы расположенный ниже, при чём стоимость квартиры будет теперь на 5% больше(как указано в информации о фирме). Для простоты перехода здесь есть навигатор.

	Для того чтобы продать квартиру достаточно выбрать квартиру из списка квартир фирмы и нажать кнопку <продать>, однако если вдруг не указан покупатель, то операция продажи не удастся, курсор перейдёт в ячейку покупатель и будет ждать выбора покупателя. После того как покупатель выбран выберите квартиру и снова нажмите кнопку <продать>. После нажатия эта форма закроется и появится форма 5(чек). Ещё одна главная особенность заключается в том что после нажатия на кнопку <продать>, то есть после выполнения заказа, вся информация о выбранном клиенте удаляется.

	Если необходимо добавить квартиру в список предлагаемых продавцами достаточно нажать кнопку <добавит квартиру> ниже списка квартир предлагаемых продавцами(помимо квартиры там можно добавить и продавца).

	Как видно на рисунке вся информация о квартирах не видна пользователю в силу большого количества данных для этого внизу списка есть полоса прокрутки.

	Если требуется вернуться на главную форму нужно нажать кнопку <назад>.

	

	2.6.1 Форма 5(чек)

	На этой форме представлен чек об оплате. Поля чека заполняются автоматически после того как на предыдущей форме была заключена сделка продажа(нажатие кнопки <продать>). Значение поля расчётный счёт фирмы берётся из информации об фирме. Дата - сегодняшняя дата. Остальные три значения полей ‘стоимость_кв’, ’адрес_кв’ и ’адрес_продавца’ берутся в соответствии с данными выбранными на предыдущей форме. 

	Если необходимо чек об оплате можно распечатать, для этого достаточно нажать кнопку <распечатать>.

	Чтобы вернуться на предыдущую форму нужно нажать кнопку <ok>. Важной особенностью здесь также является то, что при нажатии на клавишу <ok> автоматически генерируется отчёт. 

	

	2.6.2 Форма 7(добавление квартир предлагаемых продавцами)

	Эта форма не являлась бы обязательной если бы была связь с базой данных по квартирам в интернете, которая постоянно обновляется. Но от меня выполнение такой задачи не требовалось, поэтому для увеличения и обновления данных о продавцах и квартирах я создал данную форму.

	Так как база по квартирам находится в подчинении у базы по продавцам, то для того чтобы добавить квартиру, необходимо сначала выбрать нужного продавца. Для просмотра продавцов предусмотрен ‘навигатор’, благодаря которому также можно добавлять нового продавца. Для быстрого поиска продавца предусмотрен специальный поиск. Поиск представлен ячейкой для ввода данных и выбором для поиска владельца по: <имени>, <расч_счёту>. 

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

	После того как выбран нужный продавец можно:

	передвигаться по записям с помощью навигатора;

	редактировать записи по квартире(достаточно изменить записи в ячейках и нажать ‘V’ в навигаторе для отмены изменений нажать ‘Х’);

	добавлять новую квартиру выбрав ‘+‘ в навигаторе;

	удалять запись нажав ‘-’;

	Для того чтобы вернуться на предыдущую форму нажать кнопку <OK>.

	

	2.7 Форма 6(отчёт)

	

	Это форма представляет собой таблицу с записями о деятельности фирмы. Для простоты перехода по записям здесь также предусмотрен навигатор, 

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

	Главное в этом отчёте то, что он автоматизирован, то есть записи заносятся сюда автоматически по мере работы. Генерация идёт после того как в форме 5(чек) мы нажали <ок> , часть записей идёт из чека(то есть после осуществления сделки), часть ,в соответствии, из формы 4.

	Для возврата в главное меню нужно нажать кнопку <назад>.

	

	
ЗАКЛЮЧЕНИЕ

	

	В данной курсовой работе была достигнута частичная автоматизация работы фирмы по продаже квартир. Принцип работы программы довольно прост, любой кто хоть раз держал ‘мышку’ в руке способен понять её работу. 

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

	Очень удобно в программе автоматическое заполнение чеков и отчётов ведь это как правило довольно неинтересный и скучный процесс, одно дело когда надо заполнить несколько документов, другое когда сотни и даже тысячи и вот здесь велика человеческая ошибка.

	Много внимания возможностям языка SQL, предоставляющего средства для обработки данных. Запросы дают разнообразные возможности поиска необходимых данных. находить разного рода информацию по клиентам, сотрудникам. Также SQL запросы помогают отсеивать данные по необходимым параметрам, отсеивать можно до тех пор пока не останется нужная нам информация. Данное приложение может быть адаптировано к любой службе занимающихся работой с квартирами или недвижимостью, учитывая схожесть организации основных функций и решаемых задач. Ко всему прочему программу легко расширить например до работы риэлторской фирмы, которая предоставляет различные услуги в виде: оценки квартир, обмен квартир и имеющей другие функции. 

	Внедрение проекта позволит в значительной мере ускорить обмен информацией в фирме, снизить затраты рабочего времени на действия, напрямую не относящиеся к должностным обязанностям. При использовании для защиты информации и разграничения доступа средств операционной системы и дополнительных программно-аппаратных средств планируется в значительной мере повысить уровень безопасности информации, так как резко сокращается число людей, способных нанести ущерб информации. 

	Таким образом, реализация проекта позволит значительно уменьшить затраты рабочего времени на организационные вопросы, а, следовательно, повысить производительность труда и экономическую эффективность проводимых работ. 

	

	
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

	

	Архангельский А.Я. Программирование В Delphi 5 – М.: 

	ЗАО «Издательство Бином», 2000 г. – 1072 с.: ил.

	Базы данных. Проектирование, реализация и сопровождение. Теория и практика. Второе издание исправленное и дополненное. Авторы Томас Конноли и Каролин Бегг.

	Встроенное справочное руководство Borland Delphi 5.

	Интернет-сайт www.citforum.ru ftp-архив.

	Документы конференции по Delphi.

	

	
Приложение А

	

	Project2

	program Project2;

	uses

	Forms,

	Unit1 in 'Unit1.pas' {Form1},

	Unit2 in 'Unit2.pas' {Form2},

	Unit3 in 'Unit3.pas' {Form3},

	Unit4 in 'Unit4.pas' {Form4},

	Unit5 in 'Unit5.pas' {Form5},

	Unit6 in 'Unit6.pas' {Form6},

	Unit7 in 'Unit7.pas' {Form7};

	{$R *.RES}

	begin

	Application.Initialize;

	Application.CreateForm(TForm1, Form1);

	Application.CreateForm(TForm2, Form2);

	Application.CreateForm(TForm3, Form3);

	Application.CreateForm(TForm4, Form4);

	Application.CreateForm(TForm5, Form5);

	Application.CreateForm(TForm6, Form6);

	Application.CreateForm(TForm7, Form7);

	Application.Run;

	end.

	Unit1

	unit Unit1;

	interface

	uses

	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

	Menus, Db, Grids, DBGrids, DBTables, ColorGrd, ExtCtrls, StdCtrls, jpeg,

	Buttons;

	type

	TForm1 = class(TForm)

	MainMenu1: TMainMenu;

	N1: TMenuItem;

	N2: TMenuItem;

	N3: TMenuItem;

	N4: TMenuItem;

	N5: TMenuItem;

	DataSource1: TDataSource;

	Table1: TTable;

	Table1FirstName: TStringField;

	Table1SecondName: TStringField;

	Table1Otchestvo: TStringField;

	Table1Npassporta: TFloatField;

	Table1Adress: TStringField;

	Table1Phone: TFloatField;

	Table1Obrazov: TStringField;

	Table1OpWork: TFloatField;

	Table1DataBorn: TDateField;

	Table1Family: TStringField;

	Table1Dolgnost: TStringField;

	Table1Oklad: TFloatField;

	Table1DataPostWork: TDateField;

	N6: TMenuItem;

	ColorGrid1: TColorGrid;

	DataSource4: TDataSource;

	Table4: TTable;

	DBGrid4: TDBGrid;

	Table4Name: TStringField;

	Table4Surname: TStringField;

	Table4Adress: TStringField;

	Table4Telefhone: TFloatField;

	Table4RayonKv: TStringField;

	Table4Tipplan: TStringField;

	DataSource2: TDataSource;

	Table2: TTable;

	DataSource3: TDataSource;

	Table3: TTable;

	Table3Vlad: TStringField;

	Table3Rschet: TFloatField;

	Table3Adress: TStringField;

	Table3Telephone: TFloatField;

	Table2Inomer: TFloatField;

	Table2Oper: TStringField;

	Table2Tipplan: TStringField;

	Table2Rayon: TStringField;

	Table2Adress: TStringField;

	Table2Obpl: TFloatField;

	Table2Plkux: TFloatField;

	Table2Sostkv: TStringField;

	Table2Kolroom: TFloatField;

	Table2Sityname: TStringField;

	Table2Zena: TFloatField;

	Table2Dopsv: TStringField;

	Table2Vlad: TStringField;

	N7: TMenuItem;

	Image1: TImage;

	Label1: TLabel;

	Label2: TLabel;

	N8: TMenuItem;

	Button1: TButton;

	Button2: TButton;

	BitBtn1: TBitBtn;

	Label3: TLabel;

	Label4: TLabel;

	procedure N3Click(Sender: TObject);

	procedure N4Click(Sender: TObject);

	procedure N5Click(Sender: TObject);

	procedure Button1Click(Sender: TObject);

	procedure Button2Click(Sender: TObject);

	procedure ColorGrid1Change(Sender: TObject);

	procedure N6Click(Sender: TObject);

	procedure Button3Click(Sender: TObject);

	procedure N7Click(Sender: TObject);

	procedure Image1Click(Sender: TObject);

	procedure N8Click(Sender: TObject);

	procedure BitBtn1Click(Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	var

	Form1: TForm1;

	pole:shortstring;

	implementation

	uses Unit2, Unit4, Unit3, Unit5, Unit6, Unit7;

	{$R *.DFM}

	procedure TForm1.N3Click(Sender: TObject);

	begin

	close;

	end;

	procedure TForm1.N4Click(Sender: TObject);

	begin

	Form1.table1.flushbuffers;

	Form1.table2.flushbuffers;

	Form1.Hide;

	Form2.Show;

	end;

	procedure TForm1.N5Click(Sender: TObject);

	begin

	Form1.table2.flushbuffers;

	Form1.hide;

	Form4.show;

	end;

	procedure TForm1.Button1Click(Sender: TObject);

	begin

	with table4 do begin

	first;

	insert;

	end;

	end;

	procedure TForm1.Button2Click(Sender: TObject);

	begin

	table4.Edit;

	if messagedlg('Удалить', mtconfirmation, [mbyes, mbno],0)=mryes

	then table4.delete;

	end;

	procedure TForm1.ColorGrid1Change(Sender: TObject);

	begin

	form1.Color:=ColorGrid1.ForeGroundColor;

	form2.Color:=ColorGrid1.ForeGroundColor;

	form3.Color:=ColorGrid1.ForeGroundColor;

	form4.Color:=ColorGrid1.ForeGroundColor;

	form5.Color:=ColorGrid1.ForeGroundColor;

	form6.Color:=ColorGrid1.ForeGroundColor;

	form7.Color:=ColorGrid1.ForeGroundColor;

	colorgrid1.visible:=false;

	end;

	procedure TForm1.N6Click(Sender: TObject);

	begin

	colorgrid1.visible:=true;

	end;

	procedure TForm1.Button3Click(Sender: TObject);

	begin

	table4.flushbuffers;

	end;

	procedure TForm1.N7Click(Sender: TObject);

	begin

	image1.visible:=true;

	label1.visible:=true;

	label2.visible:=true;

	label4.visible:=true;

	label3.visible:=false;

	dbgrid4.Visible:=false;

	BitBtn1.visible:=false;

	button1.visible:=false;

	button2.visible:=false;

	end;

	procedure TForm1.Image1Click(Sender: TObject);

	begin

	image1.visible:=false;

	label1.visible:=false;

	label2.visible:=false;

	label4.visible:=false;

	label3.visible:=true;

	dbgrid4.Visible:=true;

	BitBtn1.visible:=true;

	button1.visible:=true;

	button2.visible:= true;

	end;

	procedure TForm1.N8Click(Sender: TObject);

	begin

	form1.hide;

	form6.show;

	end;

	procedure TForm1.BitBtn1Click(Sender: TObject);

	begin

	table4.flushbuffers;

	end;

	end.

	Unit2

	unit Unit2;

	interface

	uses

	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

	StdCtrls, Mask, DBCtrls, ExtCtrls;

	type

	TForm2 = class(TForm)

	DBEdit1: TDBEdit;

	Label2: TLabel;

	DBEdit2: TDBEdit;

	Label3: TLabel;

	DBEdit3: TDBEdit;

	Label4: TLabel;

	DBEdit4: TDBEdit;

	Label5: TLabel;

	DBEdit5: TDBEdit;

	Label6: TLabel;

	DBEdit6: TDBEdit;

	Label7: TLabel;

	DBEdit7: TDBEdit;

	Label8: TLabel;

	DBEdit8: TDBEdit;

	Label9: TLabel;

	DBEdit9: TDBEdit;

	Label10: TLabel;

	DBEdit10: TDBEdit;

	Label11: TLabel;

	DBEdit11: TDBEdit;

	Label12: TLabel;

	DBEdit12: TDBEdit;

	Label13: TLabel;

	DBEdit13: TDBEdit;

	Label1: TLabel;

	DBNavigator1: TDBNavigator;

	Label14: TLabel;

	Label15: TLabel;

	Button1: TButton;

	Button2: TButton;

	Edit1: TEdit;

	Label16: TLabel;

	RadioGroup1: TRadioGroup;

	procedure Button1Click(Sender: TObject);

	procedure Button2Click(Sender: TObject);

	procedure Edit1Change(Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	var

	Form2: TForm2;

	implementation

	uses Unit1, Unit3;

	{$R *.DFM}

	procedure TForm2.Button1Click(Sender: TObject);

	begin

	form2.hide;

	form3.show;

	Form1.Table1.Last;

	Form1.Table1.Insert;

	try

	except

	form3.dbedit1.setfocus;

	end;

	end;

	procedure TForm2.Button2Click(Sender: TObject);

	begin

	form2.Hide;

	form1.show;

	end;

	procedure TForm2.Edit1Change(Sender: TObject);

	begin

	if Edit1.Text<>'' then

	begin

	case RadioGroup1.ItemIndex of

	0: begin

	form1.Table1.Locate('secondname',Edit1.Text,[]);

	end;

	1: begin

	form1.table1.locate('dolgnost',edit1.text,[]);

	end;

	end;

	end;

	end;

	end.

	Unit3

	unit Unit3;

	interface

	uses

	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

	StdCtrls, Mask, DBCtrls, ExtCtrls, Buttons;

	type

	TForm3 = class(TForm)

	DBEdit1: TDBEdit;

	Label2: TLabel;

	DBEdit2: TDBEdit;

	Label3: TLabel;

	DBEdit3: TDBEdit;

	Label4: TLabel;

	DBEdit4: TDBEdit;

	Label5: TLabel;

	DBEdit5: TDBEdit;

	Label6: TLabel;

	DBEdit6: TDBEdit;

	Label7: TLabel;

	DBEdit7: TDBEdit;

	Label8: TLabel;

	DBEdit8: TDBEdit;

	Label9: TLabel;

	DBEdit9: TDBEdit;

	Label10: TLabel;

	DBEdit10: TDBEdit;

	Label11: TLabel;

	DBEdit11: TDBEdit;

	Label12: TLabel;

	DBEdit12: TDBEdit;

	Label13: TLabel;

	DBEdit13: TDBEdit;

	Label1: TLabel;

	Button2: TButton;

	Label15: TLabel;

	RadioGroup1: TRadioGroup;

	Edit1: TEdit;

	Label14: TLabel;

	Button1: TButton;

	BitBtn1: TBitBtn;

	BitBtn2: TBitBtn;

	procedure Button1Click(Sender: TObject);

	procedure Button2Click(Sender: TObject);

	procedure Button3Click(Sender: TObject);

	procedure Edit1Change(Sender: TObject);

	procedure BitBtn1Click(Sender: TObject);

	procedure BitBtn2Click(Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	var

	Form3: TForm3;

	implementation

	uses Unit1, Unit2;

	{$R *.DFM}

	procedure TForm3.Button1Click(Sender: TObject);

	begin

	form1.table1.Edit;

	if messagedlg('Удалить', mtconfirmation, [mbyes, mbno],0)=mryes

	then form1.table1.delete;

	end;

	procedure TForm3.Button2Click(Sender: TObject);

	begin

	Form1.Table1.Last;

	Form1.Table1.Insert;

	end;

	procedure TForm3.Button3Click(Sender: TObject);

	begin

	form3.hide;

	form2.show;

	end;

	procedure TForm3.Edit1Change(Sender: TObject);

	begin

	if Edit1.Text<>'' then

	begin

	case RadioGroup1.ItemIndex of

	0: begin

	form1.Table1.Locate('secondname',Edit1.Text,[]);

	end;

	1: begin

	form1.table1.locate('dolgnost',edit1.text,[]);

	end;

	2: begin

	form1.table1.locate('npassporta',edit1.text,[]);

	end;

	end;

	end;

	end;

	procedure TForm3.BitBtn1Click(Sender: TObject);

	begin

	form1.Table1.FlushBuffers;

	end;

	procedure TForm3.BitBtn2Click(Sender: TObject);

	begin

	form3.Hide;

	form2.show;

	end;

	end.

	Unit4

	unit Unit4;

	interface

	uses

	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

	StdCtrls, Mask, DBCtrls, ExtCtrls, DBCGrids, Db, DBTables, TeEngine,

	Series, TeeProcs, Chart, DBChart, mxstore, mxDB, Grids, mxgrid, mxtables,

	mxgraph, DBGrids, Spin, DBLookup, ColorGrd, ComCtrls, Tabnotbk;

	type

	TForm4 = class(TForm)

	GroupBox1: TGroupBox;

	DataSource1: TDataSource;

	rayon: TCheckBox;

	tipplan: TCheckBox;

	DBGrid1: TDBGrid;

	Button5: TButton;

	Button2: TButton;

	RadioGroup1: TRadioGroup;

	Label1: TLabel;

	DBLookupCombo1: TDBLookupCombo;

	Query1: TQuery;

	DataSource2: TDataSource;

	Query2: TQuery;

	ComboBox1: TComboBox;

	ComboBox2: TComboBox;

	Button3: TButton;

	Label2: TLabel;

	DBLookupCombo2: TDBLookupCombo;

	Label3: TLabel;

	Button1: TButton;

	GroupBox2: TGroupBox;

	Edit1: TEdit;

	Edit2: TEdit;

	Label4: TLabel;

	Label5: TLabel;

	RadioButton1: TRadioButton;

	RadioButton2: TRadioButton;

	RadioButton3: TRadioButton;

	Button4: TButton;

	DataSource3: TDataSource;

	Query3: TQuery;

	Query3BDEDesigner: TStringField;

	Query3BDEDesigner2: TStringField;

	Query3_: TFloatField;

	Query3BDEDesigner3: TStringField;

	Query3_2: TStringField;

	Query3BDEDesigner4: TStringField;

	Query3BDEDesigner5: TStringField;

	Query3_3: TFloatField;

	Query3_4: TFloatField;

	Query3_5: TStringField;

	Query3_6: TFloatField;

	Query3BDEDesigner6: TStringField;

	Query3BDEDesigner7: TFloatField;

	Query3_7: TStringField;

	Query3_1: TStringField;

	DataSource4: TDataSource;

	Query4: TQuery;

	DataSource5: TDataSource;

	Query5: TQuery;

	DBGrid2: TDBGrid;

	Label6: TLabel;

	DataSource6: TDataSource;

	Table1: TTable;

	DBNavigator1: TDBNavigator;

	Button6: TButton;

	Query1BDEDesigner: TStringField;

	Query1BDEDesigner2: TStringField;

	Query1_: TFloatField;

	Query1BDEDesigner3: TStringField;

	Query1_2: TStringField;

	Query1BDEDesigner4: TStringField;

	Query1BDEDesigner5: TStringField;

	Query1_3: TFloatField;

	Query1_4: TFloatField;

	Query1_5: TStringField;

	Query1_6: TFloatField;

	Query1BDEDesigner6: TStringField;

	Query1BDEDesigner7: TFloatField;

	Query1_7: TStringField;

	Table1Inomer: TFloatField;

	Table1Oper: TStringField;

	Table1Tipplan: TStringField;

	Table1Rayon: TStringField;

	Table1Adress: TStringField;

	Table1Obpl: TFloatField;

	Table1Plkux: TFloatField;

	Table1Sostkv: TStringField;

	Table1Kolroom: TFloatField;

	Table1Sityname: TStringField;

	Table1Adress_prod: TStringField;

	Table1Dopsv: TStringField;

	Table1Vlad: TStringField;

	Table1Zena: TFloatField;

	procedure Button1Click(Sender: TObject);

	procedure Button5Click(Sender: TObject);

	procedure Button2Click(Sender: TObject);

	procedure DBLookupCombo1Change(Sender: TObject);

	procedure Button3Click(Sender: TObject);

	procedure DBLookupCombo2Change(Sender: TObject);

	procedure Button4Click(Sender: TObject);

	procedure RadioButton1Click(Sender: TObject);

	procedure RadioButton2Click(Sender: TObject);

	procedure RadioButton3Click(Sender: TObject);

	procedure Button6Click(Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	var

	Form4: TForm4;

	implementation

	uses Unit1, Unit5, Unit6, Unit7;

	{$R *.DFM}

	procedure TForm4.Button1Click(Sender: TObject);

	begin

	form4.hide;

	form7.show;

	end;

	procedure TForm4.Button5Click(Sender: TObject);

	begin

	form4.hide;

	form1.show;

	end;

	procedure TForm4.Button2Click(Sender: TObject);

	begin

	dbgrid1.DataSource:=DataSource1;

	with Query1 do

	begin

	close;

	with radioGroup1 do begin

	case ItemIndex of

	0:ParamByName('op').AsString:='продажа';

	1:ParamByName('op').AsString:='обмен';

	2:ParamByName('op').AsString:='%';

	end;

	end;{with}

	if rayon.Checked then begin

	if Combobox1.Text<>''then

	ParamByName('ra').AsString:=Combobox1.Text

	end

	else ParamByName('ra').AsString:='%';

	if tipPlan.Checked then begin

	if Combobox2.Text<>''then

	paramByName('tp').AsString:=Combobox2.Text

	end

	else ParamByName('tp').AsString:='%';

	Open;

	end;

	end;

	procedure TForm4.DBLookupCombo1Change(Sender: TObject);

	begin

	dbgrid1.DataSource:=DataSource2;

	with query2 do begin

	close;

	parambyname('vl').asString:=DBLookupCombo1.text;

	open;

	end;

	end;

	procedure TForm4.Button3Click(Sender: TObject);

	begin

	if DBLookupCombo2.value<>'' then

	begin

	form4.hide;

	form5.show;

	form5.table1.edit;

	form5.table1.fieldbyname('ras_schet').value:=form1.label2.caption;

	form5.table1.fieldbyname('date_pol').value:=form5.DateTimePicker1.date;

	form5.table1.fieldbyname('adress_kv').value:=form4.table1.Fieldbyname('adress').value;

	form5.table1.fieldbyname('adress_prod').value:=form4.table1.Fieldbyname('adress_prod').value;

	form5.table1.fieldbyname('stoimost_kv').value:=form4.table1.Fieldbyname('zena').value;

	end

	else dblookupcombo2.setfocus;

	end;

	procedure TForm4.DBLookupCombo2Change(Sender: TObject);

	begin

	with form1.table4 do begin

	form1.table4.locate('name',string(form4.DBLookupCombo2),[]);

	form4.Combobox1.text:=form1.table4.fieldbyname('rayonkv').asstring;

	form4.Combobox2.text:=form1.table4.fieldbyname('tipplan').asstring;

	end;

	end;

	procedure TForm4.Button4Click(Sender: TObject);

	begin

	dbgrid1.DataSource:=DataSource3;

	if RadioButton1.checked then

	begin

	with query3 do

	begin

	close;

	parambyname('par1').asinteger:=strtoint(edit1.text);

	open;

	end

	end

	else

	if RadioButton2.checked then begin

	dbgrid1.DataSource:=DataSource4;

	with query4 do begin

	close;

	parambyname('par1').asinteger:=strtoint(edit2.text);

	open;

	end

	end

	else

	if RadioButton3.checked then begin

	dbgrid1.DataSource:=DataSource5;

	with query5 do begin

	close;

	parambyname('par1').asinteger:=strtoint(edit1.text);

	parambyname('par2').asinteger:=strtoint(edit2.text);

	open;

	end;

	end;

	end;

	procedure TForm4.RadioButton1Click(Sender: TObject);

	begin

	edit1.visible:=true;

	label4.visible:=true;

	edit2.visible:=false;

	label5.visible:=false;

	end;

	procedure TForm4.RadioButton2Click(Sender: TObject);

	begin

	edit1.visible:=false;

	label4.visible:=false;

	edit2.visible:=true;

	label5.visible:=true;

	end;

	procedure TForm4.RadioButton3Click(Sender: TObject);

	begin

	edit1.visible:=true;;

	label4.visible:=true;

	edit2.visible:=true;

	label5.visible:=true;

	end;

	procedure TForm4.Button6Click(Sender: TObject);

	begin

	form4.table1.Edit;

	if messagedlg('Вы уверены', mtconfirmation, [mbyes, mbno],0)=mryes

	then begin

	with form4.table1 do begin

	first;

	insert;

	form4.table1.fieldbyname('inomer').value:=form4.query1.fieldbyname('инд_номер').value;

	form4.table1.fieldbyname('oper').value:=form4.query1.fieldbyname('операция').value;

	form4.table1.fieldbyname('tipplan').value:=form4.query1.fieldbyname('тип_планировки').value;

	form4.table1.fieldbyname('rayon').value:=form4.query1.fieldbyname('район').value;

	form4.table1.fieldbyname('adress').value:=form4.query1.fieldbyname('адресс').value;

	form4.table1.fieldbyname('obpl').value:=form4.query1.fieldbyname('общ_площадь').value;

	form4.table1.fieldbyname('plkux').value:=form4.query1.fieldbyname('пл_кухни').value;

	form4.table1.fieldbyname('sostkv').value:=form4.query1.fieldbyname('сост_кв').value;

	form4.table1.fieldbyname('kolroom').value:=form4.query1.fieldbyname('кол-во_комнат').value;

	form4.table1.fieldbyname('sityname').value:=form4.query1.fieldbyname('город').value;

	form4.table1.fieldbyname('dopsv').value:=form4.query1.fieldbyname('дополн_свед').value;

	form4.table1.fieldbyname('vlad').value:=form4.query1.fieldbyname('владелец').value;

	form4.table1.fieldbyname('adress_prod').value:=form4.query1.fieldbyname('адресс продавца').value;

	form4.table1.fieldbyname('zena').value:=form4.query1.fieldbyname('цена').value*1.05;

	end;

	end;

	end;

	end.

	Unit5

	unit Unit5;

	interface

	uses

	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

	StdCtrls, Db, Grids, DBGrids, DBTables, ComCtrls, Buttons;

	type

	TForm5 = class(TForm)

	DataSource1: TDataSource;

	DBGrid1: TDBGrid;

	Table1: TTable;

	DateTimePicker1: TDateTimePicker;

	BitBtn1: TBitBtn;

	Table1Ras_schet: TFloatField;

	Table1Date_pol: TDateField;

	Table1Stoimost_kv: TFloatField;

	Table1Adress_kv: TStringField;

	Table1Adress_prod: TStringField;

	Label1: TLabel;

	Button1: TButton;

	procedure Button1Click(Sender: TObject);

	procedure BitBtn1Click(Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	var

	Form5: TForm5;

	implementation

	

	uses Unit4, Unit6, Unit1;

	{$R *.DFM}

	procedure TForm5.Button1Click(Sender: TObject);

	begin

	if messagedlg('Вы уверены', mtconfirmation, [mbyes, mbno],0)=mryes

	then form5.print;

	end;

	procedure TForm5.BitBtn1Click(Sender: TObject);

	begin

	form5.hide;

	form4.show;

	form5.table1.flushbuffers;

	with form6.table1 do begin

	last;

	insert;

	form6.table1.edit;

	form6.table1.fieldbyname('name_pokyp').value:=form4.DBLookupCombo2.value;

	form6.table1.fieldbyname('date').value:=form5.DateTimePicker1.date;

	form6.table1.fieldbyname('stoimost_kv').value:=form5.table1.fieldbyname('stoimost_kv').value;

	form6.table1.fieldbyname('inomer_kv').value:=form4.table1.fieldbyname('inomer').value;

	form6.table1.fieldbyname('name_prod').value:=form4.table1.fieldbyname('vlad').value;

	end;

	form6.table1.flushbuffers;

	form1.table4.locate('name',form4.DBLookupCombo2.value,[]);

	form1.table4.delete;

	form4.table1.delete;

	end;

	end.

	Unit6

	unit Unit6;

	interface

	uses

	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

	Db, Grids, DBGrids, DBTables, StdCtrls, ExtCtrls, DBCtrls;

	type

	TForm6 = class(TForm)

	DataSource1: TDataSource;

	Table1: TTable;

	DBGrid1: TDBGrid;

	Button1: TButton;

	DBNavigator1: TDBNavigator;

	Table1Name_pokyp: TStringField;

	Table1Date: TDateField;

	Table1Stoimost_kv: TFloatField;

	Table1Inomer_kv: TFloatField;

	Table1Name_prod: TStringField;

	procedure Button1Click(Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	

	var

	Form6: TForm6;

	implementation

	uses Unit1;

	{$R *.DFM}

	procedure TForm6.Button1Click(Sender: TObject);

	begin

	form6.hide;

	form1.show;

	end;

	end.

	Unit7

	unit Unit7;

	interface

	uses

	Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

	StdCtrls, Buttons, DBLookup, ExtCtrls, DBCtrls, Mask;

	type

	TForm7 = class(TForm)

	BitBtn1: TBitBtn;

	GroupBox1: TGroupBox;

	DBEdit1: TDBEdit;

	Label2: TLabel;

	DBEdit2: TDBEdit;

	Label3: TLabel;

	DBEdit3: TDBEdit;

	Label4: TLabel;

	DBEdit4: TDBEdit;

	DBNavigator1: TDBNavigator;

	GroupBox2: TGroupBox;

	Label1: TLabel;

	DBEdit5: TDBEdit;

	Label5: TLabel;

	DBEdit6: TDBEdit;

	Label6: TLabel;

	DBEdit7: TDBEdit;

	Label7: TLabel;

	DBEdit8: TDBEdit;

	Label8: TLabel;

	DBEdit9: TDBEdit;

	Label9: TLabel;

	DBEdit10: TDBEdit;

	Label10: TLabel;

	DBEdit11: TDBEdit;

	Label11: TLabel;

	DBEdit12: TDBEdit;

	Label12: TLabel;

	DBEdit13: TDBEdit;

	Label13: TLabel;

	DBEdit14: TDBEdit;

	Label14: TLabel;

	DBEdit15: TDBEdit;

	Label15: TLabel;

	DBEdit16: TDBEdit;

	Label16: TLabel;

	DBEdit17: TDBEdit;

	DBNavigator2: TDBNavigator;

	RadioGroup1: TRadioGroup;

	Edit1: TEdit;

	procedure BitBtn1Click(Sender: TObject);

	procedure Button1Click(Sender: TObject);

	procedure Edit1Change(Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	var

	Form7: TForm7;

	implementation

	uses Unit1, Unit4;

	{$R *.DFM}

	procedure TForm7.BitBtn1Click(Sender: TObject);

	begin

	form7.hide;

	form4.show;

	end;

	procedure TForm7.Button1Click(Sender: TObject);

	begin

	form1.table3.flushbuffers;

	form1.table2.flushbuffers;

	end;

	procedure TForm7.Edit1Change(Sender: TObject);

	begin

	if Edit1.Text<>'' then

	begin

	case RadioGroup1.ItemIndex of

	0: begin

	form1.Table3.Locate('vlad',Edit1.Text,[]);

	end;

	1: begin

	form1.table3.locate('rschet',edit1.text,[]);

	end;

	end;

	end;

	end;

	end.

	

	
Приложение Б