3. Инструкция пользователя

Запуск программы осуществляется при открытии файла kurs.exe, который находится на дискете. При этом на экране появиться окно, в левой верхней части которого будет видна надпись "Удаление комментариев из текста программы " – это имя программы. Для работы необходимо указать исходный и конечный файлы, введя их пути в текстовые окна или выбрав их в диалоге выбора. Если файл имеет неизвестное программе расширение, необходимо дополнительно выбрать язык в диалоге, который автоматически появляется после выбора файла. Затем необходимо нажать кнопку "Удалить комментарии". Если текст программы не содержит некорректно расставленных комментариев, выдается сообщение об успешном выполнении операции.

Системные требования: Pentium 100 , 16 MB RAM, Windows 95/98/2000 NT/XP.


Заключение

В ходе выполнения данного курсового проекта были разработана программа на языке высокого программирования Visual C++. Также изучены графические возможности данного языка.

Систематизированы и закреплены практические навыки использования ЭВМ, программного обеспечения, существующих средств обслуживания системных программистов, а также теоретические знания по основным разделам курса "Программирование". Основное внимание уделено изучению современных операционных систем, способов проектирования приложений, объектно-ориентированному и системному программированию.

При выполнении курсового проекта произведено знакомство с реферативными журналами и другими информационными источниками по объектно-ориентированному и системному программированию с целью анализа состояния решаемой задачи.

Получены практические навыки работы в среде Visual C++ и в графической среде разработки.


Литература

1. Петзольд Ч. Программирование под Windows 95. В двух книгах: BHV – Санкт - Петербург, 2007, silt.

2. Ричард С.Линкер, Том Арчер. Программирование для Windows 7. Библия разработчика. "Диалектика " – Москва, 2009.-864 с.: ил.- Парал. тит. англ. Уч.пос.

3. Джесс Либерти. С++ за 21 день. "Вильямс" - Москва, 2000.-816 с.: ил. .- Парал.тит. англ.


Приложение

Файл kursDlg.cpp

// kursDlg.cpp : implementation file

//

#include "stdafx.h"

#include "kurs.h"

#include "kursDlg.h"

#include "SelectLangDlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

#define LANG_CPP 1

#define LANG_PASCAL 2

#define LANG_BASIC 3

#define LANG_ASM 4

/////////////////////////////////////////////////////////////////////////////

// CKursDlg dialog

CKursDlg::CKursDlg(CWnd* pParent /*=NULL*/)

: CDialog(CKursDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CKursDlg)

// NOTE: the ClassWizard will add member initialization here

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CKursDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CKursDlg)

// NOTE: the ClassWizard will add DDX and DDV calls here

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CKursDlg, CDialog)

//{{AFX_MSG_MAP(CKursDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BTNSOURCE, OnBtnsource)

ON_BN_CLICKED(IDC_BTNMAKE, OnBtnmake)

ON_BN_CLICKED(IDC_BTNDEST, OnBtndest)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CKursDlg message handlers

BOOL CKursDlg::OnInitDialog()

{

CDialog::OnInitDialog();

/ Set the icon for this dialog. The framework does this automatically

// when the application's main window is not a dialog

SetIcon(m_hIcon, TRUE);// Set big icon

SetIcon(m_hIcon, FALSE);// Set small icon

m_lang = LANG_CPP;

m_name = "";

// TODO: Add extra initialization here

return TRUE; // return TRUE unless you set the focus to a control

}

void CKursDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

CDialog::OnSysCommand(nID, lParam);

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CKursDlg::OnPaint()

{

if (IsIconic())

{

CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle

int cxIcon = GetSystemMetrics(SM_CXICON);

int cyIcon = GetSystemMetrics(SM_CYICON);

CRect rect;

GetClientRect(&rect);

int x = (rect.Width() - cxIcon + 1) / 2;

int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon

dc.DrawIcon(x, y, m_hIcon);

}

else

{

CDialog::OnPaint();

}

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CKursDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CKursDlg::OnBtnsource()

{

CFileDialog dlg(TRUE, NULL, NULL, 0,

"C++ and C files (*.cpp; *.c; *.h; *.hpp)|*.cpp;*.c;*.h;*.hpp|Pascal files (*.pas)|*.pas|Basic files (*.bas)|*.bas|Assembler files (*.asm)|*.asm|All files|*.*||", this);

CString lang;

CSelectLangDlg select;

if(dlg.DoModal() == IDOK)

{

m_name = dlg.GetPathName();

SetDlgItemText(IDC_SOURCE, m_name);

int point_pos = m_name.ReverseFind('.');

if(point_pos == -1)

{

if(select.DoModal())

m_lang = select.m_language + 1;

else

m_lang = LANG_CPP;

}

else

{

lang = m_name.Right(m_name.GetLength() - point_pos - 1);

if((lang == "c") || (lang == "cpp") || (lang == "h") || (lang == "hpp"))

m_lang = LANG_CPP;

else if(lang == "pas")

m_lang = LANG_PASCAL;

else if(lang == "bas")

m_lang = LANG_BASIC;

else if(lang == "asm")

m_lang = LANG_ASM;

else

{

if(select.DoModal())

m_lang = select.m_language + 1;

else

m_lang = LANG_CPP;

}

}

point_pos = m_name.ReverseFind('\\');

m_dest = m_name.Left(point_pos);

m_dest += "\\output.";

m_dest += lang;

SetDlgItemText(IDC_DEST, m_dest);

}

}

void CKursDlg::OnBtnmake()

{

GetDlgItemText(IDC_SOURCE, m_name);

GetDlgItemText(IDC_DEST, m_dest);

CFile source(m_name, CFile::modeRead | CFile::shareDenyRead | CFile::shareDenyWrite | CFile::normal);

CString text;

char buffer;

UINT i;

for(i = 0; i < source.GetLength(); i++)

{

source.Read(&buffer, 1);

text += buffer;

}

text.GetBuffer(0)[source.GetLength()] = 0;

switch(m_lang)

{

case LANG_CPP:

{

RemoveOneLineComments(text, "//", FALSE, "");

if(RemoveMultiLineComments(text, "/*", "*/") == -1)

{

AfxMessageBox("Неправильные многострочные коментарии", MB_ICONERROR);

return;

}

break;

}

case LANG_PASCAL:

{

RemoveOneLineComments(text, "//", FALSE, "");

if(RemoveMultiLineComments(text, "{", "}") == -1)

{

AfxMessageBox("Неправильные многострочные коментарии", MB_ICONERROR);

return;

}

break;

}

case LANG_BASIC:

{

RemoveOneLineComments(text, "'", TRUE, "_");

RemoveOneLineComments(text, "REM ", TRUE, "_");

RemoveOneLineComments(text, "rem ", TRUE, "_");

RemoveOneLineComments(text, "Rem ", TRUE, "_");

break;

}

case LANG_ASM:

{

RemoveOneLineComments(text, ";", FALSE, "");

break;

}

}

source.Close();

CFile dest(m_dest, CFile::modeCreate | CFile::modeReadWrite | CFile::normal);

dest.Write(text.GetBuffer(0), text.GetLength());

AfxMessageBox("Комментарии удалены", MB_ICONINFORMATION);

}

int CKursDlg::RemoveOneLineComments(CString& text, CString comment, BOOL bHasLineWraps, CString wrap)

{

CArray<CString, CString&> linelist;

CString line, full = text;

char *buffer = full.LockBuffer();

char *token = strtok(buffer, "\r\n");

while(token)

{

linelist.Add(CString(token));

token = strtok(NULL, "\r\n");

}

full.UnlockBuffer();

int i, find, count;

BOOL bWrap = FALSE;

for(i = 0; i < linelist.GetSize(); i++)

{

if(linelist[i].Find(comment, 0) == 0)

{

if(bHasLineWraps)

{

if(linelist[i].Find(wrap, 0) == linelist[i].GetLength() - wrap.GetLength())

bWrap = TRUE;

}

linelist.RemoveAt(i);

i--;

continue;

}

else if((find = linelist[i].Find(comment, 0)) > 0)

{

if(bHasLineWraps)

{

if(linelist[i].Find(wrap, 0) == linelist[i].GetLength() - wrap.GetLength())

bWrap = TRUE;

}

count = linelist[i].GetLength() - find;

linelist[i].Delete(find, count);

continue;

}

if(bHasLineWraps && bWrap)

{

if(linelist[i].Find(wrap, 0) == linelist[i].GetLength() - wrap.GetLength())

bWrap = TRUE;

else

bWrap = FALSE;

linelist.RemoveAt(i);

i--;

}

}

text = "";

for(i = 0; i < linelist.GetSize(); i++)

{

text += linelist[i];

text += "\r\n";

}

linelist.RemoveAll();

return 0;

}

int CKursDlg::RemoveMultiLineComments(CString &text, CString opencomment, CString closecomment)

{

int open, close;

while((open = text.Find(opencomment, 0)) != -1)

{

if((close = text.Find(closecomment, open)) != -1)

{

text.Delete(open, close - open + closecomment.GetLength());

}

else

return -1;

}

return 0;

}

void CKursDlg::OnBtndest()

{

CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,

"C++ and C files (*.cpp; *.c; *.h; *.hpp)|*.cpp;*.c;*.h;*.hpp|Pascal files (*.pas)|*.pas|Basic files (*.bas)|*.bas|Assembler files (*.asm)|*.asm|All files|*.*||", this);

if(dlg.DoModal() == IDOK)

{

m_dest = dlg.GetPathName();

SetDlgItemText(IDC_DEST, m_dest);

}

}

Файл SelectLangDlg;

// SelectLangDlg.cpp : implementation file

//

#include "stdafx.h"

#include "kurs.h"

#include "SelectLangDlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

/////////////////////////////////////////////////////////////////////////////

// CSelectLangDlg dialog

CSelectLangDlg::CSelectLangDlg(CWnd* pParent /*=NULL*/)

: CDialog(CSelectLangDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CSelectLangDlg)

m_language = 0;

//}}AFX_DATA_INIT

}

void CSelectLangDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CSelectLangDlg)

DDX_Radio(pDX, IDC_CPP, m_language);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CSelectLangDlg, CDialog)

//{{AFX_MSG_MAP(CSelectLangDlg)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CSelectLangDlg message handlers

void CSelectLangDlg::OnOK()

{

UpdateData();

CDialog::OnOK();

}

BOOL CSelectLangDlg::OnInitDialog()

{

CDialog::OnInitDialog();

return TRUE; // return TRUE unless you set the focus to a control

 // EXCEPTION: OCX Property Pages should return FALSE

}


Информация о работе «Удаление комментариев из текста программ»
Раздел: Информатика, программирование
Количество знаков с пробелами: 16079
Количество таблиц: 0
Количество изображений: 0

Похожие работы

Скачать
74118
11
4

... лишь контекстным анализом. Как было отмечено в [12], применение глубокого статического анализа программ может позволить существенно снизить количество ложных срабатываний и повысить точность обнаружения уязвимостей защиты. 4.3. Использование методов анализа потоков данных для решения задачи обнаружения уязвимостей В отделе компиляторных технологий по контракту с фирмой Nortel Networks ...

Скачать
112343
9
29

... гладких графиков. Для решения этой проблемы в программе предусмотрена интерполяция расчетных точек полиномом второй степени, которая осуществляется с помощью встроенной функции математического пакета. 3.4 Программа для расчета входного сопротивления изолированного излучателя 3.4.1 Описание применения Программа, имеющая название рез_размер.mcd, проводит расчет входного сопротивления ...

Скачать
282295
41
133

... 2 >= Y And д + В > С — False, далее д*Х + B*Y = D And ( // <= Y And Y <= Q) - False, последней операция Or. которая лает результат — False. 3.3.3. Символьное выражение В Visual Basic определена одна операция с символьными данными - конкатенация (сцепление), позволяющая объединять несколько строк в одну. Знак операции — “+” или “&”. Операндами символьного выражения могут быть: ...

Скачать
111441
18
8

... ОС Windows 95, необходимость выбора тех конкретных объектов, к которым необходимо ограничить доступ. Настоящая работа посвящена разработке программы защиты объектов операционной системы WINDOWS95 работающей в многопользовательском режиме под управлением сервера Novell NetWare (Windows NT, Unix), позволяющей проводить защиту объектов ОС на уровне пользователя. Под защитой объектов ОС Windows 95 ...

0 комментариев


Наверх