Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расчетная работа по файлам.Удаление записи, Не могу написать функцию 
:(
    Опции темы
EgorTheBlade
Дата 16.1.2010, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 5.12.2009

Репутация: нет
Всего: -1



Контрольная работа: Создание,просморт корректировка и т.д
Все написал кроме удаления.
Код

// 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];// номер цеха
};
int count;
struct item it[10];// массив структур.
// Функции //
// Работа с файлом//
void newFile(FILE *f);// Создание файла
void viewFile(FILE *f);// Просмотр содержимого файла
void addFile();// добавление новой записи об изделии+
void editFile();// изменения записей об изделии
void deleteRecord(void);
void runFile(void);// сортировка по убыванию 
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    FILE *f=NULL;// макрос для объявление файла.
    addFile();
    _getch();
    return 0;
}

void newFile(FILE *f)
{
    /*
    char filename[20];
    cout<<"Vvedite nazvanie faila"<<endl;
    cin>>filename;
    */
    if(!(f=fopen("C:\\j\\input.bin","a+b")))// создает файл по указанному адресу
    {
        puts("File error");
    }
    else
    {
    fputs("",f);
    fclose(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;
    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;
    if(!(f=fopen("C:\\j\\input.bin","r+b")))// чтение файла
    {
        puts("File error");
    }
    else
    {
        /*
        while(true)
        {
        int n;
        cin>>n;
        fseek(f,sizeof(item)*(n-1),SEEK_SET);
        if(sizeof(it)!=fread(&it,1,sizeof(item),f))  // просмотр позиции
        cout<<"konec faila";
        else 
        {
        cout<<"info v pozicii"<<endl;
        cout<<it.name<<it.number<<it.value;
        }
        */
        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,sizeof(item)*(a-1),SEEK_SET);
            if(sizeof(it)!=fread(&it,1,sizeof(item),f))
                puts("Konec faila");
            else
            {
                printf("Detal:%sKol-vo:%sNomer ceha:%s\n",it.name,it.value,it.number);
                puts("Vvedite korrektirovki Nomera ceha\n");
                scanf("%s",&it.number);
                fseek(f,sizeof(item)*(a-1),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);
    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);
    }
}

Нужна помощь в написании функции удаление записи из файла.
PM MAIL Skype   Вверх
bsa
Дата 17.1.2010, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Вариантов несколько, или считываешь все записи в память, удаляешь ненужную запись, удаляешь файл, записываешь все записи в новый файл под тем же именем. Второй вариант сложней, он требует дописывать программу - в структуру данных нужно ввести флаг (как вариант, можно "обнулить" самое важное поле структуры, без которого запись смысла не имеет), который будет означать, что запись удалена. Когда файл считывается, такие записи игнорируются. Когда нужно удалить запись, формируется специальная запись, с помощью fseek указатель записи файла смещается и производится сохранение этой записи повех существующей.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0875 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.