6. Программа «Подарки On-line»
Задание. Создать программу выбора товаров из предлагаемого списка, их покупки и подсчета общей суммы. Комментарии.
§ В комбинированном поле Кому выбирается одно из трех значений «Для женщин», «Для мужчин»; данные значения заполняются при активации формы; значение по умолчанию «Для женщин».
§ В зависимости от выбранной категории в первом поле со списком предлагается список имеющихся подарков.
§ При щелчке по пункту списка в поле рисунка появляется изображение подарка, а в поле Цена – цена подарка в рублях (цены занесены в массивы: W (подарки для женщин), M (для мужчин)).
§ При нажатии на кнопки Добавить / Удалить выбранный подарок добавляется /удаляется во второй список справа. Сумма увеличивается / уменьшается на стоимость подарка. При нажатии на кнопку Очистить второй список очищается.
§ При нажатии на кнопку Купить высвечивается окно сообщений с текстом «Ваш заказ отправлен на обработку. Спасибо за покупку».
1
1. Запустить VBA и создать новый проект.
2. Переименовать форму - «Подарки».
3. Добавить на форму объекты (для большинства объектов, если специально не оговорено, шрифт Tahoma, размер 12 (свойство Font); на кнопках - Tahoma, 10):
Объект |
Свойство |
Значение |
Label (надпись) |
Name |
LabelTop |
Caption |
Подарки On-line |
|
Font |
Tahoma, 26 |
|
Command Button (кнопка) |
Name |
CmdExit |
Caption |
Выход |
|
Command Button (кнопка) |
Name |
CmdBuy |
Caption |
Купить |
|
Enabled |
False (недоступна) |
|
Frame (рамка) |
Name |
FrameSelect |
Caption |
Выберите подарок |
|
Frame (рамка) |
Name |
FrameGift |
Caption |
Подарки |
|
Следующие объекты располагаются на рамке FrameSelect: |
||
Label (надпись) |
Name |
LabelSelect |
Caption |
Кому |
|
ComboBox (комбинированное поле) |
Name |
CBoSelect |
Label (надпись) |
Name |
LabelGift |
Caption |
Подарки |
|
Font |
Tahoma, 12 |
|
ListBox (поле со списком) |
Name |
ListBox1 |
Image (рисунок) |
Name |
Image1 |
BorderStyle |
1 |
|
PictureSizeMode |
1 |
|
Label (надпись) |
Name |
LabelPrice |
Caption |
Цена |
|
Label (надпись) |
Name |
LabelNum |
Caption |
|
|
BackColor |
(белый) |
|
TextAlign |
3 |
|
Следующие объекты располагаются на рамке FrameGift: |
||
Command Button (кнопка) |
Name |
CmdAdd |
Caption |
Добавить |
|
Command Button |
Name |
CmdDel |
(кнопка) |
Caption |
Удалить |
Объект |
Свойство |
Значение |
Command Button (кнопка) |
Name |
CmdClear |
Caption |
Очистить |
|
Объект |
Свойство |
Значение |
Label (надпись) |
Name |
LabelSelect |
Caption |
Кому |
|
ListBox (поле со списком) |
Name |
ListBox2 |
Label (надпись) |
Name |
LabelSum |
Caption |
Цена |
|
Label (надпись) |
Name |
LabelSumma |
Caption |
|
|
BackColor |
(белый) |
|
TextAlign |
3 |
4. Запрограммировать щелчок на кнопке Выход на завершение программы.
!!! При написании процедур особое внимание обращайте на заголовок!
5. При активации формы (метод Activate) заполнить комбинированное поле CboSelect (метод AddItem) :
a) Перейти в окно программного кода.
b) В раскрывающихся списках Object (Объект) и Procedure (Процедура) верхней части окна выбрать UserForm и Activate соответственно. Появится заготовка для написания процедуры.
c) Записать программный код, по которому заполняются строки комбинированного поля CBoSelect (метод AddItem), а также устанавливалось первое значении (порядковый номер 0) по умолчанию: Private Sub UserForm_Activate()
'Заполняем список
CBoSelect.AddItem "Для женщин"
CBoSelect.AddItem "Для мужчин"
'Значение по умолчанию
CBoSelect.Text = CBoSelect.List(0) End Sub
6. Записать программный код, по которому в зависимости от выбранной категории заполняется поле со списком CBoSelect (метод AddItem) значениями и одновременно соответствующий массив (W или M) ценами.
Значения: для женщин: Брошь (5700), Колье (2550), Сумка (1700), Букет (930); для мужчин: Портмоне (420), Запонки (2550), Трубка (640);
Поскольку список для разных категорий – различный, необходимо при каждом обращении к списку ListBox1 очищать его (метод Clear):
a) В разделе General Declarations опишем массивы: Dim W(100) As Currency, M(100) As Currency
b) Очистим список, заполним его новыми данными. Внесем значения в массивы:
Sub CBoSelect_Click()
ListBox1.Clear
If CBoSelect.Text = "Для женщин" Then
ListBox1.AddItem "Брошь"
ListBox1.AddItem "Колье"
ListBox1.AddItem "Сумка"
ListBox1.AddItem "Букет"
W(0) = 5700
W(1) = 2550
W(2) = 1700
W(3) = 930
End If
If CBoSelect.Text = "Для мужчин" Then
ListBox1.AddItem "Портмоне"
ListBox1.AddItem "Запонки"
ListBox1.AddItem "Трубка"
M(0) = 420
M(1) = 2550
M(2) = 640
End If End Sub
7. Записать программный код, при котором по щелчку на строке списка в поле рисунка появляется изображение подарка, а в поле Цена – цена подарка в рублях.
Комментарии:
§ Цена подарка определяется следующим образом надо в зависимости от выбранной категории (значение комбинированного поля CBoSelect: для женщин или для мужчин) обратиться к массиву W или M взять значение элемента с индексом ListBox1.ListIndex (номер строки (свойство ListIndex) в списке ListBox1) и занести его в надпись LabelNum, т.е.
If CBoSelect.Text = "Для женщин" Then
LabelNum = W(ListBox1.ListIndex) End If
§ Но поскольку требуется вывести значение в рублях, то используем функцию Format с аргументом "currency", получаем:
If CBoSelect.Text = "Для женщин" Then
LabelNum = Format(W(ListBox1.ListIndex), "currency")
End If
§ Имена файлов с рисунками совпадают с соответствующим значением в списке и отличаются от них только расширением. Для формирования имени файла заведем новую переменную строкового типа NameFile, значение которой будет вычисляться по формуле: NameFile = ListBox1.Text & ".jpg" § Для вывода фотографии используем метод Picture и функцию LoadPicture. Поскольку каталог с приложением может находиться в разных папках, то к имени файла надо добавить путь к файлу с приложением (ActiveWorkbook.Path):
Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\" & NameFile)
Таким образом, получаем процедуру:
Private Sub ListBox1_Click()
Dim NameFile As String
'Вывод цены
If CBoSelect.Text = "Для женщин" Then
LabelNum = Format(W(ListBox1.ListIndex), "currency")
End If
If CBoSelect.Text = "Для мужчин" Then
LabelNum = Format(M(ListBox1.ListIndex), "currency")
End If
'Вывод фотографии
NameFile = ListBox1.Text & ".jpg"
Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\" & NameFile) End Sub
8. В разделе General Declarations опишем глобальную переменную для подсчета суммы - Summa: Dim Summa As Currency
9. Запрограммировать кнопку Добавить на проверку, если в списке подарков выбран хоть один товар (значение ListBox1.Text <> ""), то заносим его во второй список (метод AddItem) и изменяем сумму (цена товара в поле LabelNum); если не выбран ни один товар, то появляется окно сообщения «Выберите товар в первом списке»: Private Sub CmdAdd_Click()
If ListBox1.Text <> "" Then
'Добавляем элемент из первого списка во второй
ListBox2.AddItem ListBox1.List(ListBox1.ListIndex)
'Меняем значение суммы и выводим на форму
Summa = Summa + LabelNum
LabelSumma = Format(Summa, "currency")
'Делаем доступной кнопку Купить
CmdBuy.Enabled = True
Else
MsgBox "Выберите товар в первом списке"
End If
End Sub
10. Запрограммировать кнопку Удалить на проверку, если во втором списке выбран хоть один товар, то убираем его из списка (метод Remove) и изменяем сумму; если не выбран ни один товар, то появляется окно сообщения:
Private Sub CmdDel_Click()
If ListBox2.Text <> "" Then 'Удаляем элемент из второго списка
ListBox2.RemoveItem ListBox2.ListIndex 'Меняем значение суммы и выводим на форму
Summa = Summa – LabelNum
LabelSumma = Format(Summa, "currency")
Else
MsgBox "Выберите товар во втором списке"
End If End Sub
11. Запрограммировать кнопку Очистить (метод Clear):
Private Sub CmdClear_Click()
'Очищаем список
ListBox2.Clear
'Меняем сумму
Summa = 0
LabelSumma = ""
'Делаем недоступной кнопку Купить
CmdBuy.Enabled = False End Sub
12. Запрограммировать кнопку Купить:
Private Sub CmdBuy_Click()
MsgBox "Ваш заказ отправлен на обработку. Спасибо за покупку" End Sub
Самостоятельная работа.
13. Изменить программный код, добавив в список подарков для мужчин Очки (1200), а в список подарков для женщин Часы (28600).
14. Изменить программный код, добавив новую категорию «Для детей» и подарки (цена): Лего (810), Велосипед (2500), Домик (16400). Для цен использовать массив С.
ОБРАЗЕЦ
6. «Подарки»
Option Explicit
Dim W(100) As Currency, M(100) As Currency, C(100) As Currency
Dim Summa As Currency
Private Sub CBoSelect_Click()
ListBox1.Clear
If CBoSelect.Text = "Для женщин" Then
ListBox1.AddItem "Брошь"
ListBox1.AddItem "Колье"
ListBox1.AddItem "Сумка"
ListBox1.AddItem "Букет" ListBox1.AddItem "Часы"
W(0) = 5700
W(1) = 2550
W(2) = 1700
W(3) = 930
W(4) = 28600
End If
If CBoSelect.Text = "Для мужчин" Then
ListBox1.AddItem "Портмоне"
ListBox1.AddItem "Запонки"
ListBox1.AddItem "Трубка"
ListBox1.AddItem "Очки"
M(0) = 420
M(1) = 2550
M(2) = 640
M(3) = 1200
End If
If CBoSelect.Text = "Для детей" Then
ListBox1.AddItem "Лего"
ListBox1.AddItem "Велосипед"
ListBox1.AddItem "Домик"
C(0) = 810
C(1) = 2500
C(2) = 16400
End If
End Sub
Private Sub CmdAdd_Click()
If ListBox1.Text <> "" Then
'Добавляем элемент из первого списка во второй
ListBox2.AddItem ListBox1.List(ListBox1.ListIndex)
'Меняем значение суммы и выводим на форму Summa = Summa + LabelNum
LabelSumma = Format(Summa, "currency")
'Делаем доступной кнопку Купить
CmdBuy.Enabled = True
Else
MsgBox "Выберите товар в первом списке"
End If
End Sub
Private Sub CmdBuy_Click()
MsgBox "Ваш заказ отправлен на обработку. Спасибо за покупку"
End Sub
Private Sub CmdClear_Click()
'Очищаем список ListBox2.Clear
'Меняем сумму
Summa = 0
LabelSumma = ""
'Делаем недоступной кнопку Купить
CmdBuy.Enabled = True
End Sub
Private Sub CmdDel_Click()
If ListBox2.Text <> "" Then
'Удаляем элемент из второго списка
ListBox2.RemoveItem ListBox2.ListIndex 'Меняем значение суммы и выводим на форму Summa = Summa - LabelNum
LabelSumma = Format(Summa, "currency") Else
MsgBox "Выберите товар во втором списке"
End If
End Sub
Private Sub CmdExit_Click()
End
End Sub
Private Sub ListBox1_Click()
Dim NameFile As String
'Вывод цены
If CBoSelect.Text = "Для женщин" Then
LabelNum = Format(W(ListBox1.ListIndex), "currency")
End If
If CBoSelect.Text = "Для мужчин" Then
LabelNum = Format(M(ListBox1.ListIndex), "currency")
End If
If CBoSelect.Text = "Для детей" Then
LabelNum = Format(C(ListBox1.ListIndex), "currency")
End If
'Вывод фотографии
NameFile = ListBox1.Text & ".jpg"
Image1.Picture = LoadPicture(ActiveWorkbook.Path & "\" & NameFile) End Sub
Private Sub UserForm_Activate()
'Заполняем список
CBoSelect.AddItem "Для женщин" CBoSelect.AddItem "Для мужчин"
CBoSelect.AddItem "Для детей"
'Значение по умолчанию
CBoSelect.Text = CBoSelect.List(0)
End Sub
Материалы на данной страницы взяты из открытых источников либо размещены пользователем в соответствии с договором-офертой сайта. Вы можете сообщить о нарушении.