Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 15
1

Реализовать структуру Music

30.06.2014, 16:25. Показов 5491. Ответов 43
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
 Комментарий модератора 
Язык форума - русский. Переведите!

 Комментарий модератора 
Vitaliy1212, при повторном нарушении пункта правил 1.4. тема будет закрыта

Задача.Описати структуру MUSIC,яка містить інформацію про музичні
диски які продаються в магазині:
-назва альбому,
-виконавець,
-рік створення альбому,
-жанр,
-ціна диска
Написати програму що виконує наступні дії:
1. введення з клавіатури даних в масив, що складається з шести елементів типу MUSIC;
2. виведення даних на екран з масиву структур;
3. запис масиву структур в текстовий файл та зчитування даних з файлу в масив структур;
4. впорядкування записів по року створенняальбому;
5. організувати пошук дисків по жанру виконання:у користувача запрошується жанр і виводяться
усі диски,відповідні умові(Порівняння проводити за допомогою функціі порівняння рядків)[/CODE]
Значит структуру я описал и 1 и 2 пункт решил вот мой код
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <string.h>
#include <fstream>
#include <stdlib.h>
const int L_N=30,L_I=30,L_Y=15,L_G=15,L_C=10;//Обьявление длинны строк.
struct MUSIC//Описывание структуры.
{
    char nazva[L_N+1];//Название альбома
    char ispolnitel[L_I+1];//Исполнитель.
    double year;//Год издания.
    char ghanr[L_G+1];//Жанр.
    double cena;//Цена диска.
};
MUSIC songs[5];
void main()
{
    
    using namespace std;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int n=2;
    for (int i=0;i<n;i++)
    {
        cout<<"Введите название альбома:";
        cin.ignore();
        cin.getline(songs[i].nazva,L_N);
        cout<<"Введите исполнителя:";
        cin>>songs[i].ispolnitel;
        cout<<"Введите год издания альбома:";
        cin>>songs[i].year;
        cout<<"Введите жанр альбома:";
        cin>>songs[i].ghanr;
        cout<<"Введите цену диска:";
        cin>>songs[i].cena;
        cout<<"============================"<<'\n';
        
    }
    
 
    system("pause");
 
}
Прошу помогите с 3,4,5 пунктом(желательно не отрывками а вставить в мой код ваше и прокоментировать)
Заранее всем огромное спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.06.2014, 16:25
Ответы с готовыми решениями:

Реализовать структуру моделирующую работу аэропорта; реализовать поиск по заданному полю в массиве таких структур
Здравствуйте. Каким образом можно сделать ввод данных через массив, а так же все последующие...

Реализовать структуру Parallelogram
Создайте структуру Параллелограмм с элементами a, b - стороны параллелограмма и a - угол между...

Как реализовать структуру БД
Доброе утро! Есть сайт технической поддержки. И есть пользователи, которые оставляют на нем заявку...

Как реализовать структуру
Доброго времени суток. Никак не могу скомпиллировать эту структуру. struct tree{ char inf;...

43
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 15
01.07.2014, 01:17  [ТС] 21
Author24 — интернет-сервис помощи студентам
Alex5, Смотри Алекс я конечно нифига не понимаю но прочел с примера
7. Створимо функцію запису даних з масиву структур в файл.
7.1. Імя функції - WriteClient.
7.2. Вхідні дані (формальні параметри) :
 Адреси качану масиву структур;
 кількість заповнених елементів масиву структур;
7.3. Вихідні дані: функція не повертає нічого.
7.4. Реалізація функції WriteClient. Додамо нову функцію в модуль з ім’ям
db_orenda_02_interface.cpp.
C++
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
26
void WriteClient(Сlient cl[], int num)
//==============================================================
// Оновлення файлу бази даних
//==============================================================
{
ofstream cl_out("client.txt");
cout<<setiosflags(ios::fixed);
cout<<setprecision(0);
for (int i=0; i<num; i++)
{
cl_out.setf(ios::left);
cl_out<<setw(L_CODE_CLIENT)<<cl[i].codeСlient;
cl_out<<setw(L_ORG_NAME)<<cl[i].orgName;C++: Лекція 34.
input 6/30/2014 8
cl_out<<setw(L_IPN)<<cl[i].IPN;
cl_out<<setw(L_ADRESS)<<cl[i].adress;
cl_out<<setw(L_TELEPHONE)<<cl[i].telephone;
if(i!=num-1) cl_out<<'\n';
}
cl_out.close();
cout<<"Файл client.txt - оновлен"<<endl;
cout<<"Додано "<<num<<" записів"<<endl;
cout<<"Для продовження роботи натисніть любу клавішу ...";
system("pause");
return;
}
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 01:29 22
Следующий этап: запись в файл и чтение из файла:
Кликните здесь для просмотра всего текста

C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/// [url]https://www.cyberforum.ru/cpp-beginners/thread1220023.html[/url]
/*
Задача.Описать структуру MUSIC, которая содержит информацию о музыкальных
дисках, которые продаются в магазине:
 
1.    название альбома;
2.    исполнитель;
3.    год создания альбома;
4.    жанр;
5.    цена диска;
 
 
Написать программу которая выполняет следующие действия:
 
1.    Ввод с клавиатуры данных в массив, состоящий из шести элементов типа MUSIC;
2.    Вывода данных на экран из массива структур;
3.    Запись массива структур в текстовый файл и считывания данных из файла в массив структур;
4.    Порядок записей по году создания альбома;
5.    Организовать поиск дисков по жанру выполнения: у пользователя запрашивается жанр и
      выводятся все диски, соответствующие условию (сравнение проводить с помощью функции
      сравнения строк);
*/
 
// Подключаем заголовочные файлы:
#include <iostream>     // для ввода-вывода
#include <windows.h>    // для отображения русского языка
#include <string>       // для строк класса string
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
 
using namespace std;    // подключаем стандартное пространство имён
 
struct music        // объявление структуры music
{
    string artist;  // исполнитель
    string name;    // название альбома
    string genre;   // жанр
    int year;       // год издания
    double price;   // цена диска
};
 
music songs[6];  // создаём массив структур типа music (можно
                 // будет ввести данные не более чем для 6 дисков)
 
int main()  // функция main согласно стандарту C++ должна быть типа int
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int n;
    cout << "Введите количество дисков, для которых Вы желаете ввести информацию (не более 6 дисков): ";
    cin >> n;
    cin.ignore();
    cout << endl;
 
    if (n>6 || n<=0)
    {   // если пользователь ввёл неверное число, вводится уведомление и программа завершается:
        cout << "Извините, данная реализация программы не расчитана на запись такого объёма данных.\n"
                "Максимальное количество дисков должно быть не более шести. Минимальное - один." << endl;
 
        cout << endl;   // выводим на экран пустую строку для лучшего визуального восприятия текста
    }
 
    else
    {   // иначе выполняется следующий код:
        for (int i=0; i<n; i++)
        {
            cout << "\nВведите имя исполнителя: ";
            getline (cin, songs[i].artist);     // используем функцию getline для чтения строк с пробелами
            cin.clear();    // очищаем поток от лишних символов новой строки, попадающих в поток с нажатием
                            // пользователем клавиши Enter
            cout << "Введите название диска: ";
            getline (cin, songs[i].name);
            cin.clear();
 
            cout << "Введите жанр: ";
            getline (cin, songs[i].genre);
            cin.clear();
 
            cout << "Введите год издания: ";
            cin >> songs[i].year;
            cin.clear();
 
            cout << "Введите цену диска: ";
            cin >>  songs[i].price;
            cin.ignore();
        }
 
        for (int i=0;i<n;i++)
        {   // выводим введённые пользователем данные на экран
            cout << endl;
            cout << songs[i].artist << endl;
            cout << songs[i].name   << endl;
            cout << songs[i].genre  << endl;
            cout << songs[i].year   << endl;
            cout << songs[i].price  << endl;
            cout << endl;
        }
    }
 
//=========== Запись данных введённых пользователем в файл music.txt =============
    char userAnswer;
    cout << "\nЖелаете сохранить введённые Вами данные в текстовый файл? (да/нет): ";
    cin >> userAnswer;
    if (userAnswer == 'д' || userAnswer == 'Д' || userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "\nВведённые Вами данные будут сохранены в файл music.txt.";
        ofstream fout;              // создание объекта fout типа ofstream
        fout.open("music.txt");     // ассоциирование объекта c файлом music.txt
 
        // используем созданный нами объект fout по аналогии с объектом cout
        for (int i=0;i<n;i++)
        {   // записываем введённые пользователем данные на в файл music.txt
            fout << songs[i].artist;
            fout << songs[i].name;
            fout << songs[i].genre;
            fout << songs[i].year;
            fout << songs[i].price;
        }
        fout.close ();  // закрытие соединения вывода с файлом
    }
    cout << "\nДанные были успешно сохранены.\n";
 
//===============================================================================
 
//======= Чтение данных введённых пользователем из файла music.txt на экран =======
    cout << "\nЖелаете вывести введённые Вами данные из текстового файла? (да/нет): ";
    cin >> userAnswer;
    if (userAnswer == 'д' || userAnswer == 'Д' || userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "\nВы сохранили следующие данные в файле music.txt:\n";
        ifstream fin;              // создание объекта fin типа ifstream
        fin.open("music.txt");     // ассоциирование создание объекта fin c файлом music.txt
 
        // используем созданный нами объект fin по аналогии с объектом cin
        for (int i=0; i<n; i++)
        {
            getline (fin, songs[i].artist);     // используем функцию getline для чтения строк с пробелами
            //fin.clear();
 
            getline (fin, songs[i].name);
            //fin.clear();
 
            getline (fin, songs[i].genre);
            //fin.clear();
 
            fin >> songs[i].year;
            //fin.clear();
 
            fin >>  songs[i].price;
            //fin.ignore();
        }
        fin.close ();   // закрытие соединения ввода с файлом
    }
//===============================================================================
 
    system("pause");    // для ожидания реакции пользователя
 
    return 0;   // успешное завершение программы
}
P.S. Запись в файл работает. А вот с чтением из файла что-то пока не получается. Ещё разбираюсь.


Добавлено через 12 минут
Что-то я засиделся. С Вашего позволения, вынужден откланяться - время пол-четвёртого утра, через три часа уже надо на работу собираться, а ещё спать не ложился. Было интересно. Продолжить смогу только вечером.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
01.07.2014, 01:39 23
Цитата Сообщение от gru74ik Посмотреть сообщение
А вот с чтением из файла что-то пока не получается
Цитата Сообщение от gru74ik Посмотреть сообщение
C++
1
2
3
4
5
 fout << songs[i].artist;
 fout << songs[i].name;
 fout << songs[i].genre;
 fout << songs[i].year;
 fout << songs[i].price;
Так при чтении весь файл будет восприниматься как одна строка songs[0].name.
Надо бы какой-то разделитель (пробел или конец строки) добавить.
C++
1
2
3
 fout << songs[i].artist << endl;
 fout << songs[i].name << endl;
 // и т.д.
Добавлено через 2 минуты
Цитата Сообщение от Vitaliy1212 Посмотреть сообщение
А что скажете на вот такое представление через функции ?
Цитата Сообщение от Vitaliy1212 Посмотреть сообщение
C++
1
2
cout«"Введите название альбома:";
cin»mass[i].name;
Здесь должны быть не кавычки, а знаки больше-меньше:
C++
1
2
cout << "Введите название альбома:";
cin >> mass[i].name;
1
0 / 0 / 0
Регистрация: 30.06.2014
Сообщений: 15
01.07.2014, 01:48  [ТС] 24
Alex5, точно спасибо
0
ildwine
01.07.2014, 01:57
  #25
 Комментарий модератора 
Все кто присутствует в данной теме - заканчиваем оффтоп!
0
24 / 24 / 11
Регистрация: 01.06.2014
Сообщений: 135
01.07.2014, 02:50 26
Завтра экзамен, вот немного решил размяться)
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;
 
struct MusicData
{
    char    name[16], author[16], type[12];
    __int16  year;
    float    price;
 
    void readFromConcole();
    void writeToConcole();
    void saveToStream(FILE *file);
    bool loadFromStream(FILE * file);
};
 
 
void MusicData::readFromConcole()
{
    cout << "Enter music data:\n";gets(name);
    cout << "Name = "; gets(name);
    cout << "Author = "; gets(author);
    cout << "Year = "; gets(type); year = atoi(type);
    cout << "Type = "; gets(type);
    cout << "Price = "; cin >> price;
    cout << "Added.\n";
}
 
void MusicData::writeToConcole()
{
    cout << name << ' ' << author << ' ' << year << ' ' << type << ' ' << int(price) << endl;
}
 
void MusicData::saveToStream(FILE *file)
{
    char buf[16];
 
    fputs(name, file); fputc('\n', file);
    fputs(author, file); fputc('\n', file);
    fputs(itoa(year, buf, 10), file); fputc('\n', file);
    fputs(type, file); fputc('\n', file);
    fputs(itoa(price, buf, 10), file); fputc('\n', file);
}
 
bool MusicData::loadFromStream(FILE *file)
{
    char buf[128];
    int readCount = 1;
    name[0] = 0;
    fgets(name, 16, file);
    if (strlen(name) == 0)
        return false;
 
    *strchr(name, '\n') = 0;
 
    fgets(author, 16, file); *strchr(author, '\n') = 0;
    fgets(buf, 10, file); *strchr(buf, '\n') = 0; year = atoi(buf);
    fgets(type, 15, file); *strchr(type, '\n') = 0; 
    fgets(buf, 30, file); *strchr(buf, '\n') = 0;  price = atof(buf);
    return true;
}
 
void printUserGuide()
{
    cout << "\n=========================\n";
    cout << "1. Add new music to album.\n";
    cout << "2. Print all music.\n";
    cout << "3. Save data to file.\n";
    cout << "4. Load data from file.\n";
    cout << "5. Sort album by year.\n";
    cout << "6. Print music by type.\n";
    cout << "0. Exit.\n";
    cout << endl;
    cout << "Please, enter command: ";
    
}
 
int main(int argc, char *argv[])
{
    MusicData **album = new MusicData* [4096], **albumPtr = album, **minPtr = NULL;
 
    int cmd = 0;
    char path[128];
    int minVal;
    while (cmd != 9)
    {
        printUserGuide();
        cin >> cmd;
        FILE *file = NULL;
        switch(cmd)
        {
        case 1:
            int addCount; cout << "Count = "; cin >> addCount;
            for (int i = 0; i < addCount; i++)
            {
                *albumPtr = new MusicData;
                (*albumPtr)->readFromConcole();
                albumPtr ++;
            }
            break;
        case 2:
            cout << "===MUSIC===\n";
            for (MusicData **ptr = album; ptr < albumPtr; ptr++)
                (*ptr)->writeToConcole();
            cout << "====END====\n";
            break;
        case 3:
            gets(path);
            cout << "Enter file path : "; gets(path);
            file = fopen(path, "w");
            
            for (MusicData **ptr = album; ptr < albumPtr; ptr++)
                (*ptr)->saveToStream(file);
 
            fclose(file);
            cout << "Data saved to " << path << endl;
            
        case 4:
            gets(path);
            cout << "Enter file path : "; gets(path);
            delete [] album; 
            album = albumPtr = new MusicData* [4096];
            file = fopen(path, "r");
 
            while (((*albumPtr) = new MusicData)->loadFromStream(file))
                albumPtr ++;
            delete [] (*albumPtr);
 
            fclose(file);
            cout << "Data loaded from " << path << endl;
            break;
        case 5:
            char q;
            cout << "Min(0) or Max(1): "; cin >> q;
            for (MusicData **iPtr = album; iPtr < albumPtr; iPtr ++)
            {
                minPtr = iPtr;
                for (MusicData **jPtr = iPtr + 1; jPtr < albumPtr; jPtr ++)
                    if (q == '0')
                    {
                        if ((*jPtr)->year < (*minPtr)->year)
                            minPtr = jPtr;
                    }
                    else
                        if ((*jPtr)->year > (*minPtr)->year)
                            minPtr = jPtr;
 
                MusicData *bufPtr = *minPtr;
                *minPtr = *iPtr;
                *iPtr = bufPtr;
            }
            cout << "Sorted. Type (2) to see results.\n";
            break;
        case 6:
            gets(path); cout << "Enter type: "; gets(path);
            cout << "Music by type \"" << path << "\"\n";
            for (MusicData **subPtr = album; subPtr < albumPtr; subPtr++)
                if (strcmp((*subPtr)->type, path) == 0)
                    (*subPtr)->writeToConcole();
            break;
        }
 
    }
}
Тестируй)

Добавлено через 8 минут
Немного подправил
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
#include <iostream>
#include <stdio.h>
#include <fstream>
using namespace std;
 
struct MusicData
{
    char    name[16], author[16], type[12];
    __int16  year;
    float    price;
 
    void readFromConcole();
    void writeToConcole();
    void saveToStream(FILE *file);
    bool loadFromStream(FILE * file);
};
 
 
void MusicData::readFromConcole()
{
    cout << "Enter music data:\n";gets(name);
    cout << "Name = "; gets(name);
    cout << "Author = "; gets(author);
    cout << "Year = "; gets(type); year = atoi(type);
    cout << "Type = "; gets(type);
    cout << "Price = "; cin >> price;
    cout << "Added.\n";
}
 
void MusicData::writeToConcole()
{
    cout << name << ' ' << author << ' ' << year << ' ' << type << ' ' << int(price) << endl;
}
 
void MusicData::saveToStream(FILE *file)
{
    char buf[16];
 
    fputs(name, file); fputc('\n', file);
    fputs(author, file); fputc('\n', file);
    fputs(itoa(year, buf, 10), file); fputc('\n', file);
    fputs(type, file); fputc('\n', file);
    fputs(itoa(price, buf, 10), file); fputc('\n', file);
}
 
bool MusicData::loadFromStream(FILE *file)
{
    char buf[128];
    int readCount = 1;
    name[0] = 0;
    fgets(name, 16, file);
    if (strlen(name) == 0)
        return false;
 
    *strchr(name, '\n') = 0;
 
    fgets(author, 16, file); *strchr(author, '\n') = 0;
    fgets(buf, 10, file); *strchr(buf, '\n') = 0; year = atoi(buf);
    fgets(type, 15, file); *strchr(type, '\n') = 0; 
    fgets(buf, 30, file); *strchr(buf, '\n') = 0;  price = atof(buf);
    return true;
}
 
void printUserGuide()
{
    cout << "\n=========================\n";
    cout << "1. Add new music to album.\n";
    cout << "2. Print all music.\n";
    cout << "3. Save data to file.\n";
    cout << "4. Load data from file.\n";
    cout << "5. Sort album by year.\n";
    cout << "6. Print music by type.\n";
    cout << "0. Exit.\n";
    cout << endl;
    cout << "Please, enter command: ";
    
}
 
int main(int argc, char *argv[])
{
    MusicData **album = new MusicData* [4096], **albumPtr = album, **minPtr = NULL;
 
    int cmd = 55;
    char path[128];
    int minVal;
    while (cmd != 0)
    {
        printUserGuide();
        cin >> cmd;
        FILE *file = NULL;
        switch(cmd)
        {
        case 1:
            int addCount; cout << "Count = "; cin >> addCount;
            for (int i = 0; i < addCount; i++)
            {
                *albumPtr = new MusicData;
                (*albumPtr)->readFromConcole();
                albumPtr ++;
            }
            break;
        case 2:
            cout << "===MUSIC===\n";
            for (MusicData **ptr = album; ptr < albumPtr; ptr++)
                (*ptr)->writeToConcole();
            cout << "====END====\n";
            break;
        case 3:
            gets(path);
            cout << "Enter file path : "; gets(path);
            file = fopen(path, "w");
            
            for (MusicData **ptr = album; ptr < albumPtr; ptr++)
                (*ptr)->saveToStream(file);
 
            fclose(file);
            cout << "Data saved to " << path << endl;
            
        case 4:
            gets(path);
            cout << "Enter file path : "; gets(path);
            delete [] album; 
            album = albumPtr = new MusicData* [4096];
            file = fopen(path, "r");
 
            while (((*albumPtr) = new MusicData)->loadFromStream(file))
                albumPtr ++;
            delete [] (*albumPtr);
 
            fclose(file);
            cout << "Data loaded from " << path << endl;
            break;
        case 5:
            char q;
            cout << "Min(0) or Max(1): "; cin >> q;
            for (MusicData **iPtr = album; iPtr < albumPtr; iPtr ++)
            {
                minPtr = iPtr;
                for (MusicData **jPtr = iPtr + 1; jPtr < albumPtr; jPtr ++)
                    if (q == '0')
                    {
                        if ((*jPtr)->year < (*minPtr)->year)
                            minPtr = jPtr;
                    }
                    else
                        if ((*jPtr)->year > (*minPtr)->year)
                            minPtr = jPtr;
 
                MusicData *bufPtr = *minPtr;
                *minPtr = *iPtr;
                *iPtr = bufPtr;
            }
            cout << "Sorted. Type (2) to see results.\n";
            break;
        case 6:
            gets(path); cout << "Enter type: "; gets(path);
            cout << "Music by type \"" << path << "\"\n";
            for (MusicData **subPtr = album; subPtr < albumPtr; subPtr++)
                if (strcmp((*subPtr)->type, path) == 0)
                    (*subPtr)->writeToConcole();
            break;
        }
 
    }
 
    delete [] album;
}
Добавлено через 12 минут
На русском
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <iostream>
#include <fstream>
 
using namespace std;
 
struct MusicData
{
    char    name[16], author[16], type[12];
    __int16  year;
    float    price;
 
    void readFromConcole();
    void writeToConcole();
    void saveToStream(FILE *file);
    bool loadFromStream(FILE * file);
};
 
 
void MusicData::readFromConcole()
{
    cout << "Введите данные диска:\n";gets(name);
    cout << "Название = "; gets(name);
    cout << "Исполнитель = "; gets(author);
    cout << "Год = "; gets(type); year = atoi(type);
    cout << "Жанр = "; gets(type);
    cout << "Цена = "; cin >> price;
    cout << "Добавлено.\n";
}
 
void MusicData::writeToConcole()
{
    cout << name << ' ' << author << ' ' << year << ' ' << type << ' ' << int(price) << endl;
}
 
void MusicData::saveToStream(FILE *file)
{
    char buf[16];
 
    fputs(name, file); fputc('\n', file);
    fputs(author, file); fputc('\n', file);
    fputs(itoa(year, buf, 10), file); fputc('\n', file);
    fputs(type, file); fputc('\n', file);
    fputs(itoa(price, buf, 10), file); fputc('\n', file);
}
 
bool MusicData::loadFromStream(FILE *file)
{
    char buf[128];
    int readCount = 1;
    name[0] = 0;
    fgets(name, 16, file);
    if (strlen(name) == 0)
        return false;
 
    *strchr(name, '\n') = 0;
 
    fgets(author, 16, file); *strchr(author, '\n') = 0;
    fgets(buf, 10, file); *strchr(buf, '\n') = 0; year = atoi(buf);
    fgets(type, 15, file); *strchr(type, '\n') = 0; 
    fgets(buf, 30, file); *strchr(buf, '\n') = 0;  price = atof(buf);
    return true;
}
 
void printUserGuide()
{
    cout << "\n=========================\n";
    cout << "1. Добавить диски в альбом.\n";
    cout << "2. Вывести все диски.\n";
    cout << "3. Сохранить диски в файл.\n";
    cout << "4. Загрузить диски из файла.\n";
    cout << "5. Отсортировать по году.\n";
    cout << "6. Вывести по жанру.\n";
    cout << "0. Выход.\n";
    cout << endl;
    cout << "Пожалуйста, введите команду: ";
    
}
 
int main(int argc, char *argv[])
{
    MusicData **album = new MusicData* [4096], **albumPtr = album, **minPtr = NULL;
 
    setlocale(LC_ALL, "Russian");
 
    int cmd = 55;
    char path[128];
    int minVal;
    while (cmd != 0)
    {
        printUserGuide();
        cin >> cmd;
        FILE *file = NULL;
        switch(cmd)
        {
        case 1:
            int addCount; cout << "Количество дисков = "; cin >> addCount;
            for (int i = 0; i < addCount; i++)
            {
                *albumPtr = new MusicData;
                (*albumPtr)->readFromConcole();
                albumPtr ++;
            }
            break;
        case 2:
            cout << "===МУЗЫКА===\n";
            for (MusicData **ptr = album; ptr < albumPtr; ptr++)
                (*ptr)->writeToConcole();
            cout << "====КОНЕЦ====\n";
            break;
        case 3:
            gets(path);
            cout << "Введите путь : "; gets(path);
            file = fopen(path, "w");
            
            for (MusicData **ptr = album; ptr < albumPtr; ptr++)
                (*ptr)->saveToStream(file);
 
            fclose(file);
            cout << "Данные сохранены в " << path << endl;
            
        case 4:
            gets(path);
            cout << "Введите путь : "; gets(path);
            delete [] album; 
            album = albumPtr = new MusicData* [4096];
            file = fopen(path, "r");
 
            while (((*albumPtr) = new MusicData)->loadFromStream(file))
                albumPtr ++;
            delete [] (*albumPtr);
 
            fclose(file);
            cout << "Данные загружены из " << path << endl;
            break;
        case 5:
            char q;
            cout << "По возрастанию(0) or по убыванию(1): "; cin >> q;
            for (MusicData **iPtr = album; iPtr < albumPtr; iPtr ++)
            {
                minPtr = iPtr;
                for (MusicData **jPtr = iPtr + 1; jPtr < albumPtr; jPtr ++)
                    if (q == '0')
                    {
                        if ((*jPtr)->year < (*minPtr)->year)
                            minPtr = jPtr;
                    }
                    else
                        if ((*jPtr)->year > (*minPtr)->year)
                            minPtr = jPtr;
 
                MusicData *bufPtr = *minPtr;
                *minPtr = *iPtr;
                *iPtr = bufPtr;
            }
            cout << "Отсортировано. Введите (2),чтобы увидеть результаты.\n";
            break;
        case 6:
            gets(path); cout << "Введите жанр: "; gets(path);
            cout << "Музыка по жанру \"" << path << "\"\n";
            for (MusicData **subPtr = album; subPtr < albumPtr; subPtr++)
                if (strcmp((*subPtr)->type, path) == 0)
                    (*subPtr)->writeToConcole();
            break;
        }
 
    }
 
    delete [] album;
}
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 07:38 27
Так, ну вот разобрались с записью в файл и чтением из файла.
Кликните здесь для просмотра всего текста

C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/// [url]https://www.cyberforum.ru/cpp-beginners/thread1220023.html[/url]
/*
Задача.Описать структуру MUSIC, которая содержит информацию о музыкальных
дисках, которые продаются в магазине:
 
1.    название альбома;
2.    исполнитель;
3.    год создания альбома;
4.    жанр;
5.    цена диска;
 
 
Написать программу которая выполняет следующие действия:
 
1.    Ввод с клавиатуры данных в массив, состоящий из шести элементов типа MUSIC;
2.    Вывода данных на экран из массива структур;
3.    Запись массива структур в текстовый файл и считывания данных из файла в массив структур;
4.    Порядок записей по году создания альбома;
5.    Организовать поиск дисков по жанру выполнения: у пользователя запрашивается жанр и
      выводятся все диски, соответствующие условию (сравнение проводить с помощью функции
      сравнения строк);
*/
 
// Подключаем заголовочные файлы:
#include <iostream>     // для ввода-вывода
#include <windows.h>    // для отображения русского языка
#include <string>       // для строк класса string
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
 
using namespace std;    // подключаем стандартное пространство имён
 
struct music        // объявление структуры music
{
    string artist;  // исполнитель
    string name;    // название альбома
    string genre;   // жанр
    int year;       // год издания
    double price;   // цена диска
};
 
music songs[6];  // создаём массив структур типа music (можно
                 // будет ввести данные не более чем для 6 дисков)
 
int main()  // функция main согласно стандарту C++ должна быть типа int
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int n;
    cout << "Введите количество дисков, для которых Вы желаете ввести информацию (не более 6 дисков): ";
    cin >> n;
    cin.ignore();
    cout << endl;
 
    if (n>6 || n<=0)
    {   // если пользователь ввёл неверное число, выводится уведомление и программа завершается:
        cout << "Извините, данная реализация программы не расчитана на запись такого объёма данных.\n"
                "Максимальное количество дисков должно быть не более шести. Минимальное - один." << endl;
 
        cout << endl;   // выводим на экран пустую строку для лучшего визуального восприятия текста
    }
 
    else
    {   // иначе выполняется следующий код:
        for (int i=0; i<n; i++)
        {
            cout << "\nВведите имя исполнителя: ";
            getline (cin, songs[i].artist);     // используем функцию getline для чтения строк с пробелами
            cin.clear();    // очищаем поток от лишних символов новой строки, попадающих в поток с нажатием
                            // пользователем клавиши Enter
            cout << "Введите название диска: ";
            getline (cin, songs[i].name);
            cin.clear();
 
            cout << "Введите жанр: ";
            getline (cin, songs[i].genre);
            cin.clear();
 
            cout << "Введите год издания: ";
            cin >> songs[i].year;
            cin.clear();
 
            cout << "Введите цену диска: ";
            cin >>  songs[i].price;
            cin.ignore();
        }
 
        for (int i=0;i<n;i++)
        {   // выводим введённые пользователем данные на экран
            cout << endl;
            cout << songs[i].artist << endl;
            cout << songs[i].name   << endl;
            cout << songs[i].genre  << endl;
            cout << songs[i].year   << endl;
            cout << songs[i].price  << endl;
            cout << endl;
        }
    }
 
//=========== Запись данных введённых пользователем в файл music.txt =============
    char userAnswer;
    cout << "\nЖелаете сохранить введённые Вами данные в текстовый файл? (да/нет): ";
    cin >> userAnswer;
    if (userAnswer == 'д' || userAnswer == 'Д' || userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "\nВведённые Вами данные будут сохранены в файл music.txt.\n";
        ofstream fout;              // создание объекта fout типа ofstream
        fout.open("music.txt");     // ассоциирование объекта c файлом music.txt
 
        // используем созданный нами объект fout по аналогии с объектом cout
        for (int i=0;i<n;i++)
        {   // записываем введённые пользователем данные на в файл music.txt
            fout << songs[i].artist << endl;
            fout << songs[i].name   << endl;
            fout << songs[i].genre  << endl;
            fout << songs[i].year   << endl;
            fout << songs[i].price  << endl;
        }
        fout.close ();  // закрытие соединения вывода с файлом
    }
//--------- Специальный блок для красоты ---------
 
// С небольшой задержкой будут выведены 20 точек
// одна за другой, как будто программа думает:
 
    cout << endl;
    for (int counter = 1; counter < 20; counter++)
    {
    Sleep(600);
    cout << ".";
    }
    cout << endl;
//------------------------------------------------
 
    cout << "\nДанные были успешно сохранены.\n";
 
//===============================================================================
 
//======= Чтение данных введённых пользователем из файла music.txt на экран =======
    cout << "\nЖелаете вывести введённые Вами данные из текстового файла? (да/нет): ";
    cin >> userAnswer;
    if (userAnswer == 'д' || userAnswer == 'Д' || userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "\nВы сохранили следующие данные в файле music.txt:\n";
        ifstream fin;              // создание объекта fin типа ifstream
        fin.open("music.txt");     // ассоциирование создание объекта fin c файлом music.txt
 
        // используем созданный нами объект fin по аналогии с объектом cin
        for (int i=0; i<n; i++)
        {
            cout << "------------------------------" << endl;
            getline (fin, songs[i].artist);     // используем функцию getline для чтения строк с пробелами
            cout << songs[i].artist << endl << endl;
            fin.clear();
 
            getline (fin, songs[i].name);
            cout << songs[i].name << endl << endl;
            fin.clear();
 
            getline (fin, songs[i].genre);
            cout << songs[i].genre << endl << endl;
            fin.clear();
 
            fin >> songs[i].year;
            cout << songs[i].year << endl << endl;
            fin.clear();
 
            fin >>  songs[i].price;
            cout << songs[i].price << endl << endl;
            fin.ignore();
        }
        fin.close ();   // закрытие соединения ввода с файлом
    }
//===============================================================================
 
    system("pause");    // для ожидания реакции пользователя
 
    return 0;   // успешное завершение программы
}


Осталось 4-й и 5-й пункт задачи реализовать.
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
01.07.2014, 08:04 28
Цитата Сообщение от gru74ik Посмотреть сообщение
Осталось 4-й и 5-й пункт задачи реализовать.
C++
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
#include <algorithm>
 
bool isSecondGreater(const music& first, const music&  second)
{
   return second.year>first.year;
}
 
    songs[0].year = 1988;
    songs[1].year = 1978;
    songs[2].year = 1998;
    songs[3].year = 2008;
    songs[4].year = 1965;
    songs[5].year = 2200;
   
    std::sort(songs,songs+6,isSecondGreater);
    for (int i=0;i<6;i++)
    {   // выводим введённые пользователем данные на экран
        cout << endl;
        cout << songs[i].artist << endl;
        cout << songs[i].name   << endl;
        cout << songs[i].genre  << endl;
        cout << songs[i].year   << endl;
        cout << songs[i].price  << endl;
        cout << endl;
    }
Поиск тупо циклом.
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 08:09 29
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
C++
1
2
3
4
5
6
songs[0].year = 1988;
songs[1].year = 1978;
songs[2].year = 1998;
songs[3].year = 2008;
songs[4].year = 1965;
songs[5].year = 2200;
Года-то пользователь же с клавиатуры сам вводит. А тут они в коде программы уже присвоены соответствующим полям, я правильно понимаю?
Если правильно, то вопрос. Как использовать те данные, которые пользователь ввёл?
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
01.07.2014, 08:12 30
Цитата Сообщение от gru74ik Посмотреть сообщение
Года-то пользователь же с клавиатуры сам вводит.
Ну меня просто ломало вводить все это с клавиатуры.
Сортировать да, после ввода пользователем, и сортировать не весь массив только введенное количество:

C++
1
2
if(n>1)
   std::sort(songs,songs+n,isSecondGreater);
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 08:14 31
А, ну то есть, если не присваивать значения, то прога возьмёт их из массива, так ведь? Я уже как зомби, не соображаю ничего. Ночью надо спать!
Так вроде:
Кликните здесь для просмотра всего текста

C++
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
#include <algorithm>
 
bool isSecondGreater(const music& first, const music&  second)
{
   return second.year>first.year;
}
 
    songs[0].year;
    songs[1].year;
    songs[2].year;
    songs[3].year;
    songs[4].year;
    songs[5].year;
   
    std::sort(songs,songs+6,isSecondGreater);
    for (int i=0;i<6;i++)
    {   // выводим введённые пользователем данные на экран
        cout << endl;
        cout << songs[i].artist << endl;
        cout << songs[i].name   << endl;
        cout << songs[i].genre  << endl;
        cout << songs[i].year   << endl;
        cout << songs[i].price  << endl;
        cout << endl;
    }
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
01.07.2014, 08:25 32
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <algorithm>
 
bool isSecondGreater(const music& first, const music&  second)
{
   return second.year>first.year;
}
   
 
        for (int i=0; i<n; i++)
        {
            cout << "\nВведите имя исполнителя: ";
            getline (cin, songs[i].artist);     // используем функцию getline для чтения строк с пробелами
            cin.clear();    // очищаем поток от лишних символов новой строки, попадающих в поток с нажатием
                            // пользователем клавиши Enter
            cout << "Введите название диска: ";
            getline (cin, songs[i].name);
            cin.clear();
 
            cout << "Введите жанр: ";
            getline (cin, songs[i].genre);
            cin.clear();
 
            cout << "Введите год издания: ";
            cin >> songs[i].year;
            cin.clear();
 
            cout << "Введите цену диска: ";
            cin >>  songs[i].price;
            cin.ignore();
        }
 
       if(n>1)
        std::sort(songs,songs+n,isSecondGreater);
 
        for (int i=0;i<n;i++)
        {   // выводим введённые пользователем данные на экран
            cout << endl;
            cout << songs[i].artist << endl;
            cout << songs[i].name   << endl;
            cout << songs[i].genre  << endl;
            cout << songs[i].year   << endl;
            cout << songs[i].price  << endl;
            cout << endl;
        }
Присвоение я просто для демонстрации написал.
1
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 09:31 33
Чё-то не сортирует (((
Кликните здесь для просмотра всего текста

C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
/// [url]https://www.cyberforum.ru/cpp-beginners/thread1220023.html[/url]
/*
Задача.Описать структуру MUSIC, которая содержит информацию о музыкальных
дисках, которые продаются в магазине:
 
1. название альбома;
2. исполнитель;
3. год создания альбома;
4. жанр;
5. цена диска;
 
 
Написать программу которая выполняет следующие действия:
 
1. Ввод с клавиатуры данных в массив, состоящий из шести элементов типа MUSIC;
2. Вывода данных на экран из массива структур;
3. Запись массива структур в текстовый файл и чтение данных из файла в массив
   структур;
4. Порядок записей по году создания альбома;
5. Организовать поиск дисков по жанру выполнения: у пользователя запрашивается
   жанр и выводятся все диски, соответствующие условию (сравнение проводить
   с помощью функции сравнения строк);
 
*/
 
// Подключаем заголовочные файлы:
#include <iostream>     // для ввода-вывода
#include <windows.h>    // для отображения русского языка
#include <string>       // для строк класса string
#include <fstream>      // для чтения из файла
#include <ostream>      // для вывода в файл
#include <algorithm>    // для сортировки и поиска
 
using namespace std;    // подключаем стандартное пространство имён
 
struct music        // объявление структуры music
{
    string artist;  // исполнитель
    string name;    // название альбома
    string genre;   // жанр
    int year;       // год издания
    double price;   // цена диска
};
 
// прототип функции сортировки:
bool isSecondGreater(const music& first, const music&  second)
{
   return second.year>first.year;
}
 
music songs[6];  // создаём массив структур типа music (можно
                 // будет ввести данные не более чем для 6 дисков)
 
int main()  // функция main согласно стандарту C++ должна быть типа int
{
    SetConsoleCP(1251);       // для отображения в консоли русского языка
    SetConsoleOutputCP(1251); // для отображения в консоли русского языка
 
    int n;  // количество дисков
    cout << "Введите количество дисков, для которых Вы желаете\n"
            "ввести информацию (не более 6 дисков): ";
    cin >> n;
    cin.ignore();
    cout << endl;   // выводим на экран пустую строку для лучшего
                    // визуального восприятия текста
 
    if (n>6 || n<=0)
    {   // если пользователь ввёл неверное число, выводится уведомление
        // и программа завершается:
        cout << "Извините, данная реализация программы не расчитана на "
                "запись такого объёма данных.\n"
                "Максимальное количество дисков должно быть не более шести. "
                "Минимальное - один." << endl;
 
        cout << endl;
    }
 
    else
    {   // иначе выполняется следующий код:
        for (int i=0; i<n; i++)
        {
            cout << "\nВведите имя исполнителя: ";
            getline (cin, songs[i].artist);     // используем функцию getline
                                                // для чтения строк с пробелами
 
            cin.clear();    // очищаем поток от лишних символов новой строки,
                            // попадающих в поток с нажатием пользователем
                            // клавиши Enter
 
            cout << "Введите название диска: ";
            getline (cin, songs[i].name);
            cin.clear();
 
            cout << "Введите жанр: ";
            getline (cin, songs[i].genre);
            cin.clear();
 
            cout << "Введите год издания: ";
            cin >> songs[i].year;
            cin.clear();
 
            cout << "Введите цену диска: ";
            cin >>  songs[i].price;
            cin.ignore();
        }
 
//==============  Сортируем по годам ==============
 
        sort(songs, songs+n, isSecondGreater);
//=================================================
 
        for (int i=0;i<n;i++)
        {   // выводим введённые пользователем данные на экран
            cout << endl;
            cout << songs[i].artist << endl;
            cout << songs[i].name   << endl;
            cout << songs[i].genre  << endl;
            cout << songs[i].year   << endl;
            cout << songs[i].price  << endl;
            cout << endl;
        }
    }
 
//========= Запись данных введённых пользователем в файл music.txt ===========
    char userAnswer;
    cout << "\nЖелаете сохранить введённые Вами данные "
            "в текстовый файл? (да/нет): ";
    cin >> userAnswer;
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "\nВведённые Вами данные будут сохранены в файл music.txt.\n";
        ofstream fout;              // создание объекта fout типа ofstream
        fout.open("music.txt");     // ассоциирование объекта c файлом music.txt
 
        // используем созданный нами объект fout по аналогии с объектом cout
        for (int i=0;i<n;i++)
        {   // записываем введённые пользователем данные на в файл music.txt
            fout << songs[i].artist << endl;
            fout << songs[i].name   << endl;
            fout << songs[i].genre  << endl;
            fout << songs[i].year   << endl;
            fout << songs[i].price  << endl;
        }
        fout.close ();  // закрытие соединения вывода с файлом
    }
//--------- Специальный блок для красоты ---------
 
// С небольшой задержкой будут выведены 20 точек
// одна за другой, как будто программа думает:
 
    cout << endl;
    for (int counter = 1; counter < 20; counter++)
    {
    Sleep(600);
    cout << ".";
    }
    cout << endl;
//------------------------------------------------
 
    cout << "\nДанные были успешно сохранены.\n";
 
//===========================================================================
 
//==== Чтение данных введённых пользователем из файла music.txt на экран ====
    cout << "\nЖелаете вывести введённые Вами данные "
            "из текстового файла? (да/нет): ";
    cin >> userAnswer;
    if (userAnswer == 'д' || userAnswer == 'Д' ||
        userAnswer == 'y' || userAnswer == 'Y')
    {
        cout << "\nВы сохранили следующие данные в файле music.txt:\n";
        ifstream fin;               // создание объекта fin типа ifstream
 
        fin.open("music.txt");      // ассоциирование создание объекта fin
                                    // c файлом music.txt
 
        // используем созданный нами объект fin по аналогии с объектом cin
        for (int i=0; i<n; i++)
        {
            cout << "------------------------------" << endl;
            getline (fin, songs[i].artist);
            cout << songs[i].artist << endl << endl;
            fin.clear();
 
            getline (fin, songs[i].name);
            cout << songs[i].name << endl << endl;
            fin.clear();
 
            getline (fin, songs[i].genre);
            cout << songs[i].genre << endl << endl;
            fin.clear();
 
            fin >> songs[i].year;
            cout << songs[i].year << endl << endl;
            fin.clear();
 
            fin >>  songs[i].price;
            cout << songs[i].price << endl << endl;
            fin.ignore();
        }
        fin.close ();   // закрытие соединения ввода с файлом
    }
//===============================================================================
 
    system("pause");    // для ожидания реакции пользователя
 
    return 0;   // успешное завершение программы
}
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
01.07.2014, 09:49 34
Цитата Сообщение от gru74ik Посмотреть сообщение
Чё-то не сортирует
Кликните здесь для просмотра всего текста

Введите количество дисков, для которых Вы желаете
ввести информацию (не более 6 дисков): 3


Введите имя исполнителя: q1
Введите название диска: w1
Введите жанр: e1
Введите год издания: 1980
Введите цену диска: 1

Введите имя исполнителя: q2
Введите название диска: w2
Введите жанр: e2
Введите год издания: 1975
Введите цену диска: 2

Введите имя исполнителя: q3
Введите название диска: w3
Введите жанр: e3
Введите год издания: 1990
Введите цену диска: 3

q2
w2
e2
1975
2


q1
w1
e1
1980
1


q3
w3
e3
1990
3



Что именно не так?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 10:34 35
У меня почему-то по годам не хочет сортировать:
Миниатюры
Реализовать структуру Music  
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 11:01 36
На компе у меня Windows XP SP3, cреда Code::Blocks, компилятор MinGW. Программа завершается без ошибок.

Ничего не понимаю
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
01.07.2014, 12:01 37
Цитата Сообщение от gru74ik Посмотреть сообщение
Ничего не понимаю
Ну у меня тремя компиляторами, в том числе и gcc сортируется. В архив упакуй исходник и файл с сохраненными структурами (music.txt), вечером посмотрю.

gcc какой версии?
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 12:08 38
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
gcc какой версии?
4.7.1
Вложения
Тип файла: zip task_arr_str_iof.zip (278.0 Кб, 3 просмотров)
0
327 / 230 / 55
Регистрация: 30.05.2014
Сообщений: 682
01.07.2014, 12:32 39
Цитата Сообщение от gru74ik Посмотреть сообщение
4.7.1
Исходник точно тот? Потому что он не компилируется -
userAnswer должен быть string а не char.

C++
1
2
3
4
5
    string userAnswer;
    cout << "\nЖелаете сохранить введённые Вами данные "
            "в текстовый файл? (да/нет): ";
    cin >> userAnswer;
    if (userAnswer == "д" || userAnswer == "Д" || userAnswer == "y" || userAnswer == "Y")
0
Модератор
Эксперт CЭксперт С++
5284 / 2371 / 342
Регистрация: 20.02.2013
Сообщений: 5,770
Записей в блоге: 20
01.07.2014, 13:03 40
Цитата Сообщение от uglyPinokkio Посмотреть сообщение
Исходник точно тот? Потому что он не компилируется -
userAnswer должен быть string а не char.
Тот. У меня компилировалось нормально. Хотя, твоя правда, действительно надо string сделать.
Сейчас попробую Code::Blocks с MinGW 4.8.1 поставить.
0
01.07.2014, 13:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2014, 13:03
Помогаю со студенческими работами здесь

Как реализовать структуру?
Есть две структуры студент и комната в которой он проживает. Как лучше реализовать ситуацию?...

Реализовать структуру Student
HELP GUYS :help: Следующие задания требуется решить с использованием классов.При этом...

Как реализовать структуру на js?
struct klass { char name; char klass_name; float bal; }; как реализовать такое на js и...

Как лучше реализовать структуру класса?
Есть задача создать класс авто-архив. Класс реализовал со структурой внутри класса. Создал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru