/*

 _           _
(_)_ __   __| | _____  __
| | '_ \ / _` |/ _ \ \/ /
| | | | | (_| |  __/>  <
|_|_| |_|\__,_|\___/_/\_\


AUTEUR	: Aymeric & Samira
GROUPE	: 5 (RT)
DATE	: 02/04/2003
FICHIER	: fiche.cpp


*/


#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
#include "fiche.h"

// enresgitrement maximum
#define MAXENREG 150


// ---------------------------------------------------------------- //
// ------------------------- CONSTRUCTEUR ------------------------- //
// ---------------------------------------------------------------- //

FICHE::FICHE()
{
	// on initialise le maximum d'enregistrement
	max=MAXENREG;

	// on ouvre le flux en ecriture et lecture vers le fichier fiche.dat
	f.open("fiche.dat",ios::in|ios::out);
}


// ---------------------------------------------------------------- //
// ------------------------- DESTRUCTEUR -------------------------- //
// ---------------------------------------------------------------- //


FICHE::~FICHE()
{
	f.close();
}


// ---------------------------------------------------------------- //
// -------------------------- FONCTIONS --------------------------- //
// ---------------------------------------------------------------- //


// cette fonction ajoute une nouvelle fiche
// elle retourne le numero de la prochaine case libre
int FICHE::ajoute(char * nom, int nb)
{
	int libre;

	// si nb == -1 ca signifie que la base est vide
	if (nb == -1)
	{
		// donc le nombre d'element est nul
		nb=0;
		
		// libre prend la valeur -1
		libre=-1;
	}
	else
	{
		// sinon on lit le contenu de la fiche dans le fichier
		lire(nb);

		// on recupere la chaine
		libre=mafiche.chaine;
	}

	// ont met -10 indiquant que la case est prise
	mafiche.chaine=-10;

	// l'utilisateur rentre le detail de la fiche associe au nom
	strcpy(mafiche.nom,nom);
	cout << "Rentrez le prenom : ";
	cin >> mafiche.prenom;
	cout << "Rentrez la rue : ";
	cin >> mafiche.rue;
	cout << "Rentrez la ville : ";
	cin >> mafiche.ville;
	cout << "Rentrez le code postal : ";
	cin >> mafiche.codepostal;

	cout << "\n\nAppuyer sur ENTREE pour continuer ...\n";
	getchar();

	// on ecrire les informations dans le fichier
	ecrire(nb);

	// si libre == -1 cela signifie que la prochaine case libre est la case suivante
	if (libre == -1)
	{
		nb++;
		if (nb < max)
		{
			mafiche.chaine=-1;
			// on ecrit dans le fichier la prochaine case de facon a connaitre
			// la prochaine chaine et ainsi la prochaine case libre
			ecrire(nb);
		}
		libre=nb;
	}
	return(libre);
}


// cette fonction permet l'affichage des details concernant un nom
void FICHE::affiche(int i)
{
	// on ligne la bonne ligne
	lire(i);

	// on affiche le resultat
	cout << "\n\nNOM\t\t: " << mafiche.nom;
	cout << "\nPRENOM\t\t: " << mafiche.prenom;
	cout << "\nRUE\t\t: " << mafiche.rue;
	cout << "\nVILLE\t\t: " << mafiche.ville;
	cout << "\nCODE POSTAL\t: " << mafiche.codepostal;
}


// cette fonction supprime une fiche
void FICHE::supprime(int i, int chaine)
{
	mafiche.chaine=chaine;
	ecrire(i);
}


// cette fonction se place a l'emplacement voulu
// et elle ecrit mafiche dans cet emplacement
void FICHE::ecrire(int nb)
{
	f.seekp(nb*sizeof(Informations));
	f.write((char*)&mafiche,sizeof(Informations));
}


// cette fonction se place a l'emplacement voulu
// et elle lit les informations qu'elle place dans mafiche
void FICHE::lire(int nb)
{
	f.seekg(nb*sizeof(Informations));
	f.read((char*)&mafiche,sizeof(Informations));
}


