Date de paiement de la retraite

Programmation d'applications complexes
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Date de paiement de la retraite

Message par Micoute »

Bonjour à tous,

pour ceux que ça intéresse, car n'ayant pas de projets de développement en ce moment, j'ai fait ce petit programme qui calcule les dates de paiement de la retraite, mais pas les sommes versées.

Ce programme est largement améliorable.

Code : Tout sélectionner

;Date de paiement de la retraite
;par Micoute 7 juin 2019
;remis à jour le 17 juin 2019

EnableExplicit

Enumeration Fenetres
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets
  #Txt_Enonce
  #Str_Annee
  #Lst_Paiements
  #Btn_Quitter
EndEnumeration

Enumeration Polices
  #Police
EndEnumeration

Structure sMois
  Nom.s
  Numero.i
EndStructure

Structure sJour
  Nom.s
  Numero.i
EndStructure  

Structure Retraite
  NomMois.s
  NomJour.s
  J.i
  M.i
  A.i
EndStructure

LoadFont(#Police, "Verdana", 12)
SetGadgetFont(#PB_Default, FontID(#Police))

Global Evenement, i, Jour, Mois, Annee = Year(Date()), Retraite.Retraite
Global Dim TabNomMois.sMois(12), Dim TabNomJours.sJour(6)

For i = 1 To 12
  TabNomMois(i)\Nom=StringField("janvier février mars avril mai juin juillet août septembre octobre novembre décembre",i," ")
  TabNomMois(i)\Numero=i
Next i

For i = 0 To 6
  TabNomJours(i)\Nom=StringField("dimanche lundi mardi mercredi jeudi vendredi samedi",i+1," ")
  TabNomJours(i)\Numero=i
Next i


Declare.s Paiement_Retraite(Annee, Mois)
Declare Programme_principal()
Declare Quitter()

Programme_principal()

Procedure Programme_principal()
  If OpenWindow(#Fenetre_principale, 0, 0, 380, 380, "Retraite", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(#Txt_Enonce, 20, 20, 360, 20, "jours de paiement de la retraite en " + Annee)
    ListIconGadget(#Lst_Paiements, 30, 60, 330, 270, "Date", 320, #LVS_NOCOLUMNHEADER)
    ButtonGadget(#Btn_Quitter, 140, 350, 100, 20, "Quitter")
    i = 1
    While i <= 11
      Paiement_Retraite(Annee, i)
      i + 1
      AddGadgetItem(#Lst_Paiements, i, Retraite\NomMois + " : " + Retraite\NomJour + " " + Retraite\J + " " +TabNomMois(i)\Nom + " " + Retraite\A)
    Wend    
    Paiement_Retraite(Annee + 1, 12)
    AddGadgetItem(#Lst_Paiements, i, "décembre" + " : " + Retraite\NomJour + " " + Retraite\J + " " +TabNomMois(1)\Nom + " " + Retraite\A)
    BindGadgetEvent(#Btn_Quitter, @Quitter())
  EndIf
EndProcedure

Procedure Quitter()
  Select EventType()
    Case #PB_EventType_LeftClick
      CloseWindow(#Fenetre_principale)
      End
  EndSelect
EndProcedure

Repeat
  Evenement = WaitWindowEvent()
  Select Evenement

    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Btn_Quitter
      EndSelect

    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Procedure.s Paiement_Retraite(Annee, Mois)
  Protected Jour = 9, JourSem = 1 ;lundi
  Protected DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  ;Le paiement est effectué le jour ouvré le plus proche du 9, mais jamais après
  If DayOfWeek(DatePaiement) = 0 ;Si c'est un dimanche, on enlève 2 jours
    JourSem = 5
    Jour = 7
    DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  ElseIf DayOfWeek(DatePaiement) = 6 ;Si c'est un samedi, on enlève 1 jour
    JourSem = 5
    Jour = 8
    If mois = 5 ;Si c'est le 8 mai, on soustrait 1 jour
      jour = 7
    EndIf
    DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  EndIf
  
  Retraite\A = Annee
  Retraite\J = Day(Date(Annee, Mois, Jour, 0, 0, 0))
  Retraite\NomJour = TabNomJours(DayOfWeek(DatePaiement) + 1)\Nom
  Retraite\M = Mois
  Retraite\NomMois = TabNomMois(Mois)\Nom
EndProcedure
Dernière modification par Micoute le lun. 17/juin/2019 8:39, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
MLD
Messages : 1097
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Date de paiement de la retraite

Message par MLD »

Merci Micoute :lol:
Dommage que ton programme ne permet pas d'augmenter le montant. :mrgreen: :oops: :lol:
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Date de paiement de la retraite

Message par Micoute »

Oui, et c'est bien dommage, car ce sera mieux que le loto et moins cher.

D'ailleurs, je l'ai amélioré:

Code : Tout sélectionner

;Date de paiement de la retraite
;par Micoute 7 juin 2019

EnableExplicit

Enumeration Fenetres
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets
  #Txt_Enonce
  #Str_Annee
  #Lst_Paiements
  #Btn_Quitter
EndEnumeration

Enumeration Polices
  #Police
EndEnumeration

Structure sMois
  Nom.s
  Numero.i
EndStructure

Structure sJour
  Nom.s
  Numero.i
EndStructure  

Structure Retraite
  NomMois.s
  NomJour.s
  J.i
  M.i
  A.i
EndStructure

LoadFont(#Police, "Verdana", 12)
SetGadgetFont(#PB_Default, FontID(#Police))

Global Evenement, i, Jour, Mois, Annee = Year(Date()), Retraite.Retraite
Global Dim TabNomMois.sMois(12), Dim TabNomJours.sJour(6)

For i = 1 To 12
  TabNomMois(i)\Nom=StringField("janvier février mars avril mai juin juillet août septembre octobre novembre décembre",i," ")
  TabNomMois(i)\Numero=i
Next i

For i = 0 To 6
  TabNomJours(i)\Nom=StringField("dimanche lundi mardi mercredi jeudi vendredi samedi",i+1," ")
  TabNomJours(i)\Numero=i
Next i


Declare.s Paiement_Retraite(Annee, Mois)
Declare Programme_principal()
Declare Quitter()

Programme_principal()

Procedure Programme_principal()
  If OpenWindow(#Fenetre_principale, 0, 0, 380, 360, "Retraite", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(#Txt_Enonce, 20, 20, 360, 20, "jours de paiement de la retraite en " + Annee)
    ListIconGadget(#Lst_Paiements, 30, 60, 330, 250, "Date", 320, #LVS_NOCOLUMNHEADER)
    ButtonGadget(#Btn_Quitter, 140, 330, 100, 20, "Quitter")
    i = 2
    While i <= 11
      Paiement_Retraite(Annee, i)
      i + 1
      AddGadgetItem(#Lst_Paiements, i, Retraite\NomMois + " : " + Retraite\NomJour + " " + Retraite\J + " " +TabNomMois(i-1)\Nom + " " + Retraite\A)
    Wend    
    Paiement_Retraite(Annee + 1, 12)
    AddGadgetItem(#Lst_Paiements, i, "décembre" + " : " + Retraite\NomJour + " " + Retraite\J + " " +TabNomMois(1)\Nom + " " + Retraite\A)
    BindGadgetEvent(#Btn_Quitter, @Quitter())
  EndIf
EndProcedure

Procedure Quitter()
  Select EventType()
    Case #PB_EventType_LeftClick
      CloseWindow(#Fenetre_principale)
      End
  EndSelect
EndProcedure

Repeat
  Evenement = WaitWindowEvent()
  Select Evenement

    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Btn_Quitter
      EndSelect

    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Procedure.s Paiement_Retraite(Annee, Mois)
  Protected Jour = 9, JourSem = 1 ;lundi
  Protected DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  ;Le paiement est effectué le jour ouvré le plus proche du 9, mais jamais après
  If DayOfWeek(DatePaiement) = 0 ;Si c'est un dimanche, on enlève 2 jours
    JourSem = 5
    Jour = 7
    DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  ElseIf DayOfWeek(DatePaiement) = 6 ;Si c'est un samedi, on enlève 1 jour
    JourSem = 5
    Jour = 8
    If mois = 5 ;Si c'est le 8 mai, on soustrait 1 jour
      jour = 7
    EndIf
    DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  EndIf
  
  Retraite\A = Annee
  Retraite\J = Day(Date(Annee, Mois, Jour, 0, 0, 0))
  Retraite\NomJour = TabNomJours(DayOfWeek(DatePaiement) + 1)\Nom
  Retraite\M = Mois
  Retraite\NomMois = TabNomMois(Mois)\Nom
EndProcedure
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Date de paiement de la retraite

Message par venom »

Merci Micoute,

Même si je ne suis pas en retraite :lol:






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Date de paiement de la retraite

Message par Micoute »

J'espère quand tu auras l'âge, ça existera encore et que ça payera plus que maintenant, car on se retrouve au niveau de ce qu'on gagnait quand on était apprenti.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
venom
Messages : 3071
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Date de paiement de la retraite

Message par venom »

Oula, vue la conjoncture actuelle. Quand je serais en retraite, ton code sera malheureusement obsolète. Il faudra faire un programme qui me dit combien je dois a l'état :lol:
A dans 30 ans....






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Date de paiement de la retraite

Message par Micoute »

Dans 30 ans, je ne serai plus de ce monde, mais ça ne me fait pas peur.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Mouillard
Messages : 77
Inscription : mer. 13/sept./2017 14:35
Localisation : Picardie (Somme)

Re: Date de paiement de la retraite

Message par Mouillard »

"Bonsoir Michel" Bonjour à tous,

Je vois que tu 'as pas été payé en janvier et décembre 8O ...Je te paie ces 2 mois avec un bon montant ...éh éh :lol: voir code :P /J Michel

Code : Tout sélectionner

;Date de paiement de la retraite
;par Micoute 7 juin 2019

EnableExplicit

Enumeration Fenetres
  #Fenetre_principale
EndEnumeration

Enumeration Gadgets
  #Txt_Enonce
  #Str_Annee
  #Lst_Paiements
  #Btn_Quitter
EndEnumeration

Enumeration Polices
  #Police
EndEnumeration

Structure sMois
  Nom.s
  Numero.i
EndStructure

Structure sJour
  Nom.s
  Numero.i
EndStructure  

Structure Retraite
  NomMois.s
  NomJour.s
  J.i
  M.i
  A.i
  
EndStructure

LoadFont(#Police, "Verdana", 8)
SetGadgetFont(#PB_Default, FontID(#Police))

Global Evenement, i, Jour, Mois, Annee = Year(Date()), Retraite.Retraite
Global Dim TabNomMois.sMois(12), Dim TabNomJours.sJour(6)

For i = 1 To 12
  TabNomMois(i)\Nom=StringField("Janvier Février Mars Avril Mai Juin Juillet Août Septembre Octobre Novembre Décembre",i," ")
  TabNomMois(i)\Numero=i 
Next i

For i = 0 To 6
  TabNomJours(i)\Nom=StringField("Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi",i," ")   
  TabNomJours(i)\Numero=i
Next i


Declare.s Paiement_Retraite(Annee, Mois)
Declare Programme_principal()
Declare Quitter()

Programme_principal()

Procedure Programme_principal()
  
  If OpenWindow(#Fenetre_principale, 20, 20, 390, 360, "Retraite", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    TextGadget(#Txt_Enonce, 20, 20, 460, 20, "Jours de paiement retraite en " + Annee + " allez disons" + ":3200 € " )
    ListIconGadget(#Lst_Paiements, 25, 60, 340, 250, "Date", 420, #LVS_NOCOLUMNHEADER)
    ButtonGadget(#Btn_Quitter, 140, 330, 100, 20, "Quitter")
    i = 1
    While i <= 11
      Paiement_Retraite(Annee, i)
      i + 1
      AddGadgetItem(#Lst_Paiements, i, "" + Retraite\M + " : " + Retraite\NomMois + " : " + Retraite\NomJour + " " + Retraite\J + " " +TabNomMois(i-1)\Nom + " " + Retraite\A)
    Wend    
    Paiement_Retraite(Annee, i)
    AddGadgetItem(#Lst_Paiements, i, "" + Retraite\M + ": Décembre" + " : " + Retraite\NomJour + " " + Retraite\J + " " +TabNomMois(i)\Nom + " " + Retraite\A)
    BindGadgetEvent(#Btn_Quitter, @Quitter())
  EndIf
EndProcedure

Procedure Quitter()
  Select EventType()
    Case #PB_EventType_LeftClick
      CloseWindow(#Fenetre_principale)
      End
  EndSelect
EndProcedure

Repeat
  Evenement = WaitWindowEvent()
  Select Evenement

    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Btn_Quitter
      EndSelect

    Case #PB_Event_CloseWindow
      End
  EndSelect
ForEver

Procedure.s Paiement_Retraite(Annee, Mois)
  Protected Jour = 9, JourSem = 1 ;lundi
  Protected DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  ;Le paiement est effectué le jour ouvré le plus proche du 9, mais jamais après
  If DayOfWeek(DatePaiement) = 0 ;Si c'est un dimanche, on enlève 2 jours
    JourSem = 5
    Jour = 7
    DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  ElseIf DayOfWeek(DatePaiement) = 6 ;Si c'est un samedi, on enlève 1 jour
    JourSem = 5
    Jour = 8
    If mois = 5 ;Si c'est le 8 mai, on soustrait 1 jour
      jour = 7
    EndIf
    DatePaiement = Date(Annee, Mois, Jour, 0, 0, 0)
  EndIf
  
  Retraite\A = Annee 

  Retraite\J = Day(Date(Annee, Mois, Jour, 0, 0, 0))
  Retraite\NomJour = TabNomJours(DayOfWeek(DatePaiement) + 1)\Nom
  Retraite\M = Mois
  Retraite\NomMois = TabNomMois(Mois)\Nom 
EndProcedure
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Date de paiement de la retraite

Message par Micoute »

Bonjour Jean-mimi,

tu n'es pas aussi loin de la vérité, mais le paiement de la retraite est effectué quand le mois est achevé, car on doit prouver qu'on était vivant le mois dernier.

Re édition

Code remis à jour au premier poste, car je me suis aperçu que les mois étaient érronés.

Veuillez tous m'excuser pour cette bévue.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Mouillard
Messages : 77
Inscription : mer. 13/sept./2017 14:35
Localisation : Picardie (Somme)

Re: Date de paiement de la retraite

Message par Mouillard »

Bon et Joyeux anniversaire Michel :D :lol:
Avatar de l’utilisateur
Micoute
Messages : 2522
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Date de paiement de la retraite

Message par Micoute »

Merci mon bon jean-mimi.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 5.73 PB 6.00 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre