Soucis avec typedef

Soucis avec typedef - C - Programmation

Marsh Posté le 28-01-2008 à 23:43:48    

BOnjour.
Voilà je regarde des anciens sujets d'examen d'entré dans des écoles et je suis tombé sur un sujet qui donne ça avec les structures de typedef struct:
 
Vous devez développer une application qui simule un système simplifié de gestion de vente de billets d’avion d’une agence de voyages.
Voici la description de ce système :
• Chaque client peut acheter un ou plusieurs billets pour différents passagers.
• Le système doit enregistrer les informations personnelles suivantes de chaque client :  
- nom, prénom,  
- numéro de téléphone (domicile, bureau, portable ou/et autre).  
Le système doit être construit d’une manière qui permette d’y ajouter facilement un nouveau type de numéro de téléphone.
• Les informations concernant un billet sont les suivantes :  
- Informations sur le passager : nom, prénom, numéro de téléphone,
- Numéro d’identification du vol,
- Aéroports de départ et d’arrivée,
- Prix,
Le programme devra permettre à l’utilisateur de :
1. Afficher une facture après chaque opération de vente. La facture doit contenir les informations suivantes :
- Les informations personnelles du client,
- Les informations concernant les billets achetés,
- Le montant à payer.  
 
Alors ne sachant pas comment fonctionnent ces structures, en fouillant un peu sur le net j'ai réussi à faire ça pour le moment:
 
un fichier client.h
 
typedef struct client{
char Nom [15];
char Prénom [15]
char client [25];
int tel;} CLIENT;
 
typedef struct billet{
char aero_dep [25];
char aero_arriv [25];
int num_vol;
int prix;
CLIENT* cl} BILLET;
 
c'est après que je bloc.
Quelqu'un a une idée?

Reply

Marsh Posté le 28-01-2008 à 23:43:48   

Reply

Marsh Posté le 29-01-2008 à 00:16:15    

Par convention, on utilise les noms en majuscules pour des constantes. Pour différencier le nom de la structure du nom de la variable dont le format est une structure, il n'y a pas de convention universellement établie, mais l'une qui est courante est de préfixer la struture avec un underscore. On dissocie souvent la déclaration de la structure et la déclaration de la variable utilisant la structure. On n'est pas obligé d'utiliser typedef. Je ne l'utilise jamais, donc je vais donner un exemple sans typedef:

struct _client{  
   char nom[15];  
   char prénom[15]  
   char client_id[25];  
   int tel;
   char flag_toto;
};  
 
struct _billet{  
   char aero_dep[25];  
   char aero_arriv[25];  
   int num_vol;  
   int prix;  
   struct _client *cl;
};
 
struct _client client0;
struct _client client1, client2;
struct _client tab_clients[10];
struct _billet billet1;


Ensuite l'utilisation de ses structures se fait en utilisant un point pour les entiers ou les caractères uniques, et une flèche pour les tableaux de caractères (car ils sont adressés par un pointeur). Par exemple :

strcpy(client1->nom, "Du Nord" );
strcpy(client1->prenom, "Edgar" );
client1.tel = 123456;
client1.flag_toto = 'Y';
printf("Nom = %s, Tel = %d.\n", client1->nom, client1.tel);


Message édité par olivthill le 29-01-2008 à 00:19:21
Reply

Marsh Posté le 29-01-2008 à 07:53:41    

super :\ c'est pas parce que tu comprends rien à typedef que tu peut t'en passer hein :o
Le typedef à l'immense avantage de pouvoir creer des types utilisateurs qui se comportement naturellement, c'est sur ça sert à rien [:dawa]

Code :
  1. typedef struct _client{ 
  2.    char nom[15]; 
  3.    char prénom[15] 
  4.    char client_id[25]; 
  5.    int tel;
  6.    char flag_toto;
  7. } client_t; 
  8. typedef struct _billet{ 
  9.    char aero_dep[25]; 
  10.    char aero_arriv[25]; 
  11.    int num_vol; 
  12.    int prix; 
  13.    client_t *cl;
  14. };
  15. client_t client0;
  16. client_t client1, client2;
  17. client_t tab_clients[10];
  18. billet_t billet1;
 


Une fois typedefé, une structure ce comporte comme un type atomique du langage : tu peut creéer des variables de ce types etc ... et accéder aux champs de leur instances.

 

Et oh, tu raconte n'importequoi sur -> et .
-> sert à adesser N'IMPORTE QUEL champ d'un pointeur de structure
. sert à adresser n'importequel champ d'une instance de structure

 
Code :
  1. client_t c;
  2. strcpy(c.nom, "totoz" );
  3. client_t pc = malloc(sizeof(client_t));
  4. strcpy(c->nom,"totozptr" );
 


PS : ovithill, renseigne toi sur la notion de :o


Message édité par Joel F le 29-01-2008 à 21:11:13
Reply

Marsh Posté le 29-01-2008 à 11:51:18    

jiraya a écrit :

Alors ne sachant pas comment fonctionnent ces structures, en fouillant un peu sur le net j'ai réussi à faire ça pour le moment:

 

un fichier client.h

 

typedef struct client{
char Nom [15];
char Prénom [15]
char client [25];
int tel;} CLIENT;

 

typedef struct billet{
char aero_dep [25];
char aero_arriv [25];
int num_vol;
int prix;
CLIENT* cl} BILLET;

 

c'est après que je bloc.
Quelqu'un a une idée?


Il y a un problème de type dans tes structures de données.

 

On reprend la définition :

Citation :


• Le système doit enregistrer les informations personnelles suivantes de chaque client :  
- nom, prénom,  
- numéro de téléphone (domicile, bureau, portable ou/et autre).  


Ce qui s'écrit en pseudo-code :


STRUCTURE CLIENT
DEBUT
  nom : CHAINE
  prenom : CHAINE
  telephone : CHAINE
FIN


en effet, un numéro de téléphone n'est pas un 'nombre', mais une chaine de caractères.

 

Ensuite, le billet :

Citation :


• Les informations concernant un billet sont les suivantes :  
- Informations sur le passager : nom, prénom, numéro de téléphone,
- Numéro d’identification du vol,
- Aéroports de départ et d’arrivée,
- Prix,



STRUCTURE BILLET
DEBUT
  passager : CLIENT
  numero-vol : CHAINE
  aero-depart : CHAINE
  aero-arrivee : CHAINE
  montant : REEL
FIN


en effet, un prix n'est pas forcément entier.

 

Voila pour la conception.

 

Ensuite, quand on traduit en C, des détails d'implémentation peuvent apparaitre, mais une chose à la fois.

 

Avant de coder, je te conseille d'écrire les algorithmes des traitements, en texte et/ou en pseudo-code.


Message édité par Emmanuel Delahaye le 29-01-2008 à 12:00:43

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed