Le compte (bancaire) est bon

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Claude OI
Messages : 14
Inscription : mar. 25/nov./2008 12:40

Le compte (bancaire) est bon

Message par Claude OI »

Bonjour à tous,
débutant en PB je me suis dis que le plus simple (!!) serait peut être d'adapter un petit programme de ceux que j'ai déjà en PHP.
Voici donc ma toute première réalisation qui sert uniquement à vérifier les comptes bancaires entrés dans les formulaires divers.

J'aimerais juste avoir qq retours pour savoir si je suis dans le vrai en matière de PB ou si je dois me convertir à la couture.

A bientôt

Code : Tout sélectionner

Enumeration
#WindowMain

#GAD_TEXT_code_banque
#GAD_TEXT_code_guichet
#GAD_TEXT_compte
#GAD_TEXT_rib
#GAD_TEXT_message

#GAD_STR_code_banque
#GAD_STR_code_guichet
#GAD_STR_compte
#GAD_STR_rib

#GAD_BOUT_validation
#GAD_BOUT_abandon

EndEnumeration

Declare controlerib()



OpenWindow(#WindowMain, 0, 0, 550, 160, "Contrôle des comptes bancaires", #PB_Window_ScreenCentered )
CreateGadgetList(WindowID(#WindowMain))

ButtonGadget(#GAD_BOUT_validation, 20,20, 150, 20, "controle du compte")
ButtonGadget(#GAD_BOUT_abandon, 20, 110, 150, 20, "Abandon")

TextGadget(#GAD_TEXT_code_banque, 200, 20, 120, 20, "Code banque")
TextGadget(#GAD_TEXT_code_guichet, 200, 50, 120, 20, "Code guichet")
TextGadget(#GAD_TEXT_compte, 200, 80, 120, 20, "Numéro de compte")
TextGadget(#GAD_TEXT_rib, 200, 110, 120, 20, "Clé RIB")

TextGadget(#GAD_TEXT_message, 200, 140, 330, 15, "", #PB_Text_Center)
SetGadgetColor(#GAD_TEXT_message, #PB_Gadget_BackColor, $BAFEFC )
SetGadgetColor(#GAD_TEXT_message, #PB_Gadget_FrontColor, $0000FD )
HideGadget(#GAD_TEXT_message, 1)

StringGadget(#GAD_STR_code_banque, 350, 20, 50, 20, "",#PB_String_Numeric)
StringGadget(#GAD_STR_code_guichet, 350, 50, 50, 20, "",#PB_String_Numeric)
StringGadget(#GAD_STR_compte, 350, 80, 180, 20, "", #PB_String_UpperCase)
StringGadget(#GAD_STR_rib, 350, 110, 50, 20, "",#PB_String_Numeric)

Repeat 
	event = WaitWindowEvent()
		If event = #PB_Event_Gadget 
			Select EventGadget()
				Case #GAD_BOUT_validation
					;déclenche le controle du compte bancaire
					controlerib()
			EndSelect		
		EndIf
Until EventGadget() = #GAD_BOUT_abandon



Procedure controlerib()
	;Réinitialise l'affichage préalablement au contrôle
	SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_BackColor, $FFFFFF )
	SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_FrontColor, $000000 )
	SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_BackColor, $FFFFFF )
	SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_FrontColor, $000000 )
	SetGadgetColor(#GAD_STR_compte, #PB_Gadget_BackColor, $FFFFFF )
	SetGadgetColor(#GAD_STR_compte, #PB_Gadget_FrontColor, $000000 )
	SetGadgetColor(#GAD_STR_rib, #PB_Gadget_BackColor, $FFFFFF )
	SetGadgetColor(#GAD_STR_rib, #PB_Gadget_FrontColor, $000000 )
    HideGadget(#GAD_TEXT_message, 1)

	;Certain comptes comme ceux de la Poste comporte des lettres dans le numéro de compte
	;Il est nécéssaire de remplacer ces lettres par un caractère numérique selon l'algorithme suivant
     compte.s = ""
     For compteur = 1 To 11 ;Les 11 caractères du compte sont lus les un après les autres
        caractere.s = Mid(GetGadgetText(#GAD_STR_compte), compteur, 1) ; on extrait le caractère
        ascode.b = Asc(caractere) ; et on lit son code ASCII
        
        If ascode > 82 ;soit [S-Z]									;
            compte + Str((Asc(caractere) -81)%10)			;
        ElseIf ascode >73 ; soit [J-R]							;
            compte + Str((Asc(caractere)-73)%10)			; si le code ASCII représente une lettre il est transformé selon son rang
        ElseIf ascode >57 ; soit [A-I]							; et ajouté en fin de chaine "compte"
            compte + Str((Asc(caractere)-64)%10)			;
        Else
            compte + caractere										; si c'est un chiffre il est conservé tel quel et ajouté à la chaine
        EndIf       
     Next
     
     ;par exemple, le compte 00915078A24 sera remplacé par 00915078124
     ;code ASCII de A = 65 soit 65-64=1     1%10=1
     ;ou encore le compte Z0915078A24 sera remplacé par 90915078124
     ;code ASCII de Z = 90 soit 90-81=9   9%10=9
     
	 ; ensuite le calcul de la clé est le suivant que je vous laisse découvrir. Un petit conseil, surlignez bien les parenthèses pour suivre les calculs     
     cle.s = Str(Val(GetGadgetText(#GAD_STR_code_banque))%97)
     cle = Str((Val(cle) * 100000 + (Val(GetGadgetText(#GAD_STR_code_guichet))))%97)
     cle = Str((Val(cle) * 1000000 + (Val(Left(compte , 6))))%97)
     cle = Str((Val(cle) * 100000 + (Val(Right(compte , 5))))%97)
     cle = Str(((97 - Val(cle)) * 100)%97)
     If Len(cle) < 2 : cle = "0" + cle : EndIf
 
 	 ;et une simple comparaison permet de modifier l'affichage pour attirer l'attention en cas d'erreur     
     If cle <> GetGadgetText(#GAD_STR_rib)
            SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_BackColor, $BAFEFC )
            SetGadgetColor(#GAD_STR_code_banque, #PB_Gadget_FrontColor, $0000FD )
            SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_BackColor, $BAFEFC )
            SetGadgetColor(#GAD_STR_code_guichet, #PB_Gadget_FrontColor, $0000FD )
            SetGadgetColor(#GAD_STR_compte, #PB_Gadget_BackColor, $BAFEFC )
            SetGadgetColor(#GAD_STR_compte, #PB_Gadget_FrontColor, $0000FD )
            SetGadgetColor(#GAD_STR_rib, #PB_Gadget_BackColor, $BAFEFC )
            SetGadgetColor(#GAD_STR_rib, #PB_Gadget_FrontColor, $0000FD )
            SetGadgetText(#GAD_TEXT_message, "Pour ce compte la clé RIB devrait être: " + cle + ". A vous de voir  !!!")
            HideGadget(#GAD_TEXT_message, 0)
     EndIf

EndProcedure
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Tout d'abord, je suis super content d'accueillir un "petit nouveau" dans notre famille 8)

Pour ton premier code, je suis dans le regret de te dire franchement et sans détour, le fond interne de ma pensée..........

Et cela meme si ça doit te décevoir profondément, voir meme te blesser dans ton fond le plus interne.........

Car il est des moments ou une bonne vérité, vaut mieux que beaucoup d'années de dur labeur, et de faux espoirs


ABANDONNE LA COUTURE !!! :lol: :lol:


Tu commence a peu pres ou j'en suis en bossant depuis 4 ans :oops:

Encore une fois bienvenue à toi
Et a bientot :wink:
Stefou
Messages : 234
Inscription : jeu. 18/janv./2007 14:08

Message par Stefou »

Salut et bienvenue

Je viens de lire ton code, il est propre est bien commenté.
Kcc à raison, laisse tombé la couture !


a+ et bonne continuation
Stef
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Bienvenue

Très sympa ton code, puis-je le copier sur le site DVP ?
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Claude OI
Messages : 14
Inscription : mar. 25/nov./2008 12:40

Message par Claude OI »

Bonjour à tous

Kcc et Stephou, arrêtez les compliments la tête ne passe plus par la porte. :oops:

Pour comtois, bien sûr que tu peux le copier et le diffuser autant que tu voudra. Tant mieux si cela peut servir à quelqu'un.

Ce n'est qu'une petite partie d'un gestionnaire de répertoire que je suis en train d'écrire (les pros diront: développer) mais dont je ne sais pas quand j'en verrai la fin.
Cela commence bien, rien que pour la partie graphique, j'ai plus de 200 gadgets, un panel de 10 onglets et chaque champs de saisie est vérifié et modifié dans sa présentation, si une erreur est détectée dans la saisie. Sans compter l'affichage des messages.

Juste en hors d'œuvre, je vous livre ma solution d'énumération pliable.

Code : Tout sélectionner

Enumeration

;{ Les styles
	;{ Les polices
		#POLICE_standard
		#POLICE_gras
	;} fin des polices
;} fin des styles
;{ Les images
	#BOUTON_fleche
;} fin des images

;{ Fenêtre principale

	;{ La fenêtre
		#WindowMain
	;}
	
	;{ Les boutons
		#GAD_BOUT_creation
		#GAD_BOUT_consultation
		#GAD_BOUT_modification
		#GAD_BOUT_suppression
		#GAD_BOUT_validation
		#GAD_BOUT_abandon
		#GAD_BOUT_sqlite
		#GAD_BOUT_supfiche
	;}
	
	;{ Les frames
		#GAD_FR3D_exterieur
		#GAD_FR3D_interieur
	;}
	
	;{ Les zones de saisie texte
		#GAD_TEXT_msg_nom
		#GAD_TEXT_msg_divers
	;}
		
;}

;{ Panel de gestion des fiches
	#GAD_PANL_fiche
	;{ Les onglets du panel de création de fiche
		; L'onglet des civilités
			;{ Les labels
				#GAD_TEXT_civilite
				#GAD_TEXT_nom
				#GAD_TEXT_prenom
				#GAD_TEXT_nomjf
				#GAD_TEXT_ss
				#GAD_TEXT_motif
				#GAD_TEXT_enseigne
				#GAD_TEXT_type_entreprise                                
				#GAD_TEXT_registre_commerce
				#GAD_TEXT_ape
				#GAD_TEXT_siret
				#GAD_TEXT_siren
			;} fin des labels
			;{ Les listes de choix
			 	#GAD_CBX_civilite                                                      
			    #GAD_CBX_motif
			    #GAD_CBX_type_entreprise
			;} fin des listes de choix
			;{ les zones saisie texte
			    #GAD_STR_nom 
			    #GAD_STR_prenom
			    #GAD_STR_nom_jf
			    #GAD_STR_securite_sociale
			    #GAD_STR_enseigne
			    #GAD_STR_registre_commerce
			    #GAD_STR_ape
			    #GAD_STR_siret
			    #GAD_STR_siren
			;} fin des zones saisie texte
			;{ les boutons
			 	#GAD_BIMG_motif
			 	#GAD_BIMG_type_entreprise
		 		#GAD_BOUT_fiches_liees
		 		#GAD_IMG_fleche_droite
			;} fin des boutons
		; L'onglet de l'adresse
			;{ Les labels
				#GAD_TEXTresse1
				#GAD_TEXTresse2
				#GAD_TEXTresse3
				#GAD_TEXT_village
				#GAD_TEXT_code_postal
				#GAD_TEXT_commune
				#GAD_TEXT_pays
			;} fin des labels
			;{ Les frames
				#GAD_FR3Dresse
			;} fin des frames
			;{ Les zones de saisie texte
				#GAD_STRresse1
				#GAD_STRresse2
				#GAD_STRresse3
				#GAD_STR_village
				#GAD_STR_code_postal
				#GAD_STR_commune
				#GAD_STR_pays
			;} fin des zones de saisie texte
		; L'onglet de la naissance
			;{ Les labels
				#GAD_TEXT_date_naissance
				#GAD_TEXT_date_creation_entreprise
				#GAD_TEXT_code_postal_naissance
				#GAD_TEXT_ville_naissance
				#GAD_TEXT_pays_naissance
				#GAD_TEXT_nationalite
				#GAD_TEXT_date_deces
				#GAD_TEXT_date_fermeture_entreprise
			;} fin des labels
			;{ Les frames
				#GAD_FR3D_naissance
			;} fin des frames
			;{ Les zones de saisie texte
				#GAD_STR_date_naissance
				#GAD_STR_code_postal_naissance
				#GAD_STR_ville_naissance
				#GAD_STR_pays_naissance
				#GAD_STR_nationalite
				#GAD_STR_date_deces
			;} fin des zones de saisie texte
			;{ Les messages tooltip
				#GAD_STR__date_naissance
			;} fin des messages tooltip
		; L'onglet des communications personnelles
			;{ Les labels
				#GAD_TEXT_phone_perso1
				#GAD_TEXT_phone_perso2
				#GAD_TEXT_phone_perso3
				#GAD_TEXT_gsm_perso1
				#GAD_TEXT_gsm_perso2
				#GAD_TEXT_gsm_perso3
				#GAD_TEXT_fax_perso1
				#GAD_TEXT_fax_perso2
				#GAD_TEXT_fax_perso3
				#GAD_TEXT_mail_perso1
				#GAD_TEXT_mail_perso2
				#GAD_TEXT_web_perso1
				#GAD_TEXT_web_perso2
			;} fin des labels
			;{ Les zones de saisie texte
				#GAD_STR_phone_perso1
				#GAD_STR_phone_perso2
				#GAD_STR_phone_perso3
				#GAD_STR_gsm_perso1
				#GAD_STR_gsm_perso2
				#GAD_STR_gsm_perso3
				#GAD_STR_fax_perso1
				#GAD_STR_fax_perso2
				#GAD_STR_fax_perso3
				#GAD_STR_mail_perso1
				#GAD_STR_mail_perso2
				#GAD_STR_web_perso1
				#GAD_STR_web_perso2
			;} fin des zones de saisie texte
		; L'onglet des communications professionnelles
			;{ Les labels
				#GAD_TEXT_phone_prof1
				#GAD_TEXT_phone_prof2
				#GAD_TEXT_phone_prof3
				#GAD_TEXT_gsm_prof1
				#GAD_TEXT_gsm_prof2
				#GAD_TEXT_gsm_prof3
				#GAD_TEXT_fax_prof1
				#GAD_TEXT_fax_prof2
				#GAD_TEXT_fax_prof3
				#GAD_TEXT_mail_prof1
				#GAD_TEXT_mail_prof2
				#GAD_TEXT_web_prof1
				#GAD_TEXT_web_prof2
			;} fin des labels
			;{ Les zones de saisie texte
				#GAD_STR_phone_prof1
				#GAD_STR_phone_prof2
				#GAD_STR_phone_prof3
				#GAD_STR_gsm_prof1
				#GAD_STR_gsm_prof2
				#GAD_STR_gsm_prof3
				#GAD_STR_fax_prof1
				#GAD_STR_fax_prof2
				#GAD_STR_fax_prof3
				#GAD_STR_mail_prof1
				#GAD_STR_mail_prof2
				#GAD_STR_web_prof1
				#GAD_STR_web_prof2
			;} fin des zones de saisie texte
		; L'onglet de la banque
			;{ Les labels
				#GAD_TEXT_nom_banque
				#GAD_TEXT_code_banque
				#GAD_TEXT_code_guichet
				#GAD_TEXT_compte
				#GAD_TEXT_rib
			;} fin des labels
			;{ Les frames
				#GAD_FR3D_banque1
				#GAD_FR3D_banque2
			;} fin des frames
			;{ Les zones de saisie texte
				#GAD_STR_nom_banque1
				#GAD_STR_code_banque1
				#GAD_STR_code_guichet1
				#GAD_STR_compte1
				#GAD_STR_rib1
				#GAD_STR_nom_banque2
				#GAD_STR_code_banque2
				#GAD_STR_code_guichet2
				#GAD_STR_compte2
				#GAD_STR_rib2
			;} fin des zones de saisie texte
		; L'onglet du contact
			;{ Les labels
				#GAD_TEXT_civilite_contact
				#GAD_TEXT_nom_contact
				#GAD_TEXT_prenom_contact
				#GAD_TEXTresse1_contact
				#GAD_TEXTresse2_contact
				#GAD_TEXTresse3_contact
				#GAD_TEXT_village_contact
				#GAD_TEXT_code_postal_contact
				#GAD_TEXT_commune_contact
				#GAD_TEXT_phone_contact
				#GAD_TEXT_gsm_contact
				#GAD_TEXT_fax_contact
				#GAD_TEXT_mail_contact
			;} fin des labels
			;{ Les listes de choix
				#GAD_COBO_civilite_contact
			;} fin des listes de choix
			;{ Les zones de saisie texte
				#GAD_STR_nom_contact
				#GAD_STR_prenom_contact
				#GAD_STRresse1_contact
				#GAD_STRresse2_contact
				#GAD_STRresse3_contact
				#GAD_STR_village_contact
				#GAD_STR_code_postal_contact
				#GAD_STR_commune_contact
				#GAD_STR_phone_contact
				#GAD_STR_gsm_contact
				#GAD_STR_fax_contact
				#GAD_STR_mail_contact
				#GAD_STR_web_contact
			;} fin des zones de saisie texte
		; L'onglet des papiers
			;{ Les labels
				#GAD_TEXT_numero_document
				#GAD_TEXT_delivrance_document
				#GAD_TEXT_lieu_document
				#GAD_TEXT_expiration_document
			;} Fin des labels			
			;{ Les frames
				#GAD_FR3D_carte_identite
				#GAD_FR3D_passeport
				#GAD_FR3D_carte_sejour
			;} Fin des frames
			;{ Les zones de saisie texte
				#GAD_STR_carte_identite_numero
				#GAD_STR_carte_identite_delivrance
				#GAD_STR_carte_identite_lieu
				#GAD_STR_carte_identite_expiration
				#GAD_STR_passeport_numero
				#GAD_STR_passeport_delivrance
				#GAD_STR_passeport_lieu
				#GAD_STR_passeport_expiration
				#GAD_STR_carte_sejour_numero
				#GAD_STR_carte_sejour_delivrance
				#GAD_STR_carte_sejour_lieu
				#GAD_STR_carte_sejour_expiration
			;} Fin des zones de saisie texte
		; L'onglet photo
			;{ Les labels
				#GAD_TEXT_photo
			;} fin des labels
			;{ Les listes exploratoires
				#GAD_EXPL_photo
			;} fin des listes exploratoires		
		; L'onglet des commentaires
			;{ Les labels
				#GAD_TEXT_commentaire
			;} fin des labels
			;{ Les editeurs
				#GAD_EDIT_commentaire
			;} fin des editeurs
	;} fin des onglets du panel
;} Fin du panel

EndEnumeration	
Je n'avais pas encore vu cela dans aucun des exemples que j'ai parcouru mais je trouve que c'est bien pratique. Comme dirai l'autre, une fois plié cela tiens dans la poche.

Pour l'archivage, j'ai choisi de créer une base sqlite car j'en avait déjà tâté un peu en Php et je trouve que c'est simple à utiliser et portable facilement.

Enfin bref, j'ai des "proc in the ram" (traduction improbable de "du pain sur la planche" et je mettrai tout cela en ligne au fur et à mesure.

Bon courage à tous et à bientôt
Répondre