Cette source permet de donner la date du lendemain à partir d'un date saisie

Contenu du snippet

Ceci est juste un test de calcul approfondi de dates avec gestion des erreurs et des années bissextiles. Je m'assure que les valeurs saisies sont bien entieres. je fais les calculs necesaires et j'affiche la date du lendemain.
Ceci est juste la premiere version. Merci de me conseiller des ameliorations

Source / Exemple :


#include<stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

#define true   32000
#define false -31000
int  jour,mois,annee,maxday,c;
char j[10],m[10],a[10];
int  convertitEntier(char nb);			//fonction convertissant une chaine de caractere en entier
int  estJour(int day);				//fonction verifiant qu un entier est un jour valide
int  estMois(int month);			//fonction verifiant qu un entier est un mois valide
int  estAnnee(int year);			//fonction verifiant qu un entier est une annee valide
int  estDateValide(int day,int month,int year); //fonction verifiant que 3 entier forme une date valide
void dateSuivante(int day,int month,int year);  //fonction calculant la date du lendemain d'un jour
void lecture(void);				//fonction permettant la lecture des donnees en entree
void animation();

//*****************************************************************************************
int convertitEntier(char *nb)
{
	char str[25];
	double num;
	int sig = 5; /* significant digits */
	if(strlen(nb)==0)
	{
		puts("La valeur saisie n' est pas entiere.\n");
		return false;
	}
	else
	{
		gcvt(atoi(nb), sig, str);
		if(strlen(nb) != strlen(str))
		{
			puts("La valeur saisie n'est pas entiere.\n");
			return false;
		}
		else
		{        //printf("\nla valeur convertie est %d",atoi(nb));
			return (atoi(nb));
		}
	}
}
//******************************************************************************
int estJour(int day)
{
	if((day<1)||(day>31))
	{
		puts("\nLes jours vont du 1er au 31 en general. Recommencer svp");
		return false;
	}
	else
	{
		//printf("\nla valeur du jour est %d",day);
		return (day);
	}
}
//******************************************************************************
int estMois(int month)
{
	if((month<1)||(month>12))
	{
		puts("\nLes mois vont du 1er au 12. Recommencer svp");
		return false;
	}
	else
	{
		//printf("\nla valeur du mois est %d",month);
		return (month);
	}
}
//*******************************************************************************
int estAnnee(int year)
{
	if((year<1980)||(year>2050))
	{
		puts("\nLes annees varient entre 1980 et 2050. Recommencer svp");
		return false;
	}
	else
	{
		//printf("\nla valeur annuelle est %d",year);
		return (year);
	}

}
//*******************************************************************************
int estDateValide(int day,int month,int year)
{

	if((month == 4) || (month == 6) || (month == 9) || (month == 11))
		maxday=30;
	else
	{
		if((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 11) || (month == 12))
			maxday=31;
		else
			maxday=27;
	}
	if(year % 4 == 0)
		if(month == 2)
			maxday=28;
	if((day > maxday))
		return (false);
	else
		return (true);

}
//**********************************************************************************
void dateSuivante(int day,int month,int year)
{
	int d,m,y;
	d=day;
	m=month;
	y=year;
	if(day < maxday)
		day+=1;
	else
	{
		day=1;
		if(month < 12)
			month+=1;
		else
		{
			month=1;
			year+=1;
		}
	}
	printf("\nle lendemain du %d-%d-%d est le %d-%d-%d",d,m,y,day,month,year);
}
//********************************************************************************************
void lecture(void)
{
      do
      {
	clrscr();
	puts("Ce programme affiche la date du lendemain d'un jour.\n");
	printf("\nTaper les information requises : ");
	flushall();
	printf("\nJour  : ");
	gets(j);
	flushall();
	printf("Mois  : ");
	gets(m);
	flushall();
	printf("Annee : ");
	gets(a);
	flushall();
	if(((jour = convertitEntier(j)) == false )| ((mois = convertitEntier(m)) == false ) | ((annee = convertitEntier(a)) == false ))
		printf("\n precision 1  '%d-%d-%d' ",jour,mois,annee);
	else
	{
		if((( estJour(jour)) == false) || (( estMois(mois)) == false) || (( estAnnee(annee)) == false))
			printf("\nLes bornes sont les suivantes en general : \n 1<jour<31\n 1<mois<12\n 1980<annee<2050");

		else
		{
			if(estDateValide(jour,mois,annee) == false)
				printf("\n '%d-%d-%d' n'est pas une date valide. Recommencer svp",jour,mois,annee);
			else
				dateSuivante(jour,mois,annee);
		}
	}
	puts("\n\n\n Echap pour arreter, sinon n'importe quelle touche.");
      }while((c=getch()) != 27);
      animation();
}
void animation()
{
	for(int i=0;i<75;i++)
	{
		gotoxy(i,wherey());
		delline();
		printf("Sniper.");
		delay(30);
	}
	delay(500);
}

//*******************************************************************************
int main()
{
	clrscr();
	lecture();
	return 0;
}

Conclusion :


Apres appreciations de votre part, merci de me faire part de vos ameliorations

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.

Du même auteur (ankiambom_virgil)