Gestion d'un cinéma [Résolu]

Signaler
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011
-
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011
-
Bonsoir bonsoir ! Je suis novice en langage c, je m'y suis mis depuis début novembre et j'ai quelques lacunes dans la résolution de mon problème. En fait jdois réaliser un projet pour après les vac de Noël qui consiste à gérer les reservations d'une salle de cinéma! Ma foi j'ai donc travaillé avec des structures de données que jvais lister apres mais je bloque sur un probleme : celui de l'affectation d'un numéro "d'identifiant" pour une place (ou pour un client c est dans la meme logique je pense )
donc j'ai défini des structures :
/* Creation de la structure Client */

struct Client {
char Nom[20];
char Prenom[20];
char Adresse[50];
char Mail[50];
char Telephone[15];
int IDClient;	
};
struct Place {
int Ligne ;
int Colonne;
int Statut;
float Prix;
int IDPlace;
};
j'ai également crée une fonction qui permet de saisir les coordonnees d'un client et de les afficher enfin bref je cherche a définir un numéro unique pour chaque place. Sachant que j'ai crée une fonction qui me permet d'afficher la salle avec la valeur "0" (=libre) grace a
void afficheTab(struct Place tabplace[], int longueur, int largeur)
{...}

Je sais qu'on doit prendre en parametre le numéro de ligne et de colonne mais je seche un peu s il vous plait

27 réponses

Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011

Merci pour la rapidité de vos réponses!
Il faut que tu vérifies si (c % (LONGUEUR - 1) != 0)

Est ce que je dois effectuer cette vérification dans la condition
if ((tabplace[c].Statut == LIBRE) && ((c + 1) < LONGUEUR * LARGEUR) \
&& (tabplace[c+1].Statut == LIBRE)){

ou bien avant ?
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011

en fait je pense que je m'étais betement trompé dans mes notations en fait la condition a verifier etait :

if(c % (LARGEUR - 1) != 0){
au lieu de
if(c % (LONGUEUR - 1) != 0){

Merci CptPingu !!!
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011

Hey c'est encore moi!!
j'ai un dernier petit probleme concernant le fameux programme qui touche a sa fin

j'ai en effet une structure client, une fonction creerClient(qui me permet de rentrer les coordonnées d'un client) et une fonction afficherClient(qui me permet d'afficher les coordonnées d'un client). Bon vu mon niveau en C je ne cherche pas a faire un programme extraordinaire mais juste a peaufiner ce que j'ai fait

pour rappel :
struct Client {
char Nom[30];
char Prenom[30];
char Adresse[50];
char Mail[50];
char Telephone[15];
int IDClient;	
}; 

struct Client creerClient(struct Client tab_client[]){
struct Client C1;	
char nomClient[30];
char prenomClient[30];
char adresseClient[50];
char mailClient[50];
char telephoneClient[15];
int i;


/************   Saisie des coordonnees du client   ************/


printf("Client  \n");
printf("Entrez votre nom :");
fgets(nomClient,30,stdin);

printf("Entrez votre prenom : ");
fgets(prenomClient,30,stdin);

printf("Entrez votre adresse postale : ");
fgets(adresseClient, 50, stdin);

printf("Entrez votre mail : ");
fgets(mailClient,50,stdin);

printf("Entrez votre numero de telephone : ");
scanf("%s", telephoneClient);
printf("\n");

/************ Acces aux champs et initialisation des variables ************/

strcpy(C1.Nom,nomClient);
strcpy(C1.Prenom,prenomClient);
strcpy(C1.Adresse,adresseClient);
strcpy(C1.Mail,mailClient);
strcpy(C1.Telephone,telephoneClient);
for (i = 0; i < MAX_NB_CLIENT; i++) 
{
tab_client[i].IDClient = -1;  /* par defaut tous les numeros de clients sont initialisés a -1 */
}
C1.IDClient = 1;

while(tab_client[i].IDClient < 0){
      tab_client[i]= C1;
      tab_client[i].IDClient = i;
      i++;
}
return C1;

}



void afficherClient (struct Client tab_client[], int num){
struct Client C1;
printf("*********  FICHE CLIENT  *********\n");
printf("*\n");
printf("*  Nom : %s*  Prenom : %s*  Adresse : %s*  Mail : %s*  Telephone : %s \n",
C1.Nom, C1.Prenom, C1.Adresse, C1.Mail, C1.Telephone);
}



En fait j'essaye d'enregistrer chaque client dans un tableau qui est identifié dans sa case par un numéro .
J'ai le main() ainsi

int main (){
        struct Client tab_client[MAX_NB_CLIENT];
struct Client C1;
int numClient;

  /* Creation d'un client */
case 1 :			creerClient(tab_client);

/* Affichage d'un client*/
 case 2 :
printf("Saisissez un num client a afficher ?");
scanf("%d", numClient);
printf("\n\n");
afficherClient(tab_client, numClient);}
}

en fait dans la partie
/* Affichage d'un client*/
, j'aimerais que l'ordi me demande quel numéro de client je souhaite afficher (s il existe) ?
Par exemple imaginons qu'on ait entré 4 clients avec leur coordonnées
je voudrais pouvoir afficher celles du 2eme :-( Apparament quand j'execute le programme au moment ou on me demande de saisir le numero du client a afficher, les coordonnées apparaissent mais ce sont des caracteres quelconques sans aucun sens .
Si vous pouviez juste me dire a quel niveau est l'erreur s'il vous plait
Messages postés
3809
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
22 avril 2020
105
Je ne comprends même pas comment ton code peux compiler ! (Penses à bien activer *Tout* les warnings).

Plusieurs problèmes:

Ligne environ 70: warning: unused parameter ‘tab_client’

Tu n'utilises pas tab_client, mais tu lis dans une variable non initialisée.

Ligne environ 84: error: case label not within a switch statement

Tu utilises un case, sans switch.

afficherClient(tab_client, numClient);}

Accolade en trop.

Toutes ces erreurs m'ont été donné par mon compilateur. Si ce n'est pas fait, renseigne toi sur ton compilateur et active un maximum d'aide !
Exemple avec gcc:
gcc -W -Wall -ansi -pedantic fichier.c -o prog
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011

Merci, vous etes toujours présents, c est top !
En fait j'utilise le compilateur turboC qui ne me laisse pas le choix des options -Wall -Werror etc Donc je ne vois pas les erreurs ni les warnings mais oui j'ai un peu raccourci le code, je vais tout écrire en fait :
le main est codé avec un switch case en effet
int main() {


    /***** Declaration des variables *****/
int choix,fin=1;
struct Place tabplace[LONGUEUR*LARGEUR];
struct Client tab_client[MAX_NB_CLIENT];
struct Client C1;
int numClient;

     

 
/*C1=creerClient(tab_client);afficherClient(C1);*/



   while(fin){
/* creation du menu tant qu'on veut faire un choix */
        printf("Que voulez-vous faire ?  ");
        scanf("%d",&choix);
printf("\n");


        switch(choix){

case 4: {	/* Affichage d'un client*/
printf("Saisissez un num client a afficher ?");
scanf("%d", numClient);
printf("\n\n");
afficherClient(tab_client, numClient);
printf("\n\n");
}break ;

case 5: {	/* Creation d'un client */
printf("\n");
viderTampon();
creerClient(tab_client);	
}break ;



case 9: /* Sortir du programme */
      printf("Fin du programme !\n\n");
      exit(-1); 
break;
default: printf(" Erreur : Ce choix n'est pas valide ! Faites un choix valide\n");
}
}

return 0;

}


Je vais me concentrer sur les erreurs détectées
Messages postés
3809
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
22 avril 2020
105
struct Place tabplace[LONGUEUR*LARGEUR];

Place n'est pas déclaré chez moi. Mais je pense que c'est le cas chez toi.

scanf("%d", &numClient);

Faux, il faut mettre un "&", sinon ça ne fonctionne pas.
scanf("%d", &numClient);

viderTampon()

Fonction non déclarée chez moi.
Messages postés
40
Date d'inscription
jeudi 28 février 2008
Statut
Membre
Dernière intervention
8 décembre 2011

ha oui
viderTampon()
est une fonction que j'ai crée pour effacer la mémoire tampon issue des scanf
void viderTampon()
{	
char c;
while((c = getchar() != '\n') && (c != EOF));
/* Permet de vider la memoire tampon */

}

et la
Place tabplace[LONGUEUR*LARGEUR];
c'est la définition de la salle de théatre que j'avais créee au tout debut mais la en fait je m'interesse juste aux clients. Quand je rentre les coordonnées de plusieurs clients les unes apres les autres et que je demande d'afficher celles d'un client en particulier , des symboles bizarres apparaissent dans les champs nom prenom etc