1 Востаннє редагувалося VKedah (20.05.2015 22:36:30)

Тема: Робота з файлами.Допоможіть з записом

програма повинна вводити дані абітурієнта, та змінювати оцінки за екзамени.

#include <stdio.h> 
#include <locale.h> 
#include <stdlib.h> 
//#include <ctype.h>
//#include <conio.h>
//#include <string.h>

struct Ab {
    int ID;
    char name[15];
    char surname[20];
    char middle_name[15];
    double atestat;
    int mark_math;
    int mark_ukr;
    int ID_specialyty;
};

int enterChoice( void );
void textFile( FILE *readPtr );
void updateRecord( FILE *fPtr );
void newRecord( FILE *fPtr );
void deleteRecord( FILE *fPtr );

int main(){ 
   FILE *cfPtr; 
   int choice;
   setlocale(LC_ALL,"Rus");  
   if ( ( cfPtr = fopen( "abiturient.dat", "ab+" ) ) == NULL ) {
      printf( "Ôàéë íå ìîæëèâî âiäêðèòè.\n" );
   }
   else { 
      while ( ( choice = enterChoice() ) != 5 ) { 

         switch ( choice ) { 
            case 1: textFile( cfPtr );        break;
            case 2: updateRecord( cfPtr );     break;
            case 3: newRecord( cfPtr );        break;
            case 4: deleteRecord( cfPtr );     break;         
            default:
               printf( "Íåâiðíèé íîìåð\n" );break;
           } 

      }
      fclose( cfPtr ); 
   }
   return 0;
}
//--------------------------------------------------------------------
void textFile( FILE *readPtr )
{ 
   FILE *writePtr;
   struct Ab inf = { 0, "", "", "", 0.0, 0, 0, 0 };

   if ( ( writePtr = fopen( "abiturient_list.txt", "rb+" ) ) == NULL ) {
      printf( "Ôàéë íå áóëî çíàéäåíî.\n" );
   }
   else { 
      rewind( readPtr );
      fprintf( writePtr, "\n%-5s%-10s%-10s%-15s%-15s%-10s%-10s%-5s\n", 
         "Íîìåð", "Iì'ÿ", "Ïðiçâèùå", "Ïî áàòüêîâi", "Áàë àòåñòàòà",
         "Ìàòåìàòèêà", "Ìîâà", "Ñïåöiàëüíiñòü\n" );

      while ( !feof( readPtr ) ) { 
         fread( &inf, sizeof( struct Ab ), 1, readPtr );

         if ( inf.ID != 0 ) {
            fprintf( writePtr, "\n%-5d%-10s%-10s%-15s%-10.2f%-10d%-10d%-5d\n",
               inf.ID, inf.name, inf.surname, inf.middle_name ,inf.atestat ,
               inf.mark_math ,inf.mark_ukr ,inf.ID_specialyty);
         }
      }
      fclose( writePtr );
   }

} 
//-------------------------------------------------------------------
void updateRecord( FILE *fPtr )
{ 
   int account;       
   int marks1=0, marks2=0; 

   struct Ab inf = { 0, "", "", "", 0.0, 0, 0, 0 };

   printf( "Ââåäiòü íîìåð àêàóíòà äëÿ çàìiíè äàíèõ ( 1 - 100 ): " );
   scanf( "%d", &account );

   fseek( fPtr, ( account - 1 ) * sizeof( struct Ab ), 
      SEEK_SET );

   fread( &inf, sizeof( struct Ab ), 1, fPtr );

   if ( inf.ID == 0 ) {
      printf( "Àêàóíò #%d íå ìຠiíôîðìàöi¿.\n", account );
   } 
   else { 
      printf( "\n%-5d%-10s%-10s%-15s%-10.2f%-10d%-10d%-5d\n\n", 
          inf.ID, inf.name, inf.surname, inf.middle_name ,inf.atestat ,
          inf.mark_math ,inf.mark_ukr ,inf.ID_specialyty);
      
      printf( "Ââåäiòü îöiíêó çà åêçàìåí ç ìàòåìàòèêè: " );
      scanf( "%d", &marks1 );
      inf.mark_math = marks1;
      printf( "Ââåäiòü îöiíêó çà åêçàìåí ç ìîâè: " );
      scanf( "%d", &marks2 );
      inf.mark_ukr = marks2; 
      
      printf( "\n%-5d%-10s%-10s%-15s%-10.2f%-10d%-10d%-5d\n\n", 
          inf.ID, inf.name, inf.surname, inf.middle_name ,inf.atestat ,
          inf.mark_math ,inf.mark_ukr ,inf.ID_specialyty);
          
      fseek( fPtr, ( account - 1 ) * sizeof( struct Ab ), 
         SEEK_SET );

      fwrite( &inf, sizeof( struct Ab ), 1, fPtr );
   }

} 
//-------------------------------------------------------------------
void newRecord( FILE *fPtr )
{ 
   struct Ab inf = { 0, "", "", "", 0.0, 0, 0, 0 };

   int accountNum; 
   printf("\n1.Êîìï'þòåðíi íàóêè\n2.Çåìëåâïîðÿäêóâàííÿ\n3.Ëiñíèêè\n");
   printf( "Ââåäiòü íîìåð àêàóíòà ( 1 - 100 ): " );
   scanf( "%d", &accountNum );
   fseek( fPtr, ( accountNum - 1 ) * sizeof( struct Ab ), 
      SEEK_SET );

   fread( &inf, sizeof( struct Ab ), 1, fPtr );

   if ( inf.ID != 0 ) {
      printf( "Â ðÿäêó #%d âæå º iíôîðìàöiÿ.\n",inf.ID );
   } 
   else { 
      printf( "Iì'ÿ, Ïðiçâèùå, Ïî áàòüêîâi, Áàë àòåcòàòà, Ìàòåìàòèêà, Ìîâà, Ñïåöiàëüíiñòü\n: " );
      scanf( "%s%s%s%lf%d%d%d", &inf.name, &inf.surname, &inf.middle_name, 
         &inf.atestat, &inf.mark_math, &inf.mark_ukr, &inf.ID_specialyty);

      inf.ID = accountNum;
      
      fseek( fPtr, ( inf.ID - 1 ) * 
         sizeof( struct Ab ), SEEK_SET );
      fwrite( &inf, 
         sizeof( struct Ab ), 1, fPtr );
   }
    getch();
} 
//-------------------------------------------------------------------
void deleteRecord( FILE *fPtr )
{ 

   struct Ab inf;
   struct Ab blankInf = { 0, "", "", "", 0, 0, 0, 0 };
   
   int accountNum; 
   
   printf( "Ââåäiòü íîìåð ðÿäêà ùîá âèäàëèòè ( 1 - 100 ): " );
   scanf( "%d", &accountNum );

   fseek( fPtr, ( accountNum - 1 ) * sizeof( struct Ab ), 
      SEEK_SET );

   fread( &inf, sizeof( struct Ab ), 1, fPtr );

   if ( inf.ID == 0 ) {
      printf( "Àêàóíòà ¹%d íå iñíóº.\n", accountNum );
   } 
   else { 

      fseek( fPtr, ( accountNum - 1 ) * sizeof( struct Ab ), 
         SEEK_SET );
         
      fwrite( &blankInf, 
         sizeof( struct Ab ), 1, fPtr );
   }

} 
//-------------------------------------------------------------------
int enterChoice( void )
{ 
   int menuChoice;
   printf("                Ïðîãðàìà Àáiòóðiºíò\n");
   printf( "\nÇðîáiòü âàø âèáið\n"
      "1 - Çáåðåæåííÿ\n"
      "2 - Äîäàòè äî àêàóíòó\n"
      "3 - Äîäàòè íîâèé çàïèñ\n"
      "4 - Âèäàëèòè çàïèñ\n"
      "5 - Âèéòè\n: " );
    scanf( "%d", &menuChoice );
    return menuChoice;

}

2

Re: Робота з файлами.Допоможіть з записом

Припустимо, повинна. А що робить замість того?

Подякували: VKedah1

3

Re: Робота з файлами.Допоможіть з записом

Краще користуйтесь оточенням

 КОД

.
Просто більшості банально ліньки буде скачувати Ваш файл і переглядати вже напряму в середовищі :)

Подякували: koala, VKedah2

4

Re: Робота з файлами.Допоможіть з записом

koala написав:

Припустимо, повинна. А що робить замість того?

вона записує, але сама консолька працює якось невірно і я не можу зрозуміти чому

5 Востаннє редагувалося Djalin (20.05.2015 22:41:12)

Re: Робота з файлами.Допоможіть з записом

працює якось невірно

геніальний діагноз, ну нулик то нулик, але якийсь не нулячий

Подякували: Дмитро-Чебурашка1

6

Re: Робота з файлами.Допоможіть з записом

VKedah написав:

вона записує, але сама консолька працює якось невірно і я не можу зрозуміти чому

"Якось невірно" - це що, Коран не шанує, свинину їсть?

Подякували: Дмитро-Чебурашка1

Re: Робота з файлами.Допоможіть з записом

Розповедить мені хто-небудь що таке

Предупреждение    154    warning C4566: символ, представленный универсальным именем символа  "\u00BA", невозможно представить в текущей кодовой странице (1251)    d:\rozbir\file\ffile1\ffile1\ffile1.cpp    95    1    FFile1


бо інакше неможливо читати і дуже незручно

8

Re: Робота з файлами.Допоможіть з записом

Ви зберігаєте файл не в тому кодуванні.

9 Востаннє редагувалося Дмитро-Чебурашка (21.05.2015 13:24:17)

Re: Робота з файлами.Допоможіть з записом

МММ...   Спасибі.      Я зкопиював його мишею.   Я як у оригіналі так і у себе бачу виключно крокозябри, і в нотепаді теж їх бачу.

22 61 62 69 74 75 72 69 65 6E 74 2E 64 61 74 22 2C 20 22 61 62 2B 22

Post's attachments

Крокозябри.bmp 1.37 mb, 631 downloads since 2015-05-21 

10

Re: Робота з файлами.Допоможіть з записом

Бо автор копіював кирилицю (у cp1251) з чогось старого, що не вміло ще казати системі, що там у нього, і система вирішила, що це cp1252, і так скопіювала. А тут на форумі символи з cp1252 переконвертувалися в UTF-8. Тепер для відновлення треба все зробити назад: зберегти цей текст в cp 1252, а потім відкрити як cp1251.

Подякували: Дмитро-Чебурашка1

Re: Робота з файлами.Допоможіть з записом

То й що що кодування не те?    А  що ж робити?   А взагалі яке воно буває, та як його переглядати?

Re: Робота з файлами.Допоможіть з записом

Здається зрозуміло.