Долмашняя фонотека

Автор работы: Пользователь скрыл имя, 25 Апреля 2013 в 21:28, курсовая работа

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

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

Прикрепленные файлы: 1 файл

волохов-КУРСОВАЯ.doc

— 381.50 Кб (Скачать документ)


Введение

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

Тема моего курсового проекта – домашняя фонотека.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Содержательная постановка и описание задачи

Домашняя фонотека –  это база данных, содержащая сведения о домашней музыкальной коллекции.

Программа должна обладать следующими функциями:

  1. Считывать исходные данные из текстового файла, который создается самостоятельно.
  2. Возможность осуществления сортировки данных по любому выбранному полю.
  3. Возможность осуществления поиска данных по любому выбранному полю.
  4. Возможность отображения результатов на экране.
  5. Формирование выходного файла.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Атрибуты объекта и представление данных в программе

 

Так как, предметная область – домашняя фонотека, то объектом является музыкальная композиция.

Выбираем следующие атрибуты музыкальной композиции:

    • Жанр;
    • Исполнитель;
    • Название;
    • Альбом;
    • Год выхода.

Выполняем преобразование атрибутов в поля пользовательских типов, таблица 1.

Таблица 1

Музыкальная композиция

Song

Тип данных

Жанр

Genre

CString

Класс строк 

Исполнитель

Artist

CString

Класс строк

Название

Name

CString

Класс строк

Альбом

Album

CString

Класс строк

Год выхода

Year

Int

Целое


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Описание программы создания набора данных

 

Класс представляет собой  отдельную концепцию моделируемой системы. Классом может быть нечто, относящееся к материальному миру (диск с песнями), деловым отношениям, логике, программному приложению, компьютеру или поведению. Класс описывает множество объектов со сходной структурой, поведением и отношениями. Объекты, которые определяются классом, обладают состоянием (атрибуты) и поведением.[5]

Определение класса можно  проиллюстрировать следующим образом (рис. 1).

 






 

 

 

 


 


 

 

 

 

Рис. 1. Уровни видимости  класса

 

Атрибуты, описывающие музыкальную композицию, будут храниться в классе Song. Это простой класс с конструктором, который инициализирует все поля и методы доступа к данным.

Для определения класса предусмотрено специальное ключевое слово class.

Ниже приведена часть  программы, описывающая класс Song.

 

class Song

{

public:

 

    // Конструктор

    Song(CString s);

 

    // Жанр

    CString GetGenre() { return m_genre; }

 

    // Исполнитель

    CString GetArtist() { return m_artist; }

 

    // Название

    CString GetName() { return m_name; }

 

    // Альбом

    CString GetAlbum() { return m_album; }

 

    // Год

    int GetYear() { return m_year; }

 

    // Вывести описание песни в поток

    void OutToStream(fstream& f);

 

    // Сравнить  два описания песни

    int Compare(Song* s, int byField);

 

    // Сравнить  со строкой

    int Compare(CString s, int byField);

 

private:

 

    CString m_genre;    // Жанр

    CString m_artist;   // Исполнитель

    CString m_name;     // Название

    CString m_album;    // Альбом

    int m_year;         // Год

};

 

Входные данные программы  представляют собой текстовый файл с названием songs.txt. Файл должен располагаться рядом с исполняемым файлом.

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

В строке расположены  следующие атрибуты:

  1. Жанр музыкальной композиции.
  2. Исполнитель.
  3. Название музыкальной композиции.
  4. Альбом.
  5. Год выхода.

 

Пример файла приведен ниже:

 

Рок;Машина времени;Поворот;Лучшее;1995

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Классика;Вивальди;Зима;Лучшее;1600

  1. Описание программы формирования выходного документа

 

К выходным документам относятся:

    • Вывод информации на экран;
    • Вывод информации в файл.

 

Пример формирования выходного документа на экран см. в приложении 4 рис. 4. 1.

Экран в данной программе  состоит из двух частей:

 

    • Нижняя. Содержит пять столбцов, в которых расположены данные о музыкальных композициях.
    • Верхняя. В ней находятся поля выбора данных для сортировки и поиска, а также кнопки «Сортировать» и «Поиск», осуществляющие соответствующие действия.

 

Найденные по запросу  данные выделяются на экране серым  цветом.

 

Выходными данными программы  в файл является текстовый файл result.txt. В файл записываются результаты загрузки данных, результаты сортировки и результаты поиска.

 

Пример выходного файла  приведен ниже:

 

ЗАГРУЗКА файла "songs.txt"

Рок;Машина времени;Поворот;Лучшее;1995

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Классика;Вивальди;Зима;Лучшее;1600

 

СОРТИРОВКА  по полю: "Исполнитель"

Классика;Вивальди;Зима;Лучшее;1600

Рок;Машина времени;Поворот;Лучшее;1995

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

 

СОРТИРОВКА  по полю: "Название"

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Классика;Вивальди;Зима;Лучшее;1600

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Рок;Машина времени;Поворот;Лучшее;1995

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

 

СОРТИРОВКА  по полю: "Альбом"

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Классика;Вивальди;Зима;Лучшее;1600

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Рок;Машина времени;Поворот;Лучшее;1995

 

СОРТИРОВКА  по полю: "Год"

Классика;Вивальди;Зима;Лучшее;1600

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Рок;Машина времени;Поворот;Лучшее;1995

 

ПОИСК значения "Эстрада" в поле "Жанр"

Классика;Вивальди;Зима;Лучшее;1600

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Рок;Машина времени;Поворот;Лучшее;1995

НАЙДЕНО:

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

 

ПОИСК значения "Пугачева А." в поле "Исполнитель"

Классика;Вивальди;Зима;Лучшее;1600

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Рок;Машина времени;Поворот;Лучшее;1995

НАЙДЕНО:

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

 

ПОИСК значения "Зима" в поле "Название"

Классика;Вивальди;Зима;Лучшее;1600

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка  Пагпнини;Дни летят;1987

Попса;Пугачева А.;Миллион  алых роз;Лучшее;1989

Рок;Машина времени;Поворот;Лучшее;1995

НАЙДЕНО:

Классика;Вивальди;Зима;Лучшее;1600

 

ПОИСК значения "Дни летят" в поле "Альбом"

Классика;Вивальди;Зима;Лучшее;1600

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Рок;Машина времени;Поворот;Лучшее;1995

НАЙДЕНО:

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

 

ПОИСК значения "1995" в поле "Год"

Классика;Вивальди;Зима;Лучшее;1600

Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987

Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987

Попса;Пугачева А.;Миллион алых роз;Лучшее;1989

Рок;Машина времени;Поворот;Лучшее;1995

НАЙДЕНО:

Рок;Машина времени;Поворот;Лучшее;1995

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  1. Описание программы формирования списковой структуры

 

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

Элемент динамической структуры  состоит из двух полей:

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

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

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

  • размер структуры ограничивается только доступным объемом машинной памяти;
  • при изменении логической последовательности элементов структуры требуется не перемещение данных в памяти, а только коррекция указателей. [9]

 

Узел списка

 

Узел списка представлен классом RingListNode. Класс имеет три поля:

  • Указатель на класс Song.
  • Указатель на предыдущий узел.
  • Указатель на следующий узел.

 

Ниже приведен текст  программы, описывающий класс RingListNode.

 

class RingListNode

{

public:

 

    // Конструктор

    RingListNode(Song* s);

 

    // Деструктор

    ~RingListNode();

 

    // Данные

    Song* GetData() { return m_data; }

 

    // Предыдущий узел

    RingListNode* GetPrev() { return m_prev; }

 

    // Изменить предыдущий  узел

    void SetPrev(RingListNode* node) { m_prev = node; }

 

    // Следующий  узел

    RingListNode* GetNext() { return m_next; }

 

    // Изменить  следующий узел

    void SetNext(RingListNode* node) { m_next = node; }

 

private:

   

    Song* m_data;           // Данные

    RingListNode* m_next;   // Предыдущий узел

    RingListNode* m_prev;   // Следующий узел

};

 

Кольцевой список

 

Кольцевой список – это  частный случай связанного списка, у которого самый первый и самый  последний элементы ссылаются друг на друга. [8]

 Кольцевой список реализован в виде класса RingList.

 

class RingList

{

public:

 

    // Конструктор

    RingList();

 

    // Деструктор

    ~RingList();

 

    // Добавить в  список

    void Insert(Song* s);

 

    // Проверить что  пустой

    BOOL Empty() { return m_head == NULL; }

 

    // Установить указатель на первый узел

    void Reset() { m_current = m_head; }

 

    // Перевести  указатель на следующий узел

    BOOL Next();

 

    // Данные текущего узла

    Song* Current() { return m_current->GetData(); }

 

    // Сортировка простым включением

    void InclusionSort(int byField);

 

    // Последовательный  поиск

    Song* Search(CString s, int byField);

 

    // Вывести список  в поток

    void OutToStream(fstream& f);

 

private:

 

    RingListNode* m_head;       // Начальный узел

    RingListNode* m_current;    // Текущий узел

 

    // Поменять два узла местами

    void Swap(RingListNode* n1, RingListNode* n2);

};

 

Информация о работе Долмашняя фонотека