Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Зачем нужны процедуры пользователя
Задача: Вы записали на диск десяток фотографий, снятых во время каникул, и решили сделать фотоальбом. Поместили на форму десяток кнопок с названиями фотографий и один PictureBox. При нажатии на кнопку нужное фото для всеобщего обозрения загружается в PictureBox, а также печатается дата снимка. Задача легкая, мы ее уже решали в 9.3. Вот программа для 4 фотографий: Private Sub Command1_Click() Picture1.Picture = LoadPicture(" c: \temp\Rockies.bmp") Picture1.Print, " 21.07.2001" End Sub
Private Sub Command2_Click() Picture1.Picture = LoadPicture(" c: \temp\Porthole.bmp") Picture1.Print, " 28.07.2001" End Sub
Private Sub Command3_Click() Picture1.Picture = LoadPicture(" c: \temp\Balloons.bmp") Picture1.Print, " 12.08.2001" End Sub
Private Sub Command4_Click() Picture1.Picture = LoadPicture(" c: \temp\Guitar.bmp") Picture1.Print, " 20.07.2001" End Sub Хочу предупредить, что эта программа, постепенно усложняясь, пройдет через всю главу, поэтому разберитесь в ней как следует, иначе важный материал главы будет вам непонятен.
Усложним задачу: Некоторые из фотографий сняли вы, некоторые - ваш друг. Вы хотите, чтобы в знак этого на ваших фото в левом верхнем углу появлялся один значок, а на фото вашего друга другой. Ваш любимый значок такой: а у вашего друга такой: Пусть они и появляются. Давайте значки будем рисовать при помощи методов. Ваша программа станет такой: Private Sub Command1_Click() Picture1.Picture = LoadPicture(" c: \temp\Rockies.bmp") 'Это ваше фото, рисуем значок: Picture1.Line (100, 100)-(300, 300), vbBlue, B Picture1.Line (100, 100)-(300, 300), vbBlue Picture1.Line (100, 300)-(300, 100), vbBlue Picture1.Print, " 21.07.2001" End Sub
Private Sub Command2_Click() Picture1.Picture = LoadPicture(" c: \temp\Porthole.bmp") 'Это ваше фото, рисуем значок: Picture1.Line (100, 100)-(300, 300), vbBlue, B Picture1.Line (100, 100)-(300, 300), vbBlue Picture1.Line (100, 300)-(300, 100), vbBlue Picture1.Print, " 28.07.2001" End Sub
Private Sub Command3_Click() Picture1.Picture = LoadPicture(" c: \temp\Balloons.bmp") 'Это фото вашего друга, рисуем значок: Picture1.Circle (200, 200), 20 Picture1.Circle (200, 200), 70 Picture1.Circle (200, 200), 120 Picture1.Circle (200, 200), 170 Picture1.Print, " 12.08.2001" End Sub
Private Sub Command4_Click() Picture1.Picture = LoadPicture(" c: \temp\Guitar.bmp") 'Это фото вашего друга, рисуем значок: Picture1.Circle (200, 200), 20 Picture1.Circle (200, 200), 70 Picture1.Circle (200, 200), 120 Picture1.Circle (200, 200), 170 Picture1.Print, " 20.07.2001" End Sub Программа работает нормально, но невооруженным глазом виден ее существенный недостаток - резко возросший объем. Недостаток этот особенно будет заметен, когда число фото вырастет до десятка. Это тем более обидно, что в программе есть два повторяющихся фрагмента. Это фрагмент 'Это ваше фото, рисуем значок: Picture1.Line (100, 100)-(300, 300), vbBlue, B Picture1.Line (100, 100)-(300, 300), vbBlue Picture1.Line (100, 300)-(300, 100), vbBlue и фрагмент 'Это фото вашего друга, рисуем значок: Picture1.Circle (200, 200), 20 Picture1.Circle (200, 200), 70 Picture1.Circle (200, 200), 120 Picture1.Circle (200, 200), 170 которые в нашей программе встретились по два раза, а когда число фото вырастет, то встретятся многократно. В этом случае программисты всего мира поступают так. Они придумывают повторяющимся фрагментам имена, например, Рисуем_мой_значок и Рисуем_значок_друга Затем они вписывают в программу специальную процедуру для каждого фрагмента с придуманным только-что именем, после чего имеют право во всей программе вместо фрагмента писать его имя. Чтобы вам было понятно, посмотрите на получившуюся программу: Private Sub Рисуем_мой_значок() 'Это одна специальная процедура Picture1.Line (100, 100)-(300, 300), vbBlue, B Picture1.Line (100, 100)-(300, 300), vbBlue Picture1.Line (100, 300)-(300, 100), vbBlue End Sub
Private Sub Рисуем_значок_друга() 'Это другая специальная процедура Picture1.Circle (200, 200), 20 Picture1.Circle (200, 200), 70 Picture1.Circle (200, 200), 120 Picture1.Circle (200, 200), 170 End Sub 'Это новый текст программы: Private Sub Command1_Click() Picture1.Picture = LoadPicture(" c: \temp\Rockies.bmp") Рисуем_мой_значок Picture1.Print, " 21.07.2001" End Sub
Private Sub Command2_Click() Picture1.Picture = LoadPicture(" c: \temp\Porthole.bmp") Рисуем_мой_значок Picture1.Print, " 28.07.2001" End Sub
Private Sub Command3_Click() Picture1.Picture = LoadPicture(" c: \temp\Balloons.bmp") Рисуем_значок_друга Picture1.Print, " 12.08.2001" End Sub
Private Sub Command4_Click() Picture1.Picture = LoadPicture(" c: \temp\Guitar.bmp") Рисуем_значок_друга Picture1.Print, " 20.07.2001" End Sub Пояснение того же самого другими словами: У нас добавилось две процедуры. Каждая из этих процедур представляет собой цепочку операторов, из которых состоит упомянутый фрагмент. Сверху цепочки вы пишете заголовок процедуры (Private Sub…), а снизу - конечную строчку процедуры (End Sub). Все операторы, из которых состоит процедура, кроме заголовка и конечной строки, будем называть телом процедуры. Как только эти процедуры написаны, компьютер " узнает", что такое Рисуем_мой_значок и Рисуем_значок_друга. Поэтому в остальных процедурах слова Рисуем_мой_значок и Рисуем_значок_друга используются, как настоящие операторы, и выполняются, как настоящие операторы. Суть их выполнения в том, что когда Visual Basic во время выполнения программы натыкается на оператор Рисуем_мой_значок, он ищет в программе процедуру с именем Рисуем_мой_значок и выполняет тело этой процедуры, после чего возвращается к выполнению программы. Этот процесс называется вызовом процедурыили обращением к процедуре. Обязательно выполните эту программу в пошаговом режиме! Обязательно обратите внимание, что после выполнения тела вызываемой процедуры (Рисуем_мой_значок) компьютер возвращается в вызывающую процедуру (Command1_Click) к выполнению оператора, следующего за оператором Рисуем_мой_значок (в нашем случае это оператор Print). Две дописанные нами процедуры называются процедурами пользователя, в отличие от привычных нам процедур обработки событий. Их коренное отличие от последних в том, что вызываются они не наступлением каких-то событий, а упоминанием их имени в других процедурах. Процедуры пользователя и являются " процедурами типа " Как" ". Вы можете сами посчитать, насколько новая программа будет короче старой при десяти фотографиях.
Есть еще один способ обратиться к процедуре. Вместо оператора Рисуем_мой_значок можно написать оператор Call Рисуем_мой_значок Смысл их совершенно одинаков. Вторым способом часто пользовались раньше. С английского слово " Call" переводится " Вызов". Взаимодействие процедур в программе Вызываемая процедура сама в процессе своей работы может вызвать какую-нибудь другую процедуру. И так далее. Потренируемся: Определите без компьютера, что напечатает программа: Private Sub Command1_Click() Print 1;: A: Print 2;: B: Print 3; End Sub
Private Sub A() Print 4; End Sub
Private Sub B() Print 5;: C: Print 6; End Sub
Private Sub C() Print 7; End Sub Работать программа начинает по щелчку по кнопке Command1. Вряд ли вам с непривычки удасться дать правильный ответ. Тогда непременно программу - в компьютер и пошаговый режим. Желтая полоска будет скакать по программе туда-сюда. Перед каждым нажатием на F8 вы обязаны предсказать, куда она прыгнет! Не сможете - нет смысла читать книгу дальше. Ответ: 1 4 2 5 7 6 3
Начинающим программистам не хочется писать процедуры пользователя, как не хочется им писать длинные имена и соблюдать отступы от левого края окна кода. " Ну и лопухи же эти профессиональные программисты, что осложняют себе жизнь этой морокой! " - думают они - " Наши программы отлично работают и безо всего этого". Верно, работают. Потому что программы коротенькие. Когда они станут длинными и напоминающими винегрет, все такие подрастающие программисты дружно зарыдают: " Мамочка, почему ты нас в детстве не научила слушаться взрослых?! " Запомните еще одно хорошее правило: Размеры любой процедуры не должны превышать одного экрана монитора. Если превышают, то даже если в ней нет повторяющихся фрагментов, все равно разбейте ее по смыслу на два-три фрагмента и каждый сделайте процедурой. Ваша программа будет гораздо легче читаться.
Задание 86: Дополните ваш фотоальбом процедурой пользователя, которая перед показом очередной фотографии воспроизводит один и тот же музыкальный звук, например, " c: \Windows\Media\Chimes.wav".
|