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

Потоки С++

04.07.2017, 13:19. Показов 1464. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Такой задание.
Создать класс СПРАВОЧНИК со следующими полями:
1. Название фирмы;
2. Владелец;
3. Телефон;
4. Адрес;
5. Род деятельности

Реализовать следующие возможности:
1. Поиск по названию;
2. Поиск по владельцу;
3. Поиск по номеру телефона;
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
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
#include <iostream>
#include <fstream>
using namespace std;
 
class Homebook{
    char firm_name[50];
    char owner[50];
    int phone;
    char address[50];
    char type_activity[50];
 
public:
    void Search();
    void Add();
    void Show();
};
 
void Homebook::Search(){
    int vybor;
 
    while (true){
        cout << "1. Poisk po nazvaniyu: \n";
        cout << "2. Poisk po vladelets: \n";
        cout << "3. Poisk po nomeru telefona: \n";
        cout << "4. Poisk po podu deyatel'nosti: \n";
        cout << "5. Выход\n";
        cout << "Ваш выбор: ";
        cin >> vybor;
 
        if (vybor == 1){
            char *name;
        cin >> firm_name;
                for (int i = 0; i < strlen(firm_name); i++)
                    if (firm_name[i] >= 65 && firm_name[i] < 97)
                        firm_name[i] = firm_name[i] + 32;
                cout << firm_name << endl;
 
                
        }
 
        if (vybor == 2){
        cin >> owner;
                for (int i = 0; i < strlen(owner); i++)
                    if (owner[i] >= 65 && owner[i] < 97)
                        owner[i] = owner[i] + 32;
            cout << " vladelets: " << owner << " nazvaniye firmy: " << firm_name << " telefon: " << phone << " adres: " << address << " rod deyatel'nost': " << type_activity;
            cout << endl;
        }
 
        if (vybor == 3){
        cin >> phone;
                for (int i = 0; i < phone; i++)
                    if (phone >= 65 && phone < 97)
                        phone = phone + 32;
            cout << " telefon: " << phone << "nazvaniye firmy: " << firm_name << " vladelets: " << owner << " adres: " << address << " rod deyatel'nost': " << type_activity;
            cout << endl;
        }
 
        if (vybor == 4){
        cin >> type_activity;
            for (int i = 0; i <strlen(type_activity); i++)
                    if (type_activity[i] >= 65 && type_activity[i] < 97)
                        type_activity[i] = type_activity[i] + 32;
            cout << " rod deyatel'nost': " << type_activity << "nazvaniye firmy: " << firm_name << " vladelets: " << owner << " telefon: " << phone << " adres: " << address;
            cout << endl;
        }
        
        if (vybor == 5)
            break;
    }
};
 
void Homebook::Add(){
    int size = 5, n = 0;
    Homebook *arr = new Homebook[size];
 
    if (n == size){
        Homebook *arr2 = new Homebook[size * 2];
        for (int i = 0; i < n; i++){
            strcpy(arr2[i].firm_name, arr[i].firm_name);
            strcpy(arr2[i].owner, arr[i].owner);
            strcpy(arr2[i].address, arr[i].address);
            strcpy(arr2[i].type_activity, arr[i].type_activity);
            arr2[i].phone = arr[i].phone;
        }
        delete[] arr;
        arr = arr2;
        size = size * 2;
    }
    cout << "Vvedite nazvaniye firmy: ";
    cin >> arr[n].firm_name;
 
    cout << "Vvedite vladelets: ";
    cin >> arr[n].owner;
 
    cout << "Vvedite adres: ";
    cin >> arr[n].address;
 
    cout << "Vvedite rod deyatel'nost': ";
    cin >> arr[n].type_activity;
 
    cout << "Vvedite telefon: ";
    cin >> arr[n].phone;
    n++;
};
 
//функция показа данных
void Homebook::Show(){
    int n=0;
    //if (n != 0) {
    for (int i = 0; i < n; i++){
        cout << "Nazvaniye firmy: " << firm_name[i] 
        << "\n Vladelets: " << owner[i] 
        //<< "\n Telefon: " << phone
        << "\n Address: " << address[i] 
        << "\n Rod deyatel'nost': " << type_activity[i] << endl;
    cout << endl;
    }
     cout << "net zapisi dlya pokaza" << endl;
};
 
void main(){
    setlocale(LC_ALL, "Russian");
    Homebook book;
    int vybor;
    
    ifstream fin("Spravochnik.txt", ios::binary | ios::out | ios::app);
    if (!fin.is_open())
        cout << "Файл не может быть открыт\n";
    else {
        while (true){
            cout << "Выберите меню\n";
            cout << "1. Добавить новых данных\n";
            cout << "2. Показать всех записей\n";
            cout << "3. Поиск всех записей\n";
            cout << "4. Выход\n";
            cout << "Ваш выбор: ";
            cin >> vybor;
 
            if (vybor == 1){
                book.Add();
            }
            if (vybor == 2){
                book.Show();
            }
            if (vybor == 3){
                book.Search();
            }
            if (vybor == 4){
                cout << "Do svidaniya!!!" << endl;
                break;
            }
        }
    fin.close();
    }
 
    ofstream fout("Spravochnik.txt");
    if (fout.is_open()){
        fout << book.Show << endl;
        for (int i = 0; i < book.Show; i++)
            fout << book.Show[i].firm_name << " ";
        fout.close();
     
    }
system("pause");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.07.2017, 13:19
Ответы с готовыми решениями:

Что такое потоки ввода, потоки вывода?
Здарова всем! Не так давно уже прогаю на С++ и все НИКАК не могу понять, что такое потоки ввода, потоки вывода..! вот допустим...

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

Потоки
Кто может скинуть какую-нибуть хорошую статью по ПОТОКАМ? читал про них в книге Шилдт &quot;С++ Базовый курс&quot;, но мало что понял((

8
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
04.07.2017, 13:43
Боже мой, вы вообще понимаете, что пытаетесь сделать в методе Add()?
0
12 / 12 / 10
Регистрация: 04.06.2017
Сообщений: 99
04.07.2017, 13:49
В методе Add вы обьявили и инициализировали переменные,
Цитата Сообщение от Persik Посмотреть сообщение
int size = 5, n = 0;
а следом идет цикл
Цитата Сообщение от Persik Посмотреть сообщение
if (n == size)
который никогда не будет выполнен, так как size и n инициализированы разными значениями.
Подобная ситуация и в методе Show,
Цитата Сообщение от Persik Посмотреть сообщение
int n=0;
а следом идет цикл, который так же не будет выполнен
Цитата Сообщение от Persik Посмотреть сообщение
for (int i = 0; i < n; i++)
0
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
04.07.2017, 14:02
Цитата Сообщение от savenkodenys Посмотреть сообщение
В методе Add вы обьявили и инициализировали переменные,
Сообщение от Persik
int size = 5, n = 0;
а следом идет цикл
Сообщение от Persik
if (n == size)
который никогда не будет выполнен, так как size и n инициализированы разными значениями.
Да даже если будет выполнен, что это даст?

Необходимо представить класс в котором будет находиться некая динамическая структура (двусвязный линейный список к примеру). И уже с ней, благодаря методам класса работать. А тут, простите, ересь какая-то.

PS Persik, попозже помогу, как время появиться. Пока лишь могу посоветовать посмотреть, как я реализовал работу со списком здесь
Структура: При попытке просмотра данных о студенте программа крашится. Как исправить?
(засунуть список в класс, а функции в методы - и программа почти готова. В тупую, конечно, только нельзя сувать)
1
0 / 0 / 1
Регистрация: 02.04.2009
Сообщений: 54
04.07.2017, 14:27  [ТС]
PS Persik, попозже помогу, как время появиться. Пока лишь могу посоветовать посмотреть, как я реализовал работу со списком здесь
Структура: При попытке просмотра данных о студенте программа крашится. Как исправить?
(засунуть список в класс, а функции в методы - и программа почти готова. В тупую, конечно, только нельзя сувать)

Спасибо, YarRainbow, буду ждать вашего ответа

Добавлено через 12 минут
Извините savenkodenys, я начинающий и учусь С++. Если мне не понятно, я сюда вкладывают код. Чтобы вы мне помогли и объяснили. И не судите меня!
0
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
05.07.2017, 06:49
Что-то не мог вчера до сайта достучаться. Сел делать поздно, но все работает как надо. Надеюсь кто-нибудь подкорректирует код, а то слишком уж объемно получилось...
Вообще рожал 184ую строчку в муках, глупо как-то получилось. Пол вечера не мог понять, чего у меня на два байта съезжает всё в уже рабочей почти программе х)
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
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
#include <iostream>
#include <fstream>
using namespace std;
 
class Homebook {
 
private:
 
    struct list//список
    {
        char firm_name[50];
        char owner[50];
        char phone[12];
        char address[50];
        char type_activity[50];
        //list* prev = 0;//предыдущий элемент списка
        list* next = 0;//следующий
    } root;
 
    void Add(list* X);
    void Delete(list*X);//удаляет список (не файл!)
    char find_me[50];//строка для поиска
    void Load(list*X, short n);//перегруженная версия, для рекурсии. Load() - ниже
    void Save();//записывает в файл
    void Save(list*X);//для рекурсии
    void Search1(list*X);
    void Search2(list*X);
    void Search3(list*X);
    void Search4(list*X);
 
public:
    char file_name[255];//переменная, где хранится имя файла с которым работает объект
    short count_node = 0;//счетчик количества элементов динамического списка в объекте (необходим для записи в файл)
 
    Homebook() {//конструктор класса, по умолчанию задает имя файла как directory.dat
        strcpy(file_name, "directory.dat");
    }
    Homebook(char name[255]) {//конструктор, предоставляет пользователю определить имя файла, с которым будет работать объект
        strcpy(file_name, name);
    }
 
    ~Homebook()//деструктор
    {
        Delete(&root);
    }
    void Add();//добавление через интерфейс
    void Load();//подгружает из файла
    void Search();//поиск
    void Show();//вывести на экран
    void Show(list* X, bool flag);//для показа найденного в Search() используется эта же функция, но со значением флага false
};
 
void Homebook::Add() {
    Add(&root);
}
 
void Homebook::Add(list* X) {
    if (!count_node) {//заполняем первый элемент списка
        cout << "Введите название фирмы: ";
        cin >> X->firm_name;
        cout << "Введите владельца: ";
        cin >> X->owner;
        cout << "Введите номер телефона: ";
        cin >> X->phone;
        cout << "Введите адрес: ";
        cin >> X->address;
        cout << "Введите род деятельности: ";
        cin >> X->type_activity;
        count_node++;
    }
    else {
        if (!X->next) {
            X->next = new list;
            //X->next->prev = X;
            cout << "Введите название фирмы: ";
            cin >> X->next->firm_name;
            cout << "Введите владельца: ";
            cin >> X->next->owner;
            cout << "Введите номер телефона: ";
            cin >> X->next->phone;
            cout << "Введите адрес: ";
            cin >> X->next->address;
            cout << "Введите род деятельности: ";
            cin >> X->next->type_activity;
            count_node++;
        }
        else {
            Add(X->next);
        }
    }
    Save();
};
 
void Homebook::Search() {
    int vybor;
    system("cls");
    cout << "Выберите тип поиска\n";
    cout << "1. По фирме\n";
    cout << "2. По владельцу\n";
    cout << "3. По номеру телефона\n";
    cout << "4. По роду деятельности\n";
    cout << "Ваш выбор: ";
    cin >> vybor;
    cout << "Введите текст для поиска: ";
    cin >> find_me;
    system("cls");
    switch (vybor)
    {
    case 1:
        Search1(&root);
        break;
    case 2:
        Search2(&root);
        break;
    case 3:
        Search3(&root);
        break;
    case 4:
        Search4(&root);
        break;
    }
};
 
void Homebook::Search1(list*X) {
    if (!strcmp(X->firm_name, find_me)) Show(X, 0);
    if (X->next) Search1(X->next);
};
 
void Homebook::Search2(list*X) {
    if (!strcmp(X->owner, find_me)) Show(X, 0);
    if (X->next) Search2(X->next);
};
 
void Homebook::Search3(list*X) {
    if (!strcmp(X->phone, find_me)) Show(X, 0);
    if (X->next) Search3(X->next);
};
 
void Homebook::Search4(list*X) {
    if (!strcmp(X->type_activity, find_me)) Show(X, 0);
    if (X->next) Search4(X->next);
};
 
void Homebook::Show() {
    if (count_node) Show(&root, 1);
};
 
void Homebook::Show(list* X, bool flag) {
    cout << "Фирма: " << X->firm_name << endl
        << "Владелец: " << X->owner << endl
        << "Телефон: " << X->phone << endl
        << "Адрес: " << X->address << endl
        << "Род деятельности: " << X->type_activity << endl << endl;
    if (X->next && flag) Show(X->next, 1);
};
 
void Homebook::Save() {
    ofstream fout(file_name, ios::binary);
    fout.write(reinterpret_cast<char*>(&count_node), sizeof count_node);
    fout.close();
    Save(&root);
};
 
void Homebook::Save(list* X) {
    ofstream fout(file_name, ios::binary | ios::app);
    fout.write(reinterpret_cast<char*>(&X->firm_name), sizeof X->firm_name);
    fout.write(reinterpret_cast<char*>(&X->owner), sizeof X->owner);
    fout.write(reinterpret_cast<char*>(&X->phone), sizeof X->phone);
    fout.write(reinterpret_cast<char*>(&X->address), sizeof X->address);
    fout.write(reinterpret_cast<char*>(&X->type_activity), sizeof X->type_activity);
    fout.close();
    if (X->next) Save(X->next);
};
 
void Homebook::Load() {
    ifstream fin(file_name, ios::binary);
    fin.read(reinterpret_cast<char*>(&count_node), sizeof count_node);
    fin.close();
    Load(&root, 0);
};
 
void Homebook::Load(list* X, short n) {
    ifstream fin(file_name, ios::binary);
    fin.seekg(2 + n*(sizeof X->firm_name + sizeof X->owner + sizeof X->phone + sizeof X->address + sizeof X->type_activity));
    fin.read(reinterpret_cast<char*>(&X->firm_name), sizeof X->firm_name);
    fin.read(reinterpret_cast<char*>(&X->owner), sizeof X->owner);
    fin.read(reinterpret_cast<char*>(&X->phone), sizeof X->phone);
    fin.read(reinterpret_cast<char*>(&X->address), sizeof X->address);
    fin.read(reinterpret_cast<char*>(&X->type_activity), sizeof X->type_activity);
    fin.close();
    n++;
    if (n < count_node) {
        X->next = new list;
        //X->next->prev = X;
        Load(X->next, n);
    }
};
 
void Homebook::Delete(list* X) {
    if (X->next) Delete(X->next);
    delete X->next;
};
 
void main() {
    setlocale(LC_ALL, "Russian");
    Homebook book;
    book.Load();
    while (true) {
        system("cls");
        cout << "Выберите действие\n";
        cout << "1. Добавить новую запись\n";
        cout << "2. Показать все записи\n";
        cout << "3. Поиск\n";
        cout << "4. Выход\n";
        cout << "Ваш выбор: ";
        int vybor;
        cin >> vybor;
        system("cls");
        switch (vybor)
        {
        case 1:
            book.Add();
            break;
        case 2:
            book.Show();
            break;
        case 3:
            book.Search();
            break;
        case 4:
            cout << "До свидания!!!" << endl;
            system("pause");
            exit(0);
            break;
        }
        system("pause");
    }
    system("pause");
}
И, кстати, я закомментировал указатель prev в структуре списка, превратив его из двусвязного в односвязный. Если понадобиться добавить функцию удаления и сортировки, будет удобней его вернуть на место.

Добавлено через 6 минут
PS И еще кое-что. Не используйте операторы ветвления if при реализации меню. Для этого удобней воспользоваться switch.
0
0 / 0 / 1
Регистрация: 02.04.2009
Сообщений: 54
05.07.2017, 09:55  [ТС]
YarRainbow, ошибка выходить "error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. c:\users\bsb\documents\visual studio 2013\projects\consoleapplication2\consol eapplication2\homebook.cpp 375 1 ConsoleApplication2
"

C++
1
2
3
Homebook() {//конструктор класса, по умолчанию задает имя файла как directory.dat
        strcpy(file_name, "directory.dat");
    }
0
68 / 51 / 27
Регистрация: 27.04.2015
Сообщений: 203
05.07.2017, 17:51
Разобрались? Попробуйте использовать strcpy_s() вместо strcpy()
Если не поможет воспользуйтесь советами например из этого топика
Как отключить _CRT_SECURE_NO_WARNINGS?

PS https://msdn.microsoft.com/ru-... 0s5kh.aspx
0
296 / 125 / 106
Регистрация: 30.10.2015
Сообщений: 690
05.07.2017, 19:19
Persik,
C++
1
include <string>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.07.2017, 19:19
Помогаю со студенческими работами здесь

Потоки
В процессе выполнения задачи возникла проблема чтения объектов из потока и сохранения их в массив: cout &lt;&lt; &quot;Rasstojanie =...

Потоки
Пытаюсь создать поток #include&lt;windows.h&gt; #include&lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;process.h&gt; #include &lt;fstream&gt; ...

Потоки
Всем привет! Делаю тут одну программу(консольную игру), возникла надабность запустить одну и туже функцию в паралельных потоках, т. е....

Потоки
Добрый день. Потоки в C/C++ - это то же самое, что и потоки в многопоточных приложениях или это что-то другое?

потоки
1---------------------------------------------------------------------------------------------------------- Можно ли перенаправить потоки...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru