Автоматична зміна шпалер на робочому столі та нагадування

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2024
Тип роботи:
Курсова робота
Предмет:
Системний аналіз та проектування комп ютерних інформаційних систем

Частина тексту файла (без зображень, графіків і формул):

Зміст Вступ………………………………………………………………….......………..4 Формулювання задачі…………………………………..…………….……………5 Алгоритм розв’язання задачі………………………………………………………6 Програмні реалізації алгоритму………………….…………………………….…8 Інструкція користувачеві програми…………………….………………………..11 Контрольні прилади та аналіз їх реалізації……………..……………………….13 Висновки…………………………………………….…………………………….14 Література……………………………………………………………………….…15 ВСТУП Тепер комп’ютери відіграють у житті людини все більшу та більш роль. Раніше, коли ще не було комп’ютерів, чи вони були мало розповсюдженні, все робилося вручну. Коли комп’ютери одержали широке розповсюдження, комп’ютер став допомагати людині, бо він може багато операцій робити набагато швидше, ніж людина. В цій курсовій роботі я спробував створити програму яка з могла б зацікавити користувача в роботі з комп’ютером, та допомогти йому в справах які важко запам’ятати… На даний час більшість людей мають діже багато справ, заклопотані в повсякденному житті, тому я розробив таку програму коли відкривши свій комп’ютер людині було б цікавіше коли в неї на робочому столі змінюються шпалери, а також нагадує про справу яку вона має зробити, чи завершити. Формулювання задачі Дана програма повинна автоматично змінювати шпалери відносно часу, а також повідомляти про свята, дні народження родини та друзів, чи будь яких справ які ви собі запланували. Для реалізації цієї програми я використовую усі можливі оператори мови асемблер. Метою розв’язання цієї задачі є зміна шпалер та нагадування. В результаті програмної реалізації користувач повинен отримати змінені шпалери та повідомлення про якусь справу, свято і т.п. Алгоритм програми Дана програма складається з двох частин в першій частині вона нагадуватиме про будь яку справу людині, а друга частина змінюватиме шпалери на робочому столі. Щоб наша програма працювала навіть тоді коли ми включили, а потім знову включили комп’ютер спершу ми заносимо ярлик exe файлу в авто загрузку за допомогою цієї функції: invoke CopyFile,addr file,addr newfile,1. В першій частині програми ми робимо такі дії: Дізнаємось теперішній час: Щоб дізнатись теперішній час використовуємо функцію: invoke GetSystemTime,addr time Відкриваємо та зчитуємо файл в якому записані всі справи; Файл знаходиться там де встановлена программа, зчитуємо його за допомогою функції: invoke ReadFile,hFile,pMemory,MEMSIZE-1,addr SizeRead,0 Порівнюємо теперішню дату з тими датами яка є у файлі: invoke lstrcmp,addr new1,addr new2; Виводимо на екран справу яку ми повинні зробити сьогодні: invoke MessageBox,0,addr new4,addr title1,MB_OK; Закриваємо файл: invoke CloseHandle,hFile. В другій частині ми робимо такі дії: Дізнаємось теперішню дату та час: invoke GetSystemTime,addr time; Дивимось на дату та час і міняємо картинку робочого стола на ту яка повинна бути; Зациклюємо програму так щоб вона робила перевірку кожних 10 секунд: invoke Sleep,10000. Програмні реалізції алгоритму Практичною метою нашої курсової роботи було написання мовою асемблер програми, яка б змінювала шпалери на робочому столі та нагадувала про будь-яку дату. Функція CopyFile: Копіює файл BOOL CopyFile( LPCTSTR lpExistingFileName, //вказівник на стрічку, що містить шлях + ім'я файлу, що копіюється; LPCTSTR lpNewFileName, //вказівник на стрічку, що містить шлях + файлу-копії (нове ім’я); BOOL bFailIfExists //якщо значення - ненульове, то в разі існування файлу-копії, функція не виконується; якщо значення - нульове - файл перезаписується. ); Результат: В позитивному випадку результат ненульовий Функція GetSystemTime: заповнює структуру SYSTEMTIME значенням поточного часу за Грінвичем VOID GetSystemTime( LPSYSTEMTIME lpSystemTime // адреса структури системного часу (SYSTEMTIME), яка буде заповнена. ); Результат: Функція нічого не повертає Функція ReadFile: читає файл BOOL ReadFile( HANDLE hFile // хендл файлу; LPVOID lpBuffer // блоку пам’яті в який попадуть дані; DWORD nNumberOfBytesToRead // кількість байтів, що треба зчитати; LPDWORD lpNumberOfBytesRead // адреса змінної де буде записано значення кількості зчитаних байтів; LPOVERLAPPED lpOverlapped // адреса структури спільного використання або NULL ); Результат: В позитивному випадку результат не нульовий Функція Lstrcmp: Порівнює дві стрічки з врахуванням регістру int lstrcmp( LPCTSTR lpString1, // адреса першої стрічки LPCTSTR lpString2 // адреса другої стрічки ); Результат: В позитивному випадку : String1 < String2 - відємне значення String1 > String2 - додатнє значення String1 = String2 - нуль Функція MessageBox: Створює і відображає блок діалогу, що містить вказане повідомлення і заголовок, а також зумовлені піктограми і текстові кнопки, відповідно до параметра uType. int MessageBox( HWND hWnd, // Вікно, що володіє блоком повідомлень, або NULL. LPCTSTR lpText, // Адреса рядка повідомлення, що відображається, або NULL LPCTSTR lpCaption, // Адреса рядка заголовоку блоку діалогу (або NULL - текст заголовока буде мати значення "Error"). UINT uType // Стиль вікна, Одна або комбінація констант MB_. ); Результат: IDABORT // Була вибрана кнопка перервати IDCANCEL // Була вибрана кнопка відмінити IDIGNORE // Була вибрана кнопка знехтувати IDNO // Була вибрана кнопка ні IDOK // Була вибрана кнопка OK IDRETRY // Була вибрана кнопка повторення IDYES // Була вибрана кнопка Так При натиснені клавіші ESC на клавиатурі MessageBox повертає значення IDCANCEL. Повертає NULL, якщо недостатньо пам'яті для відображення повідомлення Функція CloseHandle: Закриває відкритий об'єкт, хендл якого вказаний як параметр BOOL CloseHandle( HANDLE hObject //хендл об’єкту, який треба закрити. ); Результат: В позитивному випадку результат ненульовий Інструкція користувачеві У даній програмі користувач по суті нічого робити не повинен. Програма все робить замість нього, йому потрібно буде лише встановити дану програму на комп’ютер, а потім насолоджуватись роботою програми. Щоб встановити програму на комп’ютер користувачеві потрібно зробити такі дії: Перемістити папку під назвою “change and reminders” з диска на свій комп’ютер в будь-який корінь; Відкрити папку та записати справи які ви хочите щоб програма вам нагадувала Запусти ти exe файл який називається kurs і знаходиться в папці яку ви переміщали. Щоб записати справи які ви хочите щоб програма вам нагадувала потрібно зробити такі дії: Відкрити файл під назвою 1.txt за допомогою блокнота; Записати справи таким чином як показано на рис. 1;  Рис. 1 Зберегти записане та закрити файл. Контрольні прилади та аналіз їх реалізації Для відлагодження та перевірки працездатності програми я використовував такі тести рисунки зображені далі:  Рис. 2. Весна, обід. Щоб перевірити чи працює програма змінив дату та час:  Рис. 3. Осінь, ранок. Щоб перевірити чи працює нагадування змінив дату:  Рис. 3. Показує нагадування. За результатами тестів які я проводив можна сказати, що програма працює якісно і швидко та без жодної помилки. Висновки Отже на мою думку мені вдалось створити програму яка зможе допомагати людям та покращити настрій при роботі з комп’ютером. Поставлена задача була створити програму яка б змінювала шпалери та нагадувала справи які написав користувач, і я зміг виконати цю задачу. З усіх перевірок та тестів програма бездоганно працює на всіх комп’ютері. Не залежно від віку будь-який користувач зможе встановити цю програму за допомогою моїх підказок які я навів вище. Під час роботи над цією курсовою я дізнався більше про асемблер і думаю дальше розвивати свої ідеї в цьому напрямку. Список літератури Питер Абель, Ассемблер и программирование В. Юров. Справочная система по языку ассемблера Інтернет - http://ru.wikipedia.org/wiki/Ассемблер Інтернет - http://www.is.svitonline.com/vcg/materials_ukr.html Інтернет - http://213.59.170.24/1/Programming/Assembler/Index.html Додатки Текст програми include WINDOWS.inc include user32.inc include kernel32.inc include shell32.inc includelib shell32.lib includelib user32.lib includelib kernel32.lib .data kil dd 0 hour dw 0 lito db 'Літо',0 vesna db 'Весна',0 osin db 'Осінь',0 zuma db 'Зима',0 immage db 256 dup (0) ;================================================== immage vesna1 db '1.jpeg',0 vesna2 db '2.jpg',0 vesna3 db '3.jpeg',0 lito1 db '4.jpg',0 lito2 db '5.jpeg',0 lito3 db '6.jpg',0 osin1 db '7.JPG',0 osin2 db '8.jpg',0 osin3 db '9.jpg',0 zuma1 db '10.jpg',0 zuma2 db '11.jpg',0 zuma3 db '12.jpg',0 ;=================================================== startup DIRECTORY_ID dd 0 DIRECTORY_NAME db 512 dup(0) file db 'kurs.lnk',0 newname db '\Made by Demianovskyi.lnk',0 newfile db 256 dup (0) ;================================================== нагадування title1 db 'Нагадування Made by Demianovskyi',0 openname db '1.txt',250 dup(0) hFile dd 0 hMemory dd 0 ; Хендл блоку пам'яті pMemory dd 0 ; Адреса блоку пам'яті SizeRead dd 0 MEMSIZE equ 1000000h ; 16 Mb format db '%ld',0 bufer db '.',0 bufer1 db 1000 dup (0) new db 2000 dup (0) radok db 256 dup (0) new1 db 256 dup (0) new2 db 256 dup (0) new3 db 256 dup (0) point db '.',0 new4 db 1000 dup (0) new5 db 0dh,0ah new10 db 1000 dup (0) .386 .model flat,STDCALL option casemap :none ;case sensitive include kurs.inc .code Begin: call main invoke ExitProcess,NULL main proc LOCAL time:SYSTEMTIME ;=============================================================== startup invoke SHGetSpecialFolderLocation,0,7,addr DIRECTORY_ID invoke SHGetPathFromIDList,DIRECTORY_ID,addr DIRECTORY_NAME invoke lstrcpy,addr newfile,addr DIRECTORY_NAME invoke lstrcat,addr newfile,addr newname invoke CopyFile,addr file,addr newfile,1 m1: invoke GetSystemTime,addr time mov ax,time.wHour mov hour,ax ;================================================================== нагадування ;================================================================================================================== inc kil .if kil == 1 invoke wsprintf,addr new2,addr format,time.wDay invoke wsprintf,addr new3,addr format,time.wMonth invoke lstrcat,addr new2,addr point invoke lstrcat,addr new2,addr new3 ;================================================================== нагадування ;=========================================================================== читаєм файл invoke CreateFile,addr openname,GENERIC_READ,FILE_SHARE_READ,0,OPEN_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0 mov hFile,eax ; отримали хендл файлу invoke GlobalAlloc,2h + 40h,MEMSIZE mov hMemory,eax ; отримали хендл блоку пам'яті invoke GlobalLock,hMemory ; розмістили блок mov pMemory,eax ; та отримали його адресу invoke ReadFile,hFile,pMemory,MEMSIZE-1,addr SizeRead,0 ;========================================================== invoke lstrcpy,addr new,pMemory lea esi,new m2: lea edi,bufer1 m3: .if byte ptr [esi] == 13 jmp exit .endif .if byte ptr [esi] == 0 jmp exit1 .endif mov al,byte ptr [esi] mov byte ptr [edi],al inc esi inc edi jmp m3 exit: inc esi mov byte ptr [edi],0 ;========================================================= в буфер1 рядок invoke lstrcpy,addr radok,addr bufer1 lea edx,bufer1 lea ecx,new1 m10: .if byte ptr [edx] == " " jmp ex2 .endif mov al,byte ptr [edx] mov byte ptr [ecx],al inc edx inc ecx jmp m10 ex2: inc edx mov byte ptr [ecx],0 ;======================================================== new1- data radok-all line invoke lstrcmp,addr new1,addr new2 .if eax == 0 invoke lstrcat,addr new4,addr radok invoke lstrcat,addr new4,addr new5 .endif inc esi jmp m2 exit1: .if new4 == 0 jmp exit2 .else invoke MessageBox,0,addr new4,addr title1,MB_OK .endif exit2: mov new4,0 invoke CloseHandle,hFile ; закрити файл invoke GlobalUnlock,hMemory ; розблокувати блок пам'яті invoke GlobalFree,hMemory ; звільнити блок пам'яті .endif ;=========================================================================================== ;============================================================================================ ;================================================================ vesna .if time.wMonth > 2 && time.wMonth < 6 .if hour > 2 && hour < 10 invoke lstrcpy,addr immage,addr vesna1 .elseif hour > 9 && hour < 16 invoke lstrcpy,addr immage,addr vesna2 .else invoke lstrcpy,addr immage,addr vesna3 .endif ;================================================================= lito .elseif time.wMonth > 5 && time.wMonth < 9 .if hour > 2 && hour < 10 invoke lstrcpy,addr immage,addr lito1 .elseif hour > 9 && hour < 16 invoke lstrcpy,addr immage,addr lito2 .else invoke lstrcpy,addr immage,addr lito3 .endif ;================================================================= osin .elseif time.wMonth > 8 && time.wMonth < 12 .if hour > 2 && hour < 10 invoke lstrcpy,addr immage,addr osin1 .elseif hour > 9 && hour < 16 invoke lstrcpy,addr immage,addr osin2 .else invoke lstrcpy,addr immage,addr osin3 .endif ;================================================================= zuma .else .if hour > 2 && hour < 10 invoke lstrcpy,addr immage,addr zuma1 .elseif hour > 9 && hour < 16 invoke lstrcpy,addr immage,addr zuma2 .else invoke lstrcpy,addr immage,addr zuma3 .endif .endif ;================================================================== set immage invoke SystemParametersInfo,SPI_SETDESKWALLPAPER,0,addr immage,SPIF_SENDWININICHANGE + SPIF_UPDATEINIFILE mov immage,0 ;================================================================= sleep invoke Sleep,10000 jmp m1 ret main endp end Begin
Антиботан аватар за замовчуванням

14.12.2013 01:12-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!