Информационная система по продаже недвижимости
ПОЯСНИТЕЛЬНАЯ
ЗАПИСКА
к курсовому
проекту
на тему
ИНФОРМАЦИОННАЯ
СИСТЕМА ПО ПРОДАЖЕ НЕДВИЖИМОСТИ
Исходные данные проекта
Реализовать информационную систему для компаний по продаже недвижимости.
Программа должна иметь удобный пользовательский интерфейс с необходимыми
пунктами меню. Работа с информацией должна производиться в окнах. Информация
должна храниться в различных файлах. Необходимо хранить следующие сведения:
данные о квартирах, частном секторе, нежилых помещениях, коммерческой недвижимости,
а также о клиентах. Реализовать функции: добавление, удаление, редактирование
данных.
Введение
Ключевым понятием C++ является класс. Класс - это тип, определяемый
пользователем. Классы обеспечивают скрытие данных, гарантированную
инициализацию данных, неявное преобразование типов для типов, определенных
пользователем, динамическое задание типа, контролируемое пользователем
управление памятью и механизмы перегрузки операций. C++ предоставляет гораздо
лучшие, чем в C, средства выражения модульности программы и проверки типов. В
языке есть также усовершенствования, не связанные непосредственно с классами,
включающие в себя символические константы, inline- подстановку функций,
параметры функции по умолчанию, перегруженные имена функций, операции управления
свободной памятью и ссылочный тип. В C++ сохранены возможности языка C по
работе с основными объектами аппаратного обеспечения (биты, байты, слова,
адреса и т.п.). Это позволяет весьма эффективно реализовывать типы,
определяемые пользователем.++ и его стандартные библиотеки спроектированы так,
чтобы обеспечивать переносимость. Имеющаяся на текущий момент реализация языка
будет идти в большинстве систем, поддерживающих C. Из C++ программ можно
использовать C библиотеки, и с C++ можно использовать большую часть
инструментальных средств, поддерживающих программирование на C.
1. Обзор методов и алгоритмов решения поставленной задачи
Файлом называют способ хранения информации на физическом устройстве. Файл
- это понятие, которое применимо ко всему - от файла на диске до терминала.
В C++ отсутствуют операторы для работы с файлами. Все необходимые
действия выполняются с помощью функций, включенных в стандартную библиотеку.
Они позволяют работать с различными устройствами, такими, как диски, принтер,
коммуникационные каналы и т.д. Эти устройства сильно отличаются друг от друга.
Однако файловая система преобразует их в единое абстрактное логическое
устройство, называемое потоком.
Текстовый поток - это последовательность символов. При передаче символов
из потока на экран, часть из них не выводится (например, символ возврата
каретки, перевода строки).
Двоичный поток - это последовательность байтов, которые однозначно
соответствуют тому, что находится на внешнем устройстве.
1.1 Организация работы с файлами средствами C
Объявление файла*идентификатор;
Открытие файла:(имя физического файла, режим доступа)
Режим доступа - строка, указывающая режим открытия файла файла и тип
файла. Типы файла: бинарный (b); текстовый (t):Файл открывается только для
чтенияФайл открывается только для записи. Если соответствующий физический файл
существует, он будет перезаписанФайл открывается для записи в конец (для
дозаписи) или создается, если не существует+Файл открывается для чтения и
записи.+Файл открывается для записи и чтения. Если соответствующий физический
файл существует, он будет перезаписан+Файл открывается для записи в конец (для
дозаписи) или создается, если не существует
Неформатированные файловый ввод-вывод
Запись в файл(адрес записываемой величины, размер одного экземпляра,
количество записываемых величин, имя логического файла);
Чтение из файла(адрес величины, размер одного экземпляра, количество
считываемых величин, имя логического файла);
Закрытие файла(имя логического файла);
Форматированный файловый ввод-вывод
) Функции fgetc() и fputc() позволяют соответственно осуществить
ввод-вывод символа.
) Функции fgets() и fputs() позволяют соответственно осуществить
ввод-вывод строки.
) Функции fscanf() и fprintf() позволяют соответственно
осуществить форматированный ввод-вывод и аналогичный соответствующим функциям
форматированного ввода-вывода, только делают это применительно к файлу.
1.2 Организация работы с файлами средствами C++
Файловый ввод-вывод с использованием потоков
Библиотека потокового ввода-вывода #include <fstream>
Связь файла с потоком выводаимя логического файла;
Связь файла с потоком вводаимя логического файла;
Открытие файла
имя логического файла.open(имя физического файла);
Закрытие файла
имя логического файла.close();
2. Обоснование выбранных методов и алгоритмов
При создании приложения использовалась работа с файлами средствами C с неформатированным вводом-выводом,
т.е. чтение и запись данных в файл происходит в виде бинарной информации. Для
хранения данных в памяти был использован динамический двунаправленный список,
при добавлении нового элемента, он размещается в конец списка. Одновременно во
время выполнения программы существуют указатели на начало и на конец списка.
Рисунок 2.1 Структура используемого списка.
При запуске приложения загружаются следующие файлы:
· Database\Commercial.cm
· Database\Flats.f
· Database\Houses.hs
· Database\Humans.hm
Данные о квартирах, частных домах и коммерческих зданий при запуске
программы загружаются в компонент DataGridView. Данные о клиентах загружаются в список. Список имеет
структуру показанную на рисунке 2.1. Данные хранятся в DataGridView и в списке на всём протяжении работы
программы. Сохранение данных из DataGridView и списка происходит после нажатия соответствующего пункта меню.
3. Описание программы для программиста
Рисунок 3.1 Диаграмма классов
3.1 Класс FlatBase- базовый абстрактный класс помещений
Таблица 3.1 Поля класса FlatBase
Поле
|
Тип
|
Описание
|
Addr
|
wchar_t
|
Адрес
|
Square
|
wchar_t
|
Площадь
|
Price
|
wchar_t
|
Цена
|
IsTel
|
bool
|
Флаг телефона
|
F
|
FILE *
|
Указатель на файл
|
Таблица 3.2 Методы класса FlatBase
Метод класса
|
Тип
|
Описание
|
uninit()
|
Void
|
virtual Size() = 0
|
Long
|
Чисто виртуальный метод
вывода количества записей в файле
|
virtualinput(int i,
DataGridView^ dgv) = 0
|
Void
|
Чисто виртуальный метод
ввода данных
|
virtualSaveToF() = 0
|
Void
|
Чисто виртуальный метод
сохранения в файл
|
virtual ReadFromF(int i) =
0
|
Bool
|
Чисто виртуальный метод
чтения из файла i-й записи
|
virtual view(int i,
DataGridView^ dgv) = 0
|
Void
|
Чисто виртуальный метод
просмотра данных
|
virtualinit(char f = 'r') =
0
|
Void
|
Чисто виртуальный метод
привязки к файлу
|
.2 Класс Flat : public
FlatBase-класс квартир
Таблица 3.3 Поля класса Flat
Поле
|
Тип
|
Описание
|
NumOfRoom
|
wchar_t
|
Количество комнат
|
Floor
|
wchar_t
|
Этаж
|
nalichremonta
|
bool
|
Наличие ремонта
|
IsEmpty
|
bool
|
Пустая или жилая квартира
|
Таблица 3.4 Методы класса Flat
Метод класса
|
Тип
|
Описание
|
virtual Size()
|
Long
|
Виртуальный метод вывода
количества записей в файле
|
virtualinput(int i,
DataGridView^ dgv)
|
Void
|
Виртуальный метод ввода
данных
|
virtualSaveToF()
|
Void
|
Виртуальный метод
сохранения в файл
|
virtual ReadFromF(int i)
|
Bool
|
Виртуальный метод чтения из
файла i-й записи
|
virtual view(int i, DataGridView^
dgv)
|
Void
|
Виртуальный метод просмотра
данных
|
virtual init(char f = 'r')
|
Void
|
Виртуальный метод привязки
к файлу
|
3.3 Класс House : public FlatBase. Класс частных домов
Таблица 3.5 Поля класса House
Поле
|
Тип
|
Описание
|
NumOfFloors
|
wchar_t
|
Количество этажей
|
TypeOfHeat
|
wchar_t
|
Тип отопления
|
NumOfFlats
|
wchar_t
|
NumOfRooms
|
wchar_t
|
Количество комнат
|
Sewers
|
bool
|
Наличие канализации
|
Таблица 3.6 Методы класса House
Метод класса
|
Тип
|
Описание
|
virtual Size()
|
Long
|
Виртуальный метод вывода
количества записей в файле
|
virtualinput(int i,
DataGridView^ dgv)
|
Void
|
Виртуальный метод ввода
данных
|
virtualSaveToF()
|
Void
|
Виртуальный метод
сохранения в файл
|
virtual ReadFromF(int i)
|
Bool
|
Виртуальный метод чтения из
файла i-й записи
|
virtual view(int i,
DataGridView^ dgv)
|
Void
|
Виртуальный метод просмотра
данных
|
virtual init(char f = 'r')
|
Void
|
Виртуальный метод привязки
к файлу
|
.4 Класс Commercial : publicFlatBase. Класс комерческих зданий
Таблица 3.7 Поля класса Commercial
Поле
|
Тип
|
Описание
|
NumOfFloors
|
wchar_t
|
Количество этажей
|
Таблица 3.8 Методы класса Commercial
Метод класса
|
Тип
|
Описание
|
virtual Size()
|
Long
|
Виртуальный метод вывода
количества записей в файле
|
virtualinput(int i,
DataGridView^ dgv)
|
Void
|
Виртуальный метод ввода
данных
|
virtualSaveToF()
|
Void
|
Виртуальный метод
сохранения в файл
|
virtual ReadFromF(int i)
|
Bool
|
Виртуальный метод чтения из
файла i-й записи
|
virtual view(int i,
DataGridView^ dgv)
|
Void
|
Виртуальный метод просмотра
данных
|
virtual init(char f = 'r')
|
Void
|
Виртуальный метод привязки
к файлу
|
3.5 Класс Human. Класс клиентов
Таблица 3.9 Поля класса Human
Поле
|
Тип
|
Описание
|
FIO
|
wchar_t
|
ФИО
|
Tel
|
wchar_t
|
Телефон
|
Addr
|
Адрес
|
F
|
FILE *
|
Указатель на файл
|
Таблица 3.10 Методы класса Human
Метод класса
|
Тип
|
Описание
|
Size()
|
Long
|
Метод вывода количества
записей в файле
|
SaveToF()
|
Void
|
Метод сохранения в файл
|
ReadFromF(int i)
|
Bool
|
Метод чтения из файла i-й
записи
|
init(char f = 'r')
|
Void
|
Метод привязки к файлу
|
uninit()
|
Void
|
Метод снятия привязки с
файла
|
Input(String^ fio, String^
tel, String^ adr)
|
Void
|
Метод ввода данных в объект
|
OutFIO()
|
String^
|
Метод вывода фамилии
|
OutTel()
|
String^
|
Метод вывода телефона
|
OutAddr()
|
String^
|
Метод вывода адреса
|
.6 Класс-контейнер ContH. Класс список клиентов
Таблица 3.11 Поля класса-контейнера ContH
Поле
|
Тип
|
Описание
|
Next
|
ContH *
|
Указатель на следующий
элемент списка клиентов
|
Prev
|
ContH *
|
Указатель на предыдущий
элемент списка клиентов
|
H
|
Human *
|
Указатель на объект клиента
|
Таблица 3.12 Методы класса-контейнера ContH
Метод класса
|
Тип
|
Описание
|
ContH()
|
-
|
Конструктор класса
контейнера
|
Add(Human * h)
|
ContH *
|
Добавление элемента в
список и возврат указателя на последний элемент
|
Del()
|
ContH *
|
Удаление последнего
элемента списка и возврат указателя на предпоследний
|
Next()
|
ContH *
|
Переход на следующий
элемент списка
|
Prev()
|
ContH *
|
Переход на предыдущий
элемент списка
|
Value()
|
Human *
|
Item(int i, ContH * B)
|
ContH *
|
Возвращает i-й
указатель на объект списка относительноуказателя B
|
4. Описание алгоритмов решения задачи
информационный программа класс алгоритм
4.1 Метод long Flat::Size() - Количество записей в файле
1. Начало.
. Установка указателя на конец файла
. Установка указателя на начало файла
. Вычисление разности между началом и концом.
. Вычисление количества записей в файле
. Возврат количества записей. Конец
4.2 Метод System::Voidadd_click() - Кнопка добавить клиента
1. Начало.
. Выделение памяти под нового клиента
. Заполнение полей клиента
. Добавление клиента в конец списка
. Добавление фамилии в listBox1
. Конец.
4.3 МетодSystem::VoidbEdit2_Click() - Событие на нажатие кнопки изменения
клиента
1. Начало.
. Если индекс выбранного клиента -1, сообщение об ошибке
. Если textBox1 только
для чтения, снять флаг только для чтения
. Иначе меняем данные о клиенте
. Выводим новую фамилию в listBox1
. Конец.
4.4 Метод System::VoidbAdd1_Click()- Создание диалогового окна
1. Начало.
. Выделение памяти под форму
. Настройка свойств элементов управления
. Присваивание кнопке события
.