Алгоритм и его свойства 2 страница
– «ОК» – для подтверждения введенных параметров (диска, имени файла, фамилии пользователя) для сохранения;
– «Выход» – для закрытия окна приложения и выхода из программы.
Определившись со всеми объектами приложения, переходим к их нанесению на форму, т.е. к непосредственному формированию интерфейса программы.
Рис. 6.8. Вид окна Visual Basic после запуска нового проекта
Пр и запуске Visual Basic и выборе нового проекта «Стандартный exe» а в то м а тич е с к и открывается проект с именем Проект1, имеющий пус -ту ю форму, которой по умолчанию присваивается имя Form1 (рис. 6.8). По л е этой формы – это и ес ть место для формирования интерфейса буду-щего приложения. Из м ени ть размеры окон проекта ил и формы можно, «потянув» окно мышью за стороны или угол окна.
Для нанесения объектов на форму необходимо мышью выбрать на панел и инструментов нужный объект и «растянуть» его в нужном месте на поле формы до необходимых размеров. Напр имер, необходимо нанести надп ис ь «Исходные данные». Для этого выбираем инструмент lab e l ( метка, на панели инструментов он обозначен иконкой ) и на н о с и м этот объект
в левом верхнем углу формы (рис. 6.9).
Ри с. 6.9. Нане се ние на форму первого объекта L a b e l 1
Для внесения надписи внутрь объекта и задания его основных свойств (точных размеров, положения на форме, типа и цвета шрифта над-писи, цвета фона, выравнивания над писи в форме, видимости и др.) необ-ходимо использовать окно свойств, расположенное по умолчанию в правой стороне экрана. Так, для внесения надписи «Исходные данные» необходи-мо найти свойство Caption (заголовок) и справа от него в колонке свойств ввести соответствующую надпись, которая одновременно появится и на поле метки Label1. Аналогично можно изменить и другие свойства. Ос-новные свойства объектов и их краткая характеристика приведены в табл . 6.4. Выбором цвета фона, цвета, размера и свойств (полужирный, курсив) шрифта можно выделять однородные блоки или надписи.
Ниже метки Label1 с надписью «Исходные данные» наносим метку Label2 с надпис ью «К р е п о с т ь пород», а рядом с ней – те к с то в о е окно Text1, в которое пользователь будет вводить необходимое значение крепос ти.
Текстовые окна наносятся на форму с помощью иконки .
Таблица 6.4 Некоторые свойства объектов
Свойство | Характеристика |
Align ment | Выравнивание надписи внутри объекта по левому, правому кр аю или по центр у |
AutoSize | При значении этого свойства True (истина) размеры объекта автомати-чески сжимаю тся до размеров внесенной в него надписи, пр и значении False (ложь) размеры объекта остаются такими, какими их задал про-гр аммист |
BackColor | Задание цвета фона объекта |
BorderSty le | Задание стиля рамки объекта |
Caption | Ввод надписи или заголовка |
DataFormat | Выбор формата данных (общий, числовой, формат даты, времени и др.) |
Font | Выбор типа и размера шрифта надписи |
ForeColor | Задание цвета надписи |
Height | Задание высоты объекта |
Left | Задание положения объекта на форме относительно ее левой рамки |
MousePointer | Выбор вида курсора при наведении мыши на данный объект |
Picture | Вставка рисунка |
Top | Задание положения объекта на форме относительно ее верхней рамки |
Vis ibl e | Задание видимости (True) или невидимости (False) объекта на форме |
Width | Задание ширины объекта |
Далее на форму наносим метку Label3 с надписью «Площадь попе-речного сечения выработки», рядом помещаем текстовое окно Text2 для ввода пользователем необходимого значения площади, а затем метку Label4 с указанием единицы измерения «м кв.».
Как было рассмотрено выше, диаметр патрона задаем с помощью кнопок-переключателей (Option Button). Для их логического объединения сначала наносим на форму рамку (Frame), которая на панели инструментов обозначается иконкой . В свойстве рамки C a pt io n вв одим те к с т «диаметр патрона». Размеры рамки определяем, исходя из размещения внутри нее 4 кнопок-переключателей, каждая из которых определяет один из возможных диаметров. Вн у т р ь рамки с помощью инструмента последовательно вно-сим 4 элемента Option Button и в свойстве Caption каждого из них задаем не-обходимый те к с т: «28 мм » для первого объекта, «32 мм» – для второго и т.д. По с л е д н им из исходных да нных, выносимым на форму (см. таб л . 6.2), является ти п ВВ, который удобнее ввести, используя инструмент «вы-падающий список» (ComboBox), обозначаемый на панели инструментов иконкой . Для удобства пользователя предварительно нанесем на
форму рамку (Frame) с заголовком (Caption) «Тип ВВ», а внутри нее раз-местим «выпадающий список». В свойство Text этого объекта можно вне-сти наим енование первого ВВ, которое будет приниматься по умолчанию, например, «аммонит скальный №1». Формирование полного списка для выбора из него нужного ВВ производится на стадии написания программ-ного кода.
После нанесения на форму всех исходных данных, она пр имет вид, показанный на рис. 6.10.
Рис. 6.10. Форма с нанесенными объектами для ввода исходных данных
Аналогично вышеописанному порядку наносим все необходимые объекты для вывода р е з у л ь та то в расчета. Это метки и те к с то в ы е окна, для вывода удельного расхода ВВ и количества шпуров на забой.
Остается нанес ти на форму последний блок объектов, с помощью которых пользователь будет управлять проектом. Это командные кнопки (Command Button), которые наносятся с помощью инструмента .
Для нанесения на командные кнопки надписей используется их свойство Caption. Вв о д и м последовательно на кнопки надписи «Резуль-та т», «Сохранить», «Выход». Кроме этих кнопок, на форму наносим ряд дополнительных объектов, определяющих параметры сохранения резуль-та то в в файл. Это метки с надписями «Диск», «Им я файла», «Ф.И.О. сту-дента», а так ж е выпадающий список для выбора диска, на который будет производиться сохранение, текстовые окна для ввода имени файла и фами-лии студентов.
Для то г о , чтобы разнообразить интерфейс программы, на форму можно наносить различные изображения или рисунки. Для наглядности процесса бурения шпуров в забое нанесем на форму рисунок с изобра-жением бурильной установки, при этом используем объект PictureBox, наносимый на форму с помощью инструмента .
Готовый интерфейс приложения показан на рис. 6.11.
Рис. 6.11. Интерфейс приложения
2-й этап разработка алгоритма. До начала написания программы программист должен четко определить последовательность всех выполняемых действий по вводу, преобразованию исходных данных, выводу и сохранению результатов, те. составить алгоритм (см. п. 6.1).
При составлении алгоритма очень важно следить за тем, чтобы все параметры, входящие в расчетную формулу были введены или определены ранее. Если значение некоторой переменной не задано, по умолчанию ей присваивается 0, что приводит к ошибочным результатам или сбою в выполнении программы.
Алгоритм рассматриваемого процесса заключается в следующем:
- считывание значений крепости пород F и площади поперечного сечения S, введенных пользователем в текстовые окна;
- определение диаметра патрона d в зависимости от выбранной пользователем кнопки-переключателя;
- определение коэффициента работоспособности е и плотности патронирования ρ в зависимости от выбранного пользователем из выпадающего списка типа ВВ;
– прис воение значений пос тоя нным коэффициентам: структуры по-роды и заполнения шпура ;
– проверка корректности исходных данных, введенных пользовате-лем. Этот шаг необходим для исключения заведомо невер ных значений, которые может ввести пользователь. Например, при задании крепости по-род, меньшей 1 или большей 20, программа должна выдать сообщение об ошибке и обнулить введенные результаты. Аналогично при вводе площади сечения, меньшей 6 или большей 20 м2, программа должна выдать преду-преждение пользователю о то м , ч то данный алгоритм на заданную пло-щадь не рассчитан. Во избежание сбоя программы, необходимо также вы-дать сообщение об ошибке в то м случае, если пользователь не задал ни один из предложенных диаметров патрона;
– определение значения коэффициента использования шпура η в за-висимости от крепости пород f;
– расчет коэффициента зажима;
– расчет нормального удельного расхода ВВ ;
– расчет удельного расхода ВВ ;
– расчет количества шпуров на забой;
– вывод р е з у л ь та то в расчета на экран (в текстовые поля) и при до-полнительном запросе пользователя – в файл;
– выход из программы с запросом подтверждения о выходе.
3-й эт ап – составление таблицы идентификаторов и выбор типов переменных. Данный этап необходим для упорядочивания всех перемен-ных, которые будут использованы в программе и фиксирования имен пе-ременных (идентификаторов). Ис польз уем ые символы для обозначений переменных в математических формулах не всегда допустимы или удобны в программном коде. Например, имя переменной не может содержать гре-ческих букв, которые часто встречаются в формулах, а так ж е верхних и нижних индексов. Одна и та же заглавная и строчная буква воспринимает-ся программой как одна переменная, поэтому так ие переменные нуж но обозначать по-разному. При составлении списка идентификаторов удобно сразу определяться и с типом переменной.
Пр им ер таблицы идентификаторов применительно к рассматривае-мой задаче приведен в та б л . 6.5. Здесь сопоставлены обозначения величин в формулах и принятые для них имена переменных. Вспомогательные пе-ременные необходимы для управления проектом, выдачи сообщений об ошибках или запросов подтверждения выхода. Назначение вспомогатель-ных переменных будет понятно в дальнейшем из программного кода.
Таблица 6.5 Таблица идентификаторов
Определяемый параметр | Обозначение в формуле | Имя пере-мен ной | Тип переменной |
Основные переменные | |||
Крепость пород | f | F | Integer |
Площадь по п ер еч н о г о сечения выработки | S | S | Sin gl e |
Диаметр патрона ВВ | d | D | Integer |
Коэффициент структуры породы | f1 | F1 | Single |
Коэффициент заполнения шпура | У | GAMMA | Single |
Коэффициент использования шпура | ц | KISH | Sin gl e |
Коэффициент работоспособности | е | Е | Sin gl e |
Плотность патронированного ВВ | р | RO | Single |
Коэффициент зажима | V | NU | Single |
Нормальный удельный расход ВВ | q1 | Q1 | Single |
Удельный расход ВВ | q | Q | Single |
Количество шпуров на забой | N | N | Integer |
Тип ВВ | – | T IPVV | St rin g |
Вспомог ательные пер еменны е | |||
Сообщение о недопустимо низкой крепости пород | – | а1 | Integer |
Сообщение о недопустимо высокой крепости пород | – | а2 | Integer |
Сообщение о недопустимой для данно-го алгоритма площади сечения | – | а3 | Integer |
Сообщение об отсутствии выбранного диаметра патрона | – | а4 | Integer |
Запрос подтвер ждения выхода из пр о-гр аммы | – | а5 | Integer |
Имя диска для со хр анения резу льтатов | – | DISK | St rin g |
Имя файла для со хр анения результатов | – | NAMEFILE | String |
Фамилия, инициалы студента | – | FIO | String |
Выбор типа переменной зависит от того, какие значения эта пере-менная будет принимать. Если возможны только целые значения (напри-мер, число шпуров, диаметр патрона), целесообразно задать тип Integer (целочисленный); если возможны дробные значения (площадь сечения, КИШ, плотность патрона, удельный расход ВВ и т.д.), то необходимо задавать тип Single (вещественный); если же переменная будет принимать не числовое, а буквенное значение (тип ВВ, фамилия студента, имя файла), то для нее нужно задать тип String (строковый). Все данные можно объединить одним общим типом - Variant. Подробно обо всех типах переменных в Visual Basic, их описании и преобразовании - см. в [6].
4-й этап - написание программного кода. Для «оживления» объек-тов, нанесенных на форму, т.е. для обеспечения функционирования ко-мандных кнопок и других объектов приложения необходимо в соответствии с разработанным алгоритмом написать программный код.
Це л ью нас тоящего пособия не является подробное рассмотрение всех (широчайших!) возможностей среды программирования Visual Basic, всех ее команд, операторов, процедур и т.д. Поэтому покажет тол ьк о некоторые (наиболее простые и часто используемые) возможности среды и ограни-чимся краткими пояснениями, которые будут необходимы по ходу написа-ния программы для решения этой конкретной задачи.
Итак, наш программный код будет состоять из отдельных подпро-грамм, каждая из которых выполнится при определенном событии (дейст-вии пользователя). В данном примере так их событий будет 5, так им же бу-дет количество подпрограмм.
Первое событие – это загрузка формы, т.е. самое начало работы при-ложения. Еще до то г о , как пользовател ь нач нет вводить данные и нажи-мать на командные кнопки, форма полностью должна быть готова к этому, т.е. должны быть сформированы «выпадающие списки», должны быть ви-димыми нужные объекты и, наоборот, «спрятаны» пока ненуж ные.
Для тог о, чтобы начать писать подпрограмму, выполняемую при загрузке формы, необходимо дважды щелкнуть мышью в любом месте формы, свободном от объектов, при этом откроется окно ввода программного кода, в котором уже будут две готовые строки – первая и пос ледняя :
Private Sub Form_Load()
End Sub
Что э то означает? Private Sub – подпрограмма данного модуля, Form – имя объекта, в данном случае формы, Load – загрузка (событие), End Sub – конец подпрограммы, т.е. все действия, расположенные между этими строками, выполнятся сразу при загрузке (Load) данной формы (Form).
Пр и загрузке формы нам необходимо сформировать 2 «выпадающих списка» – Combo1, содержащий перечень ВВ для выбора, и Combo2, содер-жащий список дисков компьютера, на которые можно сохранять результа-ты. Для этого пос ле им ени спис ка Combo1 через то ч к у нужно пос тавить свойство AddItem (добавить) и затем в кавычках указать наименование ВВ, которое будет стоять в списке первым (по умолчанию). В следующей стро-ке аналогично указывается второе ВВ списка и т.д. Во втором выпадаю-щем списке Combo2 также с помощью свойства AddItem добавляются име-на дисков «С» и «D».
Д анный фрагмент подпрограммы будет выглядеть следующим образом:
Private Sub Form_Load() Combo1.AddItem "Аммонит скальный №1" Combo1.AddItem "Детонит М" Combo1.AddItem "Аммонит АП-5ЖВ" Combo1.AddItem "Аммонит 6ЖВ" Combo2.AddItem "C" Combo2.AddItem "D"
Кроме формирования выпадающ их списков с формы при ее загрузке необходимо убрать «лишние» объекты. Например, до нажатия пользовате-лем командной кнопки «Сохранить», все объекты, определяющие место сохранения, имя файла, фамилию студента, на форме не нужны. Их можно сделать нев идимым и с помощью свойства Visible, установив его значение для да нных объектов равным False: …
…
Label10.Visible = False Label11.Visible = False Label12.Visible = False Combo2.Visible = False Text5.Visible = False Text6.Visible = False Command4.Visible = False End Sub
Второе событие – щелчок пользователя по командной кнопке Com-mand1 («Результат»). По д р аз ум е в ае тс я, что щелчок мышью по кнопке «Ре-зультат» пользователь произведет после то го , как будут введены все необхо-димые исходные данные: задана крепос ть пород, площадь сечения выработки, выбраны диаметр патрона и тип ВВ. Поэтому данная подпрограмма до л ж на предус матривать считывание исходных данных, проверку их к о рр е к тнос ти, вс е расчетные действия и вывод р ез у л ьта то в (значений удельного расхода и количества шпуров на забой) в соответствующие те кс то в ые блоки на форме.
Для начала написания программного кода, выполняемого при данном событии необходимо дважды щелкнуть на командную кнопку Command1, при этом опять открывается окно для ввода программного кода и появля-ются первая и последняя строки этой подпрограммы. На этот раз они будут выглядеть та к :
Private Sub Command1_Click()
End Sub
т.е. данная подпрограмма (Private Sub) выполнится при однократном щелчке мыши ( Clic k ) по командной кнопке Command1.
Сначала необходимо объявить все переменные, которые будут ис-пользоваться в программе, для этого используется оператор DIM. (Следует отметить, ч то большое количество операторов и ключевых слов Visual Basic унаследовал от более старых версий Бэйсика, в частности от Quick Basic, подробные сведения о котором можно найти в [7,8]).
Пр и объявлении переменных задаем их типы в с о о тв е тс тв и и с ранее обозначенными в та б л . 6.5:
Rem описание переменных
Dim F, D, N, a1, a2, a3, a4, a5 As Integer
Dim S, F1, GAMMA, KISH, E, RO, NU, Q1, Q As Single
Dim TIPVV, DISK, NAMEFILE, FIO As String
Затем производим считывание исходных данных (крепости пород и площади сечения выработки), введенных пользователем в тек с то в ые блоки Text1 и Text2. Для этого ис польз уем оператор Va l , который прео бразуе т те к с то в у ю информа цию в числовые значения:
Rem ввод исходных данных F = Val(Text1.Text) S = Val(Text2.Text)
Таким образом, в р е з у л ь та те выпол нения данных строк пер еменная F получит значение, введенное пользователем в те к с то в ы й блок Text1, а пе-ременная S – значение, введенное в Text2.
Для определения нужного значения диаметра патрона, который поль-зователь задал с помощью кнопок-переключателей Option1 – Option4, ис -польз уем их свойство Va l u e , которое приним ает значение True, е с л и данная кнопка выбрана пользователем, и значение False – в противном случае. Про -верку значения свойства Va l u e производим с пом ощ ью строчного оператора IF – THEN (ЕСЛИ – ТО):
If Option1.Value = True Then D = 2.8
If Option2.Value = True Then D = 3.2
If Option3.Value = True Then D = 3.6
If Option4.Value = True Then D = 4.5
Таким образом, ес л и пользователем выбрана кнопка Option1, то пе-ременная D приним ает значение 2,8, если Option2 – то значение 3,2 и т.д. (Здесь величина диаметра сразу задается в см, т.е. те х единицах, которые необходимо подс тавлять в расчетную формулу).
И последнее исходное данное, задаваемое пользователем, – это тип ВВ, который выбирается из выпадающего списка Combo1. В зависимости от этого программа должна определить значения коэффициента работо-способности ВВ и его плотнос ти патронирования. Вв о д этих данных осу-ществляем путем проверки значения свойства Text выпадающего списка Combo1, при этом используем блочную структуру оператора IF: If Combo1.Text = "Аммонит скальный №1" Then
E = 0.8
RO = 1.1
TIPVV = "Аммонит скальный №1" ElseIf Combo1.Text = "Детонит М" Then
E = 0.82
RO = 1.15
TIPVV = "Детонит М" ElseIf Combo1.Text = "Аммонит АП-5ЖВ" Then
E = 1.17
RO = 1.15
TIPVV = "Аммонит АП-5ЖВ" ElseIf Combo1.Text = "Аммонит 6ЖВ" Then
E = 1
RO = 1.2
TIPVV = "Аммонит АП-5ЖВ" End If
Блочный IF работает следующим образом. Сначала проверяется пер-вое условие, и если в выпадающем списке Combo1 пользователь оставил Text «Аммонит скальный №1», то выполнится блок операторов, следую-щий за данным условием, т.е. переменная E получит значение 0,8, пере-менная RO – значение 1,1, а строковая переменная тип ВВ – значение «Аммонит скальный №1». Если первое условие не выполняется, то про-грамма пропускает следующий за ней блок операторов и переходит к про-верке следующего условия, которое начинается с ключевого слова ElseIf. Пр и выполнения этого условия (т.е. при выборе пользователем детонита М), переменные Е, RO и TIPVV получат значения, соответствующие вы-бранному ВВ и т.д.
Заканчивается блочный IF оператором окончания проверки END IF.
Далее, согласно алгоритму, пр исваиваем значения посто янным ко-
эффициентам: F1 = 1.3 GAMMA = 0.5
Блок ввода исходных данных завершен. Произведем проверку кор-ректности введенных пол ьзователем данных. Пр и этом используем преде-лы значений, оговоренных ранее для всех вводимых данных (см. табл . 6.2). В пр инципе, о тс у тс тв и е данно й проверки пр и корректности пользователя никак не скажется на ходе выполнения программы и полученных результа-тах. Однако опытные программисты всегда защищают свою программу от некорректных действий пользователя, т.е. выполняют «защиту от дурака».
В да нном случае возможны то л ь к о 3 ошибки пользователя:
– неверное задание значения (слишком низкое или высокое) или во-обще о тс у тс тв ие задания крепости пород;
– задание площади выработки, для которой данный алгоритм не подходит (т.е. меньше 6 или больше 20 м2);
– о тс у тс тв ие выбора диаметра ВВ (ни одна из кнопок-переключателей не выбрана).
Пр еду с м о тр им защиту программы от этих ошибок и организуем вы-вод сообщений пользователю о допущенных ошибках. Опять используем условный оператор проверки IF и команду вывода сообщений MsgBox. Например для исключения значений крепости ниже 1 (в том числе и пол-ного о тс у тс тв и я значе ния крепос ти) ис пользуем та к и е строки:
Rem проверка корректности исходных данных If F < 1 Then
a1 = MsgBox("Такой крепости не бывает." & Chr(13) & Chr(10) & "Подумайте лучше", 16, "Ошибка")
Text1.Text = "" End If
Это значит, что при значении крепости F, меньшем 1, тек с то в ое поле Text1 обнулится (пустые кавычки после Text1.Text) и появляется следую-щее окошко сообщения MsgBox
Организация вывода сообщений с помощью системного окна MsgBox осуществляется следующим образом:
Им я переменной = MsgBox("те к с т сообщения", A+ B+С, "заголовок окна"),
A – аргумент, определяющий, какая пик тог рамм а будет отображена на окне:
Значение А | Вид сообщения | Пиктогр амма | |
числовое | бу квенное | ||
vbCritical | Критическое сообщение | © | |
vbQuestion | Вопрос | 4> | |
vbExclamation | Предупреждение | !\ | |
vbInformation | Информация | 4^ |
B – аргумен т, определяющий на б о р кнопок :
Значение B | Отображаемые кнопки | |
числовое | бу квенное | |
vbOKOnly | ОК | |
vbOKCancel | ОК, отмена | |
vbAbortRetryIgnore | Стоп, повтор , пропустить | |
vbYesNoCancel | Да, нет, отмена | |
vbYesNo | Да, нет | |
vbRetryCancel | Повтор, отмена |
С – аргумент, определяющий, какая кнопка прин имае тс я по умолчанию:
Значение С | Отображаемые кнопки | |
числовое | бу квенное | |
vbDefaultButton1 | Первая кнопка – по умолчанию | |
vbDefaultButton2 | Вторая кнопка – по умолчанию | |
vbDefaultButton3 | Третья кнопка – по умолчанию |
Применительно к вышеприведен ному примеру : «Текст сообщения» – э то «Такой крепости не бывает. По дум ай те лучше» (символы Chr(13) и Chr(10) обозначают завершение строки и перенос части сообщения на следующую строку, значок & объединяет все части сообще-ния в едино е целое):
A + B + C = 16 + 0 + 0 = 16 (т.е. будет отображаться пик тограмма критиче-ского сообщения (A=16), одна кнопка ОК (B=0) и она же принимается по умолчанию (C=0).
«Заголовок окна» – в него выводится комментарий сообщения, в данном случае слово «Ошибка».
Кроме числовых значений переменные А, В и С могут принимать буквенные, например :
D = MsgBox("Сохранить результаты?", vbQuestion + vbYesNoCancel + vbDefaultButton2, "Вопрос").
В этом случае на сообщении появится пик тограмма «Вопрос», три кнопки (Да, Не т и Отмена) и вторая кнопка (Не т) будет приниматься по умолчанию.
В зависимости от тог о, какая из предложенных кнопок будет нажата пользователем, переменная, которой присвоено сообщение MsgBox (в по-следнем случае переменная D, в первом примере – переменная а1), будет принимать одно из следующих значений
Значение переменной сообщения | Выбранная кнопка | |
числовое | бу квенное | |
vbOK | ОК | |
vbCancel | отмена | |
vbAbort | Стоп | |
vbRetry | Повтор | |
vbIgnore | Пропустить | |
vbYes | Да | |
vbNo | Нет |
Продолжим проверку корректности исходных данных. Если пользо-ватель введет значение крепости пород, большее 20 (что при проведении горных выработок прак тически не встречается), программа выдаст сле-дующее сообщение:
Дата добавления: 2015-02-16; просмотров: 849;