Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Integer_sequence http://www.cyberforum.ru/cpp-beginners/thread1220019.html
Правильная ли такая реализация integer_sequence? У меня не компилируется, не могу сообразить почему.#include <iostream> #include <array> #include <utility> #include <tuple> namespace isq { template< class T, T... Ints > class integer_sequence { static size_t size() { return sizeof...(Ints); }
C++ Найти такие тройки натуральных чисел x,y,z из интервала от 1 до 20,для которых выполняется равенство x^2-y=z^2 найти все такие тройки натуральных чисел x,y,z из интервала от 1 до 20,для которых выполняется равенство x^2-y=z^2 http://www.cyberforum.ru/cpp-beginners/thread1220016.html
C++ Дано натуральное четырехзначное число n. Верно ли что это число содержит три одинаковые цифры
Дано натуральное четырехзначное число n. Верно ли что это число содержит три одинаковые цифры
Недопонимание с switch и выводом default C++
Задание: сделать так что бы при вводе целого числа (от 1 до 7 которые соответствует дням недели, 1- понедельник, 2 -вторник и т.д.) печаталось название дня недели. в случае неправильного ввода вывести сообщение об ошибки. Вот мой код: #include <iostream> #include<stdio.h> using namespace std; int main()
C++ Не осуществляется объединение двух контейнеров http://www.cyberforum.ru/cpp-beginners/thread1220006.html
set<string> matt, patt; set<string> matt_and_patt; Info_Processing(matt,"Matt"); // заполнение первого и второго множества Info_Processing(patt,"Patt"); std::set_union(matt.begin(), matt.end(), patt.begin(), patt.end(), std::insert_iterator<set<string>>(matt_and_patt, matt_and_patt.begin()) ); Нужно объединить matt и patt и скопировать в matt_and_patt. При этом после использования...
C++ Read() блокирует поток есть у меня процесс который записывает данные в пайп функцией write(), другой процесс считывает их read(), нормально не блокируясь. НО когда добавляю в Qt GUI приложение, отдельной ниткой модуль read(), эта нитка блокируется на функции read(). Почему это происходит? подробнее

Показать сообщение отдельно
PVD
24 / 24 / 6
Регистрация: 01.06.2014
Сообщений: 135
01.07.2014, 02:50     Реализовать структуру Music
Завтра экзамен, вот немного решил размяться)
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;
}
 
Текущее время: 07:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru