Gestion de rendez-vous en cours

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

Gestion de rendez-vous en cours

Message par Micoute »

Bonjour à tous,

puisque j'ai souvent eus besoin de votre aide bienveillante, je me suis dit que je pouvais aider aussi les autres PBcistes.

Un petit programme simple et utile.

Code : Tout sélectionner

;{Enumération
Enumeration Fichier
  #Fichier_CVS
EndEnumeration
Enumeration Fenetres
  #Fenetre_principale  
EndEnumeration
Enumeration Gadgets
  #Txt_Date
  #Txt_Heure
  #Txt_Desciption
  #Txt_Statut
  #Dte
  #Str_Heure
  #Str_Desciption
  #Str_Statut
  #Btn_Ajouter
  #Btn_Sauvegarde
  #Btn_Charger
  #Btn_Supprimer
  #Lst
EndEnumeration
;}
;{ Déclaration des structures et des variables
Structure RendezVous
  Date.s
  Heure.s
  Description.s
  Statut.s
EndStructure

Global NewList RendezVousListe.RendezVous()
Global Quitter.b
;}
;{ Déclaration des procédures
Declare AfficherRendezVousListe()
Declare AjouterRendezVous(Date.s, Heure.s, Description.s, Statut.s)
Declare AfficherRendezVousEnCours()
Declare SauvegarderRendezVousCSV(Fichier.s)
Declare RechercherRendezVous(DateDebut.s, DateFin.s)
Declare ChargerRendezVousCSV(Fichier.s)
Declare SupprimerRendezVous(Index.l)
Declare Programme_principal()
;}
Programme_principal()
;{ Ajout  des rendez-vous dans le gaggetList
Procedure AfficherRendezVousListe()
  ClearGadgetItems(#Lst)
  ForEach RendezVousListe()
    AddGadgetItem(#Lst, -1, "Date: " + RendezVousListe()\Date + ", Heure: " + RendezVousListe()\Heure + ", Description: " + RendezVousListe()\Description + ", Statut: " + RendezVousListe()\Statut)
  Next
EndProcedure
;}
;{ Ajout des rendez-vous
Procedure AjouterRendezVous(Date.s, Heure.s, Description.s, Statut.s)
  AddElement(RendezVousListe())
  RendezVousListe()\Date = Date
  RendezVousListe()\Heure = Heure
  RendezVousListe()\Description = Description
  RendezVousListe()\Statut = Statut
EndProcedure
;}
;{ Affichage des rendez-vous en cours
Procedure AfficherRendezVousEnCours()
  ForEach RendezVousListe()
    If RendezVousListe()\Statut = "En cours"
      Debug "Date : " + RendezVousListe()\Date + ", Heure : " + RendezVousListe()\Heure + ", Description : " + RendezVousListe()\Description
    EndIf
  Next
EndProcedure
;}
;{ Sauvegarde des rendez-vous dans un fichier CVS
Procedure SauvegarderRendezVousCSV(Fichier.s)
  If CreateFile(0, Fichier)
    WriteStringN(0, "Date,Heure,Description,Statut") ; En-tête du fichier CSV
    ForEach RendezVousListe()
      WriteStringN(0, RendezVousListe()\Date + "," + RendezVousListe()\Heure + "," + RendezVousListe()\Description + "," + RendezVousListe()\Statut)
    Next
    CloseFile(0)
  EndIf
EndProcedure
;{ Recherche des rendez-vous par critères
Procedure RechercherRendezVous(DateDebut.s, DateFin.s)
  ForEach RendezVousListe()
    If RendezVousListe()\Statut = "Passé" And RendezVousListe()\Date >= DateDebut And RendezVousListe()\Date <= DateFin
      Debug "Date : " + RendezVousListe()\Date + ", Heure : " + RendezVousListe()\Heure + ", Description : " + RendezVousListe()\Description
    EndIf
  Next
EndProcedure
;}

;{ Chargement des rendez-vous
Procedure ChargerRendezVousCSV(Fichier.s)
  If ReadFile(#Fichier_CVS, Fichier)
    ClearList(RendezVousListe())
    While Not Eof(#Fichier_CVS)
      Ligne.s = ReadString(#Fichier_CVS)
      If Ligne <> "Date,Heure,Description,Statut" ; Ignorer l'en-tête
        Donnees.s = StringField(Ligne, 1, ",")
        Date.s = StringField(Ligne, 1, ",")
        Heure.s = StringField(Ligne, 2, ",")
        Description.s = StringField(Ligne, 3, ",")
        Statut.s = StringField(Ligne, 4, ",")
        
        AjouterRendezVous(Date, Heure, Description, Statut)
      EndIf
    Wend
    CloseFile(#Fichier_CVS)
  EndIf
EndProcedure
;}
;{ Supprimer un rendez-vous
Procedure SupprimerRendezVous(Index.l)
  If Index >= 0 And Index < CountGadgetItems(#Lst)
    SelectElement(RendezVousListe(), Index)
    DeleteElement(RendezVousListe())
    AfficherRendezVousListe()
  EndIf
EndProcedure
;}
;{ Programme principal
Procedure Programme_principal()
If OpenWindow(#Fenetre_principale, 100, 100, 600, 400, "Gestion des Rendez-vous", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  TextGadget(#Txt_Date, 20, 20, 130, 20, "Date (JJ/MM/AAAA):")
  DateGadget(#Dte, 160, 20, 100, 20, "%dd/%mm/%yyyy")
  
  TextGadget(#Txt_Heure, 20, 60, 130, 20, "Heure (HH:MM):")
  StringGadget(#Str_Heure, 160, 60, 100, 20, "")
  
  TextGadget(#Txt_Desciption, 20, 100, 130, 20, "Description:")
  StringGadget(#Str_Desciption, 160, 100, 200, 20, "")
  
  TextGadget(#Txt_Statut, 20, 140, 130, 20, "Statut (En cours/Passé):")
  StringGadget(#Str_Statut, 160, 140, 100, 20, "")
  
  ButtonGadget(#Btn_Ajouter, 20, 180, 120, 30, "Ajouter Rendez-vous")
  ButtonGadget(#Btn_Sauvegarde, 150, 180, 100+20, 30, "Sauvegarder CSV")
  ButtonGadget(#Btn_Charger, 280, 180, 100, 30, "Charger CSV")
  ButtonGadget(#Btn_Supprimer, 400, 180, 100, 30, "Supprimer RDV")
  
  ListViewGadget(#Lst, 20, 220, 560, 160)
  
  ; Boucle d'événements
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Btn_Ajouter
            ; Ajouter le rendez-vous à la liste
            AjouterRendezVous(GetGadgetText(#Dte), GetGadgetText(#Str_Heure), GetGadgetText(#Str_Desciption), GetGadgetText(#Str_Statut))
            AfficherRendezVousListe()
          Case #Btn_Sauvegarde
            ; Sauvegarder les rendez-vous dans un fichier CSV
            SauvegarderRendezVousCSV("rendezvous.csv")
          Case #Btn_Charger
            ; Charger les rendez-vous à partir d'un fichier CSV
            ChargerRendezVousCSV("rendezvous.csv")
            AfficherRendezVousListe()
          Case #Btn_Supprimer
            SupprimerRendezVous(GetGadgetState(#Lst))
        EndSelect
      Case #PB_Event_CloseWindow
        Quitter = 1
    EndSelect
  Until Quitter = 1
EndIf
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Mouillard
Messages : 79
Inscription : mer. 13/sept./2017 14:35
Localisation : Picardie (Somme)

Re: Gestion de rendez-vous en cours

Message par Mouillard »

Merci Micoute. Sympa & utile ce code ! :)
Avatar de l’utilisateur
Micoute
Messages : 2583
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Gestion de rendez-vous en cours

Message par Micoute »

Bonjour Mouillard, il y avait longtemps que je ne t'avais pas lu, en effet ce simple programme est largement modifiable, il suffit de le mettre à la main de l'utilisateur pour un autre usage.
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 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre