Разработка программы «Музыкальный магазин»

Министерство образования и науки РФ

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования.

ДАГЕСТАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Факультет КТВТиЭ

Кафедра ПОВТиАС

Пояснительная записка к курсовой работе

по дисциплине: «Программирование»

на тему: разработка программы «Музыкальный магазин»

Выполнил: ст-т 2-го курса

группы № У-326

Абдурахманов Сулейман О.

Проверила: Шишова И.В.

Махачкала 2015 г.

Аннотация

электронный справочник транспорт

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

Пояснительная записка содержит:

Печатных листов – 26

Рисунков – 13

Приложений – 1.

Ключевые слова: программирование, С++, функции, массивы, база данных.

Содержание

Введение………………………………………………………………………4

1. Анализ задания……………………………………………………………..7

2. Описание программы………………………………………………............9

3. Результаты тестирования программы…………………………………....14

Заключение…………………………………………………………………...19

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

Приложение…………………………………………………………………..21

Введение

В начале компьютерной эры программисты были рабами вычислительных машин. Разработчики программного обеспечения (ПО) должны были писать свои команды на единственном языке, который понимали компьютеры,- в двоичном коде, и программы выглядели как последовательность нулей и единиц. По мере того как время шло и алгоритмы усложнялись, программирование требовало все больше и больше времени, а внесение изменений в программы и их модернизация становились практически невозможными. Так появились языки программирования высокого уровня: Фортран, Бейсик, Паскаль.

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

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

Struct Event {

Int hour. min;

Char theme [100]. name [100];

};

Имя этого типа даных-Event

Элементы структуры называется полями, а поля могут быть любого основного типа, массивом, указателем, объединением или структурой.

В 70-80-х годах использовался язык Simula в норвежских вооруженных силах, являющийся одним из первых языков, основанных на понятии класс (класс-подмножество, состоящее из данных и связанных с ними функций). Примерно в то же время был утвержден стандарт нового языка программирования, получивший названия С (СИ), который обладал большой мощью, гибкостью, эффективностью и это был одним из языков высокого уровня, позволяющий работать с оборудованием, например: организовывать обмен данными между компьютерами.

В 1978 году были сделаны первые попытки объединить достоинства этих языков: так появился язык <<C с классами >>. Лишь спустя несколько лет он стал тем С++, который так широко применяется сегодня.

Прошло время, менялись требования и подходы к программированию, и в соответствии с этими требованиями поменялся язык. Сейчас существует множество различных версий С++. Среди них можно выделить наиболее часто используемые Microsoft С++ (DOS, WINDOWS) и BORLAND С++ (DOS, WINDOWS), Visual С++ (WINDOWS), GNU С++ (LINUX). Нужно отметить, что С и С++ - два разных языка программирования, но они имеют много общих базовых понятий. В связи с этим можно говорить только о единстве ядра С++, в то время как интерфейс среды программирования и некоторые инструкции различаются для разных версий. При разработке примеров главным образом использовалось Borland С++ 4.5, которая надежна для начинающихся программистов на С++.

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

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

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

1.Анализ задания

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

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

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

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

1. главная функция, в которой осуществляется ввод исходных данных;

2. функция переноса данных из файла в структуру;

3. функция ввода данных в базу;

4. функция поиска по названию;

5. функция поиска по исполнителю;

6. функция вывода всех названий по алфавиту.

Исходные данные

Добавление новых данных в базу:

1. Номер носителя;

2. Порядковый номер в каталоге;

3. Структура

4.Носитель.

5. Номер в каталоге

6. Название

7. Фамилия исполнителя

8.Имя исполнителя

9. Время звучания, минуты

10. Время звучания, секунды

11. Количество произведений

12. Цена

13. Количество массивов в структуре

14. Переменная для переключения по меню

15. Цикл меню

16. Ввод новых данных в базу

17. Функция для заполнения структуры информацией

18. Функция ввода новых данных в программу

19. Запись данных в базу

20. Функция поиска по названию

21. Очистка экрана

22. Переменные, показывающие результат поиска

23. Цикл по размеру базы

24. Сравнение вводимых данных и данных структур

25. Если данные совпадают, то информация вводиться

25. Если данные не совпадают, то выводиться ошибка

27. Алгоритм поиска схожий с функцией поиска по названию

28. Функция ввода всех названий по алфавиту

29. Цикл для изменений первой буквы на верхний регистр

30. Вывод всех названий в обратном порядке

2.Описание программы

В качестве языка программирования использован язык С++. В программе были использованы функции, хранящиеся в заголовочных файлах. Список заголовочных файлов из стандартной библиотеки C++, используемых в программе (в описании приведены функции, использующиеся в данной программе):

  • iostream.h – в ней реализована поддержка для файлового ввода/вывода данных встроенных типов. Операции ввода/вывода выполняются с помощью классов istream (потоковый ввод) и ostream (потоковый вывод). Третий класс, iostream, является производным от них и поддерживает двунаправленный ввод/вывод.

Вывод осуществляется, как правило, с помощью перегруженного оператора сдвига влево (<<),а ввод – с помощью оператора сдвига вправо (>>).

  • conio.h – объявляет несколько библиотечных функций для работы с «консольным вводом/выводом» программы, создает текстовый интерфейс пользователя.
  • fstream.h –заголовочный файл стандартной библиотеки языка C++. Осуществляет ввод/вывод данных , при работе с файлами.
  • string.h – содержит в себе функции для работы со строками.

Далее рассмотрим подробнее созданные функции:

const int N=20;//Размер базы в программе

int razmer=0;//Количество каталогов в программе

struct music {//Структура

int nosit;//Носитель

int nomer;//Номер в каталоге

char nazvanie[20];//Название

char fam[20];//Фамилия

char name[20];//Имя

int time_min;//Время звучания. Минуты

int time_sec;//Время звучания. Секунды

int kol_vo;//Количество произведений

int money;//Цена

}p[N];//Количество массивов структур. Принимает константное значение.

1. Функция main(). Главная функция. Через данную функцию можно получить доступ ко всем остальным функциям.

setlocale (LC_ALL,"rus");//Подключение русского языка

char t;//Переменная для переключения по меню

while(1){

………}//Бесконечный циклменю

getch();//Считывание символа с клавиатуры. Приостановка программы.

2. Функция zapolnenie(). Функция для заполнения структуры информацией.

in.open("C:\\baza.txt",ios::in);//Открытие файла

if(!in){cout<<"Fayl ne nayden!";system("pause");exit(0);}//Ошибка, если файл не найден.

for(int i=0;!in.eof();i++){//Цикл чтения данных. Далее эти данные передаются структуре.

Далее идет поочередное чтение строк из базы.

in>>p[i].nosit;

in>>p[i].nomer;

in>>p[i].nazvanie;

in>>p[i].fam;

in>>p[i].name;

in>>p[i].time_min;

in>>p[i].time_sec;

in>>p[i].kol_vo;

in>>p[i].money;

razmer++;Переменная для определения размера базы.

} in.close();//Закрытие файла

3. Функция dannie(). Функция для добавления новых каталогов в программу.

Далее поочередно вводятся данные.

cout<<"1 - Грампластинка 2 - аудиокассета 3 - лазерный диск";

cout<<"\nВведите номер носителя: ";

cin>>n_nosit;

system("cls");//Очистка консоли от тектса

cout<<"Введите порядковый номер в каталоге: ";

……………………………….

cin>>n_money;

razmer++;//Размер базы увеличивается на 1.

cout<<"Данные успешно внесены в базу!";

//Далее идет запись данных в базу

in.open("C:\\baza.txt",ios::app);//Открывается файл с параметром добавления данных

if(!in){cout<<"Fayl ne nayden!";return 0;}//Если файл не найден, то выходит из программы

in<<"\n"<<n_nosit;

………….

in<<"\n"<<n_money;

4. Функция p_nazv()//Функция поиска по названию

int rez=0,rezult=0;//Переменные показывающие результат поиска

char poisk[20];//Переменная для ввода поискового слова.

for(int i=0;i<razmer;i++){//Цикл по размеру базы

rez=0;//После каждого цикла, переменная обнуляется.

if(strstr(p[i].nazvanie,poisk))rez++;//Вводимые данные и данные из структуры сравниваются

if(strstr(poisk,p[i].nazvanie))rez++;//Теперь обратное сравнение для точности.

if(rez==2){//Если данные совпадают, то выводится информация

cout<<"\nНоситель: ";

if(p[i].nosit==1)cout<<"Грампластинка";

if(p[i].nosit==2)cout<<"Аудиокассета";

if(p[i].nosit==3)cout<<"Лазерный диск";

cout<<"\nПорядковый номер в каталоге: "<<p[i].nomer;

………………….

cout<<"\nЦена по каталогу: "<<p[i].money;

rezult=1;//Переменная увеличивается на 1, теперь сообщение об неуспешном поиске выводится не будет.

}

}

//Если совпадений не найдено, то выводится сообщение об ошибке

if(rezult==0)cout<<"\nНичего не найдено по данному запросу!";

5. Функция p_ispoln(). Функция поиска по исполнителю.

Алгоритм вычисления полностью идентичен алгоритму функции p_nazv().

6. Функция p_all(). Функция вывода всех названий по алфавиту.

char c_rezerv[20];//Резервная переменная для перестановки

char mas[N][20];//Массив хранящий в себе все названия из структуры.

for(int i=0;i<razmer;i++){//Цикл для изменения первой буквы на верхний регистр

for(int j=0;j<N;j++)mas[i][j]=p[i].nazvanie[j];//Заполнение массива данными из структуры

mas[i][0]=toupper(mas[i][0]);//Изменение регистра первой буквы во всем массиве. Сделано для удобной сортировки

}

for(int i=0;i<N-1;i++)//Цикл сортировки всех названий

for(int j=i+1;j<N;j++){

if(mas[i][0]<mas[j][0]){//Если первая буква следующего названия больше предыдущего, то происходит замена

for(int t=0;t<N;t++) c_rezerv[t]=NULL;//Обнуление резервной переменной. Слделано для удобнйо работы с ним.

for(int k=0;k<N;k++) c_rezerv[k]=mas[i][k];//Заполнение резервной переменной заменяемым оъектом

for(int t=0;t<N;t++) mas[i][t]=NULL;//Обнуления места, где произошла перемена

for(int k=0;k<N;k++) mas[i][k]=mas[j][k];//Смена местами

for(int t=0;t<N;t++) mas[j][t]=NULL;//Обнуление места перемены

for(int k=0;k<N;k++) mas[j][k]=c_rezerv[k];//Возвращение данных на место из резервной переменной.

}

}

for(int i=razmer-1;i>=0;i--)cout<<mas[i]<<endl;//Вывод всех названий в обратном порядке

Полный текст программы приведен в приложении.

Результаты тестирования программы

Программа тестировалась на компиляторе по следующим характеристикам.

Для начала зашли в меню пуск, открыли программу Microsoft Visual Studio 2013, потом запускали, чтобы проверить протестировать программу на наличие ошибок..

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

Рис. 1. Главное меню

Если пользователю необходимо ввести новые данные в базу данных, то необходимо выбрать пункт «Ввести новые данные в базу» в главном меню. После выбора данного пункта появляется окно ввода данных. Вначале нужно ввести номер носителя(Рис 2). Для проверки было введено 3 – лазерный диск.

Рис .2. Ввод номера носителя

Далее необходимо ввести порядковый номер в каталоге (Рис 3). Для проверки было введено 19.

Рис. 3. Ввод порядкового номера

Далее необходимо ввести название каталога (Рис 4). Для проверки было введено слово “time”.

Рис. 4. Ввод названия

Далее необходимо ввести имя и фамилию исполнителя (Рис 5). Для проверки было введено, фамилия – Parry, имя – Katy.

Рис. 5. Ввод имени и фамилии исполнителя

Далее необходимо ввести время звучания (Рис 6). Вначале минуты потом секунды. Для проверки было введено, минуты – 3, секунды – 44.

Рис. 6. Ввод времени звучания

Далее необходимо ввести количество произведений и цену по каталогу (Рис7). Для проверки было введено, количество – 6, цена – 850.

Рис. 7. Ввод цены и количества произведений

Если данные успешно были занесены в базу данных (Рис 9), то появляется сообщение об успешном вводе (Рис 8).

Рис. 8. Успешный ввод данных

Рис. 9. База данных

Если пользователь выбрал пункт 2 в главном меню (Рис 1), то появляется окно ввода названия. Для проверки были введены два названия – test и testirovanie.

После ввода слова testirovanie и нажатия клавиши Enter, появляется сообщение о безрезультатном поиске (Рис 10).

Рис. 10. Безрезультатный поиск

После ввода слова test появляется результат поиска (Рис 11).

Рис. 11. Результат поиска

После выбора пункта 3 в главном меню, появляется окно ввода имени и фамилии. Для проверки было введено michael jackson. Если результат поиска будет отрицательный, то выходит сообщение об этом (Рис 10). После выбора фамилии и имени michael jackson появилось окно с результатом (Рис 12).

Рис. 12. Результат поиска «michael jackson»

После выбора пункта 4 в главном меню, появляется окно со списком названий всех дисков в алфавитном порядке (Рис 13).

Рис. 13. Вывод всех названий дисков с базы в алфавитном порядке

После выбора пункта 5 был произведен успешный выход из программы.

Заключение

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

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

При этапе разработки программы возникли трудности со сравнением слов. В конечном итоге было принято решение использовать два раза функцию str(str1,str2). Вначале сравнивать str1 с str2 а потом наоборот.

Пути усовершенствования программы:

  1. Можно реализовать проверку ввода данных. Если пользователь введет некорректные данные, то об этом выйдет соответствующее сообщение.
  2. Можно реализовать редактирование данных из программы ко всем каталогам.

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

  1. Страуструп Б. Программирование: принципы и практика использования C++, исправленное издание — М.: Вильямс, 2011. — 1248 с.
  2. Шилдт Г. Полный справочник по C++ - 4-е изд. - М.: Вильямс, 2011. — 800 с.
  3. www.programmersclub.ru
  4. ci-plus-plus-snachala.ru
  5. Методические указания к выполнению лабораторных работ по дисциплине «Программирование», для студентов 2 курса направления подготовки бакалавров 231000.62 – «Программная инженерия», профиль «Разработка программно-информационных систем», Махачкала - 2013.
  6. Конспект лекций по дисциплине «Программирование», 2015
  7. С++ Специальный справочник-СПБ: Питер, 2001.-480 с.

(Карпов Б, Баранова Т)

  1. С/С++. Структурное программирование: Практикум/ Т. А. Павловская, Ю. А. Щупак. СПБ.: Питер, 2007.- 239 с.

Приложение

#include <iostream>

#include <conio.h>

#include <fstream>

#include <string>

using namespace std;

void zapolnenie(); int dannie(); void p_nazv(); void p_ispoln();void p_all();

const int N=20;

int razmer=0;

struct music {

int nosit;

int nomer;

char nazvanie[20];

char fam[20];

char name[20];

int time_min;

int time_sec;

int kol_vo;

int money;

}p[N];

void main(){setlocale (LC_ALL,"rus");

zapolnenie();

char t;

while(1){

system("cls");

cout<<"1) Ввести новые данные в базу";

cout<<"\n2) Полная информация по указанному названию диска";

cout<<"\n3) Название и цена диска указанного исполнителя";

cout<<"\n4) Все названия дисков в алфавитном порядке";

cout<<"\n5) Выход из программы";

t=getch();

switch (t){

case '1':{dannie();break;}

case '2':{p_nazv();break;}

case '3':{p_ispoln();break;}

case '4':{p_all();break;}

case '5':{exit(0);break;}

}

}

_getch();

}

void zapolnenie(){

ifstream in;

in.open("C:\\baza.txt",ios::in);

if(!in){cout<<"Fayl ne nayden!";system("pause");exit(0);}

for(int i=0;!in.eof();i++){

in>>p[i].nosit;

in>>p[i].nomer;

in>>p[i].nazvanie;

in>>p[i].fam;

in>>p[i].name;

in>>p[i].time_min;

in>>p[i].time_sec;

in>>p[i].kol_vo;

in>>p[i].money;

razmer++;

} in.close();

}

int dannie(){

int n_nosit;

int n_nomer;

char n_nazvanie[20];

char fam_2[20];

char name_2[20];

int n_time_min;

int n_time_sec;

int n_kol_vo;

int n_money;

system("cls");

cout<<"1 - Грампластинка 2 - аудиокассета 3 - лазерный диск";

cout<<"\nВведите номер носителя: ";

cin>>n_nosit;

system("cls");

cout<<"Введите порядковый номер в каталоге: ";

cin>>n_nomer;

system("cls");

cout<<"Введите название: ";

cin>>n_nazvanie;

system("cls");

cout<<"Введите исполнителя";

cout<<"\nФамилия: ";

cin>>fam_2;

cout<<"\nИмя: ";

cin>>name_2;

system("cls");

cout<<"Введите время звучания";

cout<<"\nМинуты: ";

cin>>n_time_min;

cout<<"\nСекунды: ";

cin>>n_time_sec;

system("cls");

cout<<"Введите количество произведений: ";

cin>>n_kol_vo;

cout<<"\nВведите цену по катаогу: ";

cin>>n_money;

system("cls");

cout<<"Данные успешно внесены в базу!";

razmer++;

_getch();

ofstream in;

in.open("C:\\baza.txt",ios::app);

if(!in){cout<<"Fayl ne nayden!";return 0;}

in<<"\n"<<n_nosit;

in<<"\n"<<n_nomer;

in<<"\n"<<n_nazvanie;

in<<"\n"<<fam_2;

in<<"\n"<<name_2;

in<<"\n"<<n_time_min;

in<<"\n"<<n_time_sec;

in<<"\n"<<n_kol_vo;

in<<"\n"<<n_money;

return 0;}

void p_nazv(){

system("cls");

char poisk[20];

int rez=0,rezult=0;

cout<<"Введите название: ";

cin>>poisk;

system("cls");

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

rez=0;

if(strstr(p[i].nazvanie,poisk))rez++;

if(strstr(poisk,p[i].nazvanie))rez++;

if(rez==2){

cout<<"\nНоситель: ";

if(p[i].nosit==1)cout<<"Грампластинка";

if(p[i].nosit==2)cout<<"Аудиокассета";

if(p[i].nosit==3)cout<<"Лазерный диск";

cout<<"\nПорядковый номер в каталоге: "<<p[i].nomer;

cout<<"\nФамилия исполнителя: "<<p[i].fam;

cout<<"\nИмя исполнителя: "<<p[i].name;

cout<<"\nВремя звучания: "<<p[i].time_min<<":"<<p[i].time_sec;

cout<<"\nКоличество произведений: "<<p[i].kol_vo;

cout<<"\nЦена по каталогу: "<<p[i].money;

cout<<"\n_______________________________\n";

rezult=1;

}

}

if(rezult==0)cout<<"\nНичего не найдено по данному запросу!";

_getch();}

void p_ispoln(){

system("cls");

int rez=0,rezult=0;

char p_fam[20],p_name[20];

cout<<"Введите Имя: ";

cin>>p_name;

cout<<"\nВведите Фамилию: ";

cin>>p_fam;

system("cls");

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

rez=0;

if(strstr(p[i].fam,p_fam))rez++;

if(strstr(p_fam,p[i].fam))rez++;

if(strstr(p[i].name,p_name))rez++;

if(strstr(p_name,p[i].name))rez++;

if(rez==4){

cout<<"Название диска: "<<p[i].nazvanie;

cout<<"\nЦена по каталогу: "<<p[i].money;

cout<<"\n_______________________________\n";

rezult=1;

}

}

if(rezult==0)cout<<"\nНичего не найдено по данному запросу!";

_getch();

}

void p_all(){

system("cls");

char c_rezerv[20];

char mas[N][20];

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

for(int j=0;j<N;j++)mas[i][j]=p[i].nazvanie[j];

mas[i][0]=toupper(mas[i][0]);

}

for(int i=0;i<N-1;i++)

for(int j=i+1;j<N;j++){

if(mas[i][0]<mas[j][0]){

for(int t=0;t<N;t++) c_rezerv[t]=NULL;

for(int k=0;k<N;k++) c_rezerv[k]=mas[i][k];

for(int t=0;t<N;t++) mas[i][t]=NULL;

for(int k=0;k<N;k++) mas[i][k]=mas[j][k];

for(int t=0;t<N;t++) mas[j][t]=NULL;

for(int k=0;k<N;k++) mas[j][k]=c_rezerv[k];

}

}

for(int i=razmer-1;i>=0;i--)cout<<mas[i]<<endl;

getch();}

Разработка программы «Музыкальный магазин»