Calcul emprunt et remboursement

Soyez le premier à donner votre avis sur cette source.

Snippet vu 12 970 fois - Téléchargée 36 fois

Contenu du snippet

c'est un un programme qui calcule les différentes échéance de remboursement d’un emprunt en fonction des point suivants :

•Le montant de la somme emprunté.
•La date de départ qui correspond à la date de disposition de la somme par l’emprunteur.
•La date de début du remboursement de l’emprunt.
•La durée de l’emprunt, qui correspond à la différence entre la fin des remboursements et la date de début de l’emprunt.
•Le taux annuel d’emprunt .
•La périodicité de remboursement de l’emprunt (en général mensuel, bimestriel, trimestriel, semestriel ou annuel).
•Le différé de remboursement du capital. C’est le temps séparent le remboursement du capital (hors intérêt) de la date de début des remboursements.
•Le différé de remboursement des intérêts. C’est le temps séparent le remboursement des intérêts (hors capital) de la date de début des remboursements.

surtout n'hésitez pas aller sur mon site: http://membres.lycos.fr/joefreddy
il y a des tutoriaux , des cahiers des charges de progiciels de gestion en C++
afin de se familiariser avec le développement (les classes MFC,...)

Bon courage!

Source / Exemple :


#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<math.h>

class Emprunt{
public:
	double somemprunt;
	char date1[11];//date depart
	char date2[11];//date debut
	 long date3;//diff fin et debut
	double taux;//taux annuel emprunt
	char periode[50];
		long differecapitale;
	long differeremboursement;
	int periode_jours;
	public :void etudeperiode();

	

};
void Emprunt::etudeperiode()
{	if (strcmp(periode,"mensuel")==0){periode_jours=30;}
else if(strcmp(periode,"bimestriel")==0){periode_jours=60;}
else if(strcmp(periode,"trimestriel")==0){periode_jours=90;}
else if(strcmp(periode,"semestriel")==0){periode_jours=180;}
else if(strcmp(periode,"annuel")==0){periode_jours=360;}

}
void nouvelledate2(char* source,int res)
{
	int i;
	int tab[12];
	int res1,res2,res3;
	//prenons comme reference une année non bissextile
	tab[0]=31;tab[1]=29;tab[2]=31;tab[3]=30;tab[4]=31;
	tab[5]=30;tab[6]=31;tab[7]=31;tab[8]=30;tab[9]=31;
	tab[10]=30;tab[11]=31;
	

	res1=((int)source[0]-(int)'0')*10+((int)source[1]-(int)'0');
	res2=((int)source[3]-(int)'0')*10+((int)source[4]-(int)'0');
	res3=((int)source[6]-(int)'0')*1000+((int)source[7]-(int)'0')*100+((int)source[8]-(int)'0')*10+((int)source[9]-(int)'0');

	for(i=0;i<res/30;i++){
	if(res1+30<tab[res2-1]){res1=res1+30;}
	else if((res1+30>tab[res2-1])&&(res2<12)){res1=res1+30-tab[res2-1];res2++;}
	else if((res1+30>tab[res2-1])&&(res2=12)){res1=res1+30-tab[res2-1];res2=1;res3++;}
	}
	if(res1+res%30<tab[res2-1]){res1=res1+(res%30);}
	else if((res1+res%30>tab[res2-1])&&(res2<12)){res1=res1+(res%30)-tab[res2-1];res2++;}
	else if((res1+res%30>tab[res2-1])&&(res2=12)){res1=res1+(res%30)-tab[res2-1];res2=1;res3++;}
	
	
	source[0]=(char)((res1/10)+(int)'0');
	source[1]=(char)((res1%10)+(int)'0');
	source[3]=(char)((res2/10)+(int)'0');
	source[4]=(char)((res2%10)+(int)'0');
	source[6]=(char)((res3/1000)+(int)'0');
	source[7]=(char)(((res3%1000)/100)+(int)'0');
        source[8]=(char)((((res3%1000)%100)/10)+(int)'0');
	source[9]=(char)((((res3%1000)%100))+(int)'0');
}

int difference2dates(char* source1,char* source2)
{
	int resultat,anne;
	int res1,res2,res3,res4,res5,res6;
	res1=((int)source1[0]-(int)'0')*10+((int)source1[1]-(int)'0');
	res2=((int)source1[3]-(int)'0')*10+((int)source1[4]-(int)'0');
	res3=((int)source1[6]-(int)'0')*1000+((int)source1[7]-(int)'0')*100+((int)source1[8]-(int)'0')*10+((int)source1[9]-(int)'0');

	res4=((int)source2[0]-(int)'0')*10+((int)source2[1]-(int)'0');
	res5=((int)source2[3]-(int)'0')*10+((int)source2[4]-(int)'0');
	res6=((int)source2[6]-(int)'0')*1000+((int)source2[7]-(int)'0')*100+((int)source2[8]-(int)'0')*10+((int)source2[9]-(int)'0');
	
	if(res6==res3)
	{
		resultat=(abs(res5-res2))*30+abs(res1-res4);
		
	
	}
	else
	{
		anne=abs(res6-res3);
		if((res2<=res5)&&(res1<=res4))//ok
		{resultat=anne*360+(abs(res5-res2))*30+abs(res1-res4);}
		else if((res2<=res5)&&(res1>res4))
		{resultat=anne*360+(abs(res5-res2))*30-abs(res1-res4);}
		else if((res2>res5)&&(res1<=res4))//ok
		{resultat=anne*360-(abs(res5-res2))*30+abs(res1-res4);}
		else if((res2>res5)&&(res1>res4))//ok
		{resultat=anne*360-(abs(res5-res2))*30-abs(res1-res4);}

	}
	return resultat;

}

int nbrebourse,nbrebourse_par_an;

void main()
{
	Emprunt essai;//création de l'objet;
	double* mecheance;//tableau des echeances sa taille est celle du nombre d'echeance.
	double* capitale;//tableau total echeance;
	double* interet;
	double* amortissement;

	int i;double resultat2,resultat3,resultat4,somme;
	//remplissage
	printf("Entrez le montant de la somme emprunte? \n");
	scanf("%lf",&essai.somemprunt);

	printf("Entrez la date de depart (jj/mm/aaaa exple 01/01/2001)?\n");
	scanf("%s",&essai.date1[0]);
	printf("Entrez la date de debut du remboursement (jj/mm/aaaa exple: 06/01/2001) ?\n");
	scanf("%s",&essai.date2[0]);
	printf("Entrez la duree de l'emprunt en jour ?\n");
	scanf("%d",&essai.date3);
	printf("Veuillez saisir le taux annuel d'emprunt?\n");
	scanf("%lf",&essai.taux);
	
	printf("Entrez la periodicite de remboursement (mensuel,bimestriel,trimestriel,semestriel ou annuelle) ?\n");
	scanf("%s",&essai.periode[0]);
	printf("Entrez le differe de remboursement du capital en jour? \n");
	scanf("%d",&essai.differecapitale);
	printf("Entrez le differe de remboursement des interets en jour?\n");
	scanf("%d",&essai.differeremboursement);
	essai.etudeperiode();
	//pour etre sur que les bonnes valeurs sont prises.
	printf("*****reaffichage automatique des resultats pour etre sur de la saisie*****\n");
	printf("%lf\n",essai.somemprunt);
	printf("%s\n",essai.date1);
	printf("%s\n",essai.date2);
	printf("%d\n",essai.date3);
	printf("%lf\n",essai.taux);
	printf("%s\n",essai.periode);
	printf("%d\n",essai.differecapitale);
	printf("%d\n",essai.differeremboursement);
	printf("la periode est de %d\n",essai.periode_jours);
	//relatif au changement de la date debut remboursement.
	if((essai.differecapitale!=0)&&(essai.differeremboursement!=0))
	{
		if(essai.differecapitale>=essai.differeremboursement)
		{
			nouvelledate2(&essai.date2[0],essai.differeremboursement);
		}
		else{nouvelledate2(&essai.date2[0],essai.differecapitale);}
	}

	//suite de traitement
	printf("*****reaffichage automatique des resultats pour etre sur de la saisie*****\n");
	printf("%lf\n",essai.somemprunt);
	printf("%s\n",essai.date1);
	printf("la nouvelle date est %s\n",essai.date2);
	printf("%d\n",essai.date3);
	printf("%lf\n",essai.taux);
	printf("%s\n",essai.periode);
	printf("%d\n",essai.differecapitale);
	printf("%d\n",essai.differeremboursement);
	printf("la periode est de %d\n",essai.periode_jours);
	printf("la difference entre t2 et t1 est : %d\n",difference2dates(&essai.date1[0],&essai.date2[0]));
    nbrebourse=(essai.date3-difference2dates(&essai.date1[0],&essai.date2[0]))/essai.periode_jours;
	printf("le nombre de remboursement est de : %d\n",nbrebourse);
	nbrebourse_par_an=365/essai.periode_jours;
	printf("le nombre de remboursement par an est de %d\n",nbrebourse_par_an);
	mecheance=new double[nbrebourse];
	//remplissage du tableau echeancier
	resultat4=(double)nbrebourse_par_an;
	resultat3=(double)nbrebourse;
	resultat2=1.0-pow((1.0+essai.taux/100/resultat4),-resultat3);
	for(i=0;i<nbrebourse;i++)
	{
		if(essai.taux!=0){mecheance[i]=(essai.somemprunt*essai.taux/100/resultat4)/resultat2;}
		else{mecheance[i]=essai.somemprunt/resultat4;}
	}
	printf("resultat4= %f\n",resultat4);
	printf("resultat3=%f\n",resultat3);
	printf("resultat2=%f\n",resultat2);
	if(essai.differecapitale>essai.differeremboursement)
	{
		for(i=0;i<((essai.differecapitale-essai.differeremboursement)/essai.periode_jours);i++)
		{
			mecheance[i]=essai.somemprunt*essai.taux/100/resultat4;
		}
	}
	
	
	capitale=new double[nbrebourse];
	
	interet=new double[nbrebourse];
	amortissement=new double[nbrebourse];

	somme=0;
	for(i=0;i<nbrebourse;i++)
	{	capitale[i]=essai.somemprunt-somme;
		interet[i]=capitale[i]*essai.taux/100/resultat4;
	
		amortissement[i]=mecheance[i]-interet[i];
		somme=somme+amortissement[i];
		

	}
	

	printf("le montant de l echeance capitale est de %f \n",mecheance[0]);
	printf("le recapitulatif des resultats est le suivant:\n");

	printf("\n*******capital******\n");
	for(i=0;i<nbrebourse;i++)
	{
		printf("capital[%d]=%.2f\n",i,capitale[i]);
	}
		printf("\n*******interet******\n");
	for(i=0;i<nbrebourse;i++)
	{
		printf("interet[%d]=%.2f\n",i,interet[i]);
	}
		printf("\n******* echeance totale ******\n");
	for(i=0;i<nbrebourse;i++)
	{
		printf("mecheance[%d]=%.2f\n",i,mecheance[i]);
	}

	printf("\n******montant des amortissements*******\n");
	
	for(i=0;i<nbrebourse;i++)
	{
		printf("amortissement[%d]=%.2f\n",i,amortissement[i]);
	}

	
getchar();
getchar();
	
		
}

A voir également

Ajouter un commentaire Commentaires
JolyLoic Messages postés 3 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 5 août 2003
5 août 2003 à 20:24
Il semble suite au message d'injure que j'ai reçu de l'auteur que mon commentaire n'était pas assez clair. Le code est illégal, car l'état défini avec précision les règles concernant l'arrondi des valeurs en matière de valeur monétaires.

Dans ce programme manipulant de telles valeurs, le type utilisé est double, et ce type ne répond pas à ces règles d'arrondi. Non seulement le résultat du programme sera donc faux, mais en plus il n'est pas légal.

Il peut-être criticable que la loi autorise la vente de logiciels buggés à mort mais interdise les logiciels ne respectant pas ses règles d'arrondi, mais c'est comme ça.
JolyLoic Messages postés 3 Date d'inscription lundi 4 août 2003 Statut Membre Dernière intervention 5 août 2003
4 août 2003 à 11:13
Ce code est illégal (utilisation de double pour des valeurs monétaires)

Ce n'est pas à proprement parler du C++, il y a des fuites de mémoire,...

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.