Vous êtes sur la page 1sur 14

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> // Flux entrer/sortie


#include <stdlib.h> // Pour l’instruction exit(0)
#include <conio.h> // 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 '


P'
#define INEXISTANT '
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": 1er 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); // Présentation

void affichage_configurations(void); // Affichage des configurations


void affichage_parametres(void); // Affichage des paramètres

int nom_utilisateur(void); // Demande le nom de l’utilisateur


int mot_de_passe(void); // Demande le mot de passe

void choisir_une_configuration(void); // Correspond à la touche c


int creer_une_configuration(void); // Correspond à la touche n
int detruire_une_configuration(void); // Correspond à la touche d
void liste_des_parametres(void); // Correspond à la touche l
void afficher_un_parametre(void); // Correspond à la touche p
int modifier_un_parametre(void); // Correspond à la touche m
void ajouter_un_parametre(void); // Correspond à la touche a
void mode_silencieux(void); // Correspond à la touche s
void liste_des_actions(void); // Correspond à la touche h
void terminer_programme(void); // Correspond à la touche q

III Programme principal : void main (void)

presentation(); // Présentation
while(1) // Boucle infinie
{
liste_des_actions(); // 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
break;
case '
n': printf("Vous avez choisi l'
action: %c\n",ma_reponse);
creer_une_configuration(); // Créer une nouvelle configuration
break;
case '
d': printf("Vous avez choisi l'
action: %c\n",ma_reponse);
detruire_une_configuration(); // Détruire une configuration
break;
case '
l'
: printf("Vous avez choisi l'
action: %c\n",ma_reponse);
liste_des_parametres(); // Donne la liste des parametres
break;
case '
p': printf("Vous avez choisi l'
action: %c\n",ma_reponse);
afficher_un_parametre(); // Afficher un parametre particulier
break;
case '
m' : printf("Vous avez choisi l'
action: %c\n",ma_reponse);
modifier_un_parametre(); // Modifier un parametre
break;
case '
a': printf("Vous avez choisi l'
action: %c\n",ma_reponse);
ajouter_un_parametre(); // Ajout d'
un parametre

4
break;
case '
s'
: printf("Vous avez choisi l'action: %c\n",ma_reponse);
mode_silencieux(); // Ne rien faire
break;
case '
h': printf("Vous avez choisi l'action: %c\n",ma_reponse);
liste_des_actions(); // Affichage des actions possibles
break;
case '
q': printf("Vous avez choisi l'action: %c\n",ma_reponse);
terminer_programme(); // Quitter le programme
break;
default: 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++) // On demande trois fois le mot de passe


{
printf("\nEntrer un mot de passe: "); // Saisie du mot de passe
scanf("%s",password);

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) // Cas ou la configuration = 0 alors on quitte


{
printf("Etes vous sur (o/n)?: "); // Demande de confirmation
scanf("%s",&ma_reponse); // 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
return(0); // le nom de l’utilisateur et du mot de passe
if(mot_de_passe()==KO)
return(0);

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
return(0); // le nom de l’utilisateur et du mot de passe
if(mot_de_passe()==KO)
return(0);

printf("Etes vous sur (o/n)?: "); // Demande de confirmation


scanf("%s",&reponse);

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) // Test du nom de l’utilisateur


return(0);
if(mot_de_passe()==KO) // Test du mot de passe
return(0);

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
return(0);
if(mot_de_passe()==KO) // Test du mot de passe
return(0);

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; // Pointeur sur fichier


int tab[10]={1,2,3,4,5},i; // 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]); // Ecriture dans le fichier
}
fclose(f); // Fermeture du fichier

Pour terminer nôtre programme, on enregistre la base de donnée dans un fichier


"ariane5.txt".

14