Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2009, 21:42   #1
Ultramarin
Новичок
Джуниор
 
Регистрация: 26.04.2009
Сообщений: 1
По умолчанию справочник и шифрование

Здравствуйте, помогите, пожалуйста, реализовать следующую задачу:
Шифровать (дешифровать) файл методом смещения кода. Файл содержит сведения о городах России (количество жителей, название, региональная принадлежность). Реализовать добавление и удаление сведений, а так же поиск по названию города.
Код без шифрования, при компиляции ошибок нет, правильно работает только функция Create(), что не так с остальными?
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
 {
  int num;
  char name[20];
  char region[20];
  char zit[20];
 }data;

void add(char *);
void del(char *);
void view(char *, int );
void find(char *);
int find_max_num(char *);
int get_number(char *);
void create();
int check(char *, data);


 void add(char *fn)
  {
   FILE*fp;
   data st;
   int pr;
   while(1)
    {
     st.num=find_max_num(fn)+1;
     clrscr();
     printf("Name: "); scanf("%s",&st.name);
     printf("Region: "); scanf("%d",&st.region);
     printf("Ziteli: "); scanf("%d",&st.zit);
     if(!check(fn,st))
      {
       if((fp=fopen(fn,"ab+"))==NULL)
    {
     printf("File could not be opened.\n");
     return;
    }
       fwrite(&st,sizeof(data),1,fp);
       fclose(fp);
       return;
      }
     else
      {
       printf("Zapis' est'");
       getch();
      }
    }
  }

 void del(char*fn)
  {int num;
   FILE*fp,*temp;
   data st;
   int pr=1;
   int number;
   view(fn,num);
   printf("nomer zapisi: ");
   int key=0;
   scanf("%d",&number);
   while(kbhit())
    {
     if(!(key=='\r'))
      {
       if((fp=fopen(fn,"ab+"))==NULL)
    {
     printf("Error.\n");
     return;
    }
       if((temp=fopen("temp.$$$","wb"))==NULL)
    {
     printf("Error\n");
     return;
    }
       while(fread(&st,sizeof(data),1,fp))
    {
     if(feof(fp)) break;
     if(st.num!=number) fwrite(&st,sizeof(data),1,temp);
     else pr=0;
    }
       fclose(fp);
       fclose(temp);
       if(remove(fn)==-1)
    {
     perror("remove");
     return;
    }
       
       if(rename("temp.$$$",fn)==-1)
    {
     perror("rename");
     return;
    }
       if(pr)
    {
     printf("Net fila");
     getch();
    }
      }
      clrscr();
    }
    }

 void view(char*fn,int n)
  { 
     FILE*fp;
     data st;
     int counter=0;
     if ((fp = fopen(fn,"rb")) == NULL)
      {
       printf("File could not be opened.\n");
       return;
      }
     fseek(fp,(n-1)*sizeof(data),SEEK_SET);
     while (counter != 18)
      {
       fread(&st,sizeof(data),1,fp);
       if (feof(fp)) break;
       else
        {
         printf("%d %s  %d  %d",st.num, st.name,st.region,st.zit);
         counter++;
        }
    }
     return;
    } 

  void find(char*fn)
     {
    FILE*fp;
    data st;
    char string[15];
    int pr,prs;

    
    if((fp=fopen(fn,"rb"))==NULL)
     {
      puts("File couldn't be open");
      return;
     }
    prs=1;
    pr=0;
    printf("Name: ");
    fflush(stdin);
    scanf("%s",&string);
    rewind(fp);
    while(fread(&st,sizeof(data),1,fp))
     {
      if(feof(fp)) break;
      if(!strcmp(st.name,string))
       {
        if(prs)
         {
          prs=0;
         }
        printf(" %d %s %d %d \n",st.num,st.name,st.region,st.zit);
        pr=1;
       }
      if(!pr) printf("\nNET DANNYH");
      getch();
     }
    } 
 int find_max_num(char *fn)
  {
    FILE*fp;
    data st;
    int max;

    if ((fp = fopen(fn,"rb")) == NULL)
         {
      printf("File could not be opened.\n");
      return -1;
     }

    max=0;
    while (fread(&st,sizeof(data),1,fp))
    {
     if (feof(fp)) break;
     if (st.num>max) max=st.num;
    }
    fclose(fp);
    return max;
  }    


void create()
{
    FILE*fp;
        char*fn;

    printf("Name file: ");
    fflush(stdin);
    scanf("%s",fn);
    strcat(fn,".txt");
        
    if ((fp=fopen(fn,"w+b")) == NULL)
    {
        printf("Error\n");
        getch();
        
    }
    fclose(fp); 
} 

int check(char *fn, data st)
{
 FILE*fp;
 data temp;
 int pr=0;

 if ((fp = fopen(fn,"rb")) == NULL)
  {
   printf("File could not be opened.\n");
   return 0;
  }

  while ( fread( &temp, sizeof( data ), 1, fp))
  {
   if (feof(fp)) break;
   if(!strcmp(st.name,temp.name) && !strcmp(st.region,temp.region) && !strcmp(st.zit,temp.zit))
    {
     pr=1;
     break;
    }
   } fclose(fp);
  return pr;
 } 
    
    
void main()
  {
   char *fn;
   int m,num;
   do
   {
   printf("1-Add, 2-Del, 3-Find, 4-Create, 5-View, 6-Exit: "); scanf("%d",&m);
     if(m==1){ add(fn); }
     if(m==2){ del(fn); }
     if(m==3){ find(fn); }
     if(m==4) { create();}
     if(m==5) { view(fn,num); }
     if(m==6) { getch(); }
    }while(m<7);
   return;
  }

Последний раз редактировалось Ultramarin; 27.04.2009 в 19:15.
Ultramarin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Электронный Справочник Killbrum Софт 14 15.10.2017 20:44
Телефонный справочник VarVara Помощь студентам 7 04.05.2011 17:20
TurboDelphi. Справочник Xeon332 Общие вопросы Delphi 30 28.10.2008 17:06
справочник bill Помощь студентам 3 22.05.2007 16:03
Телефонный справочник CRASH Помощь студентам 5 07.05.2007 17:12