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

Работа с текстовым файлом. Удаление строки. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Массив размером 10 на 10, заполненный квадратами чисел. Объяснить код. http://www.cyberforum.ru/cpp-beginners/thread916978.html
Создать массив размером 10 на 10 и заполнить его квадратами чисел.(первый индекс обозн. десятки, второй единицы). int main() { int m; for(int i=0;i<10;i++) { for(int u=0;u<10;u++) {
C++ Посчитать сколько двоичных единиц содержит каждое число массива. Всем доброго дня! Вообщем дали на практике задание: Дан цифровой массив, посчитать сколько двоичных единиц содержит каждое число. Помогите пожалуйста. Заранее спасибо. http://www.cyberforum.ru/cpp-beginners/thread916955.html
Безымянный аргумент функции C++
функция принимает аргумент, но у него нет имени void f(int) { cout << "Hello world!"; } int main() { int n = 10;
C++ Одномерные массивы.Сформировать случайным образом два массива d(10) и a(10)
Сформировать случайным образом два массива d(10) и a(10). Сложить их. В новом массиве найти первый отрицательный элемент и вывести его на экран. Если отрицательных элементов нет, то дать об этом сообщение. помогите пожалуйста)
C++ Параллельное программирование в С++ http://www.cyberforum.ru/cpp-beginners/thread916891.html
Здравствуйте! я новичок в параллельном программировании. Помогите пожалуйста с задачкой!! Есть одна глобальная переменная, которая должна модифицироваться двумя потоками. Синхронизировать эти потоки по средствам критической секции. Заранее спасибо)
C++ решения уравнения помогите написать программу которая решит уравнение f(X)=(X^3+^2)/(1-X^2+X^3) по формуле симпсона где а=0,1 в=3,2 е=0,001 с подробным описанием решения подробнее

Показать сообщение отдельно
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
06.07.2013, 04:41     Работа с текстовым файлом. Удаление строки.

Не по теме:

Цитата Сообщение от studentka2012 Посмотреть сообщение
так я и так делаю,не получается(((((((((((
Не получается, потому что изначально криво сделано. И дальше ещё больше будет не получаться.



Добавлено через 7 часов 55 минут
Кликните здесь для просмотра всего текста
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
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>
 
#define N 30 // N - 1 максимальное количество символов в Ф.И.О.
#define K 5 // количество оценок
 
#pragma pack(push, 1)
struct student
{
    char family [N]; // фамилия
    char name   [N]; // имя
    char otchest[N]; // отчество
    int  date[K];    // оценки
};
#pragma pack(pop) 
 
void add_student();   // добавление записи о студенте
void show_Students(); // вывод данных о студентах
void sort_Students(); // сортировка данных о студентах
void sort_buffer(struct student *buffer, int n); // сортировка буфера
void delete_student();  // удаление записи о студенте
void out_student(struct student *b);  // вывод данных о студенте на консоль
void in_student   (struct student *b); // чтение данных о студенте с консоли
int count_students(FILE *fin);  // подсчёт количества записей в файле
int compare_students(struct student b1, struct student b2); // сравнение данных о студентах на равенство Ф.И.О.
 
void write_student(struct student *b, FILE *fout);    // запись данных о студенте в файл
void read_student (struct student *b, FILE *fin );    // чтение данных о студенте из файла
struct student* read_to_buffer(int *n);               // создание буфера и чтение данных о студентах в буффер
int write_from_buffer(struct student *buffer, int n); // запись данных о студентах из буффера
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    int k = 0; // пункт меню
    do
    {
        printf("\n1. Добавить запись\n");
        printf("2. Показать все записи\n");
        printf("3. Сортировать записи\n");
        printf("4. Удалить запись\n");
        printf("5. Выход\n");
        
        scanf("%d", &k);
                getc(stdin);
        switch(k)
        {
            case 1: add_student(); 
                break;
            
            case 2: show_Students(); 
                break;
            
            case 3: sort_Students();
                break;
                        
            case 4: delete_student();
                break;
        }
    } while(k != 5 );
 
    return 0;
}
 
//.................................................................................
 
 
void add_student()  // добавление записей
{
  printf("\n\nКоличество добавляемых записей = ");
  int t; // количество добавляемых записей
  scanf("%d", &t);
  getc(stdin);
  if (t <= 0) return;
 
  //запись в файл
  FILE *fout;
  fout = fopen("Students.txt", "ab"); // открываем файл для бинарной дозаписи в конец файла, 
                                      // если файла нет, то создаётся
  struct student temp;
  int i;
  for(i = 0; i < t; i++) // чтение во временную структуру и запись в файл
  {  
     in_student(&temp);
         write_student(&temp, fout);
  }
  fclose(fout); 
}
 
//......................................................................................
 
void show_Students() // вывод данных о студентах
{ 
  FILE *fin;
  fin = fopen("Students.txt", "rb"); // открываем файл для бинарного чтения
  if (!fin) printf("\nДанных не существует.\n\n"); // если файла не существует
  else
  {
          int n = count_students(fin); // количество записей в файле
          struct student temp;
          int j = 0;
          int i;
          for (i = 0; i < n; ++i) // чтение записей и вывод на экран
          {  
                read_student(&temp, fin);
                printf("     %d\n\n", ++j);
                out_student(&temp);
          }
          fclose(fin);
   }
}
 
//.................................................................................
 
void sort_Students() // сортировка данных по фамилии 
{
   int n;
   struct student *buffer = read_to_buffer(&n); // создание буфера и чтение в него данных
   if (!buffer) return;
   
   // сортировка записей в буфере
        sort_buffer(buffer, n);   
        
        if (write_from_buffer(buffer, n)) // запись в файл отсортированного буфера
        {
                printf("\nДанные отсортированы по фамилии!\n");
                show_Students();
        }
                
        free(buffer);
}
 
//..........................................................................
 
void delete_student() // удаление записи о студенте
{
        int n; // количество записей в буфере
        struct student *buffer = read_to_buffer(&n); // создание буфера и чтение в него данных из файла
        if (!buffer) return;
   
        printf("Введите Ф.И.О. студента для удаления:\n");
        struct student b_delete;
        
        printf( "\nФамилия: "); gets(b_delete.family);
        printf( "Имя: ");       gets(b_delete.name);      
        printf( "Отчество: ");  gets(b_delete.otchest);  
       
        int flag = 0;
        int ind; // индекс записи для удаления в буфере
        int i;
        for (i = 0; i < n; ++i) // поиск в буфере записи для удаления
        {  
                if (compare_students(buffer[i], b_delete))
                { 
                        flag = 1; // если найдена запись для удаления, то устанавливаем flag
                        ind = i;  // запоминаем индекс записи в буфере
                        break;
                }
        }
        if (flag == 0) 
        {
                printf("\nТакая запись не найдена\n");
                        
                free(buffer);
                return;
        }
        else // перезаписываем файл 
        {
                int i;
                for (i = ind; i < n - 1; i++) // смещаем буфер на один элемент влево
                        buffer[i] = buffer[i + 1];
                
                write_from_buffer(buffer, n - 1); // записываем буфер в файл
                
                free(buffer);
                
                printf("\nЗапись удалена!\n");
        }
}
 
//........................................................................
 
void write_student(struct student *b, FILE *out) // запись данных о студенте в файл 
{
        fwrite(b, sizeof(struct student), 1, out);
}
 
//......................................................................
 
void read_student(struct student *b, FILE *in) // чтение данных о студенте из файла 
{
        fread(b, sizeof(struct student), 1, in);
}
 
//........................................................................
 
void out_student(struct student *b) // вывод данных о студенте на консоль
{
        puts(b ->family);       
        puts(b ->name);       
        puts(b ->otchest);    
        int i;
        for (i = 0; i < K; ++i)               
            printf("%d ", b ->date[i]); 
        puts("\n");
}
 
//........................................................................
 
void in_student(struct student *b) // ввод данных о студенте c консоли
{
        printf( "\nФамилия: "); gets(b ->family);
        printf( "Имя: ");       gets(b ->name);      
        printf( "Отчество: ");  gets(b ->otchest);  
        printf( "Оценки (%d):\n", K);
        int i;
        for (i = 0; i < K; ++i)
        {
            printf( "%d) ", i + 1);
            scanf("%d", &b ->date[i]);
        }
        getchar();
}
 
//.......................................................................
 
int count_students(FILE *fin) // подсчёт количества записей в файле
{
        fseek(fin, 0, SEEK_END); // перемотать на конец файла
        long file_size = ftell(fin); // получить размер файла
        long n = file_size / sizeof(struct student); // количество записей в файле
        fseek (fin , 0, SEEK_SET); // перемотать на начало файла
        
        return n;
}
 
//.......................................................................
 
int compare_students(struct student b1, struct student b2) // сравнение данных о студентах (Ф.И.О.)
{
    if ((!strcmp(b1.family,  b2.family ))  &&
        (!strcmp(b1.name,    b2.name  ))   &&
        (!strcmp(b1.otchest, b2.otchest))) 
    return 1;
    else return 0;
}
 
//........................................................................
 
struct student* read_to_buffer(int *n) // создание буфера и чтение файла в буффер
{
  FILE *fin;
  fin = fopen("Students.txt", "rb"); // открываем файл для бинарного чтения
  if (!fin) 
  {
        printf("\nДанных не существует.\n\n"); // если файла не существует
        return NULL;
  }
  else
  {
        *n = count_students(fin); // количество записей в файле
        struct student *buffer = (struct student*)malloc(*n * sizeof(struct student));  // память под буфер
                
        if (!buffer)
        {
                printf("\nНедостаточно памяти!\n");
                fclose(fin);
                return buffer;
        }
                
        fread(buffer, sizeof(struct student), *n, fin); // читаем файл в буфер
        fclose(fin);
                
        return buffer;
   }
}
 
//............................................................................
 
int write_from_buffer(struct student *buffer, int n) // запись в файл из буффера
{
  FILE *fout;
  fout = fopen("Students.txt", "wb"); // открываем файл для бинарной записи
  if (!fout) 
  {
        printf("\nОшибка при открытии файла для записи!.\n\n");
        return 0;
  }
  
  fwrite(buffer, sizeof(struct student), n, fout);
  fclose(fout);
  
  return 1;
}
 
//.......................................................................
 
void sort_buffer(struct student *buffer, int n) // сортировка буфера по фамилии студентов
{
        struct student temp;
        int i;
        for(i = 0; i < n - 1; ++i)
        {
                int j;
                for(j = 0; j < n - 1; ++j)
                {
                        int cmp;
                        cmp = strcmp(buffer[j].family, buffer[j + 1].family);
                        if(cmp > 0)
                        {
                                temp = buffer[j + 1];
                                buffer[j + 1] = buffer[j];
                                buffer[j] = temp;
                        }
                }
        }
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru