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

как организовать удаление? работа с файлами - C++

Восстановить пароль Регистрация
 
нови4ок
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 4
23.12.2012, 00:38     как организовать удаление? работа с файлами #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
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
#include "stdafx.h"
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
#include <windows.h>
 
#define  DL_NOM 4   /* длина поля названия в файле */
#define  DL_FAM 15  /* длина поля имени автора */
#define  DL_GOR 10  /* длина поля года издания */
#define  DL_OCH 5
#define  MAX 20
 
FILE *f,*f2;
 
struct sport        /* структура записи входного файла */
{  char  nom[DL_NOM];   /* Название книги */
   char  fam[DL_FAM]; /* автор */
   char  gor[DL_GOR];   /* год издания */
   char och1[DL_OCH];
   char och2[DL_OCH];
};
 
/*-------------------------------------------------*/
 /* функция вывода списка спортсменов */
 /*-------------------------------------------------*/
 
void spisok(FILE *f)
{struct sport tz;    /* текущая запись файла */
    
    printf("\n");
    rewind(f);
    printf("\n № |  Фамилия   |   Город   | Рез. 1 | Рез. 2 |\n");
    printf("------------------------------------------------\n");
    while(fgets((char *)&tz,sizeof(struct sport),f)!=NULL)
        {tz.nom[DL_NOM-1] = '\0';
         tz.fam[DL_FAM-1] = '\0';
         tz.gor[DL_GOR-1] = '\0';
         tz.och1[DL_OCH-1] = '\0';
         tz.och2[DL_OCH-1] = '\0';
         
         printf("%s   %s%s   %s     %s\n",tz.nom,tz.fam,tz.gor,tz.och1,tz.och2);
        }
}
 
/*--------------------------------------------------------*/
 /* функция вывода фамилии спортсмена по сумме рузультатов */
 /*------------------------------------------------------*/
 
void poisk1 (FILE *f)
{   struct sport tz[MAX],z;  /* текущая запись файла */
    int n=0,i=0,k,j;
    rewind(f);
    while(fgets((char *)&tz[i],sizeof(struct sport),f)!=NULL)
        {tz[i].nom[DL_NOM-1] = '\0';
         tz[i].fam[DL_FAM-1] = '\0';
         tz[i].gor[DL_GOR-1] = '\0';
         tz[i].och1[DL_OCH-1] = '\0';
         tz[i].och2[DL_OCH-1] = '\0';
         i++; 
        }
    for(k=0;k<i;k++) 
        for(j=0;j<i-k-1;j++) 
            if(atoi(tz[j].och1)+atoi(tz[j].och2) < atoi(tz[j+1].och1)+atoi(tz[j+1].och2)) 
                {z=tz[j];
                 tz[j]=tz[j+1];
                 tz[j+1]=z;
                }
    printf("\nМесто |  Фамилия  |    Город    |  Сумма результатов   |\n");
    printf("-----------------------------------------------------------");
    for(k=0;k<3;k++)
        printf("\n  %d      %s%s          %d\n",k+1,tz[k].fam,tz[k].gor,atoi(tz[k].och1)+atoi(tz[k].och2));
}
 
 /*-------------------------------------------------*/
 /* функция вывода результатов спортсмена по фамилии */
 /*-------------------------------------------------*/
 
void poisk2(FILE *F)
{   char zfam [DL_FAM]; /* заданная фамилия спорсмена */
    int n=0;         
    struct sport tz;     
    rewind(f);
    puts ("\nВведите фамилию спортсмена");
    SetConsoleCP(1251);
    gets (zfam);
    SetConsoleCP(866);
    if(zfam[0]=='\0')
        {printf("Фамилия не введена\n");
         return;
        }
    printf("\nФамилия   |     Город     | Рез. 1 | Рез. 2 |\n");
    printf("------------------------------------------------");
    while (fgets((char *)&tz,sizeof(struct sport),f) != NULL)
        {tz.nom[DL_NOM-1] = '\0';
         tz.fam[DL_FAM-1] = '\0';
         tz.gor[DL_GOR-1] = '\0';
         tz.och1[DL_OCH-1] = '\0';
         tz.och2[DL_OCH-1] = '\0';
         if (strstr(tz.fam,zfam)==tz.fam)
         {printf ("\n%s %s      %s     %s\n",tz.fam,tz.gor,tz.och1,tz.och2);
             n=1;
            }
        }
         if (n==0)  
            {puts ("\nТаких спортсменов нет"); 
             return;
            }
         else return;
        
}
 
void add(FILE *F)
{ int i=0,k;         
  struct sport tz[MAX]; 
    
    rewind(f);
    puts("\nВведите нового спортсмена\n");
    puts("Номер: ");
    gets((char *)&tz[i].nom);
    puts("Фамилия: ");
    SetConsoleCP(1251);
    gets((char *)&tz[i].fam);
    SetConsoleCP(866);
    puts("Город (Команда): ");
    SetConsoleCP(1251);
    gets((char *)&tz[i].gor);
    SetConsoleCP(866);
    puts("Первый результат: ");
    gets((char *)&tz[i].och1);
    puts("Второй результат: ");
    gets((char *)&tz[i].och2);
    fprintf(f,"\n");
    for(k=0;k<DL_NOM;k++)
        {if(tz[i].nom[k]!='\0'&&tz[i].nom[k]!=-52) 
            fprintf(f,"%c",tz[i].nom[k]);
         else fprintf(f," ");
        }
    for(k=0;k<DL_FAM;k++)
        {if(tz[i].fam[k]!='\0'&&tz[i].fam[k]!='М') fprintf(f,"%c",tz[i].fam[k]);
         else fprintf(f," ");
        }
    for(k=0;k<DL_GOR;k++)
        {if(tz[i].gor[k]!='\0'&&tz[i].gor[k]!=-52) fprintf(f,"%c",tz[i].gor[k]);
         else fprintf(f," ");
        }
    for(k=0;k<DL_OCH;k++)
        {if(tz[i].och1[k]!='\0'&&tz[i].och1[k]!=-52) fprintf(f,"%c",tz[i].och1[k]);
         else fprintf(f," ");
        }
    for(k=0;k<3;k++)
        {if(tz[i].och2[k]!='\0'&&tz[i].och2[k]!=-52) fprintf(f,"%c",tz[i].och2[k]);
         else fprintf(f," ");
        }
}
 
void del(FILE *f)
{ int i=0,k;         
  struct sport tz[MAX],z;   
  char zfam[DL_FAM];
    while(fgets((char *)&tz[i],sizeof(struct sport),f)!=NULL)
        {tz[i].nom[DL_NOM-1] = '\0';
         tz[i].fam[DL_FAM-1] = '\0';
         tz[i].gor[DL_GOR-1] = '\0';
         tz[i].och1[DL_OCH-1] = '\0';
         tz[i].och2[DL_OCH-1] = '\0';
         i++; 
        }
    f2=fopen("sport.txt","w+");
    puts("Введите фамилию");
    SetConsoleCP(1251);
    gets (zfam);
    SetConsoleCP(866);
    if(zfam[0]=='\0')
        {printf("Фамилия не введена\n");
         return;
        }
    for(k=0;k<i;k++)
        if (strstr(tz[k].fam,zfam)==tz[k].fam)
            {z=tz[k];
             tz[k]=tz[k+1];
             tz[k+1]=z;
            }
    for(k=0;k<i-1;k++)
        fprintf(f2,"%s %s %s %s %s",tz[k].nom,tz[k].fam,tz[k].gor,tz[k].och1,tz[k].och2);
    fclose(f2);
}
 
 
        /*----------------------*/
       /*    главная функция   */
       /*----------------------*/
 
void main()
{   
    setlocale(LC_ALL,"Russian");
    char n;   /* номер пункта меню */
    f= fopen("sport.txt", "a+");
    
    if (f==NULL)
        {puts ("Файл  books.txt не найден");
         _getch();
         return ;
        }
    do
    {  puts ("\n========================================================");
       puts ("Выберите номер пункта меню:");
       puts ("1 - вывод списка участников");
       puts ("2 - вывод призеров");
       puts ("3 - поиск спортсмена по фамилии");
       puts ("4 - добавление нового спортсмена в файл");
       puts ("5 - удаление спортсмена по фамилии");
       puts ("6 - выход");
       puts ("---------------------------------------------------------");
       n = _getche();
       switch(n)
            {case '1': spisok(f); break;
             case '2': poisk1(f); break;
             case '3': poisk2(f); break;
             case '4': add(f); break;
             case '5': del(f); break;
             case '6': break;
             default: puts("\nНужно вводить номер пункта от 1 до 6");
            }
       if (n!='6')
            {puts("\nДля продолжения нажмите любую клавишу");
             _getch();
            }
    }
    while (n != '6');
    fclose(f);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 00:38     как организовать удаление? работа с файлами
Посмотрите здесь:

C++ Расчетная Работа с Файлами.Удаление записи.
Работа с файлами: как найти слово в отдельном текстовом файле? C++
C++ работа с файлами(как написать программу добавления в текстовый файл после какой-то определённой буквы одного пробела?)
Работа с файлами. Формирование, Печать, добавление и удаление элементов оформить в виде функций C++
работа символьными файлами, незнаю как сделать C++
C++ Работа с файлами, как определить конец строки
Работа с файлами. Как добавить переход на новую строку при записи? C++
C++ Не знаю как реализовать.Само задание в изображении. Работа с файлами

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 20:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru