Главная Обратная связь

Дисциплины:






КЕРІВНИЦТВО ОПЕРАТОРА



 

Дана програма не вимагає попереднього установлення, для її запуску необхідно скопіювати в один каталог головний завантажувальний файл Meri.exe, файл динамічно підключуваної бібліотеки DLL.dll.

Вхідна інформація для обчислення потрапляє в програму з клавіатури: вона вводиться у призначеному для цього діалоговому вікні введення, що відкривається при натисканні кнопки «OK». Виведення інформації здійснюється у двох формах. Текстовий результат виводиться при натисненні пункту меню «Run», а графічний – «Result». Відомості про розробника виводяться при натиснені кнопки «About». При натиснені на пункт меню «Open», можна відкрити існуючий файл. Якщо натиснути на пункт меню «Save» чи відповідну йому кнопку на панелі інструментів результати виконання будуть збережені у файл. Натиснувши «Delete» можна видалити певний вказаний файл. Щоб вийти з програми необхідно вибрати пункт меню «Exit».

При роботі програми може виникнути таке повідомлення:

Cannot find or open file DLL.dll –це повідомлення виникає при запуску обчислення функції у разі, коли не знайдено файл динамічної бібліотеки, якому передаються данні для обчислення.

Внаслідок виникнення критичної помилки слід перезавантажити головну програму Meri.exe. [1]

 


ВИСНОВКИ

 

У результаті виконання даної курсової роботи було створено програму на мові С++ та з використанням підпрограми на мові програмування Assembler. Основна програма містить системне меню, рядок стану, панель інструментів.Виконується обчислення функції, що написана мовою програмування Assembler та під’єднана до основного проекту як динамічна бібліотека DLL.

Вхідна інформація для обчислення потрапляє в програму з клавіатури: вона вводиться у призначеному для цього діалоговому вікні введення, що відкривається при натисканні кнопки «OK». Виведення інформації здійснюється у двох формах. Текстовий результат виводиться при натисненні пункту меню «Run», а графічний – «Result». Відомості про розробника виводяться при натиснені кнопки «About». При натиснені на пункт меню «Open», можна відкрити існуючий файл. Якщо натиснути на пункт меню «Save» чи відповідну йому кнопку на панелі інструментів результати виконання будуть збережені у файл. Натиснувши «Delete» можна видалити певний вказаний файл. Щоб вийти з програми необхідно вибрати пункт меню «Exit».

Дані для обчислень в програмі вводяться в діалоговому вікні. Результат обчислень виводиться в окремих вікнах (вивід числового результату та графічного). Програма виконує стандартні операції “Open”, “Save”, “Delete”.

Програма викликається за рахунок запускання її виконуваного файлу Meri.exe, що знаходить в папці Meri\Main\Debug. Для її правильного функціонування необхідно, щоб у папці де знаходиться файл Meri.exe також розміщувався файл DLL.dl, що містить динамічно підключувану бібліотеку, яка використовується при роботі. Файл DLL.dll знаходиться в папці Meri\DLL\Debug.



Виконуючи завдання курсової роботи я поглибила свої навички з написання системних об’єктно-орієнтованих програм, навчилася створювати складні програми з допомогою бібліотек MFC пакету Microsoft Visual Studio 2008.


ПЕРЕЛІК ПОСИЛАНЬ

 

1. Семеренко В. П., Програмування мовами С та С++ в середовищі Windows.– Вінниця: ВНТУ, 2002 р. –128с.

2. Секунов Н. Ю. Самоучитель Visual C++. – СПб.: БХВ-Петербург , 2002. – 736 с.

3. Шеферд Джордж, Программирование на MicroSoft Visual C++/Пер. с англ, - М.: “Русская Редакція”, 2003.—928с.

4. Крупник А. К., Изучаем Ассемблер.– СПб.: Питер, 2004 г. –256с.

5.Нікітченко М. С. Теоретичні основи програмування : навчальний посібник / М.С Нікітченко — Ніжин : Видавництво НДУ імені Миколи Гоголя, 2010. — 121с.

6. Поляков А. К., Брусенцев В.С., Методы и алгоритмы компьютерной графики в примерах на Visual C++.– СПб.: БХВ-Петербург, 2003 г. –560с.

7. Герберт Шилдт. Полный справочник по С.–Київ: Вільямс, 2002г.– 365с.

8. Бурдаев О. В., Иванов М. А., Тетерин И. И.– Ассемблер в задачах защиты информации.–Москва: КУДИЦ-Образ, 2004 г.– 320с.

9. Баженова І. Ю., Visual C++ 6.0 Уроки програмування.– Київ: Фоліо,1997. – 634с.

 

 


 

 

ДОДАТКИ


ДОДАТОК А

Лістинг головної програми

 

#include <afxwin.h>

#include <afxext.h>

#include "Resource.h"

CString buf, bufI, bufII;

class CGraphWnd:public CFrameWnd

{

public:

CGraphWnd(CWnd *Wnd);

};

CGraphWnd::CGraphWnd(CWnd *WndParent)

{

Create(NULL,"Draw",WS_SYSMENU,rectDefault,WndParent,NULL);

};

class CMyDialogI:public CDialog{

public:

CMyDialogI(CWnd* pParent=NULL);

enum {IDD=IDD_DIALOG1};

CEdit edit1;

protected:

virtual void DoDataExchange(CDataExchange* pDX);

 

protected:

BOOL OnInitDialog();

afx_msg void OnOK();

DECLARE_MESSAGE_MAP()

};

CMyDialogI::CMyDialogI(CWnd* pParent):CDialog(CMyDialogI::IDD, pParent)

{}

void CMyDialogI::DoDataExchange(CDataExchange* pDX){

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, ID_EDIT1, edit1);

}

BEGIN_MESSAGE_MAP(CMyDialogI, CDialog)

ON_COMMAND(IDOK,OnOK)

END_MESSAGE_MAP();

BOOL CMyDialogI::OnInitDialog(){

CDialog::OnInitDialog();

CString Text;

CFileDialog dlgOpen(TRUE, "txt","", OFN_HIDEREADONLY, "Текстовий файл (*.txt)| *.txt| ALL Files(*.*)|*.*|", this);

if(dlgOpen.DoModal()==IDOK){

CStdioFile File(dlgOpen.GetPathName(), CFile::modeRead| CFile::typeBinary);

edit1.SetWindowText(dlgOpen.GetPathName());

bufI=dlgOpen.GetPathName();

File.Close();

}

return TRUE;

}

void CMyDialogI::OnOK()

{

edit1.GetWindowText(bufII);

DeleteFile(bufII);

CDialog::OnOK();

}

class CMyDialogII:public CDialog{

public:

CMyDialogII(CWnd* pParent=NULL);

enum {IDD=IDD_DIALOG2};

CEdit edit1;

protected:

virtual void DoDataExchange(CDataExchange* pDX);

protected:

BOOL OnInitDialog();

afx_msg void OnOK();

DECLARE_MESSAGE_MAP()

};

CMyDialogII::CMyDialogII(CWnd* pParent):CDialog(CMyDialogII::IDD, pParent)

{}

void CMyDialogII::DoDataExchange(CDataExchange* pDX){

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, ID_EDIT1, edit1);

}

BEGIN_MESSAGE_MAP(CMyDialogII, CDialog)

ON_COMMAND(IDOK,OnOK)

END_MESSAGE_MAP();

BOOL CMyDialogII::OnInitDialog(){

CDialog::OnInitDialog();

CString Text;

CFileDialog dlgOpen(TRUE, "txt","", OFN_HIDEREADONLY, "Текстовий файл (*.txt)| *.txt| ALL Files(*.*)|*.*|", this);

if(dlgOpen.DoModal()==IDOK){

CStdioFile File(dlgOpen.GetPathName(), CFile::modeRead| CFile::typeBinary);

edit1.SetWindowText(dlgOpen.GetPathName());

bufI=dlgOpen.GetPathName();

File.Close();

}

return TRUE;

}

void CMyDialogII::OnOK()

{

edit1.GetWindowText(bufII);

MoveFile(bufI,bufII);

CDialog::OnOK();

}

class CMyDialog:public CDialog

{

public:

CMyDialog(CWnd* pParent=NULL);

enum {IDD=IDD_DIALOG3};

CEdit edit1;

protected:

virtual void DoDataExchange(CDataExchange* pDX);

 

protected:

BOOL OnInitDialog();

afx_msg void OnOK();

DECLARE_MESSAGE_MAP()

};

 

CMyDialog::CMyDialog(CWnd* pParent)

:CDialog(CMyDialog::IDD, pParent)

{}

void CMyDialog::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

DDX_Control(pDX, ID_EDIT1, edit1);

}

BEGIN_MESSAGE_MAP(CMyDialog, CDialog)

ON_COMMAND(IDOK,OnOK)

END_MESSAGE_MAP();

void CMyDialog::OnOK()

{

char str[80];

edit1.GetWindowText(buf);

CDialog::OnOK();

}

BOOL CMyDialog::OnInitDialog()

{

CDialog::OnInitDialog();

edit1.SetWindowText(CString("0"));

return TRUE;

}

class CMyFrameWnd:public CFrameWnd

{

public:

CMyFrameWnd();

protected:

CStatusBar m_wndStatusBar;

CToolBar m_wndToolBar;

afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

DECLARE_MESSAGE_MAP();

public:

afx_msg void OnExit();

afx_msg void OnAboutHelp();

afx_msg void OnAboutAbout();

afx_msg void OnFileDelete();

afx_msg void OnFileSave40003();

afx_msg void OnCalcRun();

afx_msg void OnFileRename();

afx_msg void OnCalcDraw();

};

BEGIN_MESSAGE_MAP(CMyFrameWnd, CFrameWnd)

ON_WM_CREATE()

ON_COMMAND(ID_EXIT, &CMyFrameWnd::OnExit)

ON_COMMAND(ID_ABOUT_HELP, &CMyFrameWnd::OnAboutHelp)

ON_COMMAND(ID_ABOUT_ABOUT, &CMyFrameWnd::OnAboutAbout)

ON_COMMAND(ID_FILE_DELETE, &CMyFrameWnd::OnFileDelete)

ON_COMMAND(ID_FILE_SAVE40003, &CMyFrameWnd::OnFileSave40003)

ON_COMMAND(ID_CALC_RUN, &CMyFrameWnd::OnCalcRun)

ON_COMMAND(ID_FILE_RENAME, &CMyFrameWnd::OnFileRename)

ON_COMMAND(ID_CALC_DRAW, &CMyFrameWnd::OnCalcDraw)

END_MESSAGE_MAP();

static UINT indicators[] =

{

ID_SEPARATOR,

ID_INDICATOR_CAPS,

ID_INDICATOR_NUM,

ID_INDICATOR_SCRL,

};

CMyFrameWnd::CMyFrameWnd()

{

Create(NULL,"Студенка 1КІ-11Б Колесніченко Марина Андріївна",

WS_OVERLAPPEDWINDOW,rectDefault,NULL,

MAKEINTRESOURCE(IDR_MAINFRAME));

};

int CMyFrameWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

if (CFrameWnd::OnCreate(lpCreateStruct) == -1)

return -1;

 

if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD

| WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS

| CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

{

TRACE0("Failed to create toolbar\n");

return -1;

}

if (!m_wndStatusBar.Create(this)||

!m_wndStatusBar.SetIndicators(indicators,

sizeof(indicators)/sizeof(UINT)))

{

TRACE0("Failed to create status bar\n");

return -1;

}

return 0;

}

class CMyApp:public CWinApp

{

public:

virtual BOOL InitInstance();

};

BOOL CMyApp::InitInstance()

{

CMyFrameWnd *pMainWnd=new CMyFrameWnd;

m_pMainWnd=pMainWnd;

m_pMainWnd->ShowWindow(m_nCmdShow);

m_pMainWnd->UpdateWindow();

return TRUE;

};

CMyApp app;

void CMyFrameWnd::OnExit()

{

SendMessage(WM_CLOSE);

}

void CMyFrameWnd::OnAboutHelp()

{

::MessageBox(NULL,"Для перевірки програми прочитайте індевідуалне завдання.","Help",MB_OK|MB_ICONINFORMATION);

}

void CMyFrameWnd::OnAboutAbout()

{

MessageBox("Виконала студентка групи 1КІ-11Б \nКолесніченко Марина Андріївна","About");

}

void CMyFrameWnd::OnFileDelete()

{

CMyDialogI dialog(this);

dialog.DoModal();

}

void CMyFrameWnd::OnFileSave40003()

{

CString string="Виконала студентка групи 1КІ-11Б \nКолесніченко Марина Андріївна";

CFileDialog DlgSave(FALSE,"txt","",OFN_HIDEREADONLY,

"Text file (*.txt)|*.txt|All Files(*.*)|*.*|",this);

if(DlgSave.DoModal()==IDOK){

CStdioFile File(DlgSave.GetPathName(),

CFile::modeCreate | CFile::modeWrite);

File.WriteString(LPCSTR(string));

}

void CMyFrameWnd::OnCalcRun()

{

CMyDialog dialog(this);

dialog.DoModal();

}

void CMyFrameWnd::OnFileRename()

{

CMyDialogII dialog(this);

dialog.DoModal();

}

void CMyFrameWnd::OnCalcDraw()

{

CGraphWnd * GraphWnd=new CGraphWnd(this);

GraphWnd->ShowWindow(SW_SHOWNORMAL);

GraphWnd->UpdateWindow();

CClientDC DCS(GraphWnd);

 

char s[255];

float res;

float x=atof(buf);

HINSTANCE Dllasm;

Dllasm = LoadLibraryA("Dll.dll");

typedef float(* fDll)(float);

fDll calc;

calc=(fDll)GetProcAddress(Dllasm, "Calc");

res=calc(x);

sprintf(s,"%f",res);

FreeLibrary(Dllasm);

CPen pen;

CBrush brush;

pen.CreatePen( PS_SOLID, 2, RGB( 20, 100, 150));

brush.CreateHatchBrush(HS_CROSS, RGB( 200, 100, 100));

DCS.SelectObject(&pen);

DCS.SelectObject(&brush);

DCS.MoveTo(100, 110);

DCS.LineTo(500, 110);

CRect rect(60,300,460,250);

DCS.Rectangle(&rect);

CPoint mas[3];

mas[0].x=260;

mas[0].y=130;

mas[1].x=200;

mas[1].y=200;

mas[2].x=320;

mas[2].y=200;

DCS.Polygon(mas,3);

DCS.TextOut(200,350,"Result: ");

DCS.TextOut(250,350,s);

DCS.TextOut(600,100,"Курсова робота");

DCS.TextOut(600,120,"Колесніченко Марини Андріївни");

if(x<=0){

pen.CreatePen( PS_SOLID, 2, RGB( 20, 100, 150));

brush.CreateHatchBrush(HS_CROSS, RGB( 255, 0, 0));

}else if(x==12){

pen.CreatePen( PS_SOLID, 2, RGB( 20, 100, 150));

brush.CreateHatchBrush(HS_CROSS, RGB( 0, 0, 255));

}else if(x==24){

pen.CreatePen( PS_SOLID, 2, RGB( 20, 100, 150));

brush.CreateHatchBrush(HS_CROSS, RGB( 0, 255, 0));

}else{

pen.CreatePen( PS_SOLID, 2, RGB( 20, 100, 150));

brush.CreateHatchBrush(HS_CROSS, RGB( 200, 100, 100));

}

DCS.SelectObject(&pen);

DCS.SelectObject(&brush);

DCS.Ellipse(20, 20, 200, 200);

DCS.Ellipse(500, 20, 320, 200);

 

}


ДОДАТОК Б

Лістинг динамічної бібліотеки DLL

 

#include <windows.h>

extern "C" __declspec(dllexport) float Calc(float X){

float Y(0);

float A(0), B(12), C(24), D(10), E(3), F(30), G(1), H(2), K(0);

_asm { Finit

Fld C; //ST(3)

Fld B; //ST(2)

Fld A; //ST(1)

Fld X; //ST(0)

Fcomi ST(0), ST(1)

jbe REZ_I;

Fcomi ST(0), ST(2)

je REZ_II;

Fcomi ST(0), ST(3)

je REZ_III;

jmp EXIT

REZ_I:

Finit;

Fld K;//ST(3) = 0

Fld E;//ST(3) = 3

Fld D;//ST(2) = 10

Fld X;//ST(1)

Fld Y;//ST(0)

Fadd ST(0), ST(3)

Fadd ST(0), ST(1)

Fxch ST(4)

Fadd ST(0), ST(2)

Fmul ST(0), ST(1)

Fdiv ST(0), ST(4)

Fst Y;

jmp EXIT

REZ_II:

Finit;

Fld K;//ST(3) = 0

Fld G;//ST(3) = 1

Fld F;//ST(2) = 30

Fld X;//ST(1)

Fld Y;//ST(0)

Fadd ST(0), ST(3)

Fsub ST(0), ST(1)

Fxch ST(4)

Fadd ST(0), ST(1)

Fmul ST(0), ST(1)

Fmul ST(0), ST(1)

Fmul ST(0), ST(2)

Fdiv ST(0), ST(4)

Fst Y;

jmp EXIT

REZ_III:

Finit;

Fld H;//ST(1)

Fld Y;//ST(0)

Fadd ST(0), ST(1)

Fst Y;

jmp EXIT

EXIT:

} return Y; }





sdamzavas.net - 2017 год. Все права принадлежат их авторам! В случае нарушение авторского права, обращайтесь по форме обратной связи...