ОСНОВЫ ПРОГРАММИРОВАНИЯ

  • pdf
  • 10.05.2020
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала 33. ОСНОВЫ ПРОГРАММИРОВАНИЯ.pdf

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