2010-08-24 7 views
0

en C++ J'ai écrit un programme simple, qui accepte de 4 à 6 enregistrements et n'accepte plus quand air_no est le même, c'est-à-dire 1? Le code source est:manipulation de fichiers

#include<fstream.h> 
#include<conio.h> 
#include<dos.h> 
#include<string.h> 
#include<stdlib.h> 
#include<process.h> 
#include<stdio.h> 
int lno; 
struct airln {int airline_no,routeno,dep_time,arr_time; 
    char port_d[15],port_a[15],week_day[10]; }r2; 

class route 
{ 
public: 
    void getroute() 
    { 

     cout<<"\n\tRoute no.: "; 
     cin>>r2.routeno;cout<<"\n"; 
     cout<<"\tDay of Departure: "; 
     gets(r2.week_day);cout<<"\n"; 
       cout<<"\tAirport for departure: "; 
     gets(r2.port_d);cout<<"\t"; 
     cout<<"Departure Time: "; 
     cin>>r2.dep_time;cout<<"\n"; 
     cout<<"\tAirport for arrival: "; 
     gets(r2.port_a);cout<<"\t";   
       cout<<"Arrival Time: "; 
     cin>>r2.arr_time;cout<<"\n"; 
     cout<<"\n\tAirline no.: "; 
     cin>>r2.airline_no; 
    } 
    void display_route() 
    { 
    cout<<"\n Route No : ";cout<<r2.routeno; 
    cout<<"\n "; 
    cout<<r2.port_d;cout<<"\t"; 
    cout<<r2.dep_time;cout<<"\t\t"; 
    cout<<r2.port_a;cout<<"  \t"; 
    cout<<r2.arr_time;cout<<"\t\t"; 
    cout<<r2.week_day;cout<<"\n"; 
    } 
}r3; 
void main() 
{ 
    clrscr(); 
    int airlnno,rtnodel,cntr; 
    char airlinename[30]; 
    ifstream fin,fin1; 
    ofstream fout; 

    do 
    { 
    cout<<"\t1. Insert Data.\n"; 
    cout<<"\t2. View Data.\n"; 
    cout<<"\t3. Exit.\n"; 
    cout>>"\tEnter Choice : ";cin>>cntr; 
    switch(cntr) 
    { 

      case 1:r3.getroute(); 
        fout.open("testdata.dat",ios::app); 
        if(!fout) 
        { 
         gotoxy(25,10); 
         cout<<"No file exists or file can\'t be opened\n"; 
         gotoxy(25,22); 
         cout<<"Please Press Any Key to Continue......."; 
         getch(); 
         clrscr(); 
         } 
        fout.write((char *) &r2,sizeof(r2)); 
        fout.close(); 
        clrscr(); 
        break; 
     case 2:fin.open("testdata.dat",ios::in); 
       if(!fin) 
       { 
       gotoxy(25,20); 
       cout<<"No file exists or file can\'t be opened\n"; 
       gotoxy(25,22); 
       cout<<"Please Press Any Key to Continue......."; 
       getch(); 
       clrscr(); 
       break; 
       } 
       cout<<"\n Dep-Airport\t"; 
       cout<<"Dep-Time\t"; 
       cout<<"Arr-Airport\t"; 
       cout<<"Arr-Time\t"; 
       cout<<"Week Day\n"; 
       fin.read((char *) &r2,sizeof(r2)); 
       while(!fin.eof()) 
       { 
      r3.display_route(); 
      fin.read((char *) &r2,sizeof(r2)); 
       } 
       fin.close(); 
       gotoxy(25,22); 
       cout<<"Please Press Any Key to Continue......."; 
       getch(); 
       clrscr(); 
       } 
       } while(!(cntr==3)); 
} 
+1

Vous pouvez reformater le code de sorte qu'il est lisible à l'aide du bloc « code », et vous aussi pouvez ajouter la balise « devoirs » à vos tags. – jacknad

+1

Votre code est très peu clair. Nommez vos variables correctement. Utilisez les nouvelles lignes dans votre code correctement. En outre, vous devez supprimer les dépendances dos.h et conio.h (se débarrasser des instructions clrscr et gotoxy dans votre code) d'abord obtenir la fonctionnalité ne fonctionne que puis travailler sur la présentation de la sortie. –

+1

Pourquoi void main()? Ça devrait être int. http://stackoverflow.com/questions/204476/what-should-main-return-in-c-c – DumbCoder

Répondre

0

Avez-vous besoin d'utiliser des fichiers pour cela? Vous pouvez toujours utiliser std :: map et garder le numéro de compagnie aérienne comme clé. J'éviterais également d'utiliser la structure et la classe globales.

Modifier: k, j'ai un problème et j'ai trouvé que le 1050 est le problème. Je peux le déplacer vers un album précédent et il s'arrêtera là aussi. Je pense que le problème est que 1050 est en train de déclencher la fin du fichier. Essayez les lignes de remplacement suivantes pour ouvrir le fichier en binaire:

fout.open("testdata.dat",ios::app | ios::binary); 
fin.open("testdata.dat",ios::in | ios::binary); 

au lieu de:

fout.open("testdata.dat",ios::app); 
fin.open("testdata.dat",ios::in); 

Edit: Je viens juste un chèque et 1050 convertit à 041A, ce qui se traduit par le caractère de fin de transmission et alors .... SUB ou EOF. Je pense que c'est votre problème et en mode binaire cela ne devrait plus être un problème.

+0

Veuillez indiquer la raison pour laquelle cela se produit, c'est-à-dire après 4 enregistrements pourquoi n'accepte-t-il plus> –

+2

Quelles sont vos données de test? Comment ça "arrête d'accepter"? En s'écrasant? En accrochant? En secouant la tête avec défi? –

+0

Après avoir enlevé quelques bits pour l'exécuter sur mon ordinateur, il a heureusement passé plus de 4 fois. Aussi, ne devrait pas "cout >>" \ tEnter Choice: "; cin >> cntr;" être "cout << ..."? –

0

Vous devez effacer cin après avoir reçu chaque entrée à chaque fois. Probablement au début de faire tout en boucle. La valeur cntr peut être prise à partir de valeurs entrées précédemment. S'il se trouve à 3, il se ferme en boucle et n'accepte aucun autre enregistrement. Essayez les fonctions cin.clear() ou cin.ignore() au début de do while loop.

Vous pouvez consulter How do I flush the cin buffer?

+0

Désolé, je n'ai pas pu expliquer le problème. Ce que j'ai demandé était dans le fichier testdata.dat record ne peut pas être écrit plus de 4 fois avec le même airline_no. Bien que la coice 1 du code ne montre aucune erreur donnant l'impression que les données ont été écrites, mais quand coice 2 pour l'affichage est utilisé seulement 4 enregistrements sont montrés. S'il vous plaît aider à comprendre. Mes données de test sont 1010, New Delhi, 1000, Mumbai, 1200, tous les jours, 1; 1020, New Delhi, 1000, Mumbai, 1200, tous les jours, 1; 1030, New Delhi, 1000, Mumbai, 1200, tous les jours, 1; 1040, New Delhi, 1000, Mumbai, 1200, tous les jours, 1; 1050, New Delhi, 1000, Mumbai, 1200, tous les jours, 1; –

+0

Je n'arrive pas à entrer les données d'entrée. Certains champs sont ignorés en raison des caractères présents dans le flux d'entrée cin. – bjskishore123