- •Главление
- •Часть 1 Решение уравнения 42
- •Практическое занятие №1 Тема: «Знакомство со средой разработки и элементами управления. Создание диалогового приложения».
- •1. Настройка среды разработки Microsoft Visual Studio 2008 при первом запуске.
- •2. Создание нового проекта.
- •3. Создание диалогового приложения.
- •3.1. Работа с мастером mfc Application Wizard. Шаг 1.
- •3.2. Работа с мастеромMfcApplicationWizard. Шаг 2. Выбор типа приложения.
- •4. Знакомство со средой разработки.
- •5.Создание диалогового окна при помощи визуальных средств разработки.
- •5.1. Знакомство с обозревателем ресурсов и окном свойств объекта. Настройка рабочего языка проектируемого приложения.
- •5.2. Работа с редактором ресурсов. Знакомство со способами удаления и размещения элементов управления в диалоговом окне.
- •5.3. Работа с окном свойств. Настройка свойств выбранных элементов управления.
- •5.4. Настройка внешнего вида диалогового окна.
- •5.5. Подготовка к работе элементов управления.
- •5.6. Выравнивание управляющих элементов и редактирование порядка переключения между элементами управления
- •6. Проверка работоспособности, компиляция и запуск программы
- •7. Связывание программного кода с элементами управления
- •7.1. Связывание переменных с элементами управления. Работа с мастером добавления новой переменной.
- •7.2. Удаление переменной, связанной с элементом управления
- •7.3. Создание обработчика события. Работа с мастером обработки событий.
- •8. Написание программного кода для выполнения вычислений.
- •9. Тестирование разработанного приложения.
- •10. Исправление ошибки, связанной сUnicode.
- •Задания для самостоятельного выполнения
- •Практическое занятие №2. Тема: «Приложения, использующие команды ветвления». Часть 1 Решение уравнения
- •Часть 2 Пример приложения, использующего операторswitch
- •Задание для самостоятельного выполнения
- •Практическое занятие №3 Тема: «Приложения, использующие команды повторения» Часть 1 Приложение, использующее циклwhile
- •Часть 2 Приложение, использующее циклdo-while
- •Часть 3 Отладка программы. Использование оператора trace
- •Приложение, использующее циклfor
- •Часть 4 Погрешность. Понятие погрешности. Проверка полученного значения на соответствие заданной точности.
- •Пример программы, вычисляющей сумму ряда
- •Задания для самостоятельного выполнения
- •Практическое занятие №4. Тема: «Вспомогательные функции. Работа с элементом управления Список(List Box)» Элемент управления «Список»
- •Добавление вспомогательной функции с помощью мастера.
- •Пример 1 Приложение, которое находит дружественные числа на заданном отрезке
- •Пример 2 Программа, которая находит заданное количество чисел, которые равны сумме квадратов двух натуральных чисел
- •Задания для самостоятельного выполнения
- •Практическое занятие №5.
- •Тема: «Работа со строками».
- •Пример 1
- •Программа, которая считывает строку символов, состоящую только из русских букв, точек и пробелов, и увеличивает длину строки, если она меньше заданной, вставляя пробелы между словами
- •Пример 2 Программа, которая считывает строку, содержащую числа, с проверкой допустимости вводимых символов и оставляет по 2 цифры после точки, удаляя остальные цифры дробной части
- •Пример 3 Программа, которая считывает строку символов и создает новую строку, заменяя заданное слово на другое.
- •Задания для самостоятельного выполнения
- •Практическое занятие №6 Тема: «Диалоговое приложение для работы с файлами»
- •6.1. Приложение, которое считывает файл посимвольно и делает ширину текста равной заданному количеству символов в строке.
- •6.2. Открытие и считывание файла. Нахождение строк, содержащих цифры. Запись нового файла
- •Задания для самостоятельного выполнения
- •Практическое занятие №7 Тема: «Однодокументное приложение для работы с файлами. Полосы прокрутки. Использование модальных диалоговых окон».
- •7.1. Простой пример однодокументного приложения для чтения текстового файла.
- •7.2. Простой пример однодокументного приложения, использующего класс документа для чтения файла и полосы прокрутки для отображения файла в окне.
- •Задания для самостоятельного выполнения
- •Практическое занятие №8 Тема: «Элементы графики. Использование мыши».
- •Задания для самостоятельного выполнения
Практическое занятие №5.
Тема: «Работа со строками».
Пример 1
Программа, которая считывает строку символов, состоящую только из русских букв, точек и пробелов, и увеличивает длину строки, если она меньше заданной, вставляя пробелы между словами
Создайте диалоговое приложение и спроектируйте его как показано на рисунке.
Свяжите переменные с окнами редактирования как показано ниже.
-
IDC_EDIT1
CEdit edit
IDC_EDIT1
CString str
IDC_EDIT2
int len
IDC_EDIT3
CString rez
Добавьте функцию, с помощью которой мы будем проверять вводимые символы. Для этого щелкните правой кнопкой мыши по верхнему окну редактирования и в появившемся контекстном меню выберите “Add Event Handler…” . В появившемся диалоговом окне в списке Message type выберите сообщение EN_UPDATE и щелкните по кнопке <Add and Edit>.
Добавьте код в эту функцию как показано ниже.
void CstrInsertDlg::OnEnUpdateEdit1()
{
CString tmp = str; // запоминаем предыдущее состояние вводимой строки
UpdateData(); // Считываем новое состояние строки
int s, e; // координаты курсора
for (int i = 0; i< str.GetLength(); ++i)
// проверяем символы во вводимой строке
if (!(str[i]>='А' && str[i] <= 'я' ||
str[i] =='.' || str[i] == ' '))
// если символ не является допустимым
{
edit.GetSel(s, e); // определяем положение курсора
str = tmp; // восстанавливаем предидущее состояние строки
UpdateData(false); // отображаем строку в окне
edit.SetSel(--s,--e); // возвращаем курсор на шаг назад
}
}
Добавьте функцию для кнопки OK.
void CstrInsertDlg::OnBnClickedOk()
{
UpdateData();
rez = str; // вначале исходная строка равна результирующей
rez.TrimLeft();
rez.TrimRight();// Обрежем пробелы в начале и в конце строки
int i = 1; // номер символа в строке
int L; // длина строки
bool flag = false; // признак вставки пробела в строку
while ((L=rez.GetLength()) < len)
// пока длина строки меньше заданной
{
if (rez[i-1] == ' ' && rez[i] != ' ')
// если началось новое слово
{
rez.Insert(i, ' '); i++; flag = true;
// вставляем пробел перед словом и увеличиваем соответственно номер символа
}
i++; // переходим к следующему символу
if (i >= (L=rez.GetLength()) ) // если мы дошли до конца строки
{
if (!flag) break;
// если пробелы не были вставлены ( если в строке 1 слово), выходим из цикла
i = 1; // возвращаемся в начало строки
}
}
TRACE("Длина строки = %d \n", rez.GetLength());
UpdateData(false);
}
Пример 2 Программа, которая считывает строку, содержащую числа, с проверкой допустимости вводимых символов и оставляет по 2 цифры после точки, удаляя остальные цифры дробной части
Создайте диалоговое приложение и спроектируйте его как показано на рисунке.
Свяжите переменные с окнами редактирования как показано ниже.
-
IDC_EDIT1
CEdit edit
IDC_EDIT1
CString str
IDC_EDIT2
CString rez
Добавьте функцию, с помощью которой мы будем проверять вводимые символы. Для этого щелкните правой кнопкой мыши по верхнему окну редактирования и в появившемся контекстном меню выберите “Add Event Handler…” . В появившемся диалоговом окне в списке Message type выберите сообщение EN_UPDATE и щелкните по кнопке <Add and Edit>.
Добавьте код в эту функцию как показано ниже.
void CstrDeleteDlg::OnEnUpdateEdit1()
{
CString tmp = str; // запоминаем предыдущее состояние вводимой строки
UpdateData(); // Считываем новое состояние строки
int s, e; // координаты курсора
CString correct = "+- .Ee"; // допустимые символы кроме цифр
for (int i = 0; i< str.GetLength(); ++i)
// проверяем символы во вводимой строке
if (!(str[i]>='0' && str[i] <= '9' ||
correct.Find(str[i])>=0))
// если символ является цифрой или входит в строку допустимых символов
{
edit.GetSel(s, e); // определяем положение курсора
str = tmp; // восстанавливаем предидущее состояние строки
UpdateData(false); // отображаем строку в окне
edit.SetSel(--s,--e); // возвращаем курсор на шаг назад
}
}
Добавьте функцию для кнопки OK.
/* В этом примере мы будем переписывать символы из исходной строки в результирующую по одному, пропуская символы, которые нужно удалить */
void CstrDeleteDlg::OnBnClickedOk()
{
UpdateData();
rez.Empty();
for (int i=0; i<=str.GetLength(); ++i)
// проходим по исходной строке
{
if (str[i] == '.') // если встретилась точка
{
rez += str[i++];// копируем её в результирующую строку
// оставляем по 2 знака после точки, если это цифры:
if (str[i]>='0' && str[i] <='9')
rez += str[i++];
if (isdigit(str[i]))
rez += str[i++];
// все остальные цифры или точки пропускаем:
while (isdigit(str[i]) || str[i] == '.')i++;
}
rez += str[i]; // все остальные символы просто копируем
}
UpdateData(false);
}