#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*); consultation* load_file (consultation**, 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){ /* Debut du programme : 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); consultation* consult = new_consult(); ordonnance* first = new_medic(consult); afficher_list_med (first); consultation* liste; load_file(&liste,fichier_patient); printf("load ok\n"); Save_client_file (consult, fichier_patient); sim_sauv (consult, fichier_patient); printf("save ok\n"); int po=0; scanf ("%d",&po); return 0; } /*==================================================================================================================*/ /*Definition des fonctions*/ /* 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++ ; } } /* 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; if((LeFichierPatient = fopen (FileName,"a"))!= NULL){ for(LaListeASauver = ListeASauver ; LaListeASauver != NULL ; LaListeASauver = LaListeASauver->suivant){ fprintf (LeFichierPatient, "\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){ fprintf(LeFichierPatient, "%s\t%d\t",MedicamentASauver->medicament,MedicamentASauver->quant); } } fclose(LeFichierPatient); } else printf("\n Impossible d'éfféctué la sauvegarde\n"); } /* Fonction qui charge les données relatives aux consultations d'un client */ consultation* load_file (consultation **ListeACharger, char *FileName){ printf ("filename %s ---> ",FileName); FILE* LeFichierClient; consultation* UneFiche; // if((LeFichierClient = fopen(FileName,"r")) != NULL){ // while (!feof (LeFichierClient)){ int j=0; for (j=1;j<4;j++) { UneFiche = (consultation*)malloc (sizeof(consultation)); if (UneFiche != NULL){ UneFiche->suivant = NULL; /* fscanf(LeFichierClient,"%d\t%d\t%d\t%s\n", &UneFiche->jour, &UneFiche->mois, &UneFiche->annee, UneFiche->nom_maladie); */ UneFiche->jour = j ; UneFiche->mois = j+1 ; UneFiche->annee = 2000+j ; UneFiche->nom_maladie = "cdjk" ; printf ("chargement de : %d%d%d%s\n",UneFiche->jour, UneFiche->mois, UneFiche->annee, UneFiche->nom_maladie); UneFiche->suivant = *ListeACharger; *ListeACharger = UneFiche; } else printf("probleme d'allocation mémoire"); } // } // else printf("\n Impossible d'éfféctué le chargement du fichier \n"); fclose (LeFichierClient); return UneFiche; } /* 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; if((LeFichierPatient = fopen (FileName,"a"))!= NULL){ for(LaListeASauver = ListeASauver ; LaListeASauver != NULL ; LaListeASauver = LaListeASauver->suivant){ printf (LeFichierPatient, "\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(LeFichierPatient, "%s\t%d\t",MedicamentASauver->medicament,MedicamentASauver->quant); } } fclose(LeFichierPatient); } else printf("\n Impossible d'éfféctué la sauvegarde\n"); }