0 / 0 / 0
Регистрация: 19.04.2019
Сообщений: 27
1

Корректировка и дополнение списка файла

27.06.2020, 13:41. Показов 2009. Ответов 2

Author24 — интернет-сервис помощи студентам
В текстовом файле хранится список служащих. Необходимо выполнить корректировку списка или его дополнить.
Написал код по заполнению этого списка, всё работает, теперь встал вопрос о корректировке(см. case 1).
Я явно чего-то не понимаю, но вместо корректировки списка программа просто записывает новую строчку в существующий файл, вместо замены.
Название: Безымянный2.png
Просмотров: 54

Размер: 8.1 Кб
Пытался гуглить, но всё равно как-то непонятно, уже ночь, скоро сдавать, а мозги совсем на варят
Надеюсь на вашу помощь или совет...
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
#include "fstream"                
#include "iostream"
#include "conio.h"
#include <locale.h>
#include "iomanip"
 
using namespace std;
struct z
{
    char FIO[50]; //ФИО работника
    char dolzhnost[50]; //Занимаемая должность
    int year; //Год поступления на работу
    int oklad; //Оклад работника
};
 
 
int main()
{
    setlocale(0, "");
    z m[100];
    int n; //количество работников (определяет кол-во строк)
    ofstream f;
    f.open("D:\\kek.txt");
    cout << "Необходимо заполнить список." << endl;
    cout << "Введите количество работников: ";
    cin >> n;
 
    for (int i = 0; i < n; i++) //Ввод информации о работниках
    {
        cout << "Введите фамилию и инициалы работника: ";
        cin >> m[i].FIO;
 
        f << "ФИО работника: ";
        f << m[i].FIO;
        f << endl;
 
        cout << "Введите заниманиемую должность сотрудника: ";
        cin >> m[i].dolzhnost;
 
        f << "Должность: ";
        f << m[i].dolzhnost;
        f << endl;
 
        cout << "Введите год поступления на работу сотрудника: ";
        cin >> m[i].year;
 
        f << "Год поступления на работу: ";
        f << m[i].year;
        f << endl;
 
        cout << "Введите размер оклада сотрудника: ";
        cin >> m[i].oklad;
 
        f << "Размер оклада: ";
        f << m[i].oklad;
        f << endl;
    }
        f.close();
        int input;
        cout << "Выберите процедуру \n";
        cout << "1. Корректировка или дополнение списка с клавиатуры;\n";
        cout << "2. Сортировка по фамилии, окладу или году поступления;\n";
        cout << "3. Вывод на экран информации о служащем, фамилия которого введена с клавиатуры;\n";
        cout << "4. Запись списка в файл под тем же или новым именем;\n";
        cout << "Введите номeр процедуры: ";
        cin >> input;
        switch (input)
        {
        case 1:
            int input2;
            cout << "1. Корректировка списка" << endl;
            cout << "2. Дополнение списка" << endl;
            cout << "Введите номeр процедуры: ";
            cin >> input2;
            switch (input2) 
            {
            case 1:
                int i;
                f.open("D:\\kek.txt", ios::app);
                cout << "Введите номер записи, которую хотите отредактировать: ";
                cin >> i;
 
                    cout << "Введите фамилию и инициалы работника: ";
                    cin >> m[i].FIO;
 
                    f << "ФИО работника: ";
                    f << m[i].FIO;
                    f << endl;
 
                    cout << "Введите заниманиемую должность сотрудника: ";
                    cin >> m[i].dolzhnost;
 
                    f << "Должность: ";
                    f << m[i].dolzhnost;
                    f << endl;
 
                    cout << "Введите год поступления на работу сотрудника: ";
                    cin >> m[i].year;
 
                    f << "Год поступления на работу: ";
                    f << m[i].year;
                    f << endl;
 
                    cout << "Введите размер оклада сотрудника: ";
                    cin >> m[i].oklad;
 
                    f << "Размер оклада: ";
                    f << m[i].oklad;
                    f << endl;
 
                    f.close();
                
                break;
            case 2:
                break;
            default:
                cout << "Ошибка\n";
                break;
                cin.get();
            }
        case 2:
            break;
        case 3:
            break;
        case 4:
            break;
        default:
            cout << "Ошибка\n";
            break;
            cin.get();
        }
        system("pause");
        return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2020, 13:41
Ответы с готовыми решениями:

Корректировка или дополнение списка с клавиатуры
В текстовом файле хранится список служащих. Для каждого служащего указаны фамилия и инициалы,...

Корректировка и дополнение
Здравствуйте не могли бы объяснить пожалуйста почему не работает корректировка и дополнение списка...

Создание, коректировка или дополнение списка с клавиатуры
Программа должна содержать меню и ввод-вывод в окна на экране. Необходимо предусмотреть контроль...

Корректировка файла
В файле есть некая информация об абонентах сети (фамилия, номер, расход) Абоненту с указанной...

2
440 / 283 / 183
Регистрация: 23.06.2018
Сообщений: 651
27.06.2020, 17:04 2
Лучший ответ Сообщение было отмечено Sosisska как решение

Решение

Цитата Сообщение от Sosisska Посмотреть сообщение
просто записывает новую строчку
Вы сами открываете файл в режиме ios::app, что означает дозапись в конец.

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

Добавлено через 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
case 1:
    int i;
    cout << "Введите номер записи, которую хотите отредактировать: ";
    cin >> i;
 
    // Ну либо как-нибудь по другому ограничьте
    if (i >= n || i < 0)
    {
        cout << "Запись под этим номером не существует.\n";
        break;
    }
 
    cout << "Введите фамилию и инициалы работника: ";
    cin >> m[i].FIO;
 
    cout << "Введите заниманиемую должность сотрудника: ";
    cin >> m[i].dolzhnost;
 
    cout << "Введите год поступления на работу сотрудника: ";
    cin >> m[i].year;
 
    cout << "Введите размер оклада сотрудника: ";
    cin >> m[i].oklad;
 
    f.open("D:\\kek.txt");
 
    for (int i = 0; i < n; i++)
    {
        f << "ФИО работника: ";
        f << m[i].FIO;
        f << endl;
 
        f << "Должность: ";
        f << m[i].dolzhnost;
        f << endl;
 
        f << "Год поступления на работу: ";
        f << m[i].year;
        f << endl;
 
        f << "Размер оклада: ";
        f << m[i].oklad;
        f << endl;
    }
 
    f.close();
 
    break;
1
0 / 0 / 0
Регистрация: 19.04.2019
Сообщений: 27
01.07.2020, 14:28  [ТС] 3
Большое спасибо!
0
01.07.2020, 14:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.07.2020, 14:28
Помогаю со студенческими работами здесь

Корректировка оператора scanf, а точнее корректировка индексов
Я пытаюсь написать программу которая меняет индексы в операторе scanf на правильные индексы. То...

Создание и корректировка файла
Разработать программу создания и коррекции файла, где хранится информация обо всех водоемах...

Корректировка текстовго файла
У меня вот такой вопрос. У меня есть текстовый файл. Мне нужно в конец каждой строки файла записать...

Дополнение списка с обоих концов Удаление элемента из дерева по указанным значением информационную атрибута
Дополнение списка с обоих концов Удаление элемента из дерева по указанным значением информационную...

Корректировка записи с текстового файла в БД
Добрый день уважаемое сообщество!!! У меня такой случай: Есть таблица table, где 2 поля с данными...

Корректировка файла php.ini
Привет! Сразу говорю, мне в Битриксе не часто удавалось копаться, поэтому я многого не знаю, а...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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