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

Расчетная Работа с Файлами.Удаление записи. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Система обмена сообщениями http://www.cyberforum.ru/cpp-beginners/thread86055.html
Здраствуйте форумчане! И так мне надо написать клиент-серверное сетевое приложение реализующее функционал системы обмена сообщениями (аськи на пример). нужен программа-сервер и клиент. И все это...
C++ Посмотрите правильно или нет. Четырехугольник ABCD задан координатами своих вершин на плоскости: A(Xa,Ya),B(Xb,Yb),C(Xc,Yc) , D(Xd,Yd).Проверить являетса ли он выпуклым. Замечания: Есть несколько способов проверки выпуклости:... http://www.cyberforum.ru/cpp-beginners/thread86052.html
В чем ошибка? C++
ввод и вывод квадратной матрицы... #include <iostream> #include <conio.h> #include <stdio.h> using namespace std; int main() {
Вычислить гипотенузу прямоугольного треугольника C++
Создать функцию которая по двум заданым катеТам ВЫЧИСЛЯЕТ гипотенузу прямоугольного треугольника Добавлено через 5 минут И вот еще одна задачка. Дано два массива:а(19) и б(26)используя функцию...
C++ Текстовый файл http://www.cyberforum.ru/cpp-beginners/thread86020.html
Всем привет! Есть задачка... Прoгрaммa cocтaвляет cлoвaрь терминoв. Кaждый термин - cлoвo, зaпиcaннoе прoпиcными буквaми. Прoгрaммa зaпoминaет кaждый термин и укaзaтель нa cтрoку, в кoтoрoй oн...
C++ Мой возраст .) Мой возраст. Для заданного 0 < п < 200, рассматриваемого как возраст человека, вывести фразу вида: «Мне 21 год», «Мне 32 года», «Мне 12 лет». подробнее

Показать сообщение отдельно
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637

Расчетная Работа с Файлами.Удаление записи. - C++

15.01.2010, 20:40. Просмотров 879. Ответов 2
Метки (Все метки)

Возникли проблемы с удалением записи из структуры.Подскажите где у меня ошибка почему не видет?
// Console.cpp : Defines the entry point for the console application.
//

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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <string.h>
#include<stdlib.h>
#include<io.h>
using namespace std;
struct item
{
    char name[10];// наименование.
    int value;
    short number;// номер цеха
    item *next;
};
// Функции //
void add(item *it);
void see(item &it);
// Работа с файлом//
void newFile(FILE *f);// +
void viewFile(FILE *f);// +
void addFile(FILE *f,char *name,struct item *it);// добавление новой записи об изделии
void editFile(FILE *f,char *name,struct item *it);
void deleteRecord(void);
void runFile(void);// сортировка по убыванию
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *f=NULL;// макрос для объявление файла.
    item it[10];// структура
    deleteRecord();
    //  addFile(f,"go",it);
 
    _getch();
    return 0;
}
 
void newFile(FILE *f)
{
    /*
    char filename[20];
    cout<<"Vvedite nazvanie faila"<<endl;
    cin>>filename;
    */
    f=fopen("C:\\j\\input.bin","a+b");// создает файл по указанному адресу.
    fputs("",f);
 
    // ..//
}
void viewFile(FILE *f)
{
    char str[20];// переменная для просмотра файла.
    if(!(f=fopen("C:\\j\\input.txt","r+")))// поставте здесь адрес какой вам нужно
    {
        puts("File error");
    }
    else
    {
        cout<<"Dannie v faile"<<endl;
        for(int i=0;i<3;i++)// количество строк в файле.
        {
            fgets(str,10,f);
            cout<<str<<endl;
        }
        fclose(f);
        //fputs(str,stdout);
    }
};
void addFile(FILE *f,char *name,item *it)
{
    puts("Kakoe koli4esto detalei vu hotite dobavit");
    int k;
    cin>>k;
    int i;
    if(!(f=fopen("C:\\j\\input.txt","w+")))
    {
        puts("File error");
    }
    else
    {
        for(i=0;i<k;i++)
        {
            printf("Vvedite Nazvanie zap4asti\n");
            scanf("%s",&it[i].name);
            printf("Vvedite Kol-vo zap4asti %s\n",it[i].name);
            scanf("%d",&it[i].value);
            printf("Vvedite nomer ceha\n");
            scanf("%d",&it[i].number);
            fprintf(f,"Nazvanie:%s,%Koli4estvo: %d,Nomer ceha:%d\n",it[i].name,it[i].value,it[i].number);// запись в файл данных структуры.
        }
        fclose(f);
    }
}
void runFile(void)
{
    FILE *f;
    int i,j;
    int size=10;// размер файла
    struct item it[10];
    if(!(f=fopen("C:\\j\\input.txt","r+")))
    {
        puts("File error");
    }
    for(i=0;i<size;i++)
        for(j=i+1;j<10;j++)
            if(it[i].number<it[j].number) // сортировка по убыванию номера цеха.
            {
                struct item temp;
                temp=it[i];
                it[i]=it[j];
                it[j]=temp;
            }
 
}
void editFile(FILE *f,char *name,item *it)
{
    //
}
void deleteRecord(void)
{
    FILE *f;
    int k=1;// признак записи
    long pos=10;
    struct item it1,it2;
    long size,fd;
    size=sizeof(it1);
    char filename[20];
    cout<<"Vvedite ima faila"<<endl;
    //cin>>filename;
    if(!(f=fopen("C:\\j\\input.txt","rb+")))
    {
        puts("File error");
    }
    else
    {
        fd=fileno(f);fflush(stdin);
        cout<<"Kakyu zapis ydalit"<<endl;
        fgets(it1.name,10,stdin);// поиск удаленной записи
        do
        {
            fgetpos(f,SEEK_SET);
            fread(&it2,size,1,f);
            if(feof(f))break;
            if(!strcmp(it1.name,it2.name))
            {
                k=0;
                do
                {
                    fread(&it2,size,1,f);// чтение из файла
                    if(feof(f)){chsize(fd,pos);break;}// сдвиг позиции
                    fseek(f,-2*size,1);// поиск
                    fwrite(&it2,size,1,f);// запись
                    fgetpos(f,SEEK_SET);
                    fseek(f,size,1);
                }while(1);
            }
        }while(k);
        if(k)puts("Net takoi zapisi");
        fclose(f);
    }
}
Добавлено через 7 часов 38 минут
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
// Console.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <string.h>
#include<stdlib.h>
#include<io.h>
using namespace std;
struct item
{
    char name[10];// наименование.
    char value[10];// количество деталей
    char number[10];// номер цеха
};
// Функции //
void add(item *it);
void see(item &it);
// Работа с файлом//
void newFile(FILE *f);// +
void viewFile(FILE *f);// +
void addFile(FILE *f,char *name,struct item *it);// добавление новой записи об изделии+
void editFile();
void deleteRecord(void);
void runFile(void);// сортировка по убыванию +
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *f=NULL;// макрос для объявление файла.
    item it[10];// структура
    addFile(f,"go",it);
    editFile();
    //  addFile(f,"go",it);
 
    _getch();
    return 0;
}
 
void newFile(FILE *f)
{
    /*
    char filename[20];
    cout<<"Vvedite nazvanie faila"<<endl;
    cin>>filename;
    */
    f=fopen("C:\\j\\input.bin","a+b");// создает файл по указанному адресу.
    fputs("",f);
 
    // ..//
}
void viewFile(FILE *f)
{
    //  char str[20];// переменная для просмотра файла.
    struct item t;
    struct item it[10];
    if(!(f=fopen("C:\\j\\input.bin","r+b")))// поставте здесь адрес какой вам нужно
    {
        puts("File error");
    }
    else
    {
        int n=0;// количество данных в файле
        while(true)
        {
            int n1=fread(&t,sizeof(item),1,f);// чтение
            if (n1!=1)break;
            it[n]=t;
            cout<<"Nazvanie detali:"<<it[n].name;
            cout<<"Kol-vo detalei:"<<it[n].value;
            cout<<"Nomer ceha:"<<it[n].number<<endl;
        }
        fclose(f);
        //fputs(str,stdout);
    }
};
void addFile(FILE *f,char *name,item *it)
{
    puts("Kakoe koli4esto detalei vu hotite dobavit");
    int k;
    cin>>k;
    int i;
    if(!(f=fopen("C:\\j\\input.bin","w+b")))
    {
        puts("File error");
    }
    else
    {
        int count=0;
        for(i=count;i<k;i++)
        {
            printf("Vvedite Nazvanie zap4asti\n");
            scanf("%s",&it[i].name);
            printf("Vvedite Kol-vo zap4asti %s\n",it[i].name);
            scanf("%s",&it[i].value);
            printf("Vvedite nomer ceha\n");
            scanf("%s",&it[i].number);
            fwrite(&it[i],sizeof(item),1,f);// запись в файл данных структуры.
            count++;
        }
        fclose(f);
    }
}
void runFile(void)
{
    FILE *f;
    int i,j;
    int size=10;// размер файловых строк
    struct item it[10];
    struct item t;
    int s=sizeof(t);
    if(!(f=fopen("C:\\j\\input.bin","r+b")))
    {
        puts("File error");
    }
    else
    {
        printf("Dannie v faile\n");
        int n=0;// количество записей
        int m[10];
        while(true)
        {
            int n1=fread(&t,sizeof(item),1,f);// чтение
            if (n1!=1)break;
            it[n]=t;
            cout<<"Nazvanie detali:"<<it[n].name;
            cout<<"Kol-vo detalei:"<<it[n].value;
            cout<<"Nomer ceha:"<<it[n].number<<endl;
            m[n]=atoi(it[n].value);
            n++;
        }
        cout<<"Koli4estvo detalei do sortirovki"<<endl;
        for(i=0;i<n;i++)
            cout<<m[i]<<endl;// Вывод количества изделий цеха до сортировки.
        if(feof(f))cout<<"Konec faila"<<endl;
        for(i=0;i<size-1;i++)
            for(j=i+1;j<size;j++)
                if(m[i]<m[j]) // сортировка по убыванию количества деталей.
                {
                    struct item temp;
                    temp=it[i];
                    it[i]=it[j];
                    it[j]=temp;
                }
                printf("Dannie v faile posle sortirovki\n");
                for(i=0;i<n;i++)
                {
                    cout<<"Nazvanie detali:";
                    cout<<it[i].name;
                    cout<<"Kol-vo:";
                    cout<<it[i].value;
                    cout<<"Nomer ceha:";
                    cout<<it[i].number<<endl;
                }
                fclose(f);
    }
}
void editFile()
{
    FILE *f;
    struct item it,it2;
    if(!(f=fopen("C:\\j\\input.bin","r+b")))
    {
        puts("File error");
    }
    else
    {
        fseek(f,0,SEEK_END);
        int a=0;// номер коррекктировки/
        int records=ftell(f)/sizeof(item);
        while(true)
        {
            puts("Vvedite nomer korrektirovki");
            scanf("%d",&a);
            if(a<0||a>records)break;
            fseek(f,a*sizeof(item),SEEK_SET);
            fread(&it,sizeof(item),1,f);
            printf("Detal:%sKol-vo:%sNomer ceha:%s\n",it.name,it.value,it.number);
            puts("Vvedite korrektirovki Nomera ceha\n");
            scanf("%s\n",&it.number);
            fseek(f,a*sizeof(item),SEEK_SET);
            fwrite(&it,sizeof(item),1,f);
            puts("Dannie posle korrektirovki\n");
            printf("%s%s%s\n",it.name,it.value,it.number);
        }
        fclose(f);
    }
}
void deleteRecord(void)
{
    FILE *f;
    int k=1;// признак записи
    long pos=10;
    struct item it1,it2;
    long size,fd;
    size=sizeof(it1);
    char filename[20];
    cout<<"Vvedite ima faila"<<endl;
    //cin>>filename;
    if(!(f=fopen("C:\\j\\input.txt","r+b")))
    {
        puts("File error");
    }
    else
    {
        fd=fileno(f);fflush(stdin);
        cout<<"Kakyu zapis ydalit"<<endl;
        fgets(it1.name,10,stdin);// поиск удаленной записи
        do
        {
            fgetpos(f,SEEK_SET);
            fread(&it2,size,1,f);
            if(feof(f))break;
            if(!strcmp(it1.name,it2.name))
            {
                k=0;
                do
                {
                    fread(&it2,size,1,f);// чтение из файла
                    if(feof(f)){chsize(fd,pos);break;}// сдвиг позиции
                    fseek(f,-2*size,1);// поиск
                    fwrite(&it2,size,1,f);// запись
                    fgetpos(f,SEEK_SET);
                    fseek(f,size,1);
                }while(1);
            }
        }while(k);
        if(k)puts("Net takoi zapisi");
        fclose(f);
    }
}
Почему функция edit выводит с данными-мусор. И корректирует не нужное поле а все 3.Кто может пояснить в чем ошибка и может я неправильно исп fseek.
P.s функция delete так же не доработана пока.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru