//litet samelsurium av telefonnummer/resultat och så 
//men funkar nog som exempel ändå
//OBS! FILEN elever.txt måste finnas i programmetskatalog !!!
//läs kommentarerna i koden samt infor längst ned !!
//**********SSN**************
#include <iostream>
#include <stdlib.h>
#include <string>
#include <fstream>
#include <conio.h>              //för getch();
using namespace std;

int counter=0;                  //global variabel används av flera funktioner

struct elev{                    //egen definierad datatyp
       string namn;
       string resultat;         //eg.telefonnummer
       };                    
                  



/* START *********************************************/ 
int main()
{
 elev klasslista [50];          //array med plats för 50 objekt av typen elev       
 
int counter=0;                 //antal objekt som finns i arrayen klasslista
string temp;                   //används av första inläsningem
ifstream inFil;                //objektet infil=>som cin men källa kan styras    
inFil.open("elever.txt");      //Styr vilken fil (källa) som skall läsas in


// Filen elever.txt läses till klasslista[]

   if(inFil.fail())             //Felhantering  om filen ej kan öppnas
   {
   cerr<<"Filen kunde ej \x94ppnas - Avslutar!";
      getch(); 
   exit(1);
   }
   
//FÖRSTA INLÄSNINGEN SKER UTANFÖR LOOPEN - OM DEN ÄR OK STARTAR LOOPEN
getline(inFil,temp);      //läser från filen elever.txt till en temporär string
if(inFil.eof())           //om elever.txt är tom EndOfFile in i.s.f avbryt
cout<<"FILEN \x8eR TOM!"<<endl;
else                        // om elever.txt inte är tom läs in innehållet till klasslista
{
  for(int i=0; !inFil.eof()&&!inFil.fail() ;i++)   //kolla längst ned i filen
   {           
   klasslista[i].namn=temp;       //klasslista plats [i] får värdet av temp
   getline(inFil,klasslista[i].resultat);   //nästa rad i filen läses till resultat
   counter++;                         //antalet objekt i klasslista ökas med 1
   getline(inFil,temp);   
   }
}                                       // innehållet i elever.txt är nu inläst till
 inFil.close();                         //arrayen klasslista vi stänger infil                      
                                        // INLÄSNING TILL ARRAY KLAR /*/*/
                                // så då skriver vi ut det som finns i listan

for(int i=0;i<counter;i++)
{
    cout<<klasslista[i].namn<<endl;
    cout<<klasslista[i].resultat<<endl;
}

cout<<endl<<endl<<endl;
                                    // vi kan nu lägga till nya objekt

cout<<endl<<"L\x84gg till ytterligare poster i telefonlistan avsluta med # f\x94r namn"<<endl;
cout<<"Tryck f\x94rst enter";
 getch();          //väntar på knapptryckning
 system("CLS");    //rensar skärmen
 
string tempnamn; 
cout<<"ange namn (# f\x94r att avsluta): ";
getline(cin,tempnamn);
       
for(int i=counter; tempnamn!="#"; i++)
  {
       klasslista[i].namn=tempnamn;
        cout<<"ange telenummer: ";
         getline(cin,klasslista[i].resultat);
            system("CLS");
             cout<<"ange namn(# f\x94r att avsluta): ";
              getline(cin,tempnamn);
               counter++;
          }
 
//PROGRAMAVSLUTNING   Skriver innehållet i arrayen klasslista till filen elever.txt                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
ofstream tillFil;
tillFil.open("elever.txt");

for(int i=0; i<counter; i++)   //counter vet hur många objekt klasslista innehåller    
  {
         tillFil<<klasslista[i].namn<<endl;
         tillFil<<klasslista[i].resultat<<endl;
          } 
                        //klart stäng tillfil          
tillFil.close();
cout<<"NU VARE KLART"<<endl;
getch();        
return 0;
} //END of PROGRAM.

/********************************************************************************
C++ provides a special function, eof( ), 
that returns nonzero (meaning TRUE) when there are no more data to be read 
from an input file stream, and zero (meaning FALSE) otherwise.

The fail() function. 
It returns a nonzero value if any I/O error (not end of file) has occurred.

***********************************************************************************/