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

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

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

Студворк — интернет-сервис помощи студентам
В текстовом файле хранится список служащих. Необходимо выполнить корректировку списка или его дополнить.
Написал код по заполнению этого списка, всё работает, теперь встал вопрос о корректировке(см. 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.06.2020, 13:41
Ответы с готовыми решениями:

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

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

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

2
458 / 294 / 191
Регистрация: 23.06.2018
Сообщений: 678
27.06.2020, 17:04
Лучший ответ Сообщение было отмечено 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  [ТС]
Большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.07.2020, 14:28
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru