Автор работы: Пользователь скрыл имя, 25 Апреля 2013 в 21:28, курсовая работа
Домашняя фонотека – это база данных, содержащая сведения о домашней музыкальной коллекции.
Цель выполнения курсового проекта состоит в том, чтобы научится описывать предметную область реального мира – объект и его атрибуты, закрепить навыки использования основных структур данных, способов их описания и основных операций над ними. Освоить разработку удобного пользовательского интерфейса.
Введение
Цель выполнения курсового проекта состоит в том, чтобы научится описывать предметную область реального мира – объект и его атрибуты, закрепить навыки использования основных структур данных, способов их описания и основных операций над ними. Освоить разработку удобного пользовательского интерфейса.
Тема моего курсового проекта – домашняя фонотека.
Домашняя фонотека – это база данных, содержащая сведения о домашней музыкальной коллекции.
Программа должна обладать следующими функциями:
При этом в конечном программном продукте должен быть интуитивно понятный и доступный любым пользователям интерфейс.
Так как, предметная область – домашняя фонотека, то объектом является музыкальная композиция.
Выбираем следующие атрибуты музыкальной композиции:
Выполняем преобразование атрибутов в поля пользовательских типов, таблица 1.
Таблица 1
Музыкальная композиция |
Song |
Тип данных | |
Жанр |
Genre |
CString |
Класс строк |
Исполнитель |
Artist |
CString |
Класс строк |
Название |
Name |
CString |
Класс строк |
Альбом |
Album |
CString |
Класс строк |
Год выхода |
Year |
Int |
Целое |
Класс представляет собой
отдельную концепцию
Определение класса можно проиллюстрировать следующим образом (рис. 1).
Рис. 1. Уровни видимости класса
Атрибуты, описывающие музыкальную композицию, будут храниться в классе Song. Это простой класс с конструктором, который инициализирует все поля и методы доступа к данным.
Для определения класса
предусмотрено специальное
Ниже приведена часть программы, описывающая класс 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. Файл должен располагаться рядом с исполняемым файлом.
Каждая строка текстового файла описывает одну музыкальную композицию домашней фонотеки. В строке располагаются атрибуты, описывающие музыкальную композицию. Атрибуты разделены точкой с запятой.
В строке расположены следующие атрибуты:
Пример файла приведен ниже:
Рок;Машина времени;Поворот;Лучшее;1995
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987
Классика;Вивальди;Зима;Лучшее;
К выходным документам относятся:
Пример формирования выходного документа на экран см. в приложении 4 рис. 4. 1.
Экран в данной программе состоит из двух частей:
Найденные по запросу данные выделяются на экране серым цветом.
Выходными данными программы в файл является текстовый файл result.txt. В файл записываются результаты загрузки данных, результаты сортировки и результаты поиска.
Пример выходного файла приведен ниже:
ЗАГРУЗКА файла "songs.txt"
Рок;Машина времени;Поворот;Лучшее;1995
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987
Классика;Вивальди;Зима;Лучшее;
СОРТИРОВКА по полю: "Исполнитель"
Классика;Вивальди;Зима;Лучшее;
Рок;Машина времени;Поворот;Лучшее;1995
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
СОРТИРОВКА по полю: "Название"
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Классика;Вивальди;Зима;Лучшее;
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Рок;Машина времени;Поворот;Лучшее;1995
Эстрада;Мигуля
В.;Скрипка Пагпнини;Дни летят;
СОРТИРОВКА по полю: "Альбом"
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля
В.;Скрипка Пагпнини;Дни летят;
Классика;Вивальди;Зима;Лучшее;
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Рок;Машина времени;Поворот;Лучшее;1995
СОРТИРОВКА по полю: "Год"
Классика;Вивальди;Зима;Лучшее;
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля
В.;Скрипка Пагпнини;Дни летят;
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Рок;Машина времени;Поворот;Лучшее;1995
ПОИСК значения "Эстрада" в поле "Жанр"
Классика;Вивальди;Зима;Лучшее;
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля
В.;Скрипка Пагпнини;Дни летят;
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Рок;Машина времени;Поворот;Лучшее;1995
НАЙДЕНО:
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
ПОИСК значения "Пугачева А." в поле "Исполнитель"
Классика;Вивальди;Зима;Лучшее;
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля
В.;Скрипка Пагпнини;Дни летят;
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Рок;Машина времени;Поворот;Лучшее;1995
НАЙДЕНО:
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
ПОИСК значения "Зима" в поле "Название"
Классика;Вивальди;Зима;Лучшее;
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля В.;Скрипка Пагпнини;Дни летят;1987
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Рок;Машина времени;Поворот;Лучшее;1995
НАЙДЕНО:
Классика;Вивальди;Зима;Лучшее;
ПОИСК значения "Дни летят" в поле "Альбом"
Классика;Вивальди;Зима;Лучшее;
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля
В.;Скрипка Пагпнини;Дни летят;
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Рок;Машина времени;Поворот;Лучшее;1995
НАЙДЕНО:
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
ПОИСК значения "1995" в поле "Год"
Классика;Вивальди;Зима;Лучшее;
Эстрада;Мигуля В.;Домик на окраине;Дни летят;1987
Эстрада;Мигуля
В.;Скрипка Пагпнини;Дни летят;
Попса;Пугачева А.;Миллион алых роз;Лучшее;1989
Рок;Машина времени;Поворот;Лучшее;1995
НАЙДЕНО:
Рок;Машина времени;Поворот;Лучшее;1995
Динамические структуры по определению характеризуются отсутствием физической смежности элементов структуры в памяти непостоянством и непредсказуемостью размера (числа элементов) структуры в процессе ее обработки. Поскольку элементы динамической структуры располагаются по непредсказуемым адресам памяти, адрес элемента такой структуры не может быть вычислен из адреса начального или предыдущего элемента. Для установления связи между элементами динамической структуры используются указатели, через которые устанавливаются явные связи между элементами. Такое представление данных в памяти называется связным.
Элемент динамической структуры состоит из двух полей:
Когда связное представление данных используется для решения прикладной задачи, для конечного пользователя "видимым" делается только содержимое информационного поля, а поле связок используется только программистом-разработчиком.
Достоинства связного представления данных - в возможности обеспечения значительной изменчивости структур;
Узел списка
Узел списка представлен классом RingListNode. Класс имеет три поля:
Ниже приведен текст
программы, описывающий класс 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);
};