Набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU

Автор работы: Пользователь скрыл имя, 23 Мая 2013 в 18:51, курсовая работа

Краткое описание

Тип есть вполне конкретное представление некоторого понятия. Например, в С++ тип float с операциями +, -, * и т.д. является хотя и ограниченным, ноконкретным представлением математического понятия вещественного числа. Новыйтип создается для того, чтобы стать специальным и конкретным представлениемпонятия, которое не находит прямого и естественного отражения средивстроенных типов. Например, в программе из области телефонной связи можноввести тип trunk_module (линия-связи), в видеоигре - тип explosion (взрыв), ав программе, обрабатывающей текст, - тип list_of_paragraphs (список параграфов).

Содержание

ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ, СИМВОЛОВ, СОКРАЩЕНИЙ, ТЕРМИНОВ 4
ВВЕДЕНИЕ 5
1. ОПИСАНИЕ ИСПОЛЬЗОВАННЫХ КОМПОНЕНТОВ 6
1.1 Файлы 6
1.2 Структуры…………………………………………………………………..7
1.3 Классы 7
1.4 Методы динамической памяти 8
2. ОПИСАНИЕ АЛГОРИТМА ПРОГРАММЫ 12
3. ОПИСАНИЕ ОСНОВНЫХ ФУНКЦИЙ И ПЕРЕМЕННЫХ ПРОГРАММЫ 16
3.1 Функциясохранения в файл 17
3.2 Функция вывода данных из файла 18
3.3 Функции поиска данных 19
4. ТЕСТИРОВАНИЕ ПРОГРАММЫ 22
ЗАКЛЮЧЕНИЕ 26
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 27
ПРИЛОЖЕНИЯ 28

Вложенные файлы: 1 файл

Мила курсовая по ООП3.docx

— 985.76 Кб (Скачать файл)

 

 

Реферат

Курсовая  работа содержит 38 страниц, 5 блок-схем, 19 рисунков, 3 приложения, 6 источников.

Целью курсовой работы является: научиться работать с классами, бинарными файлами, динамическими массивами.

Объект исследования – обувной магазин.

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

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

 

Оглавление

 

ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ, СИМВОЛОВ, СОКРАЩЕНИЙ, ТЕРМИНОВ 4

ВВЕДЕНИЕ 5

1. ОПИСАНИЕ ИСПОЛЬЗОВАННЫХ КОМПОНЕНТОВ 6

1.1 Файлы 6

1.2 Структуры…………………………………………………………………..7

1.3 Классы 7

1.4 Методы динамической памяти 8

2. ОПИСАНИЕ АЛГОРИТМА ПРОГРАММЫ 12

3. ОПИСАНИЕ ОСНОВНЫХ ФУНКЦИЙ И ПЕРЕМЕННЫХ ПРОГРАММЫ 16

3.1 Функция сохранения в файл 17

3.2 Функция вывода данных из файла 18

3.3 Функции поиска данных 19

4. ТЕСТИРОВАНИЕ ПРОГРАММЫ 22

ЗАКЛЮЧЕНИЕ 26

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ  27

ПРИЛОЖЕНИЯ 28

 

 

ПЕРЕЧЕНЬ  УСЛОВНЫХ ОБОЗНАЧЕНИЙ, СИМВОЛОВ, СОКРАЩЕНИЙ, ТЕРМИНОВ

 

 

Сокращение

Расшифровка

ООП

Объектно-ориентированное программирование

MinGW

Минималистский GNU для ОС Windows

GNU CompilerCollection

набор компиляторов для различных  языков программирования, разработанный  в рамках проекта GNU

GPL

GeneralPublicLicenseвпер. сангл. Универсальная общественная лицензия ограниченного применения бывшая GNU


 

 

ВВЕДЕНИЕ

 

 

Понятие класса, служит в С++ для того, чтобы дать программисту инструмент построения новых типов. Ими пользоваться не менее удобно, чем встроенными. В идеале использование определенного пользователем типа не должно отличаться от использования встроенных типов. Различия возможны только в способе построения.

Тип есть вполне конкретное представление  некоторого понятия. Например, в С++ тип float с операциями +, -, * и т.д. является хотя и ограниченным, но конкретным представлением математического понятия вещественного числа. Новый тип создается для того, чтобы стать специальным и конкретным представлением понятия, которое не находит прямого и естественного отражения среди встроенных типов. Например, в программе из области телефонной связи можно ввести тип trunk_module (линия-связи), в видеоигре - тип explosion (взрыв), а в программе, обрабатывающей текст, - тип list_of_paragraphs (список параграфов). Обычно проще понимать и изменять программу, в которой типы хорошо представляют используемые в задаче понятия. Удачно подобранное множество пользовательских типов делает программу более ясной. Оно позволяет транслятору обнаруживать недопустимое использование объектов, которое впротивном случае останется не выявленным до отладки программы.

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

 

  1. ОПИСАНИЕ  ИСПОЛЬЗОВАННЫХ КОМПОНЕНТОВ

 

    1. ФАЙЛЫ

 

Файлы хранения данных бывают или бинарными или текстовыми. Есть и другие виды файлов, но в этой курсовой работе рассмотрены только эти два. Бинарные файлы отличаются в первую очередь скорость взаимодействия с приложением, по той причине, что программа производит куда меньше преобразований данных по сравнению с тем, когда программа работает с текстовыми. Для работы с ними используются функции из файла stdio.h.

Для обеспечения доступа к функциям работающим с файлами необходимо подключить заголовочный файл командой #include<stdio.h>. В нашей программе использованы следующие функции: fclose(указатель на файл); fprintf(“указатель на файл”,“%тип сохраняемой переменной 1, %тип сохраняемой переменной 2,и т.д.”, текстовая переменная, &числовая переменная);.

Например:

#include <stdio.h>

main()

{…

FILE *f;//f-указатель на файл

f=fopen(“имя файла”,“способ открытия”);//открытие файла

char model=”текст”;

fprintf(f,"%s", model);//записьвфайл

fscanf(f,"%s",model);//чтение изфайла

fclose(f);//закрытие файла

…}

    1. СТРУКТУРЫ

 

Структура – это составной тип  данных, описываемый для дальнейшего  удобства работы с переменными, так  же структуру можно рассмотреть  как некий объект реального мира имеющий свои свойства. Структуры нельзя считать полноценным объектом т.к. в ней описываются только значения (параметры) объекта, но нет функций, которые выполняет этот объект. Для её описания используют следующий синтаксис:

struct<имя структуры>/*имя структуры это и есть название нового типа*/{<тип переменной1><переменная1>;

<тип переменной2><переменная2>;};

Объявление переменной типа структуры: <имя структуры><имя новой переменной>. Доступ к элементу переменной типа структуры производится при помощи операции точка (.): <имя переменной>.<имя элемента структуры>.

    1. КЛАССЫ

 

Класс — это логическая структура, позволяющая создавать свои собственные пользовательские типы путем группирования переменных других типов, методов и событий. Для описания класса используется следующий синтаксис:

class<имя класса>

{private://спецификатор доступа

/*в этой части обычно располагаются функции закрытого доступа и поля класса*/

public: //спецификатор доступа

/*а тут описываются конструкторы, деструкторы, функции*/

};

Конструктор обычно используется для  задания значений полям при создании экземпляра класса (объекта), в общем виде описывается так:<имя класса>{/*присвоения и операции*/}

Деструкторы используются для уничтожения  экземпляров классов.

~<имя класса>{/*важная  задача, которую непременно нужно  выполнить при уничтожении объекта*/}

Объявление переменной новогокласса производится так:

<имя класса><имя нового объекта>;//без параметров

<имя класса><имя нового  объекта(параметр1, параметр2)>;//с параметрами

Доступ к функциям классатакже осуществляется при помощи операции точка(.):

<Имя объекта класса>.<вызываемая функция(параметры [если есть])>;

    1. МЕТОДЫ  ДИНАМИЧЕСКОЙ ПАМЯТИ

 

Динамическая память выделяется и освобождается — с помощью специальных инструкций (т. е. по инициативе разработчика). Это позволяет по ходу работы программы контролировать и корректировать объём используемой памяти и, следовательно, создавать программы способные обрабатывать большие объёмы данных, обходя ограниченность физической памяти машины.

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

Выделяется память с помощью  оператора new, а освобождается — с помощью оператора delete.

В момент, когда динамическая память выделена, она должна быть связана  с некоторым указателем, подходящего  типа (при выделении указывается  тип и количество необходимых  ячеек данного типа).

Пример:

int* p;//объявление указателя

p = newint(10);//выделение памяти под число 10

cout<< *p; //на экран выведется число 10

deletep; // памятьосвобождена

Можно выделять сразу несколько  ячеек динамической памяти, получая динамический массив. Для этого его размер указывается в квадратных скобках после типа.Чтобы удалить динамический массив и освободить память используется оператор delete[].

Пример:

int* p;

p = newint[13];//выделение памяти под динамический массив

for (int i=0; i<13; i++) {

    *(p+i) = i + 1;

cout<< *(p+i) << ' '; // 1 2 3 ... 13

}

delete[] p; // память освобождена, из неё удалены все элементы

Сразу после создания динамический массив автоматически заполняется  нулями.

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

Пример:

int* p;

p = new int(13);

int a = 666;

p =&a; // теперь до 13 никак не добраться

Проблема становится особенно острой, когда в памяти теряются целые  массивы (они занимают больше места, чем отдельные переменные).

Пример:

int* p;

for (int i=1; i<=10; i++) {

    p = new int[100];

}

delete[] p;//освобождениепамяти от 10-го массива

На каждом шаге цикла создаётся  динамический массив из 100 элементов. Всего таких массивов будет создано 10, но только от последнего из них память будет освобождена после выхода из цикла. 9 массивов продолжат занимать место в памяти до конца программы. 9 массивов * 100 элементов * 4 байта = 3600 байт потерянной памяти, которую никак нельзя использовать (ни в этой программе, не в других запущенных).

Очень важно после использования  динамической памяти не забывать освобождать  её в нужный момент! 

  1. ОПИСАНИЕ  АЛГОРИТМА ПРОГРАММЫ

 

 

При запуске программы открывается  главное диалоговое меню, содержащее четыре пункта: Ввод данных, Вывод из файла, Поиск, Выход. Меню организовано при помощи цикла while и условного оператора switch Рисунок1. В случае неправильного выбора пункта меню, пользователю будет выведено соответствующее информационное сообщение об ошибке ввода Рисунок2.

 

Выберем первый пункт и приступим к вводу данных, первое, что предлагается ввести пользователю это название обуви, его максимальная длина 50 символов (пробелы писать НЕЛЬЗЯ). После ввода названия водится модель, возможные варианты значений выводятся пользователю. Следующий вводимый параметр – это цвет, имеет единственное ограничение – длина 20 символов. Ввод следующих двух параметров, размер и количество, полностью контролируется программой, алгоритм контроля ввода количества и размера подробнее рассмотрен в главе описания функций. Завершив ввод, пользователю будет предоставлена возможность ввода новых данных. Демонстрация ввода показана на Рисунке3.

Рисунок 3 Демонстрация работы ввода данных

 

Отказавшись от продолжения  ввода, окажемся в главном меню. Выберем 2-й пункт, вывод из файла. Работа вывода из файла продемонстрирована на Рисунке 4. Нажав на любую клавишу, мы окажемся в главном меню.

Третий пункт меню, поиск, содержит в себе пять подпунктов определяющих направление поиска. Направления  поиска, предусмотренные в программе: по названию, по модели, по количеству, по размеру, по цвету. В пояснительной записке приведён пример работы только одного направления поиска, по названию. Вводим искомое название и жмём Enter. В случае нахождения хотя бы одной записи с искомым именем программа выдаст его или весь список, найденных записей. Такая ситуация продемонстрирована на Рисунке 5-1 и Рисунке 5-2.

Рисунок 5-1

Рисунок 5-2

На Рисунке6-1 продемонстрирован  тот случай, когда не было найдено ни одной записи.

Рисунок 6-2

Важным нюансом при выполнении поиска является шрифт букв (заглавные, прописные) т.к. в функция поиска является шрифточувствительной.

 

Весь алгоритм программы можно  представить в виде блок-схемы:

Рисунок 7 Блок-схема алгоритма программы

 

  1. ОПИСАНИЕ  ОСНОВНЫХ ФУНКЦИЙ И ПЕРЕМЕННЫХ ПРОГРАММЫ

 

 

Основными переменными программы  являются переменные типа tov т.к. они используются в функциях для удобного промежуточного хранения данных; объект t типа tovar (он необходим для обращения программы к функциям класса); переменные menu1, menu типа int служат для работы меню различного уровня.

Рассмотрим проверку корректности ввода данных количества, размера  и выбор пункта меню. Несмотря на то, что эти функции описаны в пользовательском интерфейсе, они являются не менее значимыми т.к. позволяют более детально отразить специфику рассматриваемой предметной области.

for(;;){if(menu>0){if(menu>1){if(menu>2){if(menu>3||menu<0){

cout<<" "<<"Неверный ввод!!!"<<endl;

cout<<" Введите нужный пункт меню : ";

cin>>menu;}else {break;}

}else {break;}}else {break;}}else {break;}}

 

Листинг 1. Проверка выбора меню.

 

На вход поступает введённый  пользователем пункт меню, в цикле проверяются пределы значений ввода от 0 до 3, в случае не корректного ввода ЧИСЛА будет выведено соответствующее сообщение и предложение повторного ввода. Также работает проверка подменю поиска.

Проверка ввода размера проверяет  принадлежность введённого размера  пределам учитываемых программой от 20-го до 50-го размера.

Информация о работе Набор компиляторов для различных языков программирования, разработанный в рамках проекта GNU