- •Прикладное программирование
- •Часть 1
- •Прикладное программирование
- •Часть 1
- •1. Информация о дисциплине
- •1.1. Предисловие
- •2.1. Рабочая программа (220 часов) Введение
- •Раздел 1. Технология программирования
- •Раздел 2. Ввод данных
- •1.2. Содержание дисциплины и виды учебной работы
- •1.2.2. Перечень видов практических занятий и контроля
- •2. Рабочие учебные материалы
- •Раздел 3. Управляющие окна
- •Раздел 4. Развитые компоненты
- •Раздел 5. Основные понятия субд
- •Раздел 6. Программирование баз данных
- •6.1. Невизуальные компоненты для построения бд
- •Раздел 7. Основные приёмы программирования бд
- •Раздел 8. Развитые приёмы программирования бд
- •Раздел 9. Интерфейс прикладного программирования api
- •Заключение
- •2.2. Тематический план изучения дисциплины
- •Тематический план для студентов заочной формы обучения
- •Структурно-логическая схема дисциплины «Прикладное программирование»
- •2.4. Временной график изучения дисциплины при использовании информационно-коммуникационных технологий
- •2.5. Практический блок
- •2.5.1. Практические занятия
- •2.5.2. Лабораторный практикум
- •2.5.2.1. Лабораторные работы для очной формы обучения
- •2.5.2.2. Лабораторные работы для очно-заочной формы обучения
- •2.5.2.3. Лабораторные работы для заочной формы обучения
- •2.6. Балльно-рейтинговая система оценки знаний
- •3. Информационные ресурсы дисциплины
- •3.1. Библиографический список
- •Опорный конспект Введение
- •Раздел 1. Технология программирования
- •1.1. Основная тенденция технологии программирования
- •Раздел 2. Ввод данных
- •2.1. Организация надежного ввода
- •2.2. Обработка строк
- •2.3. Средства группирования компонентов
- •Раздел 3. Управляющие окна
- •3.1. Управление выбором
- •3.2. Диалоговые окна
- •3.3. Многострочные окна
- •Раздел 4. Развитые компонеты
- •4.1. Работа с данными типа DateTime
- •4.2. Работа с двумерными массивами
- •4.3. Компоненты навигаторов.
- •4.4. Использование указателей
- •Раздел 5. Основные понятия субд
- •5.1. Общие сведения о базах данных (бд)
- •5.2. Концепция управления бд из среды Builder
- •5.3. Файлы и индексы
- •Раздел 6. Программирование баз данных
- •6.1. Невизуальные компоненты для построения бд
- •6.2. Навигация по нд
- •6.3. Доступ к полям нд
- •6.4. Визуальные компоненты для работы с бд
- •Раздел 7. Основные приёмы программирования бд
- •7.1. Сортировка, фильтрация и редактирование нд
- •7.2.Организация надежного ввода данных в бд
- •Раздел 8. Развитые приёмы программирования бд
- •8.1. Построение связей между таблицами бд
- •8.2. Работа с изображениями.
- •Раздел 9. Интерфейс прикладного программирования api
- •9.1 Встраивание звука
- •9.2. Вызов других приложений
- •Заключение
- •3.3. Глоссарий (краткий словарь основных терминов и положений)
- •3.4. Технические средства обеспечения дисциплины
- •3.5. Методические указания к выполнению лабораторных работ
- •3.5.1. Лабораторные работы, семестр 1
- •Работа 1.1. Проектирование программного проекта.
- •Вспомогательный теоретический материал Основная тенденция технологии программирования
- •Компонент ActionList
- •Связь пунктов меню Main Menu1 с действиями ActionList
- •Связь действий ActionList с изображениями ImageList
- •Кнопки быстрого доступа
- •Всплывающие подсказки
- •Использование стандартных действий
- •10 Правил технологии программирования
- •Работа 1.2. Надёжный ввод
- •Работа 1.3. Контейнеры
- •Работа 1.4. Компоненты выбора
- •Работа 1.5. Диалоги
- •Работа 1.6. Многострочные окна
- •Работа 1.7. Определение даты и временного интервала.
- •Работа 1.8. Обработка двумерных массивов.
- •Работа 1.9. Работа с каталогами и файлами.
- •3.5.2. Лабораторные работы, семестр 2
- •Работа 2.1. Начальное создание базы данных
- •Вспомогательный теоретический материал Общие сведения о базах данных
- •Концепция управления бд из среды Builder
- •Средство dbe (Database Borland Engine – машина Borland управления базой данных)
- •Альяс базы данных
- •Поля файла бд
- •Набор данных таблицы бд
- •Управление наборами данных в среде Builder
- •Модуль данных DataModule
- •Файлы и индексы
- •Содержание работы
- •Работа 2.2. Сортировка набора данных, русификация заголовков
- •Работа 2.3. Организация надежного ввода
- •//Проверка полей Panel2 - только для режима замены
- •Работа 2.4. Ввод данных посредством вспомогательных словарей.
- •Работа 2.5. Связи таблиц типа 1:1 и 1:n
- •Работа 2.6. Поля синхронного просмотра типа Lookup
- •Работа 2.7. Поиск и фильтрация
- •Работа 2.8. Особенности сохранения изображений в бд
- •Работа 2.9. Встраивание звука
- •Работа 2.10. Вызов других приложений
- •Методические указания к практическим занятиям
- •Заключение
- •4. Блок контроля освоения дисциплины
- •Часть 1, первый семестр – контрольная работа, зачёт.
- •Часть 1, второй семестр – курсовой проект, экзамен.
- •4.1. Задание на контрольную работу и методические указания к её выполнению
- •Вниманию студентов, обучающихся с элементами дот.
- •Задание на курсовой проект и методические указания к его выполнению
- •Этапы работы над курсовым проектом
- •4.3. Текущий контроль Тренировочные тесты
- •4.4. Итоговый контроль Вопросы к зачёту, семестр 1
- •Вопросы к экзамену, семестр2
2.2. Обработка строк
Вы уже знакомились в общих чертах с этим аспектом программирования в рамках дисциплины «Программирование и основы алгоритмизации» [2, с. 47, 51, 90];[4, с. 47, 52, 90]. Ввиду важности роли, которую занимают строки при практическом программировании, рассмотрим функции обработки строк на более глубоком уровне.
Для обработки текстов в C++Bilder используются следующие два основных типа: строка AnsiString и строка string [2,c. 44];[4,c. 44].
Общим для этих типов является то, что каждая строка трактуется как одномерный массив символов, количество элементов которого может меняться в работающей программе.
Строки типа string, называемые также «строками с нулевым окончанием», были задуманы как средство передачи параметров встроенным в Windows процедурам, и используются в основном в системном программировании. Применение этих строк для прикладных программ возможно, но затруднено, поэтому разработчики C++Builder включили в состав системы механизм обработки строк, заимствованный из Паскаля. Эти строки получили тип AnsiString и представляют собою удобный и хорошо разработанный аппарат для прикладных задач. В дальнейшем мы будем использовать строки исключительно типа AnsiString, кроме особых случаев обращения к процедурам API Windows (раздел 5.1).
Строка как тип данных обладает двойственной природой: её можно рассматривать как:
единую переменную и тогда применять к ней комплексные операции обработки;
массив односимвольных переменных, и тогда рассматривать каждый символ по отдельности в адекватных операторах цикла.
В данном разделе мы рассмотрим операции и функции, применимые к строке в целом как к единой переменной.
Операции над строками
Над строками определены такие операции:
конкатенация или соединение (сложение);
операции отношения.
Операция соединения строк обозначается простым знаком «плюс», например,
AnsiString s1,s2,s3;
s1=”ABCD”; s2=”123”;
s3=s1+s2;
Строка s3 приобретает значение ”ABCD123”, то есть вторая строка «приставляется» к первой.
Операции отношения строк обозначаются также общепринятыми значками, их результатом являются логические значения true или false. Операции отношения = =, !=, >, <, >=, <= выполняются над двумя строками посимвольно, слева направо, причем сравниваются внутренние коды символов. Если одна строка короче другой по длине, недостающие символы короткой строки заменяются значением #0.
Таким образом, разрешаются такие записи:
Запись |
Словесный эквивалент |
Выполнение |
s1==s2 |
строки равны (в этом случае знак равенства сдваивается) |
если коды всех символов строки s1 попарно равны кодам s2, то результат true
|
s1!=s2 |
строки не равны |
если встречается первая неравная пара кодов, то строки считаются неравными и результат true
|
s1>s2 |
строка s1 больше строки s2 |
сравниваются коды символов последовательно слева направо. Если для всех пар символов сохраняется справедливость условия s1>s2, результат будет true. При первом же невыполнении результат становится false и сравнение прекращается |
s1<s2 |
строка s1 меньше строки s2 |
аналогично пункту s1>s2 |
s1>=s2 |
строка s1 больше или равна строке s2 |
аналогично пункту s1>s2 |
s1<=s2 |
строка s1 меньше или равна строке s2 |
аналогично пункту s1>s2 |
Все мыслимые операции по обработке строк можно свести к последовательной обработке элементов массива, составляющего строку, однако такая работа малопроизводительна. Поэтому в состав Builder включены разветвленные и мощные библиотечные процедуры и функции, предусматривающие реализацию часто встречающихся задач. Наиболее точные сведения о библиотечных функциях обработки строк содержатся во встроенном в Builder разделе String functions. Наиболее часто используемые средства приведены в таблице функций в данном разделе. Детальные сведения о строковых функциях можно получить в [1,3,4,5].
Встроенные процедуры и функции для работы со строками
Function AnsiLowerCase(const S: String): String; |
Возвращает исходную строку S, в которой все заглавные буквы заменены на строчные в соответствии с национальной кодировкой Windows (т. е. с учетом кириллицы) |
Function AnsiUpperCase(const S: String): String; |
Возвращает исходную строку s, в которой все строчные буквы заменены на заглавные в соответствии с национальной кодировкой Windows |
Function Concat(Sl [, S2, ..., SN]: String): String; |
Возвращает строку, представляющую собой сцепление строк –параметров S1, S2, ... , SN |
Function Copy( St: String; Index, Count: Integer): String; |
Копирует из строки St count символов, начиная с символа с номером Index |
Procedure Delete( St: String; Index, Count: Integers); |
Удаляет count символов из строки St, начиная с символа с номером index |
Procedure Insert( SubSt: String; St, Index: Integer); |
Вставляет подстроку SubSt в строку St, начиная с символа с номером Index |
Function Length(St: String): Integer; |
Возвращает текущую длину строки St |
Function LowerCase(const S:String): String; |
Возвращает исходную строку S, в которой все латинские заглавные буквы заменены на строчные (возможны неточности при работе с кириллицей) |
Function Pos(SubSt, St:String): Integer;
|
Отыскивает в строке St первое вхождение подстроки SubSt и возвращает номер позиции, с которой она начинается. Если подстрока не найдена, возвращается ноль |
Function Uppercase(const S:String): String; |
Возвращает исходную строку S, в которой все строчные латинские буквы заменены на заглавные (возможны неточности при работе с кириллицей) |
Подпрограммы преобразования строк в другие типы |
|
Function StrToDate(St: String): TDateTime; |
Преобразует символы строки St в дату. Строка должна содержать два или три числа, разделенных правильным для Windows разделителем даты (в русифицированной версии таким разделителем является “.”). Первое число – правильный день, второе – правильный месяц. Если указано третье число, оно должно задавать год в формате XX или ХХХХ. Если символы года отсутствуют, дата дополняется текущим годом. Например: DateToStr(StrToDate('28.02')) даст строку '28.02.2011' (см. ниже пояснения) |
Function StrToDateTime(St: String): TDateTime;
|
Преобразует символы строки St в дату и время. Строка должна содержать правильную дату (см. StrToDate) и правильное время (см. StrToTime), разделенные пробелом, например: StrToDateTime('28.02 21:23') |
Function StrToFloat(St:String): Extended;
|
Преобразует символы строки St в вещественное число. Строка не должна содержать ведущих или ведомых пробелов |
Function StrToInt(St:String): Integer; |
Преобразует символы строки St в целое число. Строка не должна содержать ведущих или ведомых пробелов |
Function StrToTime(St:String): TDateTime; |
Преобразует символы строки St во время. Строка должна содержать два или три числа, разделенных правильным для Windows разделителем времени (для русифицированной версии таким разделителем является “:”). Числа задают часы, минуты и, возможно, секунды. За последним числом через пробел могут следовать символы “am” или “рm”, указывающие на 12-часовой формат времени |
Procedure Val(St: String; var X; Code: Integer);
|
Преобразует строку символов St во внутреннее представление целой или вещественной переменной х, которое определяется типом этой переменной. Параметр Code содержит ноль, если преобразование прошло успешно, и тогда в х помещается результат преобразования, в противном случае он содержит номер позиции в строке St, где обнаружен ошибочный символ, и в этом случае содержимое х не меняется. В строке St могут быть ведущие и/или ведомые пробелы. Если St содержит символьное представление вещественного числа, разделителем целой и дробной частей должна быть точка независимо от того, каким символом этот разделитель указан в Windows |
Подпрограммы обратного преобразования |
|
Function DateTimeToStr(Value: TDateTime): String; Procedure DateTime –ToString(var St: String; Format: String; Value: TDateTime); |
Преобразует дату и время из параметра в строку символов. Преобразует дату и время из параметра value в строку St в соответствии со спецификаторами параметра Format (см. пояснения ниже) |
Function DateToStr(Value: TDateTime): String; |
Преобразует дату из параметра value в строку символов |
Function FloatToStr(Value: Extended): String; |
Преобразует вещественное значение value в строку символов. |
Function FloatToStrF( Value: Extended; Format: TFloatFormat; Precision, Digits: Integer) : String; |
Преобразует вещественное значение Value в строку символов с учетом формата Format и параметров precision и Digits (см. пояснения ниже) |
Function FormatDateTime (Format: String; Value:.TDateTime): String; |
Преобразует дату и время из параметра value в строку символов в соответствии со спецификаторами параметра Format (см. пояснения ниже) |
function IntToHex(Value: Integer; Digits: Integer):Strings; |
Преобразует целое число Value в строку символьного представления шестнадцатеричного формата: Digits – минимальное количество символов в строке |
Function IntToStr(Value: Integer) : String; |
Преобразует целое значение Value в строку символов |
Procedure Str(X [:Width[:Decimals]]; var St:String) ;
|
Преобразует число х любого вещественного или целого типов в строку символов St; параметры width и Decimals, если они присутствуют, задают формат преобразования: width определяет общую ширину поля, выделенного под соответствующее символьное представление вещественного или целого числа х, a Decimals – количество символов в дробной части (этот параметр имеет смысл только в том случае, когда х – вещественное число) |
Function TimeToStr(Value: TDateTime): String; |
Преобразует время из параметра Value в строку символов |
Правила использования параметров функции FloatToStrF
Обращение к функции
FloatToStrF(Value:Extended; Format: TFloatPormat; Precision, Digits: Integer);
Функция возвращает строковое значение, представляющее собою запись плавающего числа в желательном формате
Значение Format |
Описание |
ffExponent |
Научная форма представления с множителем ехх (“умножить на 10 в степени XX”). precision задает общее количество десятичных цифр мантиссы, Digits – количество цифр в десятичном порядке хх. Число округляется с учетом первой отбрасываемой цифры:3,1416Е+00 |
ffFixed |
Формат с фиксированным положением разделителя целой и дробной частей, precision задает общее количество десятичных цифр в представлении числа. Digits – количество цифр в дробной части. Число округляется с учетом первой отбрасываемой цифры:3,14 |
ffGeneral |
Универсальный формат, использующий наиболее удобную для чтения форму представления вещественного числа. Соответствует формату ffFixed, если количество цифр в целой части меньше или равно precision, а само число – больше или равно 0,00001, в противном случае соответствует формату ffExponent: 3,1416 |
ffNumber |
Отличается от ffFixed использованием символа – разделителя тысяч при выводе больших чисел (для русифицированной версии Windows таким разделителем является пробел) |
ffCurrency |
Денежный формат. Соответствует ffNumber, но в конце строки ставится символ денежной единицы (для русифицированной версии Windows – символы “р.”). Для value =3.1416 получим 3 141,60. |
