Разработка приложение на базе CLR средствами Microsoft Visual Studio 2008, используя технологию объектно-ориентированного программирования

Использование объектно-ориентированного подхода для разработки программного обеспечения. Разработка новых объектно-ориентированных языков программирования. Разработка приложения на базе CLR средствами Microsoft Visual Studio 2008 и его тестирование.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 27.10.2015
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Кузнецкий институт информационных и управленческих технологий

(филиал Пензенского государственного университета)

Кафедра ЕН и ТД

КУРСОВАЯ РАБОТА

Разработка приложение на базе CLR средствами Microsoft Visual Studio 2008, используя технологию объектно-ориентированного программирования.

По дисциплине «Объектно-ориентированное программирование»

Разработал: ст.гр. 12КП1 Чернышова К.В.

Принял: ст. преподаватель

каф. ЕНиТД Ю.В. Анохина

2014

Оглавление

Введение

Постановка задачи

Описание входных данных

Описание выходных данных

Описание интерфейса ПО

Классы интерфейса

Разработка UML-диаграмм классов ПО и методов

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

Заключение

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

Приложение А

Основной листинг программы

Приложение B

Экранные формы

Введение

Объектно-ориентированный подход в последнее десятилетие стал одним из наиболее интенсивно развивающихся направлений в программировании и наиболее популярным средством разработки программного обеспечения.

Начало развитию объектно-ориентированного подхода положил язык Simula 67, который был разработан в конце 60-х гг. в Норвегии. Несмотря на то, что язык намного опередил свое время, современники (программисты 60-х гг.) оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortran).

Но достоинства языка Simula 67 были замечены некоторыми программистами, и в 70-е гг. было разработано большое число экспериментальных объектно-ориентированных языков программирования. В результате исследования этих языков были разработаны современные объектно-ориентированные языки программирования: C++, Ada, Smalltalk и др.

Наиболее распространенным объектно-ориентированным языком программирования является язык C++ [1, 6, 8]. Он возник на базе соединения языков С и Simula. С++ был разработан в начале 80-х Бьерном Страуструпом, сотрудником компании AT&T. Все эти годы язык интенсивно развивался, и, наконец, в августе 1998 г. был принят международный стандарт языка С++.

Разработка новых объектно-ориентированных языков программирования продолжается и в настоящее время. Например, с 1995 г. стал широко распространяться объектно-ориентированный язык программирования Java, ориентированный на сети компьютеров и, прежде всего, на Internet. В настоящее время компанией Microsoft разрабатывается новый объектно-ориентированный язык C# (C Sharp), который во многом базируется на языке С++ и также ориентирован на разработку Internet-приложений.

Вместе с развитием объектно-ориентированного программирования стали развиваться и объектно-ориентированные методы разработки программного обеспечения, охватывающие стадии анализа и проектирования. Среди общепризнанных объектно-ориентированных подходов к анализу и проектированию следует выделить методы Г. Буча [3, 4], Д. Рамбо, А. Джекобсона, Шлеера-Меллора и Коуда-Йордона. В результате объединения усилий первых трех авторов появился на свет унифицированный язык моделирования UML [2, 5, 7, 9], который в 1997 г. был принят в качестве стандарта консорциумом Object Management Group и получил широкое распространение в сфере производства программного обеспечения.

Основные идеи объектно-ориентированного подхода опираются на следующие положения:

- программа представляет собой модель некоторого реального процесса, части реального мира; модель содержит не все признаки и свойства представляемой ею части реального мира, а только те, которые существенны для разрабатываемой программной системы;

- модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов;

- объект описывается набором атрибутов (свойств), значения которых определяют состояние объекта, и набором операций (действий), которые может выполнять объект;

- взаимодействие между объектами осуществляется посылкой специальных сообщений от одного объекта к другому; сообщение, полученное объектом, может потребовать выполнения определенных действий, например изменения состояния объекта;

- объекты, описанные одним и тем же набором атрибутов и способные выполнять один и тот же набор операций, представляют собой класс однотипных объектов.

С точки зрения языка программирования класс объектов можно рассматривать как тип данных, а отдельные объекты - как данные этого типа. Определение программистом собственных классов объектов должно позволить описывать конкретную задачу в терминах ее предметной области (при соответствующем выборе имен типов и имен объектов, их атрибутов и выполняемых действий).

Объектно-ориентированный подход дает следующие основные преимущества:

- уменьшение сложности программного обеспечения;

- повышение его надежности;

- обеспечение возможности модификации отдельных компонент программ без изменения остальных компонент;

- обеспечение возможности повторного использования отдельных компонент программного обеспечения.

Систематическое применение объектно-ориентированного подхода позволяет разрабатывать хорошо структурированные, надежные в эксплуатации, достаточно просто модифицируемые программные системы. Этим объясняется интерес программистов к объектно-ориентированному подходу и объектно-ориентированным языкам программирования.

Целью данной работы является введение в объектно-ориентированный подход к разработке программного обеспечения. В рамках работы рассмотрены концепции и понятия объектно-ориентированного подхода, а также их выражение на унифицированном языке моделирования UML и языке программирования С++.

Постановка задачи

программный обеспечение объектный ориентированный

Целью курсовой работы является разработка приложения на базе CLR средствами Microsoft Visual Studio 2008 с использованием технологии ООП. В ходе курсового проектирования следует разработать базовый и производный классы и выполнить их тестирование.

Необходимо обработать исходный текст, сформировать список слов и сохранить его в однонаправленном линейном не кольцевом списке. Для каждого слова хранить также число согласных букв в слове.

В полученном линейном списке найти слова, в которых количество согласных превышает заданное значение. Заданное значение содержится в первой строке исходного файла.

Описание входных данных

Исходный текст на русском языке. Вводится с клавиатуры, либо из текстового файла. Длина текста-- не более 20 строк, длина строки -- не более 20 символов, длина слова -- не более 7 символов. Исходный текст должен заканчиваться точкой, «!» или '?'.

Описание выходных данных

Вывод на экран, а также помещение в текстовый файл исходного текста, состояние сформированного линейного списка и найденные слова.

Описание интерфейса ПО

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

В моем курсовом проекте пользовательский интерфейс представлен:

1) Формы

1.1 Form1 - основная форма, которая открывается при запуске программы, и содержит пользовательское меню, панель управления, область ввода данных, область вывода данных.

1.2 Avtor - форма, вызываемая командами меню «О программе Об авторе».

Содержит информацию о разработчике программного обеспечения.

1.3 About - форма, вызываемая командами «О программе Возможности программы». Позволяет пользователю вызвать справку, для ознакомления с программой.

2) Кнопки - выполняют следующие действия: «Открыть», «Сохранить», «О программе», «Выполнить».

3) Меню - реализуют панель инструментов программы и выполняют следующие действия: «Сохранить», «Открыть», «Выход», «Об авторе», «О программе».

3) Область ввода richTextBox1 - представляет собой поле ввода текста.

5) Область вывода richTextBox2- представляет собой поле вывода результата выполнения программы.

6) Переключатель - checkBox1 - представляет собой режим переключения для добавления текста в конец области вывода richTextBox2.

Классы интерфейса

Программа содержит 3 класса интерфейса:

1) Класс Form1, содержащий следующие методы:

private: System::Windows::Forms::MenuStrip^ menuStrip1; - метод создания стандартного меню Form1.

private: System::Windows::Forms::ToolStripMenuItem^ -файлToolStripMenuItem;

-метод открытия меню файл.

private: System::Windows::Forms::CheckBox^ checkBox1;- метод добавления текста в файл.

private: System::Windows::Forms::ToolStripMenuItem^ открытьToolStripMenuItem; - метод, выполняющий заполнение области поля richTextBox1 из файла.

private: System::Windows::Forms::ToolStripMenuItem^ выходToolStripMenuItem;

- метод, организующий выход из программы.

private: System::Windows::Forms::ToolStripMenuItem^ сохранитьToolStripMenuItem;

- метод, выполняющий сохранение результата в файл.

private: System::Windows::Forms::Button^ button1; - метод выполнения основной задачи программы.

Основная задача реализуется на основе следующего алгоритма:

происходит проверка условий текста: латинские буквы, русские буквы, длина слова более 7 символов, длина строки более 20 символов, длина текста- более 20 строк и латинские ли буквы, заканчивается ли текст точкой, «!» или «?». Если буквы не латинские, русские, длина слова не более 7 символов, длина строки не более 20 символов, длина текста- не более 20 строк и текст заканчивается точкой, «!» или «?» то происходит переход к следующему циклу: проверяется не переход ли строки, если переход то к условию новое ли слово, а потом проверка длины нового слова; если не переход строки проверка длины строки и длины слов, не больше ли макс. ли длины они. если не больше то данные помещаются в массив Buffer[i], из которого потом формируют однонаправленный линейный не кольцевой список слов, для этого выбирают только слова, ищут пробел, либо переход строки, проверяют русские ли слова, если слова не получилось, то ищут дальше, если слово из одного символа - не берут, увеличивают позицию на длину слова и ищут в списке, слова число согласных в которых превышает заданное в тестовой строке значение, найденный результат помещают в pCurrentEntry, возвращающего его в поле 2.

private: System::Windows::Forms::ToolStripMenuItem^ оПрограммеToolStripMenuItem;

- метод открытия меню «О программе».

private: System::Windows::Forms::ToolStripMenuItem^ обАвтореToolStripMenuItem;

- метод вывода окна «Об авторе».

private: System::Windows::Forms::ToolStripMenuItem^ возможностиПрограммыToolStripMenuItem; - метод вывода окна «О программе».

private: System::Windows::Forms::OpenFileDialog^ openFileDialog1; - метод, позволяющий пользователю открыть сторонний файл.

private: System::Windows::Forms::SaveFileDialog^ saveFileDialog1; - метод, выполняющий сохранение результата в файл.

private: System::Windows::Forms::ToolStripButton^ helpToolStripButton;

- метод вывода окна «О программе».

Класс Avtor, содержащий следующие методы:

private: System::Windows::Forms::Label^ label1; - метод, выполняющий отображение сведений о разработчике программы.

private: System::Windows::Forms::PictureBox^ pictureBox1; - метод, выполняющий отображение картинки.

Класс About, содержащий следующие методы:

private: System::Windows::Forms::Label^ label1; - метод, выполняющий отображение надписей.

private: System::Windows::Forms::PictureBox^ pictureBox1; - метод, выполняющий отображение картинки.

Разработка UML-диаграмм классов ПО и методов

Рисунок 1 UML диаграмма классов

Рисунок 2 UML диаграмма метода IsEnglish

Рисунок 3 UML диаграмма метода IsRussian

Рисунок 4 UML диаграмма метода IsValidBuffer

Рисунок 5 UML диаграмма метода Init

Рисунок 6 UML диаграмма метода pCurrentEntry

Рисунок 7 UML диаграмма метода SpisokClass

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

После запуска программы, заполните область поля 1 (см. рис 1 Приложения Б) или откройте готовый файл с текстом с помощью команды "Открыть исходный файл" в "ФайлОткрыть исходный файл". Также можно открыть файл с результатом командой "Открыть файл с результатом" в "ФайлОткрыть файл с результатом ". Для выполнения основной задачи нажмите кнопку «Выполнить» и тогда заполнится область поля 2 (см. рис 1 Приложения Б). Текст в поле 1 (исходный текст) можно сохранить с помощью команды «ФайлСохранить исходный текст».

Текст в поле 2 (результат) можно сохранить с помощью команды «ФайлСохранить результат».

Заключение

Целью данной курсового проекта является разработка приложение на базе CLR средствами Microsoft Visual Studio 2008, используя технологию объектно-ориентированного программирования. Программа должна из текста исходного файла сформировать список слов и сохранить его в однонаправленном линейном не кольцевом списке. В полученном линейном списке найти слова, oбработать исходный текст файла, сформировать список слов и сохранить его в однонаправленном линейном не кольцевом списке. Для каждого слова хранить также число согласных букв в слове. В полученном линейном списке найти слова, в которых количество согласных превышает заданное значение. Заданное значение содержится в первой строке исходного файла. В файл результатов напечатать исходный текст, состояние сформированного линейного списка и найденные слова.

Выполнение курсовой работы было разделено на два этапа:

· теоретический анализ поставленной задачи, включающий в себя постановку задачи, выделение основных классов, выделение основных действия и алгоритмов их реализации.

· программная реализация задачи средствами Microsoft Visual Studio 2008, включающая в себя реализацию основных классов, реализацию основных действий, реализацию классов диалоговых форм, инструкцию по использовании программы.

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

1. С++: базовый курс, 3-е издание.: Пер. с англ. М.: Издательский дом «Вильямс», 2010. 624 с.

2. Visual C++ 2005: базовый курс.: Пер. с англ. М.: ООО «И.Д. Вильямс», 2007. 1152 с.

3. Буч Г. Объектно-ориентированный анализ и проектирование приложений на С++. 2001.

4. Секунов Н.Ю. Самоучитель Visual C++. 2002.

5. Холзнер С. Visual C++. Учебный курс. 2007.

6. Довбуш Г.Ф., Хомоненко А.Д. Visual C++ на примерах. 2007.

Приложение А

Листинг программы

#pragma once

#include <windows.h>

#include <Commdlg.h>

#include <stdio.h>

//максимальный размер строки

#define MAX_SIZE_STRING (20)

//максимальное кол-во строк

#define MAX_SIZE_COUNT_STRING (10)

//макмимальный размер исходного файла (20 строк по 20 символов)

#define MAX_SIZE_INPUT_FILE (MAX_SIZE_STRING*MAX_SIZE_COUNT_STRING)

//макмимальный размер слова

#define MAX_SIZE_WORD (7)

namespace WinFormsSogl {

/// <summary>

/// Summary for MyClass

///

/// </summary>

public ref class BufferClass

{

public:

BufferClass(System::Windows::Forms::RichTextBox^ richTextBox)

{

//получим длинну исходного текста

Length = min(MAX_SIZE_INPUT_FILE, richTextBox->TextLength);

//массив байт из управляющего элемента

Buffer = richTextBox->Text->ToCharArray(0, Length);

//проинициализируем переменные (кол-во строк, размер строки и т.д.)

Init();

}

~BufferClass(){}

public:

int Length;

int MaxLenStr;

int MaxLenWord;

int CountStr;

BOOL fEnglish;

array<Char>^ Buffer;

Char GetChar(int i) {return Buffer[i];}

Char GetEndChar() {return GetChar(Length-1);}

BOOL IsEnglish(int i) {

if ((GetChar(i) >= L'a' && GetChar(i) <= L'z') ||

(GetChar(i) >= L'A' && GetChar(i) <= L'Z'))

return TRUE;

else

return FALSE;

}

BOOL IsRussian(int i) {

if ((GetChar(i) >= L'а' && GetChar(i) <= L'я') ||

(GetChar(i) >= L'А' && GetChar(i) <= L'Я'))

return TRUE;

else

return FALSE;

}

BOOL IsValidBuffer() {

//если есть слова больше 7 симовлов

if ((MaxLenWord > MAX_SIZE_WORD) ||

(MaxLenStr > MAX_SIZE_STRING) ||

(CountStr > MAX_SIZE_COUNT_STRING) ||

(fEnglish == TRUE))

{

return FALSE;

}

//если данные не заканчиваются знаком '.', '!', '?'

if ((GetEndChar() != L'.') &&

(GetEndChar() != L'!') &&

(GetEndChar() != L'?'))

{

return FALSE;

}

if ((GetChar(0) == L'1') ||

(GetChar(0) == L'2') ||

(GetChar(0) == L'3') ||

(GetChar(0) == L'4') ||

(GetChar(0) == L'5') ||

(GetChar(0) == L'6') ||

(GetChar(0) == L'7') ||

(GetChar(0) == L'8') ||

(GetChar(0) == L'9'))

{

return TRUE;

}

return FALSE;

}

void Init(void) {

int CurrentLenStr = 0;

int CurrentLenWord = 0;

CountStr = 1;

fEnglish = FALSE;

MaxLenStr = 0;

MaxLenWord = 0;

for (int i = 0; i < Length; i++)

{

CurrentLenStr++;

CurrentLenWord++;

//если есть английские буквы

if (IsEnglish(i) == TRUE)

{

fEnglish = TRUE;

}

//если переход на новую строку

if (GetChar(i) == 0x0A)

{

//если нашлась более длинная строка

if (MaxLenStr < CurrentLenStr)

MaxLenStr = CurrentLenStr-1;

//если нашлось более длинное слово

if (MaxLenWord < CurrentLenWord)

MaxLenWord = CurrentLenWord-1;

CurrentLenWord = 0;

CurrentLenStr = 0;

CountStr++;

continue;

}

//если новое слово

if (GetChar(i) == L' ')

{

//если нашлось более длинное слово

if (MaxLenWord < CurrentLenWord)

MaxLenWord = CurrentLenWord-1;

CurrentLenWord = 0;

continue;

}

}

}

};

/// <summary>

/// Summary for WordClass

///

/// </summary>

public ref class WordClass

{

public:

WordClass()

{

Word = (wchar_t*)calloc(1, MAX_SIZE_WORD+1);

}

~WordClass(){

free(Word);

}

//слово

wchar_t* Word;

BOOL fSelect;

int CountSoglChar;

WordClass^ pNextMyEntry;

};

/// <summary>

/// Summary for SpisokClass

///

/// </summary>

public ref class SpisokClass

{

public:

SpisokClass(array<Char>^ Buffer, int Length)

{

OneWord = gcnew WordClass();

WordClass^ CurrentWord = OneWord;

int iChar = 0;

BOOL One = TRUE;

CountEntry = 1;

//сформируем одноноправленный линейный не кольцевой список из слов исходного файла

for (int i = 0; i < Length; i++)

{

//пробел не нужен

if (Buffer[i] == L' ' || Buffer[i] == 0x0A)

{

iChar = 0;

continue;

}

if (i == 0)

{

if (Buffer[i] == L'1')

InputSogl = 1;

if (Buffer[i] == L'2')

InputSogl = 2;

if (Buffer[i] == L'3')

InputSogl = 3;

if (Buffer[i] == L'4')

InputSogl = 4;

if (Buffer[i] == L'5')

InputSogl = 5;

if (Buffer[i] == L'6')

InputSogl = 6;

if (Buffer[i] == L'7')

InputSogl = 7;

if (Buffer[i] == L'8')

InputSogl = 8;

if (Buffer[i] == L'9')

InputSogl = 9;

continue;

}

//если это создание нового элемента

if ((iChar == 0) && (One == FALSE))

{

CurrentWord->pNextMyEntry = gcnew WordClass();

CurrentWord = CurrentWord->pNextMyEntry;

CountEntry++;

}

One = FALSE;

//увеличим счетчик согласных букв

if (IsCharSogl(Buffer[i]) == TRUE)

CurrentWord->CountSoglChar++;

CurrentWord->Word[iChar] = Buffer[i];

CurrentWord->Word[iChar+1] = 0;

iChar++;

}

Selected();

}

~SpisokClass(){

}

WordClass^ GetEntry(int dwNumEntry){

WordClass^ CurrentWord = OneWord;

if (dwNumEntry >= CountEntry)

return CurrentWord;

for (int CurrentEntry = 0; CurrentEntry != dwNumEntry; CurrentEntry++)

{

CurrentWord = CurrentWord->pNextMyEntry;

}

return CurrentWord;

}

void Selected(void){

WordClass^ CurrentWord = OneWord;

for (int CurrentEntry = 0; CurrentEntry < CountEntry; CurrentEntry++)

{

if (CurrentWord->CountSoglChar > InputSogl)

CurrentWord->fSelect = TRUE;

CurrentWord = CurrentWord->pNextMyEntry;

}

return;

}

BOOL IsCharSogl(wchar_t c) {

if ((c == L'б') ||

(c == L'в') ||

(c == L'г') ||

(c == L'д') ||

(c == L'ж') ||

(c == L'з') ||

(c == L'к') ||

(c == L'л') ||

(c == L'м') ||

(c == L'н') ||

(c == L'п') ||

(c == L'р') ||

(c == L'с') ||

(c == L'т') ||

(c == L'ф') ||

(c == L'х') ||

(c == L'ц') ||

(c == L'ч') ||

(c == L'ш') ||

(c == L'щ'))

return TRUE;

if ((c == L'Б') ||

(c == L'В') ||

(c == L'Г') ||

(c == L'Д') ||

(c == L'Ж') ||

(c == L'З') ||

(c == L'К') ||

(c == L'Л') ||

(c == L'М') ||

(c == L'Н') ||

(c == L'П') ||

(c == L'Р') ||

(c == L'С') ||

(c == L'Т') ||

(c == L'Ф') ||

(c == L'Х') ||

(c == L'Ц') ||

(c == L'Ч') ||

(c == L'Ш') ||

(c == L'Щ'))

return TRUE;

return FALSE;

}

WordClass^ OneWord;

int CountEntry;

int InputSogl;

};

}

Приложение B

Экранные формы

1. Основное окно программы

2. Окно работы программы

3. Окно программы «О программе»

4. Окно программы «Об авторе»

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.