Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Волченков Проектирование Wиндоwс-Приложений на языке Висуал Басиц 2010

.pdf
Скачиваний:
73
Добавлен:
16.08.2013
Размер:
2.11 Mб
Скачать

Рассмотрим создание проекта приложения, в котором рассчитываются оценки математического ожидания и среднеквадратичного отклонения списка чисел, представленного в объекте ListBox (Окно списка) на экранной форме. На данном примере демонстрируются типы данных и арифметические функции языка Visual Basic.

Окно приложения показано на рис. 2.1. Отметим, что на форме вместо командных кнопок используются команды меню. Одна из них сразу после запуска недоступна, так как дисперсию нельзя начинать оценивать, не вычислив математического ожидания. Недоступность любого элемента управления достигается установкой значения свойства Enabled данного элемента равным False (Ложь).

а б

Рис. 2.1. Окно приложения (а) после загрузки и (б) после получения результата

Будем считать, что в окне списка большие по величине целые числа. Очевидно, что каждое из них может быть значением типа Integer, но не может быть значением типа Short. Но сумма этих чисел, которую надо вычислить при оценивании математического ожидания, выходит за пределы типа Integer. Поэтому в процедурах необходимо выбрать либо тип Long, либо любой тип для десятич-

ных чисел (Single, Double).

В окне списка элементы всегда считаются текстовыми (имеют тип String) Поэтому в процедурах их необходимо конвертировать в числа. В зависимости от того, какой тип чисел нами выбран, необходимо использовать ту или иную функцию преобразования типов: CInt, CLng, CSng или CDbl.

Вычисленные результаты (числа) помещаются в текстовые поля. Для этого числа конвертируют в строки с помощью функции Str. Делать это не обязательно – надо лишь учитывать, что в таком случае десятичная точка превращается в десятичную запятую.

21

В данном примере список заполняется числами на этапе проектирования – с помощью свойства Items объекта ListBox1. Отметим, что это свойство является коллекцией и неоднократно используется в коде программы:

Код 2.1

Imports System.Math

Public Class Form1

Dim S As Long 'Integer

Dim i, n As Short

Dim m, d As Long 'Integer

Private Sub МатОжидание_Click(ByVal sender As _ System.Object, ByVal e As _ System.EventArgs) Handles МатОжидание.Click

n = ListBox1.Items.Count S = 0

For i = 0 To n - 1

S = S + CLng(ListBox1.Items.Item(i))

Next

m = S \ n TextBox1.Text = m

СрКвОтклонение.Enabled = True End Sub

Private Sub СрКвОтклонение_Click(ByVal sender As _ System.Object, ByVal e As _

System.EventArgs) Handles СрКвОтклонение.Click d = 0

For i = 0 To n - 1 d = d + _

CLng((m - ListBox1.Items.Item(i)) ^ 2)

Next

d = Sqrt(d \ (n - 1)) : TextBox2.Text = d End Sub

End Class

Отметим, что перед объявлением класса данной формы вставлена строка: «Imports System.Math». Эта строка позволяет использовать математические функции – в данном случае, функцию Sqrt – извлечение квадратного корня.

Процедура для команды меню «Завершение» содержит единственную строку – оператор End.

22

Задание 2.2. С помощью языка Visual Basic 2005 (2008) создать проект Windows приложения, в котором используются финансовые функции.

Перед формулировкой вариантов задания 2.2 рассмотрим пример создания проекта приложения, в котором реализуется действие следующих финансовых функций языка Visual Basic:

Nper(rate, pmt, pv, fv, t),

Rate(nper, pmt, pv, fv, t),

PV(rate, nper, pmt, fv, t),

FV(rate, nper, pmt, pv, t),

Pmt(rate, nper, pv, fv, t).

В именах функций и их аргументов используются аббревиатуры:

NPer – число периодов (выплат),

Rate – учётная ставка (банковский процент),

PV – Present Value – инвестиция (кредит),

FV – Future Value – накопление,

Pmt – Payment – выплата.

Аргумент t принимает два значения, определяющие, в начале или в конце периода (например, месяца) производится выплата.

С помощью данного приложения можно решать различные задачи. Например, определять величину периодической выплаты, если известна величина кредита или инвестиции (функция Pmt), или определять величину накопления, если известна величина выплаты (функция FV). Форма приложения для решения задач с использованием указанных функций может быть такой, которая показана на рис. 2.2.

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

– в зависимости от того, какой из пяти результатов он хочет получить. С помощью радио кнопок указывается, в начале или в конце периода (например, месяца) производится выплата.

Для большей наглядности при проектировании формы использованы два элемента «Рамка». Одна из рамок обрамляет зону ввода/вывода данных, другая – командные кнопки.

23

а б

Рис. 2.2. Примеры решения задач с помощью приложения «Финансовые функции»:

а – после щелчка кнопки Pmt (Выплата); б – после щелчка кнопки FV

(Накопление)

Рассмотрим только две из пяти процедур – для решения двух указанных выше задач: вычисления величины выплаты и вычисления значения накопления.

Код 2.2

Dim r,

n, v1, v2, p, t As Double

 

 

Private

Sub butFV_Click(ByVal _

 

sender As System.Object, _

 

ByVal e As System.EventArgs) _

r

Handles butFV.Click

= CDbl(TextBox1.Text) / (100 * 12)

n

= CDbl(TextBox2.Text) : v1 =

CDbl(TextBox3.Text)

p

= -CDbl(TextBox5.Text)

If

RadioButton1.Checked = True Then t = 1 _

 

24

Else t = 0

v2 = FV(r, n, p, v1, t) TextBox4.Text = Round(v2, 2)

End Sub

Private Sub butPmt_Click(ByVal _ sender As System.Object, _

ByVal e As System.EventArgs) Handles _ butPmt.Click

r = CDbl(TextBox1.Text) / (100 * 12) n = CDbl(TextBox2.Text)

v1 = CDbl(TextBox3.Text)

v2 = CDbl(TextBox4.Text)

If RadioButton1.Checked = True Then t = 1 _ Else t = 0

p = Pmt(r, n, v1, v2, t) TextBox5.Text = -Round(p, 2)

End Sub

Перед объявлением класса данной формы, как и в коде 2.1, должна быть вставлена строка: «Imports System.Math», так как в процедурах используется математическая функция Round(x, n) – округление значения x до n знаков после десятичной точки.

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

Вариант 1. Реализовать процедуру для решения задачи определения учётной ставки (банковского процента) rate при заданных значениях числа периодов nper, выплаты pmt, а также при заданной величине кредита pv (fv = 0) или при заданной величине накопления fv (pv = 0).

Вариант 2. Реализовать процедуру для решения задачи определения числа периодов nper при заданных значениях банковского процента rate, выплаты pmt, а также при заданной величине кредита pv (fv = 0) или при заданной величине накопления fv (pv = 0).

Вариант 3. Реализовать процедуру для решения задачи определения величины кредита pv (fv = 0) при заданных величинах выплаты pmt, банковского процента rate и числа выплат nper.

25

Задание 2.3. С помощью языка Visual Basic 2005 (2008) создать проект Windows приложения, в котором используются функции обработки строк.

Перед формулировкой вариантов задания 2.3 рассмотрим пример создания проекта приложения, в котором элементами одного из четырёх списков формы являются строки, каждая из которых – это фамилия, имя и отчество человека, записанные через пробел. Щелчком команды меню из этих строк выделяются фамилии, имена и отчества и помещаются в три отдельные списка (рис. 2.3).

Рис. 2.3. Приложение, демонстрирующее работу функций обработки строк

В данном проекте реализуется действие двух функций обработки строк языка Visual Basic:

Mid(s, k, [n]) – подстрока строки s, начинающаяся с позиции k, длиной n (n – необязательный аргумент);

Instr(s1, s2) – позиция начала подстроки s2 в строке s1.

Задача решается с помощью следующей процедуры:

Код 2.3

Dim

i, n, k As Short

Dim

s1, s2, s3, s4 As String

 

 

Private

Sub MenuItem1_Click(ByVal sender As _

 

System.Object, ByVal e As System.EventArgs) _

n =

Handles MenuItem1.Click

ListBox1.Items.Count

For

i = 0 To n - 1

 

s1 = ListBox1.Items.Item(i)

 

k = InStr(s1, " ")

 

26

s2 = Mid(s1, 1, k - 1)

s1 = Mid(s1, k + 1)

k = InStr(s1, " ")

s3 = Mid(s1, 1, k - 1)

s4 = Mid(s1, k + 1)

ListBox2.Items.Add(s2)

ListBox3.Items.Add(s3)

ListBox4.Items.Add(s4)

Next

End Sub

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

Вариант 1. Найти имя максимальной длины. Вариант 2. Найти фамилию минимальной длины. Вариант 3. Найти среднюю длину отчества.

Кроме указанной кнопки (или команды меню) на форму следует поместить элемент для фиксирования результата, например, текстовое поле с соответствующей меткой над ним.

Указание: В каждом из трех вариантов использовать функцию Len(s), возвращающую длину строки s.

Отчет о работе

Отчет заключается в демонстрации студентом на терминале работы трех самостоятельно отлаженных проектов:

1)вычисление площади треугольника;

2)использование финансовых функций;

3)использование функций обработки строк (в соответствии с предложенным вариантом).

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

27

Работа № 3

Исследование графических объектов и методов языка

Visual Basic .NET (2005, 2008) на примере проектирования приложения «Построение диаграмм»

Цель работы: изучение возможностей графических методов языка Visual Basic .NET (2005, 2008), которые становятся доступными при использовании класса графических объектов Graphics из пространства имён System.Drawing, входящего в состав .NET Framework – ядра системы MS Visual Studio .NET (2005, 2008).

Дополнительной целью работы является изучение полезных свойств и методов элемента управления ListBox на примере создания процедур меню List Editor (Редактор списка), позволяющих добавлять новые элементы в список, удалять и корректировать элементы списка.

Подготовка к работе

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

1.Как создаётся объект (экземпляр) класса Graphics, позволяющий применять графические методы к определённому элементу управления (форме, графическому окну и т.д.)?

2.Можно ли использовать один экземпляр класса Graphics для применения графических методов к нескольким элементам управления (например, к форме и к нескольким элементам PictureBox на этой форме)?

3.Как применяется тот или иной графический метод (например,

DrawLine, DrawEllipse, DrawRectangle) к элементу управления,

для которого создан объект (например, Графика) класса Graphics?

4.Какой вспомогательный объект необходимо определить для изображения отрезков, прямоугольников, эллипсов, дуг, секторов и т.д. с помощью методов DrawLine, DrawRectangle, DrawEllipse,

DrawArc, DrawPie и т.д. без закрашивания замкнутых фигур?

28

5.Какой вспомогательный объект необходимо определить для изображения закрашенных замкнутых фигур: прямоугольников, эллипсов, секторов и т.д. с помощью методов FillRectangle, FillEllipse, FillPie и т.д.?

6.С помощью какого графического метода можно делать надписи на форме или на элементах управления (например, на объектах PictureBox), для которых создан экземпляр класса Graphics?

7.Как изобразить оси декартовых координат и напечатать значения координат возле узлов на этих осях?

8.Как повернуть вертикальную ось системы координат на элементе управления на 180° после создания для него экземпляра класса Graphics?

9.Как сместить вертикальную ось системы координат вниз (по направлению этой оси) на элементе управления на h/2 вниз (h – высота этого элемента) после создания для него экземпляра класса Graphics? И как сместить горизонтальную ось вправо на w/2 (w – ширина этого элемента)?

Задания

В ходе выполнения данной работы студент с помощью языка Visual Basic 2005 (2008) должен выполнить три задания.

3.1.Создать проект приложения с окном списка, в котором содержится список десятичных чисел, а также окно изображения, в котором строится круговая диаграмма, соответствующая этому списку. Для построения диаграммы создать команду меню Диаграмма. Для завершения работы приложения создать команду ме-

ню Exit.

3.2.Добавить в меню на экранной форме проекта приложения задания 1 команду Редактирование списка, содержащую команды подменю Добавить, Удалить, Вставить и Изменить в соответст-

вии с вариантами задания.

3.3.Реализовать построение линейной и прямоугольной диаграммы в соответствии с вариантами задания.

Задание 3.1 выполняется фронтально (без вариантов), задания

3.2и 3.3 – по вариантам.

29

Рис. 3.1. Окно приложения «Построение круговой диаграммы»

Пример выполнения работы

В качестве примера применения графических методов рассматривается создание Windows-приложения «Построение круговых, линейных и прямоугольных диаграмм».

Задание 3.1. С помощью языка Visual Basic 2005 (2008) создать проект приложения с окном списка, в котором содержится список десятичных чисел, а также окно изображения, в котором строится круговая диаграмма, соответствующая этому списку. Для построения диаграммы создать команду меню Диаграмма. Для завершения работы приложения создать команду меню Exit.

Задание 3.1 выполняется фронтально – без вариантов.

Ряд графических методов языка Visual Basic 2005 используется при создании проекта приложения «Построение круговой диаграммы». В первом приближении задача ставится так.

Имеется список чисел в окне списка (ListBox1). В окне изображения (PictureBox1) после щелчка команды меню Диаграмма строится круговая диаграмма для этого списка так, как показано на рис. 3.1.

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

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

кода модуля формы (код 3.1) с одной процедурой – построения круговой диаграммы:

30