Шустрый

Профиль
Группа: Участник
Сообщений: 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); } }
|
Нужна помощь в написании функции удаление записи из файла.
|