Страница 1 из 1

двусвязный список, удаление книг заданного автора

Добавлено: 08 июн 2010, 22:17
maxgalll
Необходимо разработать программу для создания и работы с двусвязным списком, состоящим из структур. Структура содержит название книги, автора, год издания.
Необходимо удалить книги заданного автора.

и проблема возникла с функцией удаления, вот что есть

Код: Выделить всё

#include <stdio.h>
#include <conio.h>
#include <string.h>
 
struct bibl
{
 char name[10];
 char avtor[10];
 int god;
 } sp;
 
void input(FILE *);
void print(FILE *);
void app(FILE *);
void del(FILE *);
 
main()
 {
 char c;
 FILE *tf;
 while (1)
 {
 puts("\n     MENU");   
 puts(" ++++++++++++");   
 puts(" 1-sozdanie spiska");
 puts(" 2-prosmotr spiska");
 puts(" 3-dobavlenie v spisok");
 puts(" 4-poisk i ydalenie");
 puts(" 0-vyhod \n");
 c=getch();
 switch(c)
  {
  case '1':input(tf); break;
  case '2' :p rint(tf);break;
  case '3':app(tf);break;
  case '4':del(tf);break;
  case '0':return 0;
  default : puts("nevernuy regim!!!");
  }
 }
}
 
void input(FILE *tf)
{
   char ch;
   tf=fopen("file.dat","wb");
   printf("\n vvedite informaciu o knige \n");
   do
   {
   printf("\n nazvanie: "); scanf("%s",sp.name);
   printf(" avtor: "); scanf("%s",&sp.avtor);
   printf(" god izdania: "); scanf("%d",&sp.god);
   fwrite(&sp,sizeof(struct bibl),1,tf);
   printf("\n Zakonchity ? y/n");
   ch=getch();
   }
   while (ch != 'y');
   fclose(tf);
}
 
void print(FILE *tf)
{
  int i;
   tf=fopen("file.dat","rb");
   i=1;
   fread(&sp,sizeof(struct bibl),1,tf);
 
   while(!feof(tf))
   {
    printf("\n (%d) nazvanie %s\n avtor %s  ",i,sp.name,sp.avtor);
    printf("\n god izdania:%d\n ",sp.god);
    fread(&sp,sizeof(struct bibl),1,tf);
    i++;
   }
getch();
}
 
void app(FILE *tf)
{
char ch;
tf=fopen("file.dat","ab");
printf("\n vvedite informaciu o knige \n");
   do
   {
   printf("\n nazvanie: "); scanf("%s",sp.name);
   printf(" avtor: "); scanf("%s",&sp.avtor);
   printf(" god izdania: "); scanf("%d",&sp.god);
   fwrite(&sp,sizeof(sp),1,tf);
   printf("\n Zakonchity ? y/n");
   ch=getch();
   }   while (ch != 'y');
fclose(tf);
}
 
void del(FILE*tf)
{
 
... ?????????...

fclose(tf);
}
помогите кто сможет...

Re: двусвязный список, удаление книг заданного автора

Добавлено: 08 июн 2010, 23:22
BulldozerBSG
А где же двусвязный список?

Re: двусвязный список, удаление книг заданного автора

Добавлено: 10 июн 2010, 14:45
Romeo
Двусвязного списка я тоже не вижу :) Что именно не понятно в реализации функции del? Не понятен алгоритм или не понятно, какими стандартными функциями пользоваться, чтобы удалить из файла записи?