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

Запись структуры в файл, чтение из файла и удаление (файловый ввод/вывод)

01.12.2016, 17:00. Показов 10859. Ответов 80
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер! Возникла такая проблема, что при добавлении записи, удаляются уже имеющиеся записи в файле.
Также не помешала бы помощь в вопросе удаления записи, с указанным возрастом. Ну и вывод всего содержимого в файле.
Спасибо, за помощь.
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
#include <iostream>
#include <fstream>
 
enum ChosenOperation { ADD = 1, SHOW, DELETE, EXIT };
 
enum SearchingCriteria { NAME = 1, ADDRESS, PHONE, AGE };
 
struct Human
{
    std::string full_name;  // фамилия имя отчество
    std::string address;    // домашний адрес
    std::string phone;      // телефон
    unsigned int age;       // возраст
};
 
void add_new_entry_to_file( std::string filename )
{
    std::cout << "\n\n\tAdding new student to database.\n\n";
 
    std::cout << "Enter number of entries: ";
    unsigned int number_of_entries;
    std::cin >> number_of_entries;
 
    std::cout << "\n\n\tEnter all nessesary data of each entry.\n\n";
    struct Human* human = new struct Human[number_of_entries];
 
    for ( unsigned int i = 0, nth; i < number_of_entries; ++i )
    {
        nth = i + 1;
        while ( std::cin.get() != '\n' );
 
        std::cout
            << "Enter full name of "
            << nth
            << " student: ";
        std::getline( std::cin, human[i].full_name );
 
        std::cout
            << "Enter address of "
            << nth
            << " student: ";
        std::getline( std::cin, human[i].address );
 
        std::cout
            << "Enter phone number of "
            << nth
            << " student: ";
        std::getline( std::cin, human[i].phone );
 
        std::cout
            << "Enter age of "
            << nth
            << " student: ";
        std::cin >> human[i].age;
        std::cout << "\n";
    }
 
    std::ofstream fout( filename.c_str() );
    for ( unsigned int i = 0; i < number_of_entries; ++i )
    {
        fout
            << human[i].full_name
            << "|"
            << human[i].address
            << "|"
            << human[i].phone
            << "|"
            << human[i].age
            << "\n";
    }
    fout.close();
 
    delete [] human;
}
 
void show_data( std::string filename )
{
    // TODO
}
 
void delete_data_in_file( std::string filename, int searching_criteria )
{
    // TODO
}
 
int main()
{
    int key = 0;
    while ( key != ChosenOperation::EXIT )
    {
        std::cout
            << "MENU:\n\n"
            << "\t1 - ADD\n"
            << "\t2 - SHOW\n"
            << "\t3 - Delete\n"
            << "\t4 - EXIT(Esc)\n\n"
            << "Press any key: ";
 
        std::cin >> key;
 
        switch ( key )
        {
            case ChosenOperation::ADD :
                add_new_entry_to_file( "Person.txt" );
 
            case ChosenOperation::SHOW :
                show_data( "Person.txt" );
 
            case ChosenOperation::SEARCH :
                delete_data_in_file( "Person.txt", SearchingCriteria::NAME );
 
            case ChosenOperation::EXIT :
                key = ChosenOperation::EXIT;
        }
    }
 
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.12.2016, 17:00
Ответы с готовыми решениями:

Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран
1.Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран...

Чтение из файла STL (файловый ввод/вывод)
В чем проблема? map.ccp void Map::ReadFromFile(fstream&amp; F) { string s,key; int k, value,...

Открыть текстовый файл, дозаписать в него данные, вывести содержимое файла (файловый ввод/вывод)
Открыть текстовый файл 1.txt, имя файла указывается в командной строке. Дозаписать в него данные....

Считать данные из текстового файла по условию и записать их в другой текстовый файл (файловый ввод/вывод)
Здравствуйте! Очень прошу о помощи! Суть задания - дан текстовый файл, нужно считать его и записать...

80
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
06.12.2016, 14:56  [ТС] 61
Author24 — интернет-сервис помощи студентам
Буду крайне признателен за помощь.
Спасибо большое.
Так же с комментариями, если можно будет....
0
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
08.12.2016, 13:48  [ТС] 62
gru74ik , не уже ли забыл?
Если есть возможность, то помоги с чтением из файла и удалением также из файла
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
08.12.2016, 18:21 63
georgiisav988, не забыл, времени нет пока что. На работе завал - конец года.

Добавлено через 2 часа 37 минут
georgiisav988, на выходных постараюсь написать.
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
10.12.2016, 23:05  [ТС] 64
gru74ik , надеюсь появилось свободное время.
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
10.12.2016, 23:07 65
Цитата Сообщение от georgiisav988 Посмотреть сообщение
надеюсь появилось свободное время
georgiisav988, пока нет, но, возможно, будет завтра. Сами-то что-то пытались читать, делать?
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
11.12.2016, 10:09  [ТС] 66
Больше уделил внимание теоретической части. А также способу создания многофайловых программ и т.д.
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
11.12.2016, 12:38 67
Лучший ответ Сообщение было отмечено georgiisav988 как решение

Решение

georgiisav988, сделал.

Person.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef PERSON_H
#define PERSON_H
 
#include <string>
 
struct Person
{
    std::string full_name = "Default name";     // фамилия имя отчество
    std::string address = "Default address";    // домашний адрес
    std::string phone = "Default phone number"; // телефон
    unsigned int age = 999;                     // возраст
 
    void show() const;
};
 
#endif // PERSON_H

Person.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "Person.h"
#include <iostream>
 
void Person::show() const
{
    std::cout
        << "\n"
        << full_name
        << "\n"
        << address
        << "\n"
        << phone
        << "\n"
        << age
        << "\n";
}

my_functions.h

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
#ifndef MY_FUNCTIONS_H
#define MY_FUNCTIONS_H
 
#include "stdafx.h"
#include "Person.h"
 
enum ChosenOperation { ADD = 1, READ, SHOW, DELETE, EXIT };
enum SearchingCriteria { NAME = 1, ADDRESS, PHONE, AGE };
 
int promt_user_choose_menu_operation()
{
    int key = 0;
    std::cout
        << "\nMENU:\n\n"
        << "\t1 - ADD\n"
        << "\t2 - READ\n"
        << "\t3 - SHOW\n"
        << "\t4 - DELETE\n"
        << "\t5 - EXIT\n"
        << "\nMake your choice (press any key): ";
    std::cin >> key;
    return key;
}
 
void get_data_from_user(std::string & str)
{
    std::getline(std::cin, str);
}
 
void get_data_from_user(unsigned int & uint)
{
    std::cin >> uint;
    while (std::cin.get() != '\n') {}
}
 
size_t promt_user_input_number_of_entries()
{
    size_t number_of_entries = 0;
    std::cout << "Enter number of entries: ";
    std::cin >> number_of_entries;
    while (std::cin.get() != '\n') {}
 
    return number_of_entries;
}
 
template <typename T>
void promt_user_input_data_of_selected_field
(
    const std::string message,
    size_t number_of_entry,
    T & selected_field
)
{
    std::cout << message << " number #" << number_of_entry << ": ";
    get_data_from_user(selected_field);
}
 
template <typename T>
void promt_user_choose_deleting_criteria(T & deleting_criteria)
{
    std::cout << "\n\nSelect deleting criteria: ";
    get_data_from_user(deleting_criteria);
}
 
int promt_user_choose_searching_criteria()
{
    unsigned int searching_criteria = 0;
    std::cout
        << "\n\nSelect searching criteria:\n\n"
        << "\t1 - SEEK ENTRY BY NAME\n"
        << "\t2 - SEEK ENTRY BY ADDRESS\n"
        << "\t3 - SEEK ENTRY BY PHONE\n"
        << "\t4 - SEEK ENTRY BY AGE\n"
        << "\nMake your choice (press any key): ";
    get_data_from_user(searching_criteria);
    return searching_criteria;
}
 
void add_new_entries_to_array(std::vector<Person> & pers)
{
    auto number_of_entries = promt_user_input_number_of_entries();
 
    std::cout << "\n\tEnter all nessesary data of each entry.\n";
    Person p;
    for (unsigned int nth = 1; nth <= number_of_entries; ++nth)
    {
        promt_user_input_data_of_selected_field("Enter full name of student", nth, p.full_name);
        promt_user_input_data_of_selected_field("Enter address of student", nth, p.address);
        promt_user_input_data_of_selected_field("Enter phone number of student", nth, p.phone);
        promt_user_input_data_of_selected_field("Enter age of student", nth, p.age);
        pers.push_back(p);
        std::cout << "\n";
    }
}
 
void copy_data_from_file(std::vector<Person> & pers, const std::string & filename)
{
    std::ifstream fin;
    fin.open(filename.c_str());
    if (fin.is_open())
    {
        pers.clear();
        Person p;
        while(fin.good())
        {
            std::getline(fin, p.full_name, '|');
            std::getline(fin, p.address, '|');
            std::getline(fin, p.phone, '|');
            fin >> p.age;
            
            pers.push_back(p);
        }
    }
    else
    {
        std::cout << "\nCould not open the file " << filename << "\n";
    }
    fin.close();
}
 
void copy_data_to_file(const std::vector<Person> & pers, const std::string & filename)
{
    std::ofstream fout(filename.c_str());
    for (size_t i = 0; i < pers.size(); ++i)
    {
        fout
            << pers[i].full_name
            << "|"
            << pers[i].address
            << "|"
            << pers[i].phone
            << "|"
            << pers[i].age;
    }
    fout.close();
}
 
void delete_chosen_data_from_array(std::vector<Person> & pdata)
{
    std::string str_deleting_criteria;
    size_t int_deleting_criteria;
 
    std::cout << "\nNow you can mark entries to deleting.";
    int key = promt_user_choose_searching_criteria();
    std::cout << "\nNow you can delete selected entries.";
 
    if (key == NAME || key == ADDRESS || key == PHONE)
        promt_user_choose_deleting_criteria(str_deleting_criteria);
    else
        promt_user_choose_deleting_criteria(int_deleting_criteria);
 
    std::vector<Person>::iterator it;
    int counter;
    switch (key)
    {
    case NAME:
        counter = std::count_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.full_name == str_deleting_criteria; });
        for (int i = 0; i < counter; ++i)
        {
            it = std::find_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.full_name == str_deleting_criteria; });
            pdata.erase(it);
            std::vector<Person>(pdata).swap(pdata);
        }
        break;
 
    case ADDRESS:
        counter = std::count_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.address == str_deleting_criteria; });
        for (int i = 0; i < counter; ++i)
        {
            it = std::find_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.address == str_deleting_criteria; });
            pdata.erase(it);
            std::vector<Person>(pdata).swap(pdata);
        }
        break;
 
    case PHONE:
        counter = std::count_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.phone == str_deleting_criteria; });
        for (int i = 0; i < counter; ++i)
        {
            it = std::find_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.phone == str_deleting_criteria; });
            pdata.erase(it);
            std::vector<Person>(pdata).swap(pdata);
        }
        break;
 
    case AGE:
        counter = std::count_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.age == int_deleting_criteria; });
        for (int i = 0; i < counter; ++i)
        {
            it = std::find_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.age == int_deleting_criteria; });
            pdata.erase(it);
            std::vector<Person>(pdata).swap(pdata);
        }
        break;
 
    default:
        std::cout << "\nIt seems like wrong number. Try again.\n";
        break;
    } // end switch ( button )
 
    std::cout << "\nSelected data has been erased.\n";
}
#endif // MY_FUNCTIONS_H

main.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
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
#include "stdafx.h"
#include "Person.h"
#include "my_functions.h"
 
int main()
{
    std::vector<Person> pdata;
 
    int key = 0;
    while (key != EXIT)
    {
        key = promt_user_choose_menu_operation();
        switch (key)
        {
        case ADD:
            std::cout << "\n\tAdding new student to database.\n";
            add_new_entries_to_array(pdata);
            copy_data_to_file(pdata, "Person.txt");
            break;
 
        case READ:
            std::cout << "\n\tReading data from database.\n";
            copy_data_from_file(pdata, "Person.txt");
            break;
 
        case SHOW:
            if (!pdata.empty())
            {
                // show( pdata );
                for (const auto & elem : pdata)
                    elem.show();
                std::cout << "\n\n";
            }
            else
                std::cout << "\n\tNo entries were found!\n";
            break;
 
        case DELETE:
            if (!pdata.empty())
            {
                delete_chosen_data_from_array(pdata);
                copy_data_to_file(pdata, "Person.txt");
            }
 
            else
                std::cout << "\n\tNo entries were found!\n";
            break;
 
        case EXIT:
            key = EXIT;
            break;
 
        default:
            std::cout << "\nIt seems like wrong number. Try again.\n";
            break;
 
        } // end switch ( key )
 
    } // end while ( key != EXIT )
 
    return 0;
}
Вложения
Тип файла: txt Person.txt (205 байт, 10 просмотров)
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
11.12.2016, 14:49  [ТС] 68
Можно вопрос такой, Visual 10 отличается от Visual 15&
Просто я пытался на 10 в институте сделать, по гайду, как создавать многофайловые проекты. И он на стадии Добавления класса Person не разрешал мне.
А можешь также с комментариями, если не затруднит?!

Добавлено через 1 час 11 минут
Спасибо.
Для того, чтобы удалить, надо сначала выбрать пункт Read? Чтобы в вектор был заполнен информацией из файла?
gru74ik
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
11.12.2016, 15:09 69
georgiisav988, по Visual Studio 2010 ничего не подскажу. У меня её никогда не было, и ставить я её не планирую. Знаю только, что стандарт C++11 там не поддерживается (по очевидным причинам). А значит не будет работать ряд моментов: новая интерпретация ключевого слова auto, диапазонный цикл for (так называемый range-based for), инициализация переменных с помощью фигурных скобок и т.д.

Добавлено через 6 минут
Цитата Сообщение от georgiisav988 Посмотреть сообщение
Для того, чтобы удалить, надо сначала выбрать пункт Read? Чтобы в вектор был заполнен информацией из файла?
Возможность удаления информации из вектора будет доступна только в двух случаях:
  • после чтения данных из файла (если там эти данные имеются) и записи их в вектор - пункт меню READ
  • после считывания данных с консоли (от пользователя, вводящего данные с клавиатуры) и записи их в вектор - пункт меню ADD
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
12.12.2016, 16:53  [ТС] 70
ну как я понял

Добавлено через 19 часов 21 минуту
gru74ik, можно вопрос, можно ли организовать все в одном файле main.cpp?
Без вынесения в отдельные заголовочные файлы?
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
12.12.2016, 17:12 71
Цитата Сообщение от georgiisav988 Посмотреть сообщение
можно ли организовать все в одном файле main.cpp?
Можно.
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
12.12.2016, 18:29  [ТС] 72
а как?
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
12.12.2016, 19:04 73
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
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
#include "stdafx.h"
 
enum ChosenOperation
{
    ADD = 1,
    READ,
    SHOW,
    DELETE,
    EXIT
};
 
enum SearchingCriteria
{
    NAME = 1,
    ADDRESS,
    PHONE,
    AGE
};
 
struct Person
{
    std::string full_name = "name is not specified";        // фамилия имя отчество
    std::string address = "address is not specified";       // домашний адрес
    std::string phone = "phone number is not specified";    // телефон
    unsigned int age = 0;                                   // возраст
 
    void show() const
    {
        std::cout
            << "\n"
            << full_name
            << "\n"
            << address
            << "\n"
            << phone
            << "\n"
            << age
            << "\n";
    }
};
 
int promt_user_choose_menu_operation()
{
    int key = 0;
    std::cout
        << "\nMENU:\n\n"
        << "\t1 - ADD\n"
        << "\t2 - READ\n"
        << "\t3 - SHOW\n"
        << "\t4 - DELETE\n"
        << "\t5 - EXIT\n"
        << "\nMake your choice (press any key): ";
    std::cin >> key;
    return key;
}
 
void get_data_from_user(std::string & str)
{
    std::getline(std::cin, str);
}
 
void get_data_from_user(unsigned int & uint)
{
    std::cin >> uint;
    while (std::cin.get() != '\n') {}
}
 
size_t promt_user_input_number_of_entries()
{
    size_t number_of_entries = 0;
    std::cout << "Enter number of entries: ";
    std::cin >> number_of_entries;
    while (std::cin.get() != '\n') {}
 
    return number_of_entries;
}
 
template <typename T>
void promt_user_input_data_of_selected_field
(
    const std::string message,
    size_t number_of_entry,
    T & selected_field
)
{
    std::cout << message << " number #" << number_of_entry << ": ";
    get_data_from_user(selected_field);
}
 
template <typename T>
void promt_user_choose_deleting_criteria(T & deleting_criteria)
{
    std::cout << "\n\nSelect deleting criteria: ";
    get_data_from_user(deleting_criteria);
}
 
int promt_user_choose_searching_criteria()
{
    unsigned int searching_criteria = 0;
    std::cout
        << "\n\nSelect searching criteria:\n\n"
        << "\t1 - SEEK ENTRY BY NAME\n"
        << "\t2 - SEEK ENTRY BY ADDRESS\n"
        << "\t3 - SEEK ENTRY BY PHONE\n"
        << "\t4 - SEEK ENTRY BY AGE\n"
        << "\nMake your choice (press any key): ";
    get_data_from_user(searching_criteria);
    return searching_criteria;
}
 
void add_new_entries_to_array(std::vector<Person> & pers)
{
    auto number_of_entries = promt_user_input_number_of_entries();
 
    std::cout << "\n\tEnter all nessesary data of each entry.\n";
    Person p;
    for (unsigned int nth = 1; nth <= number_of_entries; ++nth)
    {
        promt_user_input_data_of_selected_field("Enter full name of student", nth, p.full_name);
        promt_user_input_data_of_selected_field("Enter address of student", nth, p.address);
        promt_user_input_data_of_selected_field("Enter phone number of student", nth, p.phone);
        promt_user_input_data_of_selected_field("Enter age of student", nth, p.age);
        pers.push_back(p);
        std::cout << "\n";
    }
}
 
void copy_data_from_file(std::vector<Person> & pers, const std::string & filename)
{
    std::ifstream fin;
    fin.open(filename.c_str());
    if (fin.is_open())
    {
        pers.clear();
        Person p;
        while(fin.good())
        {
            std::getline(fin, p.full_name, '|');
            std::getline(fin, p.address, '|');
            std::getline(fin, p.phone, '|');
            fin >> p.age;
 
            pers.push_back(p);
        }
    }
    else
    {
        std::cout << "\nCould not open the file " << filename << "\n";
    }
    fin.close();
}
 
void copy_data_to_file(const std::vector<Person> & pers, const std::string & filename)
{
    std::ofstream fout(filename.c_str());
 
    for (size_t i = 0; i < pers.size(); ++i)
    {
        fout
            << pers[i].full_name
            << "|"
            << pers[i].address
            << "|"
            << pers[i].phone
            << "|"
            << pers[i].age;
    }
 
    fout.close();
}
 
void delete_chosen_data_from_array(std::vector<Person> & pdata)
{
    std::string str_deleting_criteria;
    size_t int_deleting_criteria;
 
    std::cout << "\nNow you can mark entries to deleting.";
    int key = promt_user_choose_searching_criteria();
    std::cout << "\nNow you can delete selected entries.";
 
    if (key == NAME || key == ADDRESS || key == PHONE)
        promt_user_choose_deleting_criteria(str_deleting_criteria);
    else
        promt_user_choose_deleting_criteria(int_deleting_criteria);
 
    std::vector<Person>::iterator it;
    int counter;
    switch (key)
    {
    case NAME:
        counter = std::count_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.full_name == str_deleting_criteria; });
        for (int i = 0; i < counter; ++i)
        {
            it = std::find_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.full_name == str_deleting_criteria; });
            pdata.erase(it);
            std::vector<Person>(pdata).swap(pdata);
        }
        break;
 
    case ADDRESS:
        counter = std::count_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.address == str_deleting_criteria; });
        for (int i = 0; i < counter; ++i)
        {
            it = std::find_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.address == str_deleting_criteria; });
            pdata.erase(it);
            std::vector<Person>(pdata).swap(pdata);
        }
        break;
 
    case PHONE:
        counter = std::count_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.phone == str_deleting_criteria; });
        for (int i = 0; i < counter; ++i)
        {
            it = std::find_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.phone == str_deleting_criteria; });
            pdata.erase(it);
            std::vector<Person>(pdata).swap(pdata);
        }
        break;
 
    case AGE:
        counter = std::count_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.age == int_deleting_criteria; });
        for (int i = 0; i < counter; ++i)
        {
            it = std::find_if(pdata.begin(), pdata.end(), [&](const Person & p) { return p.age == int_deleting_criteria; });
            pdata.erase(it);
            std::vector<Person>(pdata).swap(pdata);
        }
        break;
 
    default:
        std::cout << "\nIt seems like wrong number. Try again.\n";
        break;
    } // end switch ( button )
 
    std::cout << "\nSelected data has been erased.\n";
}
 
int main()
{
    std::vector<Person> pdata;
 
    int key = 0;
    while (key != EXIT)
    {
        key = promt_user_choose_menu_operation();
        switch (key)
        {
        case ADD:
            std::cout << "\n\tAdding new student to database.\n";
            add_new_entries_to_array(pdata);
            copy_data_to_file(pdata, "Person.txt");
            break;
 
        case READ:
            std::cout << "\n\tReading data from database.\n";
            copy_data_from_file(pdata, "Person.txt");
            break;
 
        case SHOW:
            if (!pdata.empty())
            {
                // show( pdata );
                for (const auto & elem : pdata)
                    elem.show();
                std::cout << "\n\n";
            }
            else
                std::cout << "\n\tNo entries were found!\n";
            break;
 
        case DELETE:
            if (!pdata.empty())
            {
                delete_chosen_data_from_array(pdata);
                copy_data_to_file(pdata, "Person.txt");
            }
 
            else
                std::cout << "\n\tNo entries were found!\n";
            break;
 
        case EXIT:
            key = EXIT;
            break;
 
        default:
            std::cout << "\nIt seems like wrong number. Try again.\n";
            break;
 
        } // end switch ( key )
 
    } // end while ( key != EXIT )
 
    return 0;
}
Добавлено через 1 минуту
georgiisav988, не забудь, что твой stdafx.h должен выглядеть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// stdafx.h: включаемый файл для стандартных системных включаемых файлов
// или включаемых файлов для конкретного проекта, которые часто используются, но
// не часто изменяются
//
 
#pragma once
 
#include "targetver.h"
 
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
13.12.2016, 14:58  [ТС] 74
gru74ik, Спасибо большое.
Но можно еще навязать помощь по одной проблеме.
Во-первых, как здесь добавить изображение?
А во-вторых, на 10 Visual выдает он некоторые ошибки, есть ли возможно их исправить?!
Ошибки не могу скинуть, потому что не понимаю, как тут надо скрины скидывать.
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.12.2016, 16:00 75
Цитата Сообщение от georgiisav988 Посмотреть сообщение
Но можно еще навязать помощь по одной проблеме.
Навязать - нет. Попросить - можно.

Цитата Сообщение от georgiisav988 Посмотреть сообщение
как здесь добавить изображение?
Как загрузить вложение на форум.

Добавлено через 2 минуты
Цитата Сообщение от georgiisav988 Посмотреть сообщение
на 10 Visual выдает он некоторые ошибки, есть ли возможно их исправить?!
Возможно. Не использовать средства C++11, а писать на старом C++03.
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
13.12.2016, 17:08  [ТС] 76
блин, а я как на зло не сохранил, можно будет позже напомнить?
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.12.2016, 17:09 77
Цитата Сообщение от georgiisav988 Посмотреть сообщение
я как на зло не сохранил, можно будет позже напомнить?
Я не понимаю, что значит "не сохранил". Что "не сохранил"? О чём "напомнить"?
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
13.12.2016, 17:27  [ТС] 78
не сохранил я скрин ошибок.
а напомнить-попросить помочь исправить, если такая возможность будет.
0
Модератор
Эксперт CЭксперт С++
5286 / 2373 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
13.12.2016, 17:37 79
georgiisav988, запустите программу ещё раз, и сделайте скрин. В чём проблема?
1
0 / 0 / 1
Регистрация: 01.04.2016
Сообщений: 76
13.12.2016, 18:01  [ТС] 80
у меня дома 15, в институте 10
0
13.12.2016, 18:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.12.2016, 18:01
Помогаю со студенческими работами здесь

Структуры.Файловый ввод вывод в С++
Никак не могу разобраться с заданием. Помогиииите!! Структурный тип данных: Текущий курс...

Структуры, Файловый ввод-вывод. С++
Привет, помогите пожалуйста. Задание: В программе собраны сведения об успеваемости студентов...

структуры. файловый ввод-вывод.
не могу понять, чего от меня хотят???? Сформировать двоичный файл из элементов, заданной...

Для каждой строки файла удалить среднее слово; результат записать в файл (файловый ввод/вывод)
для каждой строки файла удалить среднее слово. результат записать в файл

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

Объяснить работу программы (структуры, файловый ввод/вывод)
объясните программу чему равняется v0??? и зачем int v=111??? #include &lt;iostream&gt; #include...


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

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