Справочная система по жильцам многоквартирного дома

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,51 Mb
  • Опубликовано:
    2011-06-22
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Справочная система по жильцам многоквартирного дома

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение высшего

профессионального образования

«Северо - Кавказский Государственный Технический Университет»





ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К КУРСОВОМУ ПРОЕКТУ

ПО ДИСЦИПЛИНЕ «Технология программирования»

НА ТЕМУ

«СПРАВОЧНАЯ СИСЕМА ПО ЖИЛЬЦАМ МНОГОКВАРТИРНОГО ДОМА»

Выполнил студент II курса

специальности 230201.65

«Информационные Системы и

Технологии»

гр. ИС-091

М. А. Москвитин

Ставрополь 2011г.

Аннотация


В данном курсовом проекте описана программа, написанная на языке Visual C++ с использованием библиотеки MFC.

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

Введение

На сегодняшний день Windows является безусловно лидирующим продуктом на рынке операционных систем для персональных компьютеров. Поэтому успех современного программиста напрямую зависит от его умения разрабатывать качественные и эффективные Windows-приложения. Сложность программ постоянно увеличивается, как следствие возрастает время необходимое для их создания. Для ускорения процесса программирования Microsoft была разработана библиотека MFC (Microsoft Foundation Classes) для Microsoft Visual C++. Сейчас эта библиотека представляет собой мощный набор классов, позволяющий разрабатывать приложения для Windows 95/98 и линейки Windows NT абстрагируясь от внутренних особенностей операционной системы. MFC также открывает легкий доступ к функциям низкого уровня, что позволяет писать эффективные приложения и использовать все возможности операционной системы.

Использование Microsoft Visual C++ совместно с MFC является альтернативой системам визуального программирования, таким как Delphi или Visual Basic. На сегодняшний день подавляющее большинство программ разрабатывается при помощи Microsoft Visual С++ и MFC. MFC - это стандарт программирования под Windows и "интернациональный язык общения". Такая ситуация объясняется многими причинами. В частности, только MFC позволяет создавать наиболее эффективные и устойчивые приложения, которые будут корректно вести себя не только в системе разработчика, но и в системах реальных пользователей. Также очень важно, что MFC поддерживает все современные технологии, реализованные в Windows, и при дополнении Windows почти сразу же дополняется и MFC.- это инструмент для программирования сложных приложений, от которых требуется высокая эффективность и надежность. MFC поощряет использование объектно-ориентированного программирования, что дает ощутимые преимущества при решении сложных (не с точки зрения только интерфейса пользователя) задач, по сравнению с компонентно-ориентированным подходом.

1. Теоретические основы разработки Windows-приложений с использованием библиотеки MFC

 

.1 Основные принципы функционирования Windows-приложений


В основе работы всех Windows-приложений лежит цикл обработки сообщений. Сообщение - это уведомление, что произошло событие, требующее обработки. Сообщения могут быть сгенерированы самим приложением, операционной системой или другими приложениями. Основная часть работы приложения происходит внутри цикла обработки сообщения. При получении сообщения ОС производит вызов функции-обработчика сообщения. При использовании традиционных способов написания Windows-приложения программист должен самостоятельно писать цикл обработки сообщения. При программировании с использованием MFC цикл создается автоматически и скрыт в глубине программного кода[1]. Если быть более точным то цикл обработки сообщения запускается методом Run() класса CWinThread.

 

1.2 Библиотека MFC


Рисунок 1.2.1 - Иерархия основных классов MFC

Библиотека Microsoft Foundation Classes (MFC) дает возможность разрабатывать GUI-приложения для Windows на языке C++ с использованием богатого набора библиотечных классов. На рисунке 1.2.1 представлена иерархическая структура ряда наиболее важных MFC-классов.

 

.2.1 Класс CObject

Основные функции этого класса - обработка информации о типе времени исполнения и сохранения объекта (или сериализации, по терминологии MFC), а также выполнение диагностики выходных данных порожденных объектов[2].

Поддержка диагностики в пределах класса CObject ограничивается двумя методами: AssertValid и Dump. Первый дает классу возможность выполнять проверку своего нормального состояния, прежде чем продолжать функционирование. Как правило для вызова используется макрокоманда ASSERT. Метод Dump дает классу возможность помещать в поток данных диагностическую информацию в удобочитаемой форме текста и/или чисел.

Обработка информации о типе времени выполнения осуществляется с помощью макроса RUNTIME_CLASS. Этот макрос возвращает указатель на объект времени выполнении, получая в качестве параметра класс объекта.

Сериализация - это способность объекта сохранять свое состояние в байтовом потоке и восстанавливать его из этого потока. Сериализация поддерживается двумя методами: IsSerializable и Serialize. Метод IsSerializable дает другому объекут возможность определить поддерживает ли сериализацию класс, порожденный от CObject. Метод Serialize вызывается для фактического выполнения операций сохранения и восстановления объекта из потока сериализации.

 

.2.2 Класс CCmdTarget

Порожденный от CObject класс CCmdTarget осуществляет управление маршрутизацией системных и оконных событий к объектам, которые способны реагировать на эти события[3]. Таким образом, любой класс, который ожидает получения события, порождается от этого класса и заменяет метод CCmdTarget::OnCmdMsg. Примерами классов, которые ожидают получения системных или оконных событий являются CWnd(класс окна), CView (класс представления), CDocument (класс документа), CWinThread(класс потока для пользовательского интерфейса) и CWinApp (класс приложения).

 

.2.3 Класс CWinThread

Класс CWinThread является производным от класса CCmdTarget и служит для организации потока выполнения внутри MFC-приложения. Во всех MFC-приложениях имеется, по меньшей мере, один объект CWinThread, например объект CWinApp основного приложения, который порожден от класса CWinThread[4]. Если требуется обеспечить дополнительную асинхронную обработку внутри приложения, то при необходимости можно создать и запустить на выполнение дополнительные потоки CWinThread. Путем вызова метода AfxGetThread можно получить указатель на текущий объект CWinThread.

 

.2.4 Класс CWnd

Класс CWnd, порожденный от класса CCmdTarget, является основополагающим классом объектов GUI-интерфейса в пакете MFC. Экземпляры этого класса и порожденные классы представляют собой окна и имеют связанный с ними дескриптор главного окна (HWND)[5].

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

 

.2.5 Класс CView

Класс CView, порожденный от класса CWnd, осуществляет отображение или печать, а также обработку всех пользовательских взаимодействий с присоединенным к нему документом. Для представления пользователю данных из конкретного документа необходимо породить от класса CView соответствующие производные классы.

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

 

.2.6 Класс CDocument

В MFC любое приложение можно разделить на документ и одно или несколько представлений этого документа. При этом документ содержит данные, с которыми работает конкретное приложение. А представление служит для визуального отображения этих данных. Следовательно, все представления ссылаются на один и тот же документ. Если документ претерпевает изменение в одном представлении, то все остальные представления обновляются в соответствии с этим изменением[6]. Для создания документа следует породить класс, производный от CDocument, а для создания типа представления - от CView.

 

.3. Механизм соединения с базами данных ODBC

(Open Database Connectivity - открытая связь с базами данных) - это программный интерфейс доступа к базам данных, разработанный фирмой Microsoft, в сотрудничестве с Simba Technogies на основе спецификаций Call Level Interface (CLI). Стандарт CLI призван унифицировать программное взаимодействие с СУБД (системы управления базами данных), сделать его независимым от поставщика СУБД и программно-аппаратной платформы[7].

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

MFC усовершенствовала ODBC. Истинный интерфейс ODBC является обычным процедурным API. Вместо создания простой оболочки функционального API, разработчики MFC создали набор абстрактных классов, представляющих логические сущности в баз данных. В частности, ключевые классы реализации ODBC в MFC поддерживают базы данных (CDatabase), наборы записей (CRecordset) и представления записей (CRecordView). При использовании этих классов программисту не обязательно беспокоиться об SQL - масса черновой работы делается автоматически.

 

.3.1 Класс CDatabase

Класс CDatabase предоставляет абстракцию соединения с базой данных ODBC[8]. Прежде чем можно будет воспользоваться большинством других классов и методов базы данных, потребуется открыть объект CDatabase при помощи метода OpenEx. По завершению работы с соединением необходимо воспользоваться методом Close для освобождения всех связанных с ним ресурсов. Метод ExecuteSQL позволяет отправить команду SQL открытому объекту базы данных. Этот метод принимает один строковый параметр, хранящий команду SQL.

Для управления транзакциями базы данных используются методы CanTransact, BeginTrans, CommitTrans, Rollback. Метод CanTransact желательно вызывать перед каждым вызовом другого метода транзакции, чтобы убедится, что текущий источник данных поддерживает транзакции. Для запуска новой транзакции используется метод BeginTrans. Метод Rollback используется для отмены всех внесенных изменений, а метод CommitTrans обновляет базу данных в соответствии со внесенными изменениями.

 

.3.2 Класс CRecordset

Класс CRecordset инкапсулирует группу подобных записей, обычно записей таблицы базы данных или записей, возвращаемых в результате выполнения запроса. С помощью этого класса можно изолировать свою программную логику от реального SQL, необходимого для вывборки, вставки, удаления или обновления строк в базе данных. Несмотря на то что классом CRecordset можно воспользоваться напрямую, намного проще породить от него новый класс и связать его атрибуты со столбцами базы данных[9].

Для создания и удаления записей используются методы AddNew и Delete соответственно. Для перемещения по набору записей используются следующие методы: MoveFirst (переход к первой записи), MoveLast (переход к последней записи), MoveNext (переход к следующей записи), MovePrev (переход к предыдущей записи), Move (в качестве параметра передается номер записи к которой необходимо перейти). Методы IsBOF и IsEOF позволяют определить является ли текущая запись первой или последней в наборе соответсвенно. Метод Edit позволяет модифицировать текущую запись базы данных, связанную с набором записей. После вызова метода AddNew или Edit необходимо вызвать метод Update, для обновления файла базы данных в соответствии с внесенными изменениями, либо метод CancelUpdate, для отмены внесенных изменений. Метод Requery обновляет текущий набор записи в соответствии с последними изменениями.

Для представления объекта класса CRecordset используется класс CRecordView.

 

1.4 Инструментальное средство - AppWizard


При желании можно, безусловно, создать собственные классы, производные от класса CWinApp, и создать собственное MFC-приложение с самого начала. Однако с помощью MFC-мастера AppWizard, который автоматически создает большую часть общего кода приложения, можно в значительной степени уменьшить затраты труда на выполнение рутинных операций. Мастер AppWizard служит отправной точкой создания функциональной логике приложения[10].

На первом этапе создания приложения AppWizard (рисунок 1.4.1) позволяет выбрать тип интерфейса создаваемого приложения: Dialog based (диалоговое приложение),SDI (Single Document Interface - однодокументное приложение), MDI (Multiple Documents Interface - многодокументное приложение); поддержку Unicode, способ включения библиотек MFC в проект (как статические или динамические библиотеки).

Рисунок 1.4.1 - Первый шаг создания приложения с помощью мастера AppWizard

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

Рисунок 1.4.2 - Выбор поддержки баз данных проектом с помощью AppWizard

Последующие шаги посвящены настройкам интерфейса приложения и дополнительным настройкам. На последнем шаге (рисунок 1.4.3) мастер приводит список генерируемых классов и файлов с возможностью изменения их имен.

Рисунок 1.4.3 - Последний шаг создания приложения мастером AppWizard

 

1.5 Добавление новых классов, переменных и функций


В более ранних версиях Microsoft Visual Studio добавление классов, их переменных и методов-обработчиков сообщений осуществлялось с помощью мастера ClassWizard. Начиная с версии Microsoft Visual Studio 2008 ClassWizard отвечает только за добавление новых классов (рисунок 1.5.1).

Добавление переменных осуществляется с помощью мастера Add Member Variable Wizard (рисунок 1.5.2). А для добавления новых методов обработчиков сообщений достаточно выделить требуемый элемент управления, на вкладке свойств выбрать вкладку Messages и добавить требуемы метод.

Рисунок 1.5.1 - Мастер ClassWizard

Рисунок 1.5.2 - Мастер Add Member Variable Wizard

2. Спецификация программы

 

.1 Общие сведения


Программа, разработанная в данном курсовом проекте, называется HomeHelp. Программа написана на языке Microsoft Visual C++ 2008, с использованием библиотеки классов MFC и программного интерфейса доступа к базам данных ODBC. Для просмотра и редактирования кода на компьютере должна быть установлена интегрированная среда разработки приложений Microsoft Visual Studio 2008 или более поздняя.

 

.2 Функциональное назначение


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

Рисунок 2.2.1 - Окно программы при запросе фамилии

Если найдено несколько жильцов с такой фамилией производится дополнительный запрос инициалов (рисунок 2.2.2). После нажатия кнопки поиск выводится информация о жильцах с такой фамилией и инициалами.

Рисунок 2.2.2 - Окно программы при запросе инициалов

Если инициалы и фамилия у нескольких жильцов совпадает запрашивается год рождения (рисунок 2.2.3). В результате, если найдены люди, проживающие в данном доме, выводится их список с инициалами, годами рождения и номерами квартир, в которых они прописаны.

Для ввода фамилии и инициалов используется элемент управления Edit Control. Для ввода года рождения используется элемент управления Combo Box. Для вывода результатов используется элемент управления ActiveX Microsoft FlexGrid Control версии 6.0.

Рисунок 2.2.3 - Окно программы при запросе года рождения

При щелчке по кнопке Новый поиск окно программы приводится к виду представленному на рисунке 2.2.1, а содержимое полей для ввода данных очищается.

Если на каком-либо из этапов поиска не будет найдено ни одного жильца выводится диалоговое окно, с соответсвующим уведомлением и предложением добавить новую запись ( рисунок 2.2.4).

Рисунок 2.2.4 -Диалоговое окно запроса создания новой записи

В зависимости от состояния флажка в данном диалоговом окне при нажатии кнопки ОК происходит либо возврат к основному окну, либо переход к диалоговому окну Добавить запись ( рисунок 2.2.5).

Рисунок 2.2.5 - Диалоговое окно добавления новой записи

В этом диалоговом окне поля Квартира, Год рождения и Номер записи представляют из себя элементы управления Combo Box. Для того, чтобы не происходило ввода некорректных значений, нарушающих работу программы, в данные поля запрещен ввод с клавиатуры. Ввод осуществляется посредством выбора одной из заранее заданных строк данных элементов управления.

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

При нажатии кнопки ОК производится проверка наличия содержимого всех полей, если какое-либо поле не заполнено выводится соответствующее уведомление ( рисунки 2.2.6 и 2.2.7).

Рисунок 2.2.6 - Уведомление об отсутствии содержимого полей с данными для редактирования записи

Рисунок 2.2.7 - Уведомление об отсутствии содержимого поля с номером записи.

 

2.3 Описание логической структуры


Данная программа использует 9 классов, из них было отредактировано и разработано 3 класса: CHomeHelpView ( таблица 2.1) , Dlg1( таблица 2.2), Dlg 2 ( таблица 2.3).

Таблица 2.1 - Спецификация класса CHomeHelpView

Член класса

Способ доступа

Назначение

Назначение формальных параметров методов класса

CEdit m_family

Public

Ввод фамилии


CEdit m_initials

Public

Ввод инициалов


CComboBox m_year

Public

Ввод года рождения


int m_accur

Public

Определяет количество условий поиска


Член класса

Способ доступа

Назначение

Назначение формальных параметров методов класса

CMsflexgrid1 m_grid

Public

Вывод результата


afx_msg void OnBnClickedButton1()

Public

Функция поиска, основная работа программы происходит в теле данной функции


afx_msg void OnBnClickedButton2()

Public

Привидение окна к первоначальному виду



Таблица 2.2 - Спецификация класса Dlg1

Член класса

Способ доступа

Назначение

Назначение формальных параметров методов класса

afx_msg void OnBnClickedOk()

Public

Вызов второго диалогового окна, либо возврат к главному окну


bool m_result

Public

Состояние флажка


dlg2 dlg2

Public

Объект второго диалогового окна



Таблица 2.3 - Спецификация класса Dlg2

Член класса

Способ доступа

Назначение

Назначение формальных параметров методов класса

CComboBox m_kvartnom CEdit m_family CEdit m_initials CComboBox m_year

Public

Поля ввода значений для редактируемой записи


CString n_kvartnum CString n_family CString n_initials CString n_year

Преобразование введенных данных к типу CString


CComboBox m_recnum

Public

Ввод номера записи


int m_recnumber

Public

Номер изменяемой записи


afx_msg void OnBnClickedRadio1() afx_msg void OnBnClickedRadio2()

Public

Изменение доступности элемента CComboBox m_recnum


afx_msg void OnBnClickedCancel()

Public

Выход из диалогового окна без внесения изменений


afx_msg void OnBnClickedOk()

Public

Примение изменений


Член класса

Способ доступа

Назначение

Назначение формальных параметров методов класса

bool m_result

Public

Передача способа закрытия окна главному окну


 

2.4 Требования к техническому обеспечению


Для запуска и работы программы необходим персональный компьютер с установленной 32-разрядной операционной системой Windows 2000/ XP/ Vista/ W7.

Системные требования для Windows 2000/ XP: процессор с тактовой частотой от 300 МГц, оперативная память от 128 Мб, Super VGA монитор и видеоадаптер, клавиатура, мышь, CD-ROM, 10 Мб свободного места на жестком диске.

Системные требования для Windows Vista/ W7: процессор с тактовой частотой от 1 ГГц, оперативная память от 1024 Мб, Super VGA монитор и видеоадаптер, клавиатура, мышь, CD-ROM, 10 Мб свободного места на жестком диске.

 

2.5 Вызов программы


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

1. Скопировать папку HomeHelp с компакт-диска на жесткий диск.

2.      Запустить администратор источников данных ODBC.

.        В открывшемся окне нажать кнопку добавить, затем выделить пункт Driver do Microsoft Access(*.mdb).

.        Указать путь к базе данных ( находится в каталоге HomeHelp) и присвоить источнику данных имя Home, после чего нажать ОК.

.        Запустить приложение HomeHelp из папки HomeHelp.

 

2.6 Входные данные


Входными данными для операции поиска являются текст введенный пользователем в поля фамилия, инициалы и год рождения главного окна, а также источник данных ODBC Home. Для ввода текста использованы элементы управления Edit Control и Combo Box.

Входными данными для операции добавления являются текст введенный пользователем в поля номер квартиры, фамилия, инициалы и год рождения диалогового окна добавления записи, а также источник данных ODBC Home. Для ввода текста использованы элементы управления Edit Control и Combo Box.

 

.7 Выходные данные


Выходными данными для операции поиска является объект класса MSFlexGrid1, который визуализируется в главном окне приложения.

Выходными данными для операции добавления записи является источник данных ODBC Home.

2.8 Анализ тестовых прогонов


Программа тестировалась на 3 различных системах:

.        ОС Windows 7, система на которой была написана программа.

2. ОС Windows XP SP3, в системе не была установлена среда Microsoft Visual Studio C++.

3.      ОС Windows 7, в системе так же не была установлена среда Microsoft Visual Studio C++.

При запуске программы на 2-ой и 3-ей системе элемент управления ActiveX Microsoft Flex Grid 6.0 не визуализировался, а при попытке обращения к нему программа выводила сообщения об ошибке. Проблема была решена добавлением в операционную систему исполняемого модуля MSFLXGRD.ocx.

Тестирование функции поиска данных:

1. При вводе корректных данных в поля ввода поиск осуществляется и находит все требуемые результаты.

2.      При вводе заведомо неверных сведений выдается сообщение об отсутствии записи в базе данных.

.        При вводе некорректных данных, таких как числовые данные введенные в текстовые поля, либо данные очень большой длины ошибок не происходит, выдается сообщение об отсутствии данных.

Тестирование функции добавления данных:

. При вводе корректных значений добавление данных в базу осуществляется корректно.

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

. При вводе некорректных данных ошибка не обнаруживается, но нарушений в работе программы не происходит.

Заключение


В ходе выполнения курсового проекта было создано Windows-приложение, представляющее из себя справочную систему по жильцам многоквартирного дома, с функциями поиска жильцов и добавления новых записей о жильцах в базу данных. Данная программа была написана на Microsoft Visual C++ 2008 c использование библиотеки MFC и механизма доступа к данным ODBC.

В результате выполнения курсового проекта была освоена работа со средой разработки приложений Microsoft Visual Studio, инструментальными средствами предоставляемыми MFC, а также технология визуальной разработки приложений с использованием стандартных элементов управления и элементов управления ActiveX.

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


1.     Грегори К. Использование Visual C++ 6. Специальное издание.- М., СПб.; К.: Издательский дом «Вильямс», 2000 г.

.       Черносвитов А.,Visual C++ и MFC. Курс MCSD для профессионалов. - СПб: Издательство «Питер», 2000.

.       Шилдт Г. Самоучитель С++. - BHV - Санкт-Петербург, 1998.

.       Березин Б.И., Березин С.Б. Начальный курс С и С++. - М.: Диалог-МИФИ,1998.

.       Подбельский В.В. Программирование на языке Си++. - М.: Финансы и статистика, 1999.

.       Паппас К., Мюррей У. Полное руководство по Visual C++ 5. - Мн.:ООО “Поппури”, 1999.

.       Марк Луис. Visual C++ 6. - М.: Лаборатория базовых знаний, 1999.

.       Холзнер С. Visual C++ 6: учебный курс - СПб: Питер, 2001. - 576с.

.       Гилберт Стивен, Маккарти Билл. Программирование на Visual C++ 6. Этюды профессионалов - К.: Издательство “ДиаСофт”, 1999.

.Баженова И.Ю. Visual C++ 6. - М.: Диалог-МИФИ, 1999.

Приложение А


Диаграмма классов

Приложение Б


Листинг программы

////////CHomeHelpView

//Выполняется однократно при инициализации программы

void CHomeHelpView::OnInitialUpdate()

{       

         m_pSet = &GetDocument()->m_HomeHelpSet;

         //Заполнение строк комбинированного поля

         CString str;

         for(int x=1930; x<2011; x++){

                   str.Format("%d", x);

                   m_year.AddString(str);}

         //Установка названий столбцов

         m_grid.put_Rows(1);

         //Позиционирование в таблице

         m_grid.put_Row(0);

         m_grid.put_Col(0);

         m_grid.put_Text("Квартира");

         m_grid.put_Col(1);

         m_grid.put_Text("Фамилия");

         m_grid.put_Col(2);

         m_grid.put_Text("Инициалы");

         m_grid.put_Col(3);

         m_grid.put_Text("Год рождения");

         //Установка ширины столбцов

         m_grid.put_ColWidth(0, 850);

         m_grid.put_ColWidth(1, 1200);

         m_grid.put_ColWidth(2, 900);

         m_grid.put_ColWidth(3, 1200);

}

//Щелчок по кнопке поиск

void CHomeHelpView::OnBnClickedButton1()

{        CString str1, str2, str3;

         //Получение содержимого полей поиска

         m_family.GetWindowTextA(str1); 

         m_initials.GetWindowTextA(str2);

         m_year.GetWindowTextA(str3);

         //Формирование условий поиска

         switch(m_accur){

                   case 0: {m_pSet->m_strFilter="[фамилия] Like '%"+str1+"%'";break;}

                   case 1:        {m_pSet->m_strFilter="[фамилия] Like '%"+str1+"%' AND "+"[инициалы] Like '%"+str2+"%'"; break;}

                   case 2:        {m_pSet->m_strFilter="[фамилия] Like '%"+str1+"%' AND "+"[инициалы] Like '%"+str2+"%' AND "+"[год рождения] Like '%"+str3+"%'";}

                   }

         //Обновление выборки данных по условиям поиска

         m_pSet->Requery();

         //Если не найдено не одной записи производится вызов диалогового окна

         //с последующим выходом из функции

         if(m_pSet->GetRecordCount()==0){

                   dlg1 dlg1;

                   dlg1.DoModal();

                   //Добавление новой записи

                  if ((dlg1.m_result==1)&&(dlg1.dlg2.m_result==true)){

                            //обнуление фильтра

                            m_pSet->m_strFilter="";

                            m_pSet->Requery();

                            //позиционирование в объекте набора записей

                            m_pSet->Move(dlg1.dlg2.m_recnumber-1);

                            // редактирование записи

                            m_pSet->Edit();

                            sscanf(dlg1.dlg2.n_kvartnum, "%d", &m_pSet->column2);

                            m_pSet->column3=dlg1.dlg2.n_family;

                            m_pSet->column4=dlg1.dlg2.n_initials;

                            sscanf(dlg1.dlg2.n_year, "%d", &m_pSet->column5);

                            //обновление базы данных и выборки

                            if(m_pSet->CanUpdate()) m_pSet->Update();

                            m_pSet->Close();

                            m_pSet->Open();

                   }

                   return;}

         //Вычисление числа записей

         int n_Record=1;

         for(m_pSet->MoveFirst(); !m_pSet->IsEOF(); m_pSet->MoveNext())

                   n_Record++;

         //уточнение условий поиска если найдено несколько записей

         if((n_Record>1)&&(m_accur<2)) m_accur++;

         switch(m_accur){

                   case 1: {

                            m_initials.ShowWindow(SW_SHOW);

                            GetDlgItem(IDC_STATIC2)->ShowWindow(SW_SHOW);

                            break;}

                   case 2: {

                            //отображение элементов управления

                            m_year.ShowWindow(SW_SHOW);

                            GetDlgItem(IDC_STATIC3)->ShowWindow(SW_SHOW);

                            break;}

         }

         //Вызов OnDraw

         Invalidate(1);

         //Отображение объекта CMsflexgrid1

         m_grid.ShowWindow(SW_SHOW);

}CHomeHelpView::OnDraw(CDC *pDC){

         int n_Rows=1;

         //Вычисление числа записей

         for(m_pSet->MoveFirst(); !m_pSet->IsEOF(); m_pSet->MoveNext())

                   n_Rows++;

         //переход к первой записи

         m_pSet->MoveFirst();

         //Установка числа строк

         m_grid.put_Rows(n_Rows);

         //Заполнение таблицы данными

         char str[100];

         for(int n_Row=1; n_Row<n_Rows; n_Row++){

                   m_grid.put_Row(n_Row);

                   //Заполнение поля «номер квартиры»

m_grid.put_Col(0);

                   sprintf(str,"%d",m_pSet->column2);

                   m_grid.put_Text(str);

                   //Заполнение поля «Фамилия»

                   m_grid.put_Col(1);

                   m_grid.put_Text(m_pSet->column3);

                   //Заполнение поля «Инициалы»

                   m_grid.put_Col(2);

                   m_grid.put_Text(m_pSet->column4);

                   //Заполнения поля «Год рождения

                   m_grid.put_Col(3);

                   sprintf(str,"%d",m_pSet->column5);

                   m_grid.put_Text(str);

                   m_pSet->MoveNext();}}

//Функция приводит окно к первоначальному виду

void CHomeHelpView::OnBnClickedButton2()

{       

         //точность поиска

         m_accur=0;

         //скрытие элементов управления

         m_initials.ShowWindow(SW_HIDE);

         m_year.ShowWindow(SW_HIDE);

         GetDlgItem(IDC_STATIC2)->ShowWindow(SW_HIDE);

         GetDlgItem(IDC_STATIC3)->ShowWindow(SW_HIDE);

//сброс текста

         m_family.SetWindowTextA("");    

         m_initials.SetWindowTextA("");

         m_year.SetWindowTextA("");

         m_grid.ShowWindow(SW_HIDE);

}

//////////CMainFrameCMainFrame::PreCreateWindow(CREATESTRUCT& cs)

{

         if( !CFrameWnd::PreCreateWindow(cs) )

                   return FALSE;

         // TODO: Modify the Window class or styles here by modifying

         // the CREATESTRUCT cs

         //Установка размеров окна

         cs.cx=550;

         cs.cy=475;

         return TRUE;

}

///////////Dlg1

//Щелчок по кнопке ОК

{        //Проверка состояния флажка

         UpdateData(true);

         if(m_result==true) dlg2.DoModal();

         OnOK();

}

//////////Dlg2

//Выполняется однократно при вызове окна

BOOL dlg2::OnInitDialog()

{

         CDialog::OnInitDialog();

         CString str;

         //Заполнение элементов CComboBox

         for(int x=1; x<=108; x++){

                   str.Format("%d", x);

                   m_kvartnom.AddString(str);}

         for(int x=1930; x<=2011; x++){

                   str.Format("%d", x);

                   m_year.AddString(str);}

         for(int x=1; x<=270; x++){

                   str.Format("%d", x);

                   m_recnum.AddString(str);}

         //Выбор активного переключателя по умолчанию

         m_radio1.SetCheck(1);

         m_recnum.EnableWindow(false);

         return TRUE; // return TRUE unless you set the focus to a control

         // EXCEPTION: OCX Property Pages should return FALSE

}

//Щелчок по кнопке ОКdlg2::OnBnClickedOk()

{       

         UpdateData(false);

         //Проверка активного переключателя

         if(m_radio1.GetCheck()==1)

                   //Номер изменяемой записи вычисляется случайным образом

                   m_recnumber=rand()%270+1;

         //Функция получает номер записи из элемента ComboBox

         else {

                   CString str;

                   m_recnum.GetWindowTextA(str);

                   //Проверка выбора номера из списка

                   if (str==""){

                            MessageBox("Введите номер записи!", MB_OK);

                            return;}

                   m_recnumber=atoi(str);

         }

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

         m_kvartnom.GetWindowTextA(n_kvartnum);

         m_family.GetWindowTextA(n_family);

         m_initials.GetWindowTextA(n_initials);

         m_year.GetWindowTextA(n_year);

         //Проверка наличия незаполненных полей

         if((n_kvartnum=="")||(n_family=="")||(n_initials=="")||(n_year=="")){

                   MessageBox("Одно или несколько полей не заполнено!!!", MB_OK);

                   return;}

         m_result=true;

         OnOK();

}

//Щелчок по второму переключателюdlg2::OnBnClickedRadio2()

{       

         m_recnum.EnableWindow(true);

        

}

//Щелчок по первому переключателю

void dlg2::OnBnClickedRadio1()

{

         m_recnum.EnableWindow(false);

}

//Щелчок по кнопке отменаdlg2::OnBnClickedCancel()

{

         m_result=false;

         OnCancel();

Похожие работы на - Справочная система по жильцам многоквартирного дома

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!