- •Ф.Ф. Павлов технология программирования
- •Санкт-Петербург
- •090103 – Организация и технология защиты информации
- •Содержание
- •Раздел 1 Создание программных приложений………………..…..7
- •Тема 1. Технология программирования. Основные понятия........7
- •Тема 3. Объектно-ориентированный подход
- •Тема 4 Объектно-ориентированное проектирование
- •Раздел 3 «Перспективные направления в области создания технологий программирования» содержит 3 темы: технология ActiveX, технологии доступа к базам данных, технологии для работы в Internet.
- •Раздел 1. Создание программных приложений
- •Тема 1. Технология программирования.
- •1.1. Этапы эволюции технологии программирования
- •1.2. Жизненный цикл и этапы разработки программ
- •1.3. Постановка задачи и спецификация программы
- •1.4. Проектирование и реализация программы
- •2.1 Структура программы
- •2.2 Структура функции
- •2.3. Типы данных
- •2.4. Средства управления экраном и клавиатурой
- •2.5 Средства управления файлами
- •Тема 3. Объектно-ориентированный подход
- •3.1. Сущность объектно-ориентированного подхода
- •3.2. Инкапсуляция
- •3.3. Наследование
- •3.4. Полиморфизм
- •Тема 4. Объектно-ориентированное проектирование
- •4.1. Постановка задачи и определение спецификаций
- •4.2. Проектирование структуры программы
- •4.3. Проектирование файлов интерфейсов классов
- •4.4. Проектирование файлов реализации классов
- •Раздел 2. Особенности программирования в Windows
- •5.1. Система окон разработки и система меню
- •5.2. Библиотека классов mfc
- •5.3. Сообщения – реакция на события
- •Тема 6. Создание Windows-приложений
- •6.1. Консольные приложения
- •6.4. Диалоговые приложения
- •Тема 7. Ввод-вывод информации
- •7.1. Управление клавиатурой
- •7.2. Управление курсором
- •7.3. Управление мышью
- •Тема 8. Программирование интерфейса приложений
- •8.1. Система меню
- •8.2. Система диалоговых окон и элементов управления
- •Тема 9. Программирование файловой обработки
- •9.1. Файловая обработка объектов класса mfc
- •9.2. Файловая обработка объектов классов пользователя
- •9.3. Файловая обработка с классом cFile
- •Тема 10. Технология программирования в Widows
- •10.1. Проектирование структуры программы,
- •10.2. Создание классов предметной области
- •10.3. Создание диалоговых окон
- •10.4. Создание диалоговых окон базы справочных
- •10.5. Создание ведомости результатов
- •Раздел III. Прогрессивные технологии
- •Тема 11. Технология ActiveX
- •11.1. Концепция технологии ActiveX
- •11.2. Создание приложения-контейнера
- •11.3. Создание приложения-сервера
- •Тема 12. Поддержка баз данных
- •12.1. Технологии доступа к данным
- •12.2. Создание приложения с базой данных
- •Тема 13. Программирование для Internet
- •13.1. Технологии для работы в Internet
- •13.2. Приложение в стиле браузера
- •13.3. Приложение с протоколом http в WinInet
- •13.4. Приложение с протоколом ftp в WinInet
- •Раздел 1 «Создание программных приложений»:
- •Раздел 2 «Особенности программирования в Windows»:
- •Раздел 3 «Прогрессивные технологии программирования»:
- •Извлечение из рабочей программы дисциплины
- •Утверждаю
- •Рабочая программа
- •Технология программирования
- •Санкт-Петербург
- •4. Содержание разделов и тем дисциплины
- •Раздел 1. Создание программных приложений
- •Тема 1. Технология программирования. Основные
- •Тема 4. Технология объектно-ориентированного
10.4. Создание диалоговых окон базы справочных
данных
Для ведения диалога с файлом Расценки создадим следующие классы диалоговых окон: класс CCenaDobDlg для создания/добавления записей, класс CCenaProsm для просмотра записей, класс CCenaPoisk для поиска, замены и удаления записей.
Расценки-Добавление |
Вид работы Расценка _ OK Cancel |
Рис. 10.8. Диалоговое окно добавления записей файла
Расценки-Просмотр |
Вид работы Расценка _ << < > >> Cancel Запись 0 из 0 |
Рис. 10.9. Диалоговое окно просмотра записей файла
Расценки-Поиск |
Вид работы Расценка _ Вид работы-поиск _ Поиск Следующая Замена/Удаление
|
Рис. 10.10. Диалоговое окно поиска, замены, удаления
записей файла Расценки
Выполнить действия аналогично созданию диалога с файлом оперативных данных Акты.
10.5. Создание ведомости результатов
Для ведения диалога получения ведомости результатов создадим класс CVedomDlg.
1). Создание ресурса диалогового окна с идентификатором IDD_VEDOMDLG.
Создать следующую форму диалогового окна ведомости результатов (рис. 10.11).
Ведомость |
Таб. номер Разряд _ Вид работы Объем Стоимость … … … … … … Итого: Таб. номер-поиск Создать Отмена |
Рис. 10.11. Диалоговое окно ведомости результатов.
- Создать шаблон диалогового окна. Для этого выполнить команду Project-> Add Resource и в появившемся окне Add Resource дважды щелкнуть на элементе Dialog в списке Resource Type. Появляется шаблон диалогового окна с идентификатором IDD_DIALOG1 и заголовком Dialog, а также панели инструментов Dialog Editor и Toolbox. В окне имеются две кнопки OK и Cancel. Отмасштабировать окно.
- В окне свойств окна Properties изменить значение свойства ID с IDD_DIALOG1 на IDD_VEDOMDLG, а также – значение свойства Caption с Dialog на Ведомость стоимости работ.
- Установить язык Русский. Для этого в окне Resource View щелкнуть на идентификаторе IDD_VEDOMDLG. В появившемся окне свойств Properties щелкнуть на свойстве Language и в списке выбрать язык Русский.
- Добавить в диалоговое окно элементы управления: семь надписей (три – названия текстовых полей и четыре – названия статических элементов управления) инструментом Static Text, три текстовых поля (Edit Control), две кнопки (Button) и четыре статических элемента управления для вывода текстовых строк с результатами расчетов (Static Text). Отрегулировать размеры полей статических элементов управления с помощью маркеров. Для добавления элемента управления щелкнуть сначала на инструменте панели инструментов Toolbox, а затем - в выбранной области диалогового окна. Для изменения свойств элементов щелкнуть на элементе и в окне свойств Properties ввести значения: для надписей только названия в свойство Caption – Таб. Номер, Разряд, Вид работы, Объем, Стоимость, Итого:, Таб. Номер-поиск; для текстовых полей в свойство ID – IDC_TABN, IDC_RAZRJAD, IDC_TABN_POISK; для кнопки Создать в свойство ID – IDC_VED_SOZD и в свойство Caption - Создать; для кнопки Отмена в свойство ID – IDOK и в свойство Caption – Отмена; для статических элементов управления только в свойство ID соответственно – IDC_VIDRAB, IDC_OBJEM, IDC_STOIM, IDC_RESULT.
2) Создание класса диалогового окна.
- Открыть шаблон диалогового окна при отсутствии его. Для этого щелкнуть на вкладке Resource View или выполнить команду View->Resource View и в появившемся окне Resource View открыть папки Pr, Pr.rc, затем – Dialog и дважды щелкнуть на идентификаторе IDD_VEDOMDLG.
- Щелкнуть правой кнопкой мыши на пустом месте диалогового окна и выполнить команду контекстного меню Add Class. Откроется окно мастера MFC Class Wizard.
- Ввести в поле Class name имя нового класса CVedomDlg, в списке Base class выбрать имя CDialog, проверить наличие в свойстве Dialog ID идентификатора IDD_VEDOMDLG, и затем щелкнуть на кнопке Finish.
3) Связывание элементов управления диалогового окна с
функциями-обработчиками сообщений
Связать кнопку Создать.
- Открыть окно Class View и щелкнуть на имени класса CVedomDlg. Появится окно свойств Properties.
- Щелкнуть на кнопке Events и в появившемся списке идентификаторов раскрыть идентификатор IDC_VED_SOZD (щелкнуть на символе +). Появляется список сообщений
- Выбрать элемент BN_CLICKED, а в комбинированном списке справа щелкнуть на команде <Add> OnBnClickedVedSozd(). Прототип новой функции-обработчика будет добавлен в файл VedSozd.h, а ее текст – в файл VedSozd.cpp.
4) Связывание переменных класса с элементами окна
Связать с текстовым полем Таб. номер.
- Запустить мастер создания переменных класса Add Member Variable Wizard. Для этого открыть окно Class View и выделить имя класса CVedomDlg. Затем выполнить команду Project->Add Variable.
- В появившемся окне Add Member Variable Wizard-Pr выполнить следующее: установить флажок Control variable; в списке Control ID выбрать идентификатор текстового поля IDC_TABN; в списке Category выбрать значение value; в списке Variable type появится CString; ввести в поле Variable name строку m_strTabn; в списке Access проверить наличие элемента public; и наконец, щелкнуть на кнопке Finish. Появляется содержимое файла VedomDlg.cpp с функциями класса CVedomDlg.
- Аналогично связать с текстовыми полями Разряд (IDC_ RAZRJAD) и Таб. номер-поиск (IDC_TABN_POISK) переменные класса m_strRazrjad и m_strTabnPoisk.
- Аналогично связать статический элемент управления Итого: с IDC_RESULT и получить переменную m_strResult; проследить, чтобы в списке Categorie был Value и в Variable type – CString.
- Аналогично связать статический элемент управления (заголовок Вид работы) с IDC_VIDRAB и получить переменную m_strVidrab; проследить, чтобы в списке Categorie был Value и в Variable type – CString. Получить также для этого статического элемента переменную m_ctrlVidrab и проследить, чтобы в списке Categorie был Control и в Variable type – CStatic.
-Аналогично связать статический элемент управления (заголовок Объем) с IDC_OBJEM и получить переменную m_strObjem; проследить, чтобы в списке Categorie был Value и в Variable type – CString. Получить также для этого статического элемента переменную m_ctrlObjem и проследить, чтобы в списке Categorie был Control и в Variable type – CStatic.
-Аналогично связать статический элемент управления (заголовок Стоимость) с IDC_STOIM и получить переменную m_strStoim; проследить, чтобы в списке Categorie был Value и в Variable type – CString. Получить также для этого статического элемента переменную m_ctrlStoim и проследить, чтобы в списке Categorie был Control и в Variable type – CStatic.
5) Добавление функции-обработчика OnInitDialog().
Необходимо создать функцию CVedomDlg::OnIninDialog(), которая вызывается непосредственно перед отображением диалогового окна.
- Открыть окно Class View и щелкнуть на имени класса CVedomDlg. Появится окно свойств Properties.
- Щелкнуть на кнопке Overrides (с изображением зеленого ромба) и в списке функций выбрать элемент OnInitDialog(), а в комбинированном списке справа щелкнуть на команде <Add> OnInitDialog(). Прототип новой функции-обработчика будет добавлен в файл VedomDlg.h, а ее текст – в файл VedomDlg.cpp.
- Заменить текст функции:
BOOL CVedomDlg::OnInitDialog()
{
CDialog::OnInitDialog(); //активизир. элементов управления окна
GetDlgItem(IDC_TABN)->EnableWindow(FALSE); //блокир
GetDlgItem(IDC_RAZRJAD)->EnableWindow(FALSE); //полей
return TRUE;
}
6) Добавление переменных и текста функций–обработчиков в файлы VedomDlg.h и VedomDlg.cpp.
- В файл VedomDlg.h:
#include “Akt.h”
#include “Cena.h”
class CVedomDlg : public CDialog
{
public:
CAkt base;
CCena cena;
CString AddSpaces(CString st,int len); //доб. пробелов в поле=10
int StringToInt(CString st); //преобразование String в int
}
- В файл VedomDlg.cpp:
void CVedomDlg::OnBnClickedVedSozd()
{
UpdateData(TRUE); //значение текст. поля – в перем. m_str…
if (m_strTabnPoisk=="")
{
MessageBox("Введите Таб. номер","Ошибка ввода",
MB_ICONEXCLAMATION);
return;
}
m_strVidrab="";
m_strResult="";
m_strObjem="";
m_strStoim="";
UpdateData(FALSE); //значения переменных m_str… в текст. поля
GetDlgItem(IDC_TABN)->EnableWindow(TRUE); //доступность
GetDlgItem(IDC_RAZRJAD)->EnableWindow(TRUE); //полей
int nomer;
base.Init();
cena.Init();
int cur_result=0;
int total_result=0;
int pr=0; //признак 0 - запись не найдена
int nomer1;
for (nomer1=0; (nomer1=base.poisk_ind (m_strTabnPoisk,
nomer1,
nomer))!=-1; nomer1++)
{
base.ChtenieZap(nomer); //чтение найденной записи в Акт
m_strTabn=base.Tabn; //присваив. полей записи перем. m_str…
m_strRazrjad=base.Razrjad;
UpdateData(FALSE); //значения переменных – в текст. поля
int nomer2=0;
if ((nomer2=cena.poisk_ind(base.VidRab,nomer2,nomer))!=-1)
{
cena.ChtenieZap(nomer); //чтение найденной записи в Расценки
pr=1; //признак 1 - запись найдена
cur_result=(StringToInt(base.Objem))*
(StringToInt(cena.Rascenka));
CString rez;
m_ctrlVidrab.GetWindowText(rez);//получ.из элем. упр. текст
m_strVidrab=rez+AddSpaces(base.VidRab,10);
m_ctrlObjem.GetWindowText(rez);
m_strObjem=rez+AddSpaces(base.Objem,10);
m_ctrlStoim.GetWindowText(rez);
CString cur_rez;
cur_rez.Format(“%i”,cur_result);//преобразование из int в текст
m_strStoim=rez+AddSpaces(cur_rez,10);
UpdateData(FALSE); //значения переменных m_str… в текст. поля
total_result+=cur_result;
} //if((nomer2…
else
{
CString st;
st=”Вид работы “+base.VidRab+” не найден в файле”;
MessageBox(st,”Ошибка ввода”,MB_ICONEXCLAMATION);
return;
}
} //for…
if ((nomer1==-1)&& (!pr))
{
Cstring st;
st=»Таб. Номер «+m_strTabnPoisk+» не найден в файле»;
MessageBox(st,”Ошибка ввода”,MB_ICONEXCLAMATION);
return;
}
Cstring st;
st.Format(“%i”,total_result);
m_strResult=”Итого: “+st;
UpdateData(FALSE); значения переменных m_str… в текст. поля
}
int CVedomDlg::StringToInt(CString st)//преобраз. текста в целое
{
int ten=1;
int rez=0;
int Char;
st.TrimLeft();//удаление ведущих пробелов из строки
st.TrimRight();//удаление хвостовых пробелов из строки
for (int i=st.GetLength()-1;i>=0;--i)
{
Char=st.GetAt(i); //считыв. символа в заданной позиции
if (Char==45) //45 - код ‘-‘, 48 - код ‘0’, 49 – код ‘1’ …
return rez*(-1);
Char=Char-48;
rez=rez+(Char*ten);
ten=ten*10;
}
return rez;
}
CString CVedomDlg::AddSpaces(CString st, int len) //доб. пробелов
{ //в размер поля = 10
CString rez;
rez=st;
int string_len=st.GetLength();
for (int i=string_len;i<=len;i++)
rez+=" ";
return rez;
}
7) Добавление в файл MainFrm.cpp текста функции вызова диалогового окна.
...
#include “VedomDlg.h”
void CMainFrame::OnVedsozd()
{
CVedomDlg dlg;
dlg.DoModal();
}
8) Компиляция и запуск приложения.
Протестировать приложение на контрольном примере.
При необходимости отрегулировать размеры полей статических элементов управления для вывода текстовых строк с результатами расчетов.
Контрольные вопросы
Перечислите этапы создания приложений.
Как создавать целые меню, подменю и отдельные команды?
Как создавать и отображать диалоговые окна в программе?
Каким образом добавляются элементы управления в диалоговое окно?
Что нужно сделать для связывания элементов диалогового окна с функциями-обработчиками?
Как создавать переменные для элементов управления окна?
Как пользоваться классом CFile для файловой обработки?