Kalender erstellung [ERLEDIGT)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Kalender erstellung [ERLEDIGT)

Beitrag von Pure_Beginner »

Hallo zusammen,

hab gerade eine kleine Kalenderanwendung fertig.

Da ich meine Kenntnisse verbessern möchte, wollte ich um eure Anregungen, Kritik bitten.

Code: Alles auswählen

EnableExplicit
Procedure Tage_im_Monat(Jahr.i)
  
  If OpenWindow(0, 100, 200, 800, 700, "Kalender " + Str(Jahr), #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    If PanelGadget(1, 10, 10, 780,680)
      
      
      Protected Tage.i, k.i, Ergebnis.i, i.i, Event.i, Quit.i
      Protected Tagtext.s
      
      
      If Jahr % 4 = 0 And  (Jahr % 100 <> 0 Or Jahr % 400 = 0)         ;auf schaltjahr überprüfen
        Tage = 29
      Else
        Tage = 28
      EndIf
      
      
      Dim Monatstage.i(11)                                              ;array für anzahl der tage
      Monatstage(0) = 31
      Monatstage(1) = Tage
      Monatstage(2) = 31
      Monatstage(3) = 30
      Monatstage(4) = 31
      Monatstage(5) = 30
      Monatstage(6) = 31
      Monatstage(7) = 31
      Monatstage(8) = 30
      Monatstage(9) = 31
      Monatstage(10) = 30
      Monatstage(11) = 31
      
      
      Dim Monat.s(11)                                                     ;array für monatsnamen 
      Monat(0) = "Januar"
      Monat(1) = "Februar"
      Monat(2) = "März"
      Monat(3) = "April"
      Monat(4) = "Mai"
      Monat(5) = "Juni"
      Monat(6) = "Juli"
      Monat(7) = "August"
      Monat(8) = "September"
      Monat(9) = "Oktober"
      Monat(10) = "November"
      Monat(11) = "Dezember"
      
      
      
      
      For k = 0 To 11                                             ;schleife für monate
        
        AddGadgetItem(1, k, Monat(k) )                            ;panelgadget beschriftung
        ListIconGadget(2+k, 10, 10, 750, 630, "Wochentag",100)    ;Listicongadget beschriftung
        
        For i = 1 To Monatstage(k)                                ;schleife für anzahl der tage
          
          Ergebnis = DayOfWeek(Date (Jahr,1+k,i,0,0,0))            ;aktueller tag ermitteln
          
          Select Ergebnis                                          ;umwandeln in text
            Case 0
              Tagtext = "So"
            Case 1
              Tagtext = "Mo"
            Case 2
              Tagtext = "Di"
            Case 3
              Tagtext = "Mi"
            Case 4
              Tagtext = "Do"
            Case 5
              Tagtext = "Fr"
            Case 6
              Tagtext = "Sa"
          EndSelect
          
          AddGadgetItem(2+k,-1,Str(i) + " " + Tagtext)            ;listicon einträge hinzufügen
          
        Next           
      Next     
      
      
      
      
      Repeat
        Event = WaitWindowEvent()
        
        
        If Event = #PB_Event_CloseWindow  
          Quit = 1
        EndIf
        
        
      Until Quit = 1
      
    EndIf
  EndIf
  
  
  
EndProcedure

Tage_im_Monat(2012)


vor allem geht es mir um die Schleifen und die Straffung des codes.

wäre für Euer feedback sehr dankbar.

PS.
das Fenster ist nur zu demozwecken in der Procedure mit eingebaut
Zuletzt geändert von Pure_Beginner am 13.01.2013 21:11, insgesamt 1-mal geändert.
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
PureFreak
Beiträge: 11
Registriert: 07.01.2013 20:04

Re: Kalender erstellung

Beitrag von PureFreak »

Hallo Pure_Beginner!

Habe mich extra um Dir zu Antworten im Board angemeldet. Lese zwar schon seit Jahren hier mit,
habe aber noch keinen Beitrag verfasst.

Ich habe mal Dein Programm "recht dirty" umgeschrieben. Habe bewusst auf Kommentare verzichtet.
Habe mir zum optimieren gedacht das man in Deinem Fall z.B. gar nicht ausrechnen muß ob es ein
Schaltjahr ist oder nicht. Das kann uns auch Purebasic mitteilen. Grundsätzlich erstelle ich nur
die 12 Monate mit den Namen im Panelgadget und das Listicongadget mit den Wochentagen.
In der Hauptschleife fange ich einfach mit dem 1.Januar des Jahres an und erhöhe immer um einen
Tag bis sich die Jahreszahl ändert. Die Tage werden anhand Ihres Monatswertes dann einfach
in das richtige Panel eingefügt. Somit kommt, falls er denn auftritt, auch der 29 Februar in der
Liste vor.
Das ganze sieht jetzt nicht unbedingt Übersichtlich aus und ist ohne Kommentare in einem Monat auch
nicht mehr zu entziffern, soll Dir aber auch nur einen Ansatz zum optimieren geben.

Ansonsten finde ich das was Du für den Anfang gemacht hast recht gut.
EnableExplicit zeugt jedenfalls schon mal von einem guten Programmierstiel (denn ich nicht unbedingt habe)

Falls Du noch Fragen haben solltest wie das eine oder andere funktioniert frag einfach.


gruß Jürgen



Code: Alles auswählen

EnableExplicit

DataSection
Tagesnamen:
 Data.s "So","Mo","Di","Mi","Do","Fr","Sa"

Monatsnamen:
 Data.s "Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"
EndDataSection


Procedure Tage_im_Monat(Jahr.i)
  Define tag.i,  n.i
  Define Quit.i,  Event.i
  Dim Wochentag.s(6),  Monat.s(11)
  
  If OpenWindow(0, 100, 200, 800, 700, "Kalender " + Str(Jahr), #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
   If PanelGadget(1, 10, 10, 780,680)
 
    Restore Tagesnamen
    For n=0 To 6
     Read.s Wochentag(n)
    Next
  
    Restore Monatsnamen
    For n= 0 To 11
     Read.s Monat(n)
     AddGadgetItem(1, -1, Monat(n) )                           ;panelgadget beschriftung
     ListIconGadget(2+n, 10, 10, 750, 630, "Wochentag",100)    ;Listicongadget beschriftung
    Next
  
    tag=ParseDate("%dd.%mm.%yyyy", "01.01."+Str(jahr))
    While Year(tag)=Jahr
     AddGadgetItem(2+Month(tag)-1,-1,Str(Day(tag)) + " " + Wochentag(DayOfWeek(tag)))
     tag=AddDate(tag,#PB_Date_Day,1)
    Wend 

   EndIf 
   
   Repeat
     Event = WaitWindowEvent()
      
     If Event = #PB_Event_CloseWindow  
          Quit = 1
        EndIf
     Until Quit = 1  
  EndIf  
EndProcedure 


Tage_im_Monat(2012)
Benutzeravatar
Pure_Beginner
Beiträge: 247
Registriert: 29.09.2011 21:49
Computerausstattung: i7 9XX 4000 MHZ / 12 GB RAM / Win 8.1 64Bit / Win 7 64Bit
Wohnort: Brühl

Re: Kalender erstellung

Beitrag von Pure_Beginner »

@PureFreak

Hallo Jürgen,

danke für deine Antwort und die Mühe die du dir gemacht hast.

werde mich da mal durchwursteln und versuchen das ganze aufzuarbeiten.

Hab keine Probleme mal die Hosen runter zu lassen und auch mal nicht so perfekten Code zu posten (nur so kann man was lernen). :lol:

Leider ist das Feedback eher gering. (liegt wohl daran das jeder unterschiedlich programmiert und evtl. auch etwas gehemmt ist hier irgendwelche Tipps abzugeben).

deshalb nochmals mein besonderer Dank.
Grüße
Christian
PureBasic 5.30 Beta 3 (X64/X86) | Win 8 (64) Pro / Win 7 (64) Pro | Es ist der Hobbyist[/col
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Kalender erstellung

Beitrag von bobobo »

‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten