Tableau de structures en c, gestion d arrivees de skieurs

Soyez le premier à donner votre avis sur cette source.

Vue 9 727 fois - Téléchargée 424 fois

Description

Voila ce programme montre comment on manipule les tableaux de structures
Pour de plus ample informations contacter moi
Affichage de la date en C

Source / Exemple :


/*PHENO PHILIPPE BTS INFO 1*/
/*GESTION D ARRIVEES DE SKIEURS*/
/*Bibliotheque*/
#include <stdio.h>
#include <string.h>
#include <time.h>
#define MAXS 30
/*DECLARATION DE STRUCTURE*/
typedef struct 
{ 
	char nom[MAXS], pays[MAXS];
} SKIEURS;
typedef struct
{
	int min,sec,dixsec;
}TEMPS;
typedef struct 
{
	int ndos;
	TEMPS tps;
}ARRIVEES;
typedef struct
{
	int ndos, nport;
}DISQUAL;
typedef enum {faux,vrai}BOOLEEN ;

/*DECLARATION DES PROCEDURES*/
void initskieur(SKIEURS tskieur[MAXS],int *ptnbski);
void saisiearrivees(ARRIVEES tarrive[MAXS],int nbcou, int nbski);
void saisiedisqual(ARRIVEES tarrive[MAXS], DISQUAL tdisqual[MAXS], int *ptnbdisq, int *ptnbcou, int nbski);
void classerskieur(ARRIVEES tarrive[MAXS], int nbcou);
void afficherarrive(ARRIVEES tarrive[MAXS], int nbcou);
void afficherqualifies(ARRIVEES tarrive[MAXS],SKIEURS tskieur[MAXS], int nbcou);
void gestmenu(void);
void afficherdisqual(DISQUAL tdisqual[MAXS],SKIEURS tskieur[MAXS],int nbdisq);
void permuter(ARRIVEES tarrive[MAXS],int j);
/*PROGRAMME PRINCIPAL*/
void main(void)
{
	int nbski; /*nb de participants*/
	int nbcou ; /*nb de participant arrivees*/
	int nbdisq; /* nb de personnes disqualifies*/
	int choix ; /*choix saisi apres affichage du menu*/ 
	/* Declaration de la variable now*/
	time_t now;
	SKIEURS tskieur[MAXS];
	ARRIVEES tarrive[MAXS];
	DISQUAL tdisqual[MAXS];
										/*DEBUT*/
	nbski=0;
	nbcou=0;
	nbdisq=0;
									/*TITRE DU PROGRAMME*/
	printf("   *\n");
	printf("  ***\n");
	printf(" *****\n");
	printf(" *O*O* \n");
	printf(" ***** \n");
	printf("  ***\n");
	printf("   * \n");
	printf("  ***\n");
	printf(" *******\n");
	printf(" ***** ** |         *****************************************************\n");
	printf(" *****  ***         * Bienvenue dans le programme de gestion de skieurs *\n");
	printf(" *****    |         *****************************************************\n");
	printf(" *****    |\n");
	printf(" ** **    |\n");
	printf("  ** **   |\n");
	printf("   ** ** ---\n");
	printf("  *****   |\n");
	printf(" ** **\n");
	printf("  ** ** \n");
	printf("   ** **\n");
	printf("    ** **\n\n");
	/* Fontion time avec la variable now comme parametre*/
	time(&now);
	/*Affichage de l heure et de la date*/
	printf("                  Nous sommes le : %s \n",asctime(localtime(&now)));
	initskieur(tskieur, &nbski);
	while (nbcou < nbski)
	{
		saisiearrivees(tarrive,nbcou,nbski);
		classerskieur(tarrive,nbcou);
		nbcou +=1;
	}
	afficherarrive(tarrive,nbcou);
	afficherqualifies(tarrive,tskieur,nbcou);
	do 
	{
		gestmenu();
		scanf("%d",&choix);
		switch (choix)
		{
			case 1: afficherqualifies(tarrive,tskieur,nbcou);
			break;
			case 2: afficherdisqual(tdisqual,tskieur,nbdisq);
			break;
			case 3: saisiedisqual(tarrive,tdisqual,&nbdisq,&nbcou,nbski);
			break;
			case 4: printf("\n********************************Fin de Programme********************************\n*****************************Copyright Freeman-Corp*****************************\n");
			break;
		}
	}
	while (choix != 4);
	/*fin*/
	printf("\n     %c Pour tout probleme, ou pour me contacter: Phenolphtaleine@aol.com %c\n\n",14,14);
}

/*PROCEDURE AFFICHER MENU*/
void gestmenu(void)
{
	printf("1 : Afficher les qualifies\n");
	printf("2 : Afficher les disqualifies\n");
	printf("3 : Saisir les disqualifies\n");
	printf("4 : Quitter le Programme \n" );
}
/* INITIALISATION DU SKIEURS, INSCRIPTION DE CELUI A LA COURSE */
void initskieur(SKIEURS tskieur[MAXS],int *ptnbski)
{
	/*VARIABLE LOCALE*/
	char rep; /*reponse a la question "Autre skieur" */ 
	/*DEBUT*/
	do
	{
		printf("Saisir le nom du skieur \n");
		scanf("%s", tskieur[*ptnbski].nom );
		while (tskieur[*ptnbski].nom=="")
		{
			printf("Le nom du skieur ne peut etre vide \n");
			scanf("%s", tskieur[*ptnbski].nom );
		}
		printf("Saisir le pays d'origine du skieur\n");
		scanf("%s", tskieur[*ptnbski].pays);
		while (tskieur[*ptnbski].pays=="")
		{
			printf("Le pays d'origine du skieur est obligatoire\n");
			scanf("%s", tskieur[*ptnbski].pays);
		}

  • ptnbski +=1;
if (*ptnbski > MAXS) { printf("Vous ne pouvez plus entrer de skieurs, le tableau est plein\n"); rep='n'; } else { printf("Ressaisir un skieurs (o/n)\n"); fflush(stdin); scanf("%c",&rep); } } while (rep !='n' || rep=='o'); /*FIN*/ } /*PROCEDURE SAISIE ARRIVEES */ void saisiearrivees(ARRIVEES tarrive[MAXS],int nbcou, int nbski) { /*VARIABLE LOCALE */ int i; /* indice du skieur dans le tableau */ int ndoss; /* n° de dossard du skieur saisi*/ TEMPS tp; /* temps mis par le skieur */ BOOLEEN inexis; /* contient vrai si le dossard saisi n existe pas, faux sinon */ BOOLEEN deja; /* contient vrai si le skieurs saisi est deja dans le tableau tarrive, faux sinon*/ /*DEBUT*/ do { printf("Saisir le n de dossard\n"); scanf("%d",&ndoss); if (ndoss < 1 || ndoss>nbski) { inexis = vrai ; } else { inexis = faux; } printf("Saisir le temps mis par le skieur (min, seconde, dixieme de seconde)\n"); scanf("%d%d%d",&tp.min,&tp.sec,&tp.dixsec); while ( (tp.min < 0 || tp.min >60) || (tp.sec <0 || tp.sec > 60) || (tp.dixsec<0 || tp.dixsec>60)) { printf("le temps saisi est invalide\n"); scanf("%d%d%d",&tp.min,&tp.sec,&tp.dixsec); } i=0; while (i<= nbcou && tarrive[i].ndos != ndoss ) { i=i+1; } if (i<= nbcou) { deja = vrai; printf("Le skieur est deja arrivé\n"); } else { deja = faux; } if (inexis == vrai) { printf (" Ce dossard n'existe pas \n"); } } while (inexis == vrai || deja ==vrai); tarrive[nbcou].ndos =ndoss; tarrive[nbcou].tps = tp; /*FIN*/ } /* PROCEDURE SAISIR UN DISQUALIFIE*/ void saisiedisqual(ARRIVEES tarrive[MAXS], DISQUAL tdisqual[MAXS], int *ptnbdisq, int *ptnbcou, int nbski) { /*VARIABLES LOCALES*/ int i; /* indice du tab tarrive*/ int ndoss; /* n° de dossard*/ int nporte; /* n° de la porte ou l erreur a ete commise */ BOOLEEN controle; /* contient vrai si le coureur n a pas deja ete disqualifie, faux sinon */ /*DEBUT*/ do { printf("Saisir la porte ou l erreur a ete commise\n"); scanf("%d",&nporte); while (nporte < 1) { printf("N° de porte invalide\n"); scanf("%d",&nporte); } printf("Saisir le N° de dossard\n"); scanf("%d",&ndoss); while (ndoss < 1 || ndoss > nbski) { printf("N° de dossard invalide\n"); scanf("%d",&ndoss); } i=0; while (i <= *ptnbcou && tarrive[i].ndos != ndoss) { i++; } if ( i <= *ptnbcou) { controle=vrai; } else { controle =faux; printf("Ce coureur a deja ete disqualifie\n"); } } while (controle != vrai); /* lorsque l on sort, i contient l indice du coureur a disqualifier*/ while (i<= *ptnbcou) { tarrive[i].ndos=tarrive[i+1].ndos; tarrive[i].tps.min=tarrive[i+1].tps.min; tarrive[i].tps.sec=tarrive[i+1].tps.sec; tarrive[i].tps.dixsec=tarrive[i+1].tps.dixsec; i +=1; }
  • ptnbcou -=1;
  • ptnbdisq +=1;
tdisqual[*ptnbdisq].ndos =ndoss; tdisqual[*ptnbdisq].nport = nporte; /*FIN*/ } /*PROCEDURE PERMUTER*/ void permuter(ARRIVEES tarrive[MAXS], int j) { ARRIVEES temp; temp.ndos=tarrive[j].ndos ; temp.tps.dixsec=tarrive[j].tps.dixsec; temp.tps.sec=tarrive[j].tps.sec; temp.tps.min=tarrive[j].tps.min; tarrive[j].ndos= tarrive[j-1].ndos; tarrive[j].tps.dixsec= tarrive[j-1].tps.dixsec; tarrive[j].tps.min= tarrive[j-1].tps.min; tarrive[j].tps.sec= tarrive[j-1].tps.sec; tarrive[j-1].ndos=temp.ndos; tarrive[j-1].tps.dixsec=temp.tps.dixsec; tarrive[j-1].tps.min=temp.tps.min; tarrive[j-1].tps.sec=temp.tps.sec; } /* PROCEDURE CLASSER SKIEUR*/ void classerskieur(ARRIVEES tarrive[MAXS], int nbcou) { /*variable locale*/ int i,j ; /* compteurs*/ /*debut*/ /*Classement par tri insertion */ for (i=1; i<= nbcou ;i++) { j=i; while (j>0 && ((tarrive[j].tps.min < tarrive[j-1].tps.min) || (tarrive[j].tps.min <= tarrive[j-1].tps.min && tarrive[j].tps.sec < tarrive[j-1].tps.sec) || ( tarrive[j].tps.min <= tarrive[j-1].tps.min && tarrive[j].tps.sec <= tarrive[j-1].tps.sec && tarrive[j].tps.dixsec < tarrive[j-1].tps.dixsec))) { permuter(tarrive,j); j-=1; } } } /*PROCEDURE AFFICHER LES ARRIVES*/ void afficherarrive(ARRIVEES tarrive[MAXS], int nbcou) { /* VARIABLE LOCALE*/ int i; /* DEBUT*/ printf("\n ******************************\n *Les Personnes Arrivees sont:*\n ******************************\n\n"); for ( i=0; i<nbcou; i++) { printf(" Skieurs dossard n %d Temps de: %d:%d:%d \n", tarrive[i].ndos, tarrive[i].tps.min,tarrive[i].tps.sec ,tarrive[i].tps.dixsec); } printf("\n\n"); /* FIN*/ } /* PROCEDURE AFFICHER LES QUALIFIES*/ void afficherqualifies(ARRIVEES tarrive[MAXS],SKIEURS tskieur[MAXS], int nbcou) { /*Variable Locale*/ int i; /*compteur*/ /*debut*/ printf(" *********************\n *Les qualifies sont:*\n *********************\n\n"); for ( i=0; i<nbcou; i++) { printf(" Rang: %d, dossard n %d temps: %d:%d:%d, Nom: %s Pays: %s\n",i+1,tarrive[i].ndos,tarrive[i].tps.min,tarrive[i].tps.sec,tarrive[i].tps.dixsec,tskieur[i].nom,tskieur[i].pays); } /* test s'il y a des qualifie, s'il n'y en a pas, on l affiche a l utilisateur */ if (nbcou== 0) { printf(" Il n y a plus de qualifie\n"); } printf("\n\n"); printf("\n"); /*fin*/ } /* PROCEDURE AFFICHER LES DISQUALIFIES*/ void afficherdisqual(DISQUAL tdisqual[MAXS],SKIEURS tskieur[MAXS],int nbdisq) { /*variable locale*/ int i; /*debut*/ printf("\n\n"); for ( i=1; i<=nbdisq; i++) { printf(" Skieurs dossard n %d elimine apres avoir commis une faute a la porte: %d \n", tdisqual[i].ndos , tdisqual[i].nport); } /* Test s il y a des disqualifie, s il n y en a pas, on retourne un message comme quoi il n y en a pas*/ if (nbdisq== 0) { printf(" Il n y a aucun disqualifie\n"); } printf("\n\n"); }

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.