#include #include #include #include /*==================================================================================================================*/ /*definition des nouveaux types*/ /* La structure Ordonnance sera une liste chainee de cellules contenant : 1/le nom du medicament 2/la quantite prescrite */ typedef struct ORDONNANCE{ char *medicament; int quant; struct ORDONNANCE *medic_suivant; } ordonnance; /* La structure Consultation contient la date, le nom de la maladie , un pointeur sur Ordonnance et un pointeur sur la consulation suivante */ typedef struct CONSULTATION{ int jour; int mois; int annee; char *nom_maladie; struct CONSULTATION *suivant; struct ordonnance *liste_medic; } consultation; /*==================================================================================================================*/ /* prototype des fonctions*/ char* lire_num_insee (); consultation* new_consult (); ordonnance* new_medic(consultation* ); void afficher_list_med (ordonnance*); void Save_client_file (consultation*, char*); void sim_load_file (consultation**, char*); void load_file (consultation**, ordonnance**, char*); void sim_sauv (consultation*, char*); /* Fonction annexe permettant de lire une chaine de caractere et de l afficher a l ecran */ char * lire_String(); void afficher_String(char *); /*==================================================================================================================*/ /* LE PROGRAMME PRINCIPAL */ int main (void){ /* 1 : Lecture au clavier du No INSEE du Patient*/ char *fichier_patient = lire_num_insee(); printf("le fichier du patient !!!correspondant est %s\n", fichier_patient); /* 2 : Recherche du Fichier et chargement des données */ consultation* liste; ordonnance* listeordo; load_file(&liste,&listeordo,fichier_patient); printf("\nload ok\n"); int arret=0; //scanf ("\n%d",arret); /* 3 : Saisie au clavier de la consultation et des ordonnances du jour */ consultation* consult = new_consult(); ordonnance* first = new_medic(consult); afficher_list_med (first); /* 4 : Sauvegarde des nouvelles données */ Save_client_file (consult, fichier_patient); printf("\n save ok\n"); //sim_sauv (consult, fichier_patient); return 0; } /*==================================================================================================================*/ /*Definition des fonctions*/ /* fonction qui lit le numero insee et cree une chaine "num_insee.txt"*/ char* lire_num_insee (){ char *destination = calloc (1,sizeof(*destination)); char num_insee[11]="123"; printf("Entrezzzzzz le numero INSEE du patient: \n"); /*>>>>>>>>>>>>>>>>>>>>>>scanf("%s", num_insee);*/ printf("le num_insee est : %s \n", num_insee); strcpy (destination,num_insee); strncat (destination,".txt",4); printf("le fichier du patient correspondant est %s\n",destination); return destination; } /* fonction qui cree une nouvelle consultation*/ consultation* new_consult (){ consultation *tempo_consult = malloc (sizeof(consultation)); consultation *last; int nb_consult = 1; printf ("Entrez la date du jour (JJ/MM/AAAA)\n"); //*>>>>>>>>>>>>>>> scanf ("%d/%d/%d", &tempo_consult->jour, &tempo_consult->mois, &tempo_consult->annee); tempo_consult->jour = 2 ; tempo_consult->mois = 2 ; tempo_consult->annee = 2006 ; printf ("La date saisie est : %d/%d/%d\n", tempo_consult->jour, tempo_consult->mois, tempo_consult->annee); printf ("Quelle est la maladie diagnostique ? \n"); tempo_consult->nom_maladie = lire_String(); printf ("vous avez diagnostique un %s.\n", tempo_consult->nom_maladie); tempo_consult->suivant = NULL; tempo_consult->liste_medic = NULL; if (nb_consult == 1){ last = tempo_consult; tempo_consult = NULL; nb_consult++; } else if (nb_consult > 1){ tempo_consult->suivant = last; last = tempo_consult; tempo_consult = NULL; nb_consult++; } return last; } /* fonction qui cree une nouvelle liste de medicament */ ordonnance* new_medic (consultation* today_consult){ char choix[2]; int nb_med = 1; ordonnance *first_med; ordonnance *last_med; do{ printf("voulez vous saisir une liste de medicaments? oui= o / non= n\n"); scanf("%s", choix); printf("%s\n", choix); } while ((choix[0] != 'n') && (choix[0] != 'o')); if ( choix[0] == 'o'){ do{ do{ printf("Voulez vous creer un medicament supplementaire ? oui= o / non= n \n"); scanf("%s",choix); printf("%s\n", choix); } while ((choix[0] != 'n') && (choix[0] != 'o')); if (choix[0] == 'o'){ ordonnance *tempo = malloc (sizeof(ordonnance)); printf ("quel est le nom du medicament %d ?\n",nb_med); tempo->medicament = lire_String(); printf("le nom du medicament est :%s\n",tempo->medicament); printf("Quelle est la quantite de %s prescrite ?\n",tempo->medicament); scanf("%d", &tempo->quant); printf("le quantite de %s prescrite est de :%d\n",tempo->medicament,tempo->quant); tempo->medic_suivant = NULL; if (nb_med == 1){ today_consult->liste_medic = tempo; first_med = tempo; tempo = NULL; last_med = first_med; nb_med++; } else if (nb_med >= 2){ last_med->medic_suivant = tempo; last_med = tempo; tempo = NULL; nb_med++; } } else if (choix[0] == 'n') { printf("fin de la saisie de medicament.\n"); if(nb_med == 1){ first_med = NULL; } } } while (choix[0] != 'n'); } else if(choix[0] == 'n'){ printf("Pas de medicament saisie !!! .\n"); first_med = NULL; } return today_consult->liste_medic; } /* Fonction qui sauvegarde les données relatives aux consultations d'un client */ void Save_client_file (consultation *ListeASauver, char *FileName){ FILE *LeFichierPatient; consultation *LaListeASauver = NULL; ordonnance *MedicamentASauver = NULL; printf ("debut de SAUV\n"); if((LeFichierPatient = fopen (FileName,"a"))!= NULL){ printf ("condition de SAUV\n"); for(LaListeASauver = ListeASauver ; LaListeASauver != NULL ; LaListeASauver = LaListeASauver->suivant){ // // boucle sur les ordonnances // printf ("boucle de SAUV\n"); //* ------> ecriture consultation fprintf (LeFichierPatient, "\n%d\t%d\t%d\t%s", ListeASauver->jour,ListeASauver->mois,ListeASauver->annee,ListeASauver->nom_maladie); printf ("sauv de \n%d\t%d\t%d\t%s\n", ListeASauver->jour,ListeASauver->mois,ListeASauver->annee,ListeASauver->nom_maladie); /* */ // // boucle sur les ordonnances // for(MedicamentASauver = ListeASauver->liste_medic; MedicamentASauver != NULL; MedicamentASauver = MedicamentASauver->medic_suivant){ //* ------> ecriture ordonnance fprintf(LeFichierPatient, "\t%s\t%d",MedicamentASauver->medicament,MedicamentASauver->quant); } //* ------> ecriture du marqueur de fin : doublet ( ! , O ) fprintf(LeFichierPatient, "\t%s\t%d","!",0); } fclose(LeFichierPatient); } else printf("\n Impossible d'effectuer la sauvegarde\n"); printf("\n save ok dans la fonction\n"); } /* Fonction qui charge les données du patient */ void load_file (consultation **ListeACharger, ordonnance **ListOrdo, char *FileName){ int arreteur,jj,mm,aa; int qteo, qte = 1; char mal[32], medo[32], med[32] ="a"; printf ("filename --->%s\n ",FileName); FILE* LeFichierClient; consultation* UneFiche; ordonnance* MedFiche; printf ("debut de Load\n"); LeFichierClient = fopen(FileName,"r"); printf("\n%s",LeFichierClient); if(LeFichierClient != NULL){ printf ("fichier bien ouvert\n"); // scanf ("\n%d",&arreteur); while (!feof (LeFichierClient)){ printf ("debut d iteration consultations\n"); // scanf ("\n%d",&arreteur); // // boucle sur les consultations // UneFiche = (consultation *) malloc (sizeof (consultation)); if (UneFiche != NULL){ UneFiche->suivant = NULL; printf ("avant fscanf de consultation\n"); // scanf ("\n%d",&arreteur); //* ------> fscanf (LeFichierClient,"\n%d\t%d\t%d\t%s", &jj, &mm, &aa, mal); UneFiche->jour = jj ; UneFiche->mois = mm ; UneFiche->annee = aa ; UneFiche->nom_maladie = mal ; printf ("chargement de : %d\t%d\t%d\t%s\n",jj,mm,aa,mal); // scanf ("\n%d",&arreteur); UneFiche->suivant = *ListeACharger; *ListeACharger = UneFiche; // // boucle sur les ordonnances // while (qte != 0){ MedFiche = (ordonnance *) malloc (sizeof (ordonnance)); if (MedFiche != NULL){ MedFiche->medic_suivant = NULL; printf ("avant fscanf de ordonnance\n"); // scanf ("\n%d",&arreteur); //* ---------------> fscanf (LeFichierClient,"\t%s\t%d", med, &qte); medo[0] = med[0] ; qteo = qte; // printf ("chargement de : %s\t%d\n",med,qte); // scanf ("\n%d",&arreteur); MedFiche->medic_suivant = *ListOrdo; *ListOrdo = MedFiche; } else printf("probleme d'allocation mémoire"); } qte = 1; } else printf("probleme d'allocation mémoire"); } } else printf("\n Impossible d'éfféctué le chargement du fichier \n"); fclose (LeFichierClient); } /* Fonction qui affiche la liste des medicaments */ void afficher_list_med (ordonnance* first){ ordonnance *tempo = first; int nb_med = 1; if (first){ printf("============================\nVoici la liste des medicaments:\n============================\n"); while (tempo->medic_suivant != NULL){ printf("le medicament %d est: %s vous en avez prescri %d;\n", nb_med,tempo->medicament,tempo->quant); nb_med++; tempo = tempo->medic_suivant; } printf("le medicament %d est: %s vous en avez prescri %d;\n", nb_med,tempo->medicament,tempo->quant); } else if (first == NULL){ printf("aucune liste de medicament n'à été saisie.\n"); } } /* Fonction qui simule une sauvegarde a l ecran*/ void sim_sauv (consultation *ListeASauver, char *FileName){ FILE *LeFichierPatient; consultation *LaListeASauver = NULL; ordonnance *MedicamentASauver = NULL; printf ("debut de SIM SAUV\n"); if((LeFichierPatient = fopen (FileName,"w"))!= NULL){ printf ("condition de SIM SAUV\n"); for(LaListeASauver = ListeASauver ; LaListeASauver != NULL ; LaListeASauver = LaListeASauver->suivant){ printf ("boucle de SIM SAUV\n"); printf ("SIM SAUV\n%d\t%d\t%d\t%s\n", ListeASauver->jour,ListeASauver->mois,ListeASauver->annee,ListeASauver->nom_maladie); /* */ for(MedicamentASauver = ListeASauver->liste_medic; MedicamentASauver != NULL; MedicamentASauver = MedicamentASauver->medic_suivant){ printf("%s\t%d\t",MedicamentASauver->medicament,MedicamentASauver->quant); } } fclose(LeFichierPatient); } else printf("\n Impossible d'éfféctué la sauvegarde\n"); } /* Fonction qui simule le chargement des données */ void sim_load_file (consultation **ListeACharger, char *FileName){ int jj,mm,aa = 0; char mal[32] ; printf ("filename --->%s\n ",FileName); consultation* UneFiche; int j=1; for (j=1;j<3;j++) { UneFiche = (consultation *) malloc (sizeof (consultation)); if (UneFiche != NULL){ UneFiche->suivant = NULL; printf("entrez fiche No %d\n",j); printf("jour\tmois\tannee\tmaladie\t"); scanf ("%d\t%d\t%d\t%s",&jj,&mm,&aa,mal); UneFiche->jour = jj ; UneFiche->mois = mm ; UneFiche->annee = aa ; UneFiche->nom_maladie = mal ; printf ("chargement de : %d\t%d\t%d\t%s\n",jj, mm, aa, mal); // printf ("chargement de : %d%d%d\n",UneFiche->jour, UneFiche->mois, UneFiche->annee, UneFiche->nom_maladie); UneFiche->suivant = *ListeACharger; *ListeACharger = UneFiche; } else printf("probleme d'allocation mémoire"); } } /* definition des fonctions pour manipuler les Strings */ char* lire_String(){ char * chaine_a_lire = calloc(1, sizeof *chaine_a_lire); scanf("%s",chaine_a_lire); return chaine_a_lire; } void afficher_String(char * chaine_a_ecrire){ while (*chaine_a_ecrire){ printf ("%c",* chaine_a_ecrire) ; chaine_a_ecrire++ ; } }