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

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

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

работа с файлами - C++

22.12.2012, 23:51. Просмотров 286. Ответов 3
Метки нет (Все метки)

в программе не работает удаление... что делать??

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 books        /* структура записи входного файла */
{  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
22.12.2012, 23:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос работа с файлами (C++):

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

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

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

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

Работа с файлами - C++
Всем доброго времени суток) При написании программы возникла проблема.... не знаю как из одного файла в другой переписать некоторые...

Работа с файлами - C++
Написать программу копирования файла. В выходном файле в конец предложения дописывается количество слов в нем. Чтение происходит блоками....

3
MrGluck
Модератор
Эксперт CЭксперт С++
7418 / 4533 / 673
Регистрация: 29.11.2010
Сообщений: 12,287
22.12.2012, 23:53 #2
нови4ок, заведите в структуре bool(int в случае С) переменную, отвечающую за состояние структуры. Т.е. заполнена - 1, не заполнена - 0. При del просто меняете состояние на 0.
0
нови4ок
0 / 0 / 0
Регистрация: 22.12.2012
Сообщений: 4
23.12.2012, 00:09  [ТС] #3
Добавлено через 4 минуты
MrGluck, совсем недавно в программировании.. программа сделана была по примерам.. можно поподробнее, что и где изменить в программе?нужно,чтобы при вводе фамилии удалялась строка в файле
0
MrGluck
Модератор
Эксперт CЭксперт С++
7418 / 4533 / 673
Регистрация: 29.11.2010
Сообщений: 12,287
23.12.2012, 18:58 #4
C
1
2
3
4
5
6
7
8
struct books        /* структура записи входного файла */
{  char  nom[DL_NOM];   /* Название книги */
   char  fam[DL_FAM]; /* автор */
   char  gor[DL_GOR];   /* год издания */
   char och1[DL_OCH];
   char och2[DL_OCH];
   int isFull;
};
При инициализации isFull = true, при удалении = false. Не знаю, почему вы не создаете массив структур, а работаете только с файлом. Но если мисье извращенец вы упорно хотите каждый раз прогоняться по файлу, то при удалении записывайте все структуры, кроме той, что нужно удалить, в другой файл, а потом меняйте файлы местами. Но повторюсь, массив структур тут так и просится. Как бы вы, например, сортировку делали бы?
0
23.12.2012, 18:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2012, 18:58
Привет! Вот еще темы с ответами:

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

Работа с файлами - C++
Заполнить файл N действительными числами, полученными с помощью генератора случайных чисел. Найти сумму минимального и максимального...

работа с файлами - C++
пишу прогу по файлам на С++, мне нужно использовать ф-ию которая сбрасывает указакеть на начало потока. В Си есть ф-ия rewind, есть ли...

Работа с файлами - C++
Доброго времени суток... Необходимо выполнить следующее задание: Найти сумму первых шести элементов массива и записать вместо...


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

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

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