Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct voiture
{
char immat;
char marque;
char modele;
int vitesseMax;
char type;
} t_voiture;
typedef struct maillon
{
t_voiture voiture;
struct maillon *suivant;
}t_maillon;
t_maillon* creerM ()
{
t_maillon *nouv;
nouv = malloc(sizeof(t_maillon));
printf("quelle immatriculation ?");
scanf("%s",&nouv->voiture.immat);
printf("quelle marque ?");
scanf("%s",&nouv->voiture.marque);
printf("quelle modele ?");
scanf("%s",&nouv->voiture.modele);
printf("quelle vitesse max ?");
scanf("%d",&nouv->voiture.vitesseMax);
printf("quel type ?");
scanf("%s",&nouv->voiture.type);
nouv->suivant = NULL;
}
void afficherImmat (t_maillon *ancre, char* marqueChoisie)
{
if (ancre!=NULL)
{
afficherImmat(ancre->suivant,marqueChoisie);
if (strcmp(marqueChoisie,ancre->voiture.marque)==0)
{
afficherM(ancre);
}
}
else
{
printf("Erreur, la liste est vide");
}
}
void afficherVoit (t_maillon *ancre, t_maillon voiture)
{
printf("%c",ancre->voiture.immat);
printf("%c",ancre->voiture.marque);
printf("%c",ancre->voiture.modele);
printf("%d",ancre->voiture.vitesseMax);
printf("%c",ancre->voiture.type);
}
void supprimerImmat (t_maillon **pancre, char* immat)
{
int temp;
t_maillon prec;
t_maillon courant;
if(*pancre==NULL)
{
printf("liste vide !");
}
else
{
if(strcmp((*pancre)->voiture.immat,immat)==0) /// on supprime le premier maillon
{
temp=*pancre; /// on mémorise l'adresse du premier
*pancre=(*pancre)->suivant; /// l'ancre pointe sur le deuxieme
free(temp); /// on libère le premier
}
else /// il faut rechercher le maillon à la fin de la liste
{
prec = *pancre;
courant = courant.suiv;
while ((courant!=NULL)&&strcmp(courant->immat,immat)!=0)) /// on décale d'un le maillon
{
prec = courant;
courant = courant->suiv;
/// quand on sort de la boucle
/// soit on est arrivés à la fin de la liste sans trouver
/// soit rien à faire
}
if (courant!=NULL)
{
prec->suiv=courant->suiv;
free(courant);
}
}
}
}
void sauvegarderLC(t_maillon *ancre, char* ficname)
{
FILE*fp;
fp=fopen(ficname,"w");
if(fp==NULL)
{
printf("erreur");
}
else
{
while(ancre!=NULL)
{
fprintf(fp,"%c",ancre->immat);
fprintf(fp,"%c",ancre->marque);
fprintf(fp,"%c",ancre->modele);
fprintf(fp,"%d",ancre->vitesseMax);
fprintf(fp,"%c",ancre->type);
ancre=ancre->suiv;
}
fclose(fp);
}
}
t_maillon *charger(char*ficname)
{
t_maillon *nouv;
t_maillon *liste=NULL;
FILE*fp;
fp=fopen(ficname,"r");
if(fp!=NULL)
{
while(!foef(fp))
{
nouv=(t_maillon*)malloc(sizeof(t_maillon));
fscanf(fp,"%s",nouv->immat);
fscanf(fp,"%s",nouv->marque);
fscanf(fp,"%s",nouv->modele);
fscanf(fp,"%d",nouv->vitesseMax);
fscanf(fp,"%s",nouv->type);
nouv->suiv=NULL;
inserTete(&liste,nouv);
}
fclose(fp);
}
return liste;
}
int main()
{
int nbMaillon;
int choix;
int i;
t_maillon *maillon;
printf("Combien de maillon souhaitez-vous ?");
scanf("%d",&nbMaillon);
creerM ();
do
{
printf("Que voulez-vous faire ?\n1 pour afficher les immatriculations à partir d'une marque\n");
printf("2 pour afficher toute les voitures de la liste\n");
printf("3 pour supprimer une voiture de la liste\n4 pour sauvegarder la liste chainee\n");
printf("5 pour charger un fichier");
scanf("%d",&choix)
}
while(choix!=1 || choix!=2 || choix!=3 || choix!=4 || choix!=5);
switch(choix)
{
case 1: afficherImmat (ancre,marqueChoisie);
break;
case 2: afficherVoit (ancre,voiture);
break;
case 3: supprimerImmat (&pancre,immat);
break;
case 4: sauvegarderLC(ancre,ficname);
break;
case 5 : charger(ficname)
}
return 0;
}