Факультет «Информатики и телекоммуникаций»
Кафедра «Информатика и системы управления»
Курсовая работа
по дисциплине
«Базы данных и знаний»
на тему:
«Автоматизация работы фирмы
по продаже квартир»
Выполнил студент группы ИТ-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. Запись заказа клиента
3. Выполнение заказа
4. Предоставление клиенту необходимых документов
5. Ведение отчётной деятельности
Высокий уровень сервиса предполагает:
1. Оперативность при оформлении заказов и выдаче документов ( информационного чека и т.д.)
2. Учет клиентов, ведение статистики по посещаемости
3. Учет квартир, их быстрый поиск по требованию клиентом
4. Некоторые другие возможности по обработке информации для удобного поиска нужной квартиры
Особенности поставленной задачи:
1. Функцию заполнения дат при чека целесообразнее переложить на программу с учетом обычных временных затрат на выполнение тех или иных видов услуг(можно корректировать самому по необходимости)
2. После того как клиент получает информационный чек, вся информация о нем должна быть удалена
3. Соблюдаются правила оформления чеков. Эта функция возложена на программу
1.2 Постановка задачи
1.2.1 Организационно-экономическая сущность задачи
Рассмотрим организацию выполняемых функций в задаче.
Главная работа заключается в оформлении заказов и выдаче соответствующих документов с учётом правил оформления документов. В соответствии с этим строится интерфейс программы, позволяющий оператору быстро вводить необходимые данные и сохранять их в базе данных. Если учитывать тот факт, что некоторые данные заполняются автоматически и при этом проверяется соответствие данных, вдобавок, данные отображаются в удобном формате, можно говорить об экономии временных ресурсов. К тому же документы в любой момент могут быть просмотрены и изменены по необходимости. Вся информация компактно храниться на магнитном носителе, а это значит что необходимость ведения ненужной бумажной документации отпадает. Интерфейс программы также предусматривает облегчение процесса оформления заказа, поэтому эта функция обособлена. Все возможности программы доступны оператору почти на любом этапе работы. Оператор также имеет доступ к любой информации. Предполагается предоставление различных статистик оператору по запросу. С учетом этого разработаны стандартные запросы к базе данных. Учитывая возможности языка SQL и то, что запросы также могут быть сохранены на магнитном носителе, можно повысить оперативность и информативность программы. Работа с информацией обособлена от работы с клиентами, но тем не менее может быть быстро получена за счет наличия функций поиска. Изменение информации по сотрудникам и базы данных продавцов доступно для опытных пользователей, но не рекомендуется. В целом решается задача экономии временных ресурсов и задача информативности.
1.2.2 Документы предметной области, содержащие информацию, необходимую для решения задачи
При оформлении заказа оператору потребуются паспортные данные, точнее фамилия, имя клиента, а также номер телефона. Остальная информация(адрес проживания и заказ по квартире) вводится со слов клиента. Накладные и документы по оценке стоимости квартир не используются в данном курсовом проекте из-за сложности реализации задачи, вдобавок менталитет сотрудников фирмы таков что не позволяет этим заниматься. Перечень квартир предоставляемых продавцами содержит индефикационный номер квартиры, адрес, оценочную стоимость, операцию с данной квартирой(продажа или обмен), различные данные по квартире(тип планировки, владелец и др.). В конце работы фирма предоставляет клиенту информационный чек, в котором содержатся данные по выполненному заказу и данные по оплате услуги фирмы. Подводя итог, можно сказать, что для разработки программы потребуются документы из риэлторской фирмы, по отчётности, по клиентам, примерный образец информационного чека. Остальную информацию, в частности бланки документов и описание их назначения можно найти в справочной системе «Гарант» и в своде кодексов и законов РФ, поставляемые на компакт-дисках. В этих системах можно найти правила работы с клиентами, установленные законом, в том числе гарантийные обязательства.
1.2.3 Структурный анализ с помощью диаграмм потоков данных
При проектировании автоматизированной системы необходимо описать разработку и внедрение всего комплекса проблем, которые необходимо решить, а также показать какие функции системы должны быть автоматизированы, определением точек интерфейса человек-машина и того, как взаимодействует система со своим окружением. Иными словами, этап проектирования системы является главным для создания высококачественных систем. Системное проектирование – это дисциплина, определяющая подсистемы, компоненты и способы их соединения, задающая ограничения, при которых система должна функционировать, выбирающая наиболее эффективное сочетание людей, машин и программного обеспечения для реализации системы. SADT – одна из известных систем проектирования. SADT – аббревиатура слов StructuredAnalysisandDesignTechnique (Технология структурнрго анализа и проектирования)–это графическое обозначение и подход к написанию систем.
Для структурного анализа с помощью диаграмм потоков данных было использовано три уровня SADT – диаграммы.
На нулевом уровне SADT – диаграммы (см. приложение) показана главная функция – оказание бытовых услуг в фирме. Выполнение этой функции возможно благодаря входным данным, к которым относятся заказ (заявка), рыночная информация, информация от клиентов. Выполнение основной функции возложено на оператора и компьютер (механизм исполнения), управляющие потоки контролируют процесс выполнения функции. К управляющим потокам относятся законы, налоги, рыночные условия, требования клиентов. Личную карточку заводят сотрудники отдела кадров. К выходным потокам относятся выручка (прибыль), документы .
На первом уровне SADT – диаграммы (см. приложение) детализируется главная функция. На этом уровне отражены главные функции фирмы: поиск квартиры, покупка и регистрация, продажа и учёт. Все эти подфункции с точки зрения потоков данных связаны между собой.
На втором уровне SADT – диаграммы (см. приложение) детализируется подфункция «Продажа и учёт». Данная подфункция включает в себя: оформление, продажа, учёт.
1.2.4 Структурный анализ с помощью диаграмм «сущность-связь»
В автоматизируемой подфункции «продажа и учёт» можно выделить несколько сущностей, вытекающих из используемых документов и процесса бытового обслуживания в фирме. Главной сущностью является «Фирма» с первичным ключом (расчётный_счёт), внешним ключом для неё является (имя) сущности «Покупатель» с первичным ключом(имя), который делает заказ(обращается). «Фирма» запрашивает(обращается) к «Продавец» с первичным ключом(расчётный_счет), поэтому внешними ключами у него будут(расчётный_счёт сущности «Фирма») и (имя сущности «Покупатель»). «Продавец» предлагает «Квартиры» с первичным ключом (инд_номер), внешними ключами у «Квартиры» будут ключи «Продавец». У сущности «Квартиры_фирмы» с первичным ключом(инд_ном) внешними ключами будут ключи сущностей «Покупатель» и «Фирма». У сущности «Чек» внешние ключи ключи сущностей «Покупатель» и «Фирма». Для «Чек» с первичным ключом(имя_покупателя) внешними ключами будут ключи сущности «Фирма».
2. РЕАЛИЗАЦИЯ ИНФОРМАЦИОННОЙ СИСТЕМЫ СРЕДСТВАМИ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ЯЗЫКА
DELPHI
2.1 Аппаратная часть задачи
Программа тестировалась на компьютере следующей конфигурации:
- процессор Pentiun 233;
- 64 Мб оперативной памяти;
- 500 Мб свободного пространства на жестком диске;
- видеорежим 800 на 600 точек (минимальное допустимое), 16 бит на цвет;
- манипулятор «мышь»;
- операционная система Windows 98 SE;
Для функционирования программы необходимо наличие следующих файлов:
1. project2.exe (исполнимый модуль программы);
2. chekinf.db (сущность «чек»);
3. kv.db (сущность «квартиры»);
4. svoi_kv.db (сущность «квартиры_фирмы»);
5. otchet.db (сущность «отчет»);
6. pokup.db (сущность «покупатель»);
7. prod.db (сущность «продавец»);
8. sort.db;
9. другие файлы, с названиями, соответствующими названиям сущностей;
2.2 Обоснование выбора среды разработки и стиля программирования
В качестве стиля программирования, выбран объектно-ориентированный язык, основанный на ObjectPascal. В качестве среды программирования – интегрированная среда разработки Delphi 5, которая является одной из лучших ИСР для быстрого создания приложений благодаря библиотеке VCL (библиотека визуальных компонентов). Из всех известных средств разработки программных продуктов, Delphi является одним из самых лучших по следующим причинам:
1) пакет Delphi совместно с включёнными в него дополнительными программами предоставляет разработчику большой объём возможностей по созданию программ, предназначенных для работы с базами данных. BorlandDatabaseEngine (BDE) является мировым стандартом ядра для СУБД;
2) в пакете Delphi есть возможность вывода информации из баз данных на принтер с использованием генератора отчётов;
3) в Delphi реализован язык SQL, который используется при работе с базами данных;
4) в Delphi есть возможность подключения дополнительных модулей различного назначения. Это позволяет создавать нестандартные компоненты, изменять существующие. Благодаря этому, улучшается восприятие пользователем данного программного продукта;
5) несомненным плюсом является технология автодополнения кода и всплывающих подсказок, быстрое обнаружение идентификаторов в подключенных модулях;
6) компилятор Delphi является одним из самых быстрых, он драматически снижает временные затраты на перекомпиляцию проектов, что очень полезно на стадии отладки приложения;
7) такие модули, как ObjectInspector (Инспектор объектов) и менеджер проектов, являются незаменимыми инструментами инструментами по настройке интерфейса разрабатываемого приложения, значительно экономящими время разработки программы на начальном этапе.
Визуальная библиотека компонентов (VCL) содержит исходные тексты стандартных компонентов Delphi, что предоставляет разработчику широкие возможности по изучению и изменению кода. Кроме того эта библиотека используется также в других ИСР выпущенных Borland (Inprise). Delphi оправдывает название среды быстрой разработки приложений (RAD), многие функции реализуются прозрачно для программиста, например, чаще всего программист не заботится о написании кода для создания форм в приложении, для их прорисовки и т.д. Часто можно разработать полноценную программу, не написав при этом ни строчки кода.
Структурированный подход при написании кода лучшим образом отвечает запросам программиста, так как при этом намного проще разобраться в исходном коде программы, отлаживать программу и вносить изменения. Буквально двойным щелчком на компоненте можно задавать стандартные процедуры обработки.
2.3 Создание таблиц базы данных
Для осуществления поставленной задачи выбраны реляционные базы данных. Их создание осуществлялось в специальном приложении Delphi, которое называется DatabaseDesktop, таблицы написаны в 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(чек)
На этой форме представлен чек об оплате. Поля чека заполняются автоматически после того как на предыдущей форме была заключена сделка продажа(нажатие кнопки <продать>). Значение поля расчётный счёт фирмы берётся из информации об фирме. Дата - сегодняшняя дата. Остальные три значения полей ‘стоимость_кв’, ’адрес_кв’ и ’адрес_продавца’ берутся в соответствии с данными выбранными на предыдущей форме.
Если необходимо чек об оплате можно распечатать, для этого достаточно нажать кнопку <распечатать>.
Чтобы вернуться на предыдущую форму нужно нажать кнопк
2.6.2 Форма 7(добавление квартир предлагаемых продавцами)
Эта форма не являлась бы обязательной если бы была связь с базой данных по квартирам в интернете, которая постоянно обновляется. Но от меня выполнение такой задачи не требовалось, поэтому для увеличения и обновления данных о продавцах и квартирах я создал данную форму.
Так как база по квартирам находится в подчинении у базы по продавцам, то для того чтобы добавить квартиру, необходимо сначала выбрать нужного продавца. Для просмотра продавцов предусмотрен ‘навигатор’, благодаря которому также можно добавлять нового продавца. Для быстрого поиска продавца предусмотрен специальный поиск. Поиск представлен ячейкой для ввода данных и выбором для поиска владельца по: <
имени>
, <расч_счёту>.
Для поиска достаточно выбрать пункт и начать вводить данные в ячейку(по мере того как их вводят(по мере схожести данных) будет появляться нужная информация).
После того как выбран нужный продавец можно:
- передвигаться по записям с помощью навигатора;
- редактировать записи по квартире(достаточно изменить записи в ячейках и нажать ‘V’ в навигаторе для отмены изменений нажать ‘Х’);
- добавлять новую квартиру выбрав ‘+‘
в навигаторе;
- удалять запись нажав ‘-’;
Для того чтобы вернуться на предыдущую форму нажать кнопку <OK>.
2.7 Форма 6(отчёт)
Это форма представляет собой таблицу с записями о деятельности фирмы. Для простоты перехода по записям здесь также предусмотрен навигатор,
С помощью него удобнее осуществить удаление ненужной записи в отчёте.
Главное в этом отчёте то, что он автоматизирован, то есть записи заносятся сюда автоматически по мере работы. Генерация идёт после того как в форме 5(чек) мы нажали <ок> , часть записей идёт из чека(то есть после осуществления сделки), часть ,в соответствии,
из формы 4.
Для возврата в главное меню нужно нажать кнопку <назад>.
ЗАКЛЮЧЕНИЕ
В данной курсовой работе была достигнута частичная автоматизация работы фирмы по продаже квартир. Принцип работы программы довольно прост, любой кто хоть раз держал ‘мышку’ в руке способен понять её работу.
С точки зрения практического применения программный продукт не является полноценным, хотя некоторые модули могут быть использованы для разработки пригодного к реальным условиям приложения. Целью проекта является демонстрация возможностей автоматизации в сфере бытового обслуживания, а также демонстрация удобства и простоты работы. Благодаря программе отпадает необходимость ведения многих документов, вдобавок исключаются ошибки человека(так называемый человеческий фактор).
Очень удобно в программе автоматическое заполнение чеков и отчётов ведь это как правило довольно неинтересный и скучный процесс, одно дело когда надо заполнить несколько документов, другое когда сотни и даже тысячи и вот здесь велика человеческая ошибка.
Много внимания возможностям языка SQL, предоставляющего средства для обработки данных. Запросы дают разнообразные возможности поиска необходимых данных. находить разного рода информацию по клиентам, сотрудникам. Также SQL запросы помогают отсеивать данные по необходимым параметрам, отсеивать можно до тех пор пока не останется нужная нам информация. Данное приложение может быть адаптировано к любой службе занимающихся работой с квартирами или недвижимостью, учитывая схожесть организации основных функций и решаемых задач. Ко всему прочему программу легко расширить например до работы риэлторской фирмы, которая предоставляет различные услуги в виде: оценки квартир, обмен квартир и имеющей другие функции.
Внедрение проекта позволит в значительной мере ускорить обмен информацией в фирме, снизить затраты рабочего времени на действия, напрямую не относящиеся к должностным обязанностям. При использовании для защиты информации и разграничения доступа средств операционной системы и дополнительных программно-аппаратных средств планируется в значительной мере повысить уровень безопасности информации, так как резко сокращается число людей, способных нанести ущерб информации.
Таким образом, реализация проекта позволит значительно уменьшить затраты рабочего времени на организационные вопросы, а, следовательно, повысить производительность труда и экономическую эффективность проводимых работ.
СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ
1. Архангельский А.Я. Программирование В Delphi 5 – М.:
ЗАО «Издательство Бином», 2000 г. – 1072 с.: ил.
2. Базы данных. Проектирование, реализация и сопровождение. Теория и практика. Второе издание исправленное и дополненное. Авторы Томас Конноли и Каролин Бегг.
3. Встроенное справочное руководство BorlandDelphi 5.
4. Интернет-сайт www.citforum.ru ftp-архив.
5. Документы конференции по 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.
Приложение Б