Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа_3_1_Лс_27_11_2011.doc
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
4.63 Mб
Скачать

VbExclamation, "Столько друзей не бывает"

Exit Sub

End If

Друзья(c).Fam = TxtFam.Text

Друзья(c).Name = TxtName.Text

Друзья(c).BirthDay = DTPicker1.Value

Друзья(c).Telephone = Val(TxtTelephone.Text)

c = c + 1

Call formClear

End Sub

Private Sub CmdFind_Click()

Dim j As Integer

Dim flag As Boolean

flag = False

Call formClear

Print "Результат поиска"

Print "======================================="

For j = 1 To c - 1

If TxtFind.Text = Друзья(j).Fam Then

Print Друзья(j).Fam; " "; Друзья(j).Name; " "; _

Друзья(j).BirthDay; " "; Друзья(j).Telephone

flag = True

End If

Next j

If flag = False Then

MsgBox "такой фамилии нет", _

VbExclamation, "Поиск не дал результатов"

Call formClear

TxtFind.Text = ""

End If

End Sub

Private Sub CmdFind1_Click()

Dim j As Integer

Dim flag As Boolean

flag = False

Call formClear

Print "Результат поиска"

Print "======================================="

For j = 1 To c - 1

If TxtFind1.Text = Mid(Друзья(j).BirthDay, 4, 2) _

Then

Print Друзья(j).Fam; " "; Друзья(j).Name; " "; _

Друзья(j).BirthDay; " "; Друзья(j).Telephone

flag = True

End If

Next j

If flag = False Then

MsgBox "такой месяца нет", _

VbExclamation, "Поиск не дал результатов"

Call formClear

TxtFind1.Text = ""

End If

End Sub

Private Sub CmdView_Click()

Dim j As Integer

Call formClear

For j = 1 To c - 1

Print Друзья(j).Fam; " "; Друзья(j).Name; " "; _

Друзья(j).BirthDay; " "; Друзья(j).Telephone

Print

Next j

End Sub

Private Sub Form_Load()

c = 1

Call formClear

End Sub

Private Sub formClear()

FrmДрузья.Cls

TxtFam.Text = ""

TxtName.Text = ""

DTPicker1.Value = Date

TxtTelephone.Text = ""

End Sub

8. Пpoвepьтe, как работает проект.

9. Сохраните проект в папке ЛАБ12 под именем Лр12_Зад1_Фамилия.

Замечание Главный недостаток созданного вами проекта состоит в том, что ваша записная книжка существует на сеанс работы. При каждом новом запуске программы придется вводить все данные заново. Этот недостаток можно устранить, познакомившись с возможностью сохранения данных в файлах.

Ограничение объема записной книжки связано с тем, что вывод информации производится на форму. Для вывода большого объема информации можно использовать текстовое поле. Какие свойства текстового поля нужно для этого установить, Вы должны знать. Однако для этой цели можно использовать новый объект — ListView (Обзор списка).

10. Дополнить проект возможностью вывода списка всех друзей, родившихся в заданном месяце.

Рекомендация. Для выделения номера месяца из даты используйте функцию Mid:

Мid(Друзья(j).BirthDay, 4, 2) завдання на самостійну роботу(в,вс,лс)

Массив объектов. Вы уже использовали массив объектов в л.р.8 Вспомните, что массив объектов — это группа объектов, имеющих одинаковое имя (свойство Name), тип и общую процедуру обработки. В массив может входить до 32768 объектов. Порядковый номер элемента называется индексом и записывается в скобках сразу после имени массива. Объекты, входящие в массив, имеют свойство lndex. Это свойство равно порядковому номеру элемента массива. Использование массивов объектов часто позволяет значительно упростить программный код.

ЗАВДАННЯ 12.2. Постановка задачи: СОЗДАТЬ ПРИЛОЖЕНИЕ — КАЛЬКУЛЯТОР. В ОТЛИЧИЕ ОТ КАЛЬКУЛЯТОРА, СОЗДАННОГО В Л.Р.4, ДАННЫЙ КАЛЬКУЛЯТОР ДОЛЖЕН ИМЕТЬ ОДНО ПОЛЕ ДЛЯ ВВОДА ЧИСЕЛ И ВЫДАЧИ РЕЗУЛЬТАТА (РИС. 12.7). ТЕКСТОВОЕ ПОЛЕ ДОЛЖНО БЫТЬ ЗАБЛОКИРОВАНО ДЛЯ ВВОДА ТЕКСТА И НЕПРАВИЛЬНОГО НАБОРА ЧИСЕЛ.

Рис 12.7

Замечание Ранее Вы уже создавали калькулятор. Единственная цель данного проекта — показать, что использование массива объектов позволяет значительно сократить программный код. Для усложнения задания в проекте предложено сделать одно поле (как у настоящего калькулятора) и установить защиту от ввода текста и неправильного набора чисел в текстовом поле.

Напомним, что процедуры выполнения арифметических операций выглядят так:

Private Sub cmdPlus_ Click()

X= Val(txtX.Text)

Y=Val(txtY.Text)

Rezult = Х + Y

txtRezult.Text = Str(Rezult)

End Sub

Private Sub cmdMinus_ Click()

Х = Val(txtX.Text)

Y = Val(txtY.Text)

Rezult = Х – Y

txtRezult.Text = Str(Rezult)

End Sub

В процедурах, которые выполняются при щелчке по кнопкам <+>, <->, <*> и по другим кнопкам, большая часть кода одинакова, отличается лишь одна строка. Зададимся целью минимизировать программный код, используя массив командных кнопок. Если увеличить количество выполняемых операций (добавить кнопки), то эффект от использования массива будет более значительным. При этом можно использовать проект, выполненный в Л Р.4 или создать новый.

Порядок действий

1. Разместите на форме объекты в соответствии с тем, как показано на рис. 12.7.

2. Установите значения свойства Name для текстового поля txtRezult.

3. Установите значения свойства Name для кнопок < = > и <СЕ> — cmdRavno и cmdCE соответственно.

4. Установите значения свойства Name для всех остальных командных кнопок — cmd. Они образуют массив объектов. Значение свойства Index — от 0 до 4 в порядке расположения.

5. Установите значения свойства Caption для формы и кнопок в соответствии с рис. 12.7.

6. Внимательно проанализируйте представленный ниже программный код, а затем наберите его.

Option Explicit

Dim х As Single, у As Single '1-e и 2-е число

Dim RezuIt As Single 'Результат

Dim t As Integer 'Переменная хранит номер(индекс) нажатой кнопки

Private Sub cmd_Click(index As Integer)

t = index

х = Val(txtRezult.Text)

txtRezult.Text = ""

txtRezult.SetFocus

End Sub

Private Sub cmdCE_Click()

txtRezult.Text = ""

txtRezult.SetFocus

End Sub

Private Sub cmdRavno_Click()

RezuIt = 0

Select Case t

Case 0 ' Щелкнуть по кнопке < + > (ее номер в массиве равен 0)

RezuIt = х + у

Case 1 ' Щелкнуть по кнопке < - > (ее номер в массиве равен 1)

RezuIt = х - у

Case 2 ' Щелкнуть по кнопке < * > (ее номер в массиве равен 2)

RezuIt = х * у

Case 3 ' Щелкнуть по кнопке < / > (ее номер в массиве равен 3)

If у <> 0 Then

RezuIt = х / у

txtRezult.Text = Str(RezuIt)

Else

txtRezult.Text = "Error! Division by zero"

End If

Case 4 ' Щелкнуть по кнопке < ^ > (ее номер в массиве равен 4)

RezuIt = х ^ у

End Select

If t <> 3 Then txtRezult.Text = Str(RezuIt)

End Sub

Private Sub txtRezult_Change()

у = Val(txtRezult.Text)

End Sub

7. Напишите процедуру, которая контролирует, какие клавиши нажимаются при вводе информации в текстовое поле и блокирует ввод текста при неправильном наборе чисел (проверяются ASCII-коды нажатых клавиш). Проанализируите, а затем наберите представленный ниже код процедуры.

Private Sub txtRezult_KeyPress(KeyAscii As Integer)

Select Case KeyAscii

Case 48 To 57 'Цифры

Case 8 'Backspace

Case 46 'Десятичная точка

If InStr(txtRezu1t.Text, ".") <> 0 Then 'Если точка уже присутствует в поле, то еще одну поставить нельзя

KeyAscii = 0

t = 2 + 16 'Кнопки Прервать, Повторить, Пропустить и_ пиктограмма Critical Message

MsgBox " Точка уже присутствует в поле — еще одну поставить_ нельзя!", t, "Ошибка!!"End If

Case 45 ' Знак минус

If txtRezult.SelStart<> 0 Or InStr(txtRezult.Text, "-") <> 0 Then ' Минус можно поставить только перед числом и только один

KeyAscii = 0

t = 2 + 16 'Кнопки Прервать, Повторить, Пропустить и

_ пиктограмма Critical Message

MsgBox " Минус можно поставить только перед числом и_

только один!", t, "Ошибка!!"

End If

Case Else

KeyAscii = 0

t = 2 + 16 'Кнопки Прервать, Повторить, Пропустить и

_ пиктограмма Critical Message

MsgBox " Ошибочный символ!", t, "Ошибка!!"

End Select

End Sub

8. Проверьте, как работает калькулятор.

9. Сохраните проект под именем Лр12_Зад2_Фамилия