Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
нови4ок
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 4
#1

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

23.12.2012, 00:38. Просмотров 239. Ответов 0
Метки нет (Все метки)

при вводе фамилии в файле должна удаляться строка... как это сделать? в программе удаление работает неправильно..

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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2012, 00:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос как организовать удаление? работа с файлами (C++):

Расчетная Работа с Файлами.Удаление записи. - C++
Возникли проблемы с удалением записи из структуры.Подскажите где у меня ошибка почему не видет? // Console.cpp : Defines the entry point...

Работа с файлами, поиск и удаление записей - C++
Добрый вечер. В удаление и поиске студента не выводит все предметы и оценки , а только один предмет и одну оценку. В удаление точно так же,...

Работа с файлами. Формирование, Печать, добавление и удаление элементов оформить в виде функций - C++
Сформировать двоичный файл, распечатать его содержимое. Формирование, печать, добавление и удаление элементов оформить в виде функций....

Как правильно организовать удаление объекта по указателю? - C++
Конечно тема избитая, и я находил много решений, но проверить удаляються ли объекты не могу. Есть массив указателей на объекты Record...

Работа с файлами, как определить конец строки - C++
Как установить определение конца строки файла? Подготовьте в «Блокноте» текстовый файл. Напишите программу, которая считывает текст из...

работа символьными файлами, незнаю как сделать - C++
Задані символьні файли f i g. Визначити, чи збігаються компоненти файлу f з компонентами файлу g. Якщо ні, то одержати номер першого...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2012, 00:38
Привет! Вот еще темы с ответами:

Не знаю как реализовать.Само задание в изображении. Работа с файлами - C++
Помогите пожалуйста, хотя бы как сделать так, чтобы считались строчки, которые заканчиваются буквой с клавиатуры.

Работа с файлами: как найти слово в отдельном текстовом файле? - C++
Нам даны два файла, нужно в одном файле взять одно слово, во втором файле взять другое слово...и заменить их!!! какие есть идеи?! Язык...

Работа с файлами. Как добавить переход на новую строку при записи? - C++
Задача такая, дан текстовый файл (с информацией о людях Фамилия Имя Отчество) и надо создать второй файл с записями вида «Фамилия И.О.»,...

работа с файлами(как написать программу добавления в текстовый файл после какой-то определённой буквы одного пробела?) - C++
ребят подскажите как написать программу добавления в текстовый файл после какой-то определённой буквы одного пробела????? не получается...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru