Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / отчет курсач ОС (2).docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
782.98 Кб
Скачать

Список литературы

  1. Ю.А.Щупак - Win32 API. Разработка приложений для Windows. - СПб.: Питер, 2008

  2. Черкасова Н.И. Операционные системы [Текст]: учебно-методическое пособие по выполнению курсовой работы / Н.И. Черкасова. – М.: ИД Академии Жуковского, 2020. – 32 с.

  3. Форум программистов и сисадминов Киберфорум www.cyberforum.ru

  4. Официальный сайт Microsoft https://learn.microsoft.com/ru-ru/

  5. Stack Overflow — система вопросов и ответов о программировании https://stackoverflow.com/

ПРИЛОЖЕНИЕ 1

Руководство пользователя

Для использования приложения необходимо создать папку, в которую надо переместить файл test.exe, см. рис. 4.

Рис. 4. Папка с файлами программы

Для того, чтобы перевести одну валюту в другую, необходимо в первом столбце выбрать, что мы хотим перевести, а во втором столбце выбрать, куда мы переводим. После этого нажимаем на кнопку "Convert" и в окне сообщения получаем результат. Если вы хотите конвертировать из какой-либо валюты в рубли, то не выбирайте ничего во второй колонке, сразу после выбора первой нажмите кнопку "Convert". Результаты этих действий представлены на рис. 5, 6, 7 и 8.

Рис. 5. Результат выбора Британских стерлингов и Аргентинских песо

Рис. 6. Результат перевода Британских стерлингов в Аргентинские песо

Рис. 7. Результат выбора Индийских рупий и Российских рублей

Рис. 8. Результат перевода Индийских рупий в Российский рубль

Чтоб прочитать руководство по использованию необходимо нажать на кнопку "How to use". Результат представлен на рис. 9.

Рис. 9. Результат нажатия на кнопку "How to use"

Чтоб узнать, кто разработал приложение, нужно нажать на кнопку "About". Результат представлен на рис. 10.

Рис. 10. Результат нажатия на кнопку "About"

Чтоб выйти из приложения нужно нажать на крестик в правом верхнем углу окна приложения. После этого появится окошко, в котором нужно будет подтвердить намерение выйти из приложения, нажав на кнопку "ОК". Результат представлен на рис. 11.

Рис. 11. Результат нажатия на крестик в правом верхнем углу окна приложения

ПРИЛОЖЕНИЕ 2

Листинг программ Файл test.Cpp

#include <windows.h>

#include <tchar.h>

#include <sstream>

#include "windowsx.h"

#include "resource.h"

#define IDC_LB1 5

#define IDC_LB2 6

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

INT_PTR CALLBACK Proc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);

WCHAR buf1[1024];

HWND hwndListbox1;

HWND hwndListbox2;

HWND hwndEdit;

HWND hwndStatic1;

HWND hwndStatic2;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int

nCmdShow)

{

MSG msg;

WNDCLASSEX wc;

wc.cbSize = sizeof(wc);

wc.style = CS_HREDRAW | CS_VREDRAW;

wc.lpfnWndProc = WndProc;

wc.cbClsExtra = 0;

wc.cbWndExtra = 0;

wc.hInstance = hInstance;

wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);

wc.hCursor = LoadCursor(NULL, IDC_UPARROW);

wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);

wc.lpszMenuName = NULL;

wc.lpszClassName = L"ClassName";

wc.hIconSm = LoadIcon(NULL, IDI_ERROR);

if (!RegisterClassEx(&wc)) {

MessageBox(NULL, L"Cannot register class", L"Error", MB_OK);

return 0;

}

HWND hMainWnd = CreateWindow(

L"ClassName", L"Currency converter", WS_OVERLAPPEDWINDOW,

0, 0, 640, 480,

(HWND)NULL, (HMENU)NULL,

(HINSTANCE)hInstance, NULL

);

if (!hMainWnd) {

MessageBox(NULL, L"Cannot create main window", L"Error", MB_OK);

return 0;

}

HWND hwndButton1 = CreateWindow(

L"BUTTON", // Predefined class; Unicode assumed

L"Convert", // Button text

WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_BORDER, // Styles

50, // x position

300, // y position

70, // Button width

70, // Button height

hMainWnd, // Parent window

(HMENU)2, // No menu.

(HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE),

NULL); // Pointer not needed.

HWND hwndButton2 = CreateWindow(

L"BUTTON", // Predefined class; Unicode assumed

L"About", // Button text

WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_BORDER, // Styles

400, // x position

100, // y position

70, // Button width

70, // Button height

hMainWnd, // Parent window

(HMENU)4, // No menu.

(HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE),

NULL); // Pointer not needed.

HWND hwndButton3 = CreateWindow(

L"BUTTON", // Predefined class; Unicode assumed

L"How to use", // Button text

WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_BORDER, // Styles

400, // x position

180, // y position

100, // Button width

70, // Button height

hMainWnd, // Parent window

(HMENU)9, // No menu.

(HINSTANCE)GetWindowLongPtr(hMainWnd, GWLP_HINSTANCE),

NULL); // Pointer not needed.

ShowWindow(hMainWnd, nCmdShow);

while (GetMessage(&msg, NULL, 0, 0)) {

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return msg.wParam;

}

typedef struct

{

WCHAR curencyName[MAX_PATH];

double value;

} Curency;

//курс на 27.02.2024

Curency names[] =

{

{TEXT("Australian Dollar"), 52.92},

{TEXT("Belgum Euro"), 97.85},

{TEXT("Argentine Peso"), 1.0},

{TEXT("Belarussian Ruble"), 27.96},

{TEXT("British Sterling"), 113.8},

{TEXT("Guinea Franc"), 1.0},

{TEXT("Gibraltar Pound"), 1.0},

{TEXT("Danish Krone"), 13.12},

{TEXT("Indian Rupee"), 1.075},

{TEXT("Kazahatan Tenge"), 0.1897},

{TEXT("North Korea Won"), 1.0},

{TEXT("Bitcoin"), 2643750.18},

{TEXT("Turkish Lira"), 2.995},

{TEXT("Uganda Shilling"), 1.0},

{TEXT("Japan Yen"), 0.6181},

};

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)

{

HDC hDC;

PAINTSTRUCT ps;

RECT rect;

HICON hIcon;

HICON sm;

HINSTANCE h;

h = GetModuleHandle(NULL);

switch (uMsg)

{

case WM_CREATE:

hwndListbox1 = CreateWindow(

L"ListBox", // Predefined class; Unicode assumed

L"Currency", // Button text

WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_BORDER, // Styles

50, // x position

50, // y position

150, // Button width

250, // Button height

hWnd, // Parent window

(HMENU)IDC_LB1, // No menu.

(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),

NULL); // Pointer not needed.

hwndListbox2 = CreateWindow(

L"ListBox", // Predefined class; Unicode assumed

L"Currency", // Button text

WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | WS_BORDER, // Styles

210, // x position

50, // y position

150, // Button width

250, // Button height

hWnd, // Parent window

(HMENU)IDC_LB2, // No menu.

(HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE),

NULL); // Pointer not needed.

hwndStatic1 = CreateWindow(TEXT("STATIC"),

TEXT("Choose currency 1"), // Label tipo

WS_VISIBLE | WS_CHILD,

50,

10,

100,

40,

hWnd,

(HMENU)10,

NULL,

NULL

);

hwndStatic2 = CreateWindow(TEXT("STATIC"),

TEXT("Choose currency 2"), // Label tipo

WS_VISIBLE | WS_CHILD,

210,

10,

100,

40,

hWnd,

(HMENU)11,

NULL,

NULL

);

h = GetModuleHandle(NULL);

hIcon = LoadIcon(h, MAKEINTRESOURCE(IDI_SMALL));

sm = (HICON)LoadImage(h, MAKEINTRESOURCE(IDI_SMALL), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR);

SetClassLongPtr(hWnd, GCLP_HICON, (LONG_PTR)hIcon);

SetClassLongPtr(hWnd, GCLP_HICONSM, (LONG_PTR)sm);

for (int i = 0; i < ARRAYSIZE(names); i++) {

SendMessage(hwndListbox1, LB_ADDSTRING, 1, (LPARAM)names[i].curencyName);

}

for (int i = 0; i < ARRAYSIZE(names); i++) {

SendMessage(hwndListbox2, LB_ADDSTRING, 1, (LPARAM)names[i].curencyName);

}

break;

case WM_PAINT:

hDC = BeginPaint(hWnd, &ps);

GetClientRect(hWnd, &rect);

HICON LoadIcon(HINSTANCE hInstance, LPCTSTR lpIconName);

EndPaint(hWnd, &ps);

break;

case WM_CLOSE:

if (MessageBox(hWnd, L"Do you really wan to exit?", L"Warning", MB_OKCANCEL) == IDOK) {

DestroyWindow(hWnd);

}

break;

case WM_DESTROY:

PostQuitMessage(0);

break;

case WM_COMMAND:

if (wParam == 4) {

GetDlgItemTextW(hWnd, 3, buf1, 200);

DialogBox(h, MAKEINTRESOURCE(IDD_DIALOG3), hWnd, Proc);

return TRUE;

}

if (wParam == 9) {

GetDlgItemTextW(hWnd, 3, buf1, 200);

DialogBox(h, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, Proc);

return TRUE;

}

if (wParam == 2) {

int top = ListBox_GetCurSel(hwndListbox1);

int top2 = ListBox_GetCurSel(hwndListbox2);

WCHAR buf[1000] = { ' ' };

double x;

x = names[top].value / names[top2].value;

std::wstringstream s;

s << x;

if (top2 == LB_ERR) {

std::wstringstream s2;

s2 << names[top].value;

wcscat(buf, L"In 1 Russian Ruble - ");

wcscat(buf, s2.str().c_str());

wcscat(buf, L" ");

wcscat(buf, names[top].curencyName);

MessageBox(hWnd, buf, L"Result", MB_OK);

}

else {

wcscat(buf, L"In 1 ");

wcscat(buf, names[top].curencyName);

wcscat(buf, L" - ");

wcscat(buf, s.str().c_str());

wcscat(buf, L" ");

wcscat(buf, names[top2].curencyName);

MessageBox(hWnd, buf, L"Result", MB_OK);

}

}

break;

default:

return DefWindowProc(hWnd, uMsg, wParam, lParam);

}

return 0;

}

INT_PTR CALLBACK Proc(HWND hDlg, UINT uMsg, WPARAM wParam,

LPARAM lParam)

{

switch (uMsg) {

case WM_COMMAND:

switch (LOWORD(wParam)) {

case IDOK:

case IDCANCEL:

EndDialog(hDlg, 0);

}

break;

}

return FALSE;

}

ПРИЛОЖЕНИЕ 3

Соседние файлы в папке курсовая