PROJET DE LANGAGE C " BASE DE DONNEES " " D ARINE 5 " Licence TAS Imran IDRIS Année 2006 1
/***************************************************************/ /*** LICENCE TECHNIQUES AERONAUTIQUES ET SPATIALES ***/ /*** LANGAGE C IMRAN IDRIS ***/ /*** PROJET : BASE DE DONNEES ARIANE 5 ***/ /***************************************************************/ I Introduction II Démarrage du programme Déclaration des bibliothèques Redéfinition du type Déclaration des variables globaux Déclaration des prototypes III Programme principal IV Sous programmes Fonction présentation : void presentation (void) Fonction affichage des configurations : void affichage_configurations (void) Fonction affichage des paramètres : void affichage_parametres (void) Mot de passe : int mot_de_passe (void) Liste des actions possibles : void liste_des_actions (void) Choix d une configuration : void choisir_une_configuration (void) Créer une configuration : int creer_une_configuration (void) Détruire une configuration : int détruire_une_configuration (void) Affichage d une liste des paramètres : void liste_des_parametres (void) Affichage d un paramètre particulier : void afficher_un_parametre (void) Ajouter un nouveau paramètre : void ajouter_un_parametre (void) Modifier un paramètre particulier : int modifier_un_parametre (void) Terminer le programme : void terminer_programme (void) Ecriture dans un fichier txt void ecriture_dans_fichier (void) VI Listing LICENCE TECHNIQUES AERONAUTIQUES ET SATIALES 2
I. Introduction : Le projet consiste à la réalisation d une base de données simplifiée, permettant de stocker les paramètres des diverses configurations de la fusée Ariane5, et de les restituer à la demande. La base de données dispose de neuf configurations possibles [1..9] et chaque configuration est composé de cent paramètres [0..99]. III. Démarrage du programme : /*** Déclaration des bibliothèques ***/ #include <stdio.h> #include <stdlib.h> #include <conio.h> // Flux entrer/sortie // Pour l instruction exit(0) // Pour l instruction getch() /*** Redéfinition du type ***/ #define CARACTERE 'c' // 1 ère valeur de la configuration test #define ENTIER 'e' // 2 ème valeur de la configuration test #define REEL 'r' // 3 ème valeur de la configuration test #define TEXTE 't' // 4 ème valeur de la configuration test #define PASSE #define INEXISTANT 'P' 'x' #define OK '1' // Mot de passe est correct #define KO '0' // Mot de passe incorrect /*** Déclaration des variables globaux ***/ int numero_de_la_configuration,numero_de_parametre,i,j; char ma_reponse,reponse; char les_configurations[10][50] = "Test","Config 1","","","Config 4","","","","",""; char les_noms_des_parametres[10][100][20] = "p","q","r","s"; char les_types_des_parametres[10][100] = CARACTERE,ENTIER,REEL,TEXTE; char les_valeurs_des_parametres[10][100][20] = "A","2","3.14159","quatre"; La configuration "test": 1 er paramètre p = A "CARACTERE" 2 ème paramètre q = 2 "ENTIER" 3 ème paramètre r = 3.14159 "REEL" 4 ème paramètre s = quatre "TEXTE" 3
/*** Déclaration des prototypes ***/ void presentation(void); void affichage_configurations(void); void affichage_parametres(void); int nom_utilisateur(void); int mot_de_passe(void); void choisir_une_configuration(void); int creer_une_configuration(void); int detruire_une_configuration(void); void liste_des_parametres(void); void afficher_un_parametre(void); int modifier_un_parametre(void); void ajouter_un_parametre(void); void mode_silencieux(void); void liste_des_actions(void); void terminer_programme(void); // Présentation // Affichage des configurations // Affichage des paramètres // Demande le nom de l utilisateur // Demande le mot de passe // Correspond à la touche c // Correspond à la touche n // Correspond à la touche d // Correspond à la touche l // Correspond à la touche p // Correspond à la touche m // Correspond à la touche a // Correspond à la touche s // Correspond à la touche h // Correspond à la touche q III Programme principal : void main (void) presentation(); while(1) liste_des_actions(); // Présentation // Boucle infinie // Liste des actions printf("choisir une action: "); // Saisie de l action choisie scanf("%s",&ma_reponse); switch(ma_reponse) case 'c': printf("vous avez choisi l'action: %c\n",ma_reponse); choisir_une_configuration(); // Choix d'une configuration case 'n': printf("vous avez choisi l'action: %c\n",ma_reponse); creer_une_configuration(); // Créer une nouvelle configuration case 'd': printf("vous avez choisi l'action: %c\n",ma_reponse); detruire_une_configuration(); // Détruire une configuration case 'l': printf("vous avez choisi l'action: %c\n",ma_reponse); liste_des_parametres(); // Donne la liste des parametres case 'p': printf("vous avez choisi l'action: %c\n",ma_reponse); afficher_un_parametre(); // Afficher un parametre particulier case 'm': printf("vous avez choisi l'action: %c\n",ma_reponse); modifier_un_parametre(); // Modifier un parametre case 'a': printf("vous avez choisi l'action: %c\n",ma_reponse); ajouter_un_parametre(); // Ajout d'un parametre 4
case 's': case 'h': case 'q': default: printf("vous avez choisi l'action: %c\n",ma_reponse); mode_silencieux(); // Ne rien faire printf("vous avez choisi l'action: %c\n",ma_reponse); liste_des_actions(); // Affichage des actions possibles printf("vous avez choisi l'action: %c\n",ma_reponse); terminer_programme(); // Quitter le programme printf ("-> Caractère non prévu\n\n"); On commence le programme principal par la fonction présentation, puis à travers la boucle infinie, on présente les différentes actions possibles que l utilisateur peut choisir. Suivant le cas choisie on fait appel au sous programme. Tous ces sous programme représente une tâche bien précise (créer une configuration, modifier un paramètre particulier ). Avant de terminer nôtre programme, on enregistre la base de donnée dans un fichier "ariane.txt". IV. Sous programme : 1) Fonction présentation : void presentation (void) printf("\n\n /*******************************/\n"); printf(" /*** Base de données Ariane5 ***/"); printf("\n /*******************************/\n\n"); printf(" Configurations d'ariane5 \n"); printf(" Commander chaque action par une lettre\n\n"); Il s agit d afficher le nom de la base de donnée dès le démarrage du programme. Voici le résultat : 5
2) Affichage des configurations : void affichage_configurations (void) printf("[-1] Configuration de test\n"); // Configuration [-1] printf(" [0] Arrêt du programme\n"); // Configuration [0] for(i=1;i<=9;i++) // Configuration de [1..9] printf(" [%d] '%s'\n",i,les_configurations[i]); Il s agit afficher la désignation des configurations, chacun ayant un numéro d ordre de 1 à 9, le cas [-1] et [0] est traité à part. Cette fonction est utilisée lorsqu on ajoute, supprime, modifie une configuration. Voici le résultat : 3) Affichage des paramètres : void affichage_parametres (void) printf("voici la liste de tous les paramètres:\n") ; printf("numero:[%d]\tnom:'%s'\ttype:%c\tvaleur:'%s'\n",numero_de_parametre, les_noms_des_parametres[numero_de_la_configuration][numero_de_parametre], les_types_des_parametres[numero_de_la_configuration][numero_de_parametre], les_valeurs_des_parametres[numero_de_la_configuration][numero_de_parametre]); Il s agit juste d un affichage des paramètres existants. Voici le résultat pour le cas de la configuration test : 6
4) Mot de passe : int mot_de_passe (void) int test,i,j; char password[10],reponse_passeword[10]="kgb2006"; for (i=0;i<3;i++) printf("\nentrer un mot de passe: "); scanf("%s",password); // On demande trois fois le mot de passe // Saisie du mot de passe test=ok; j=0; while(password[j]!='\0') // Parcourt du tableau jusqu à la fin c'est-à-dire le caractère nul if (reponse_passeword[j]!= password[j]) // Comparaison caractère à caractère test=ko; // entre les deux tableaux j++; if(test==ko) // la variable test est positionné sur KO car la comparaison n est pas bonne printf ("Le mot de passe est incorrect\n"); if(test==ok) // la variable test est positionné sur OK car la comparaison est bonne printf("le mot de passe est correct\n\n"); return(ok); // Dans ce cas la fonction retourne la variable test = OK if (i==3) // Si on a atteint i=3 cela signifie que le mot de passe n a pas été reconnu après trois essais printf("mot de passe est inccorecte\n"); return(ko); // Dans ce cas la fonction retourne la variable test = KO Avec le même raisonnement on programme la fonction suivante : int nom_utilisateur (void) Cette fonction permet d identifier le nom de l utilisateur, de la même façon on laisse trois possibilités, dans le cas contraire on sort du programme avec test = KO. Voici le résultat : 7
5) Liste des actions possibles : void liste_des_actions (void) printf("\n\n Actions possibles:\n"); printf(" [c] Choisir une configuration de fusée Ariane 5\n" ); printf(" [n] Créer une nouvelle configuration\n"); printf(" [d] Détruire une configuration existante \n"); printf(" [l] Donner la liste des paramètres existants\n"); printf(" [p] Afficher un paramètre avec son numéro\n"); printf(" [m] Modifier un paramètre dans cette configuration\n"); printf(" [a] Ajouter un nouveau paramètre a cette configuration\n"); printf(" [s] Juste faire ce qui est demande\n"); printf(" [h] Afficher la liste des actions possibles\n"); printf(" [q] Terminer ce programme \n\n"); Cette fonction donne le menu des actions possibles Voici le résultat : 8
6) Choix d une configuration : void choisir_une_configuration (void) printf("choisir une Configuration [1..9]?: "); // Saisie de la configuration scanf("%d",&numero_de_la_configuration); if(numero_de_la_configuration== 0) printf("etes vous sur (o/n)?: "); scanf("%s",&ma_reponse); // Cas ou la configuration = 0 alors on quitte // Demande de confirmation // si on quitte ou pas le programme if(ma_reponse=='o') // Si la réponse est oui, alors on quitte le programme printf("vous avez choisi d'arrêter le programme\nau revoir,et a bientôt\n"); printf("fin normal d'ariane5\n" ); getchar(); exit(0); else // Si la réponse est non, on ne quitte pas // On saisie à nouveau la configuration printf("\nquel Configuration: "); scanf("%d",&numero_de_la_configuration); if(numero_de_la_configuration== -1) // Cas pour la configuration de test // Seul configuration existante au début numero_de_la_configuration=0; // On force la configuration à test printf("vous avez choisi %s \n",les_configurations [numero_de_la_configuration]); On a prévu une configuration test dont le numéro est -1, c est la seule configuration existant au départ. A travers ce programme on test pas à pas s il s agit d une configuration 0, -1, ou [1..9]. 9
7) Créer une configuration : int creer_une_configuration (void) printf("quelle configuration voulez vous créer [1..9]?: "); // Saisie de la configuration scanf("%d",&numero_de_la_configuration); if(numero_de_la_configuration>0 && numero_de_la_configuration <=9) // Test si la conf. est [1..9] if(les_configurations[numero_de_la_configuration][0]=='\0') // Test si la configuration existe if(nom_utilisateur()==ko) // On fait appel à la fonction identification // le nom de l utilisateur et du mot de passe if(mot_de_passe()==ko) printf("entrer le nom de la configuration: "); // Si l identification est correct alors on peut scanf("%s",&les_configurations[numero_de_la_configuration]); // créer la nouvelle configuration affichage_configurations(); // Actualisation de l affichage else printf("cette configuration existe déjà \n"); else printf("numéro de configuration incorrect\n"); Dans ce sous programme avant de créer une nouvelle configuration, on test si la configuration est bien comprise entre 1 et 9, puis son existence. On demande l identification (le nom d utilisateur et le mot de passe), si celle-ci est exacte alors on peut créer la nouvelle configuration. 8) Détruire une configuration : int détruire_une_configuration (void) printf("quelle configuration voulez vous détruire [1..9]?: "); // Saisie de la configuration scanf("%d",&numero_de_la_configuration); if(numero_de_la_configuration>0 && numero_de_la_configuration <=9) // Test si la conf. est [1..9] if(les_configurations[numero_de_la_configuration][0]!='\0') // Test si la configuration existe if(nom_utilisateur()==ko) // On fait appel à la fonction identification // le nom de l utilisateur et du mot de passe if(mot_de_passe()==ko) printf("etes vous sur (o/n)?: "); scanf("%s",&reponse); // Demande de confirmation if(reponse=='o') // Si l identification est correct alors // On peut détruire la configuration les_configurations[numero_de_la_configuration][0]='\0'; affichage_configurations(); // Actualisation de l affichage printf("la Configuration a été détruite avec succès\n"); else printf("impossible de détruire une configuration vide\n"); else printf("numéro de configuration incorrect\n"); 10
Dans ce sous programme avant de détruire une configuration, on test si celle-ci est bien comprise entre 1 et 9, puis son existence. On demande l identification (le nom d utilisateur et le mot de passe), si celle-ci est exacte alors on demande une confirmation, dans le cas favorable on détruit la configuration en question. 9) Affichage d'une liste des paramètres : void liste_des_parametres (void) printf("\nvoici la liste de tous les paramètres: \n"); for(numero_de_parametre=0;numero_de_parametre<=99;numero_de_parametre++) if(les_noms_des_parametres[numero_de_la_configuration][numero_de_parametre][0]!='\0') affichage_parametres(); // Affichage des paramètres Afin d afficher tous les paramètres de la configuration en question, on introduit la boucle for. Comme il y a 100 paramètres, on ne prends pas en compte le paramètre vide et on affiche le reste. Voir l exemple suivant : 10) Affichage d'un paramètre particulier : void afficher_un_parametre (void) printf("quel paramètre [0..99]?: "); // Saisie du paramètre qu on désir afficher scanf("%d",& numero_de_parametre); printf("vous avez choisi le paramètre: %d\n\n",numero_de_parametre); if (0<=numero_de_parametre && numero_de_parametre <=99) // Test de l existance affichage_parametres(); // Affichage du paramètre else printf ("-> Numero non prevu\n"); On désir afficher un paramètre particulier On obtient le résultat suivant : 11
11) Ajouter un nouveau parametre : void ajouter_un_parametre (void) if(nom_utilisateur()==ko) if(mot_de_passe()==ko) // Test du nom de l utilisateur // Test du mot de passe if(les_configurations[numero_de_la_configuration][0]!='\0') // Test si le paramètre est bien vide printf("entrer le numéro de paramètre [0..99]?: "); // Saisie du numéro de paramètre scanf("%d",& numero_de_parametre); if (0<=numero_de_parametre && numero_de_parametre <=99) // Si le paramètre est bien // Compris entre 0 et 99 printf("entrer le nom du paramètre: "); scanf("%s",&les_noms_des_parametres[numero_de_la_configuration][numero_de_parametre]); printf("entrer le type du paramètre (c,e,r,t)?: "); scanf("%s",&les_types_des_parametres[numero_de_la_configuration][numero_de_parametre]); printf("entrer la valeur du paramètre: "); scanf("%s",&les_valeurs_des_parametres[numero_de_la_configuration][numero_de_parametre]); printf("le nouveau paramètre a été ajouter: \n"); // Actualisation de l affichage affichage_parametres(); else printf("-> Numéro non prévu\n"); else printf("cette configuration est vide\n"); On remarque que pour ajouter un nouveau paramètre, il d abord qu il soit vide de plus qu il soit compris entre 0 et 99. Après avoir effectuer les différents test on peut saisir les différents paramètres à ajouter à une configuration. 12
12) Modifier un paramètre particulier : int modifier_un_parametre (void) printf("entrer le numéro de paramètre a modifier [0..99]?: "); // Saisie du numéro de paramètre scanf("%d",& numero_de_parametre); // à modifier if (0<=numero_de_parametre && numero_de_parametre <=99) // Test de paramètre if(les_noms_des_parametres[numero_de_la_configuration][numero_de_parametre][0]!='\0') if(nom_utilisateur()==ko) // Test du nom de l utilisateur if(mot_de_passe()==ko) // Test du mot de passe printf("entrer le nom du paramètre: "); // Saisie des différents paramètres scanf("%s",&les_noms_des_parametres[numero_de_la_configuration][numero_de_parametre]); printf("entrer le type du paramètre (c,e,r,t)?: "); scanf("%s",& les_types_des_parametres[numero_de_la_configuration][numero_de_parametre]); printf("entrer la valeur du paramètre: "); scanf("%s",&les_valeurs_des_parametres[numero_de_la_configuration][numero_de_parametre]); printf("le nouveau paramètre a été modifie:\n"); // Actualisation de l affichage affichage_parametres(); else printf("impossible de modifier un paramètre vide\n"); else printf("-> Numéro non prévu\n"); On désire modifier un paramètre par son numéro, sachant qu on ne peut pas modifier un paramètre vide. Mais avant ceci il faut vérifier l existence de ce paramètre puis l identification (nom d utilisateur et mot de passe) et enfin saisir les nouveaux paramètres (le nom, le type ). 13
13) Terminer le programme : void terminer_programme (void) printf("vous avez décide de terminer le programme\n"); printf("fin normal d'ariane5\n"); printf("a bientôt"); getchar(); exit(0); Cette fonction permet de quitter le programme Voici le résultat : 14) Ecriture dans un fichier : void ecriture_dans_fichier(void) FILE * f; int tab[10]=1,2,3,4,5,i; // Pointeur sur fichier // Déclaration f=fopen("ariane5.txt","w"); // Ouverture du fichier if(f==null) // Dans le cas d erreur d ouverture du fichier printf("erreur d'ouverture du fichier"); for (i=0;i<5;i++) fprintf(f,"%d ",15); fprintf(f," %d\n",tab[i]); fclose(f); // Ecriture dans le fichier // Fermeture du fichier Pour terminer nôtre programme, on enregistre la base de donnée dans un fichier "ariane5.txt". 14