Πέμπτη 4 Φεβρουαρίου 2016

Βάση Εργαζομένων Μέρος Α


Δείτε το πιο προχωρημένο εδώ

Σήμερα ημέρα γενικής απεργίας, θα ασχοληθούμε με την εργασία! Δηλαδή θα φτιάξουμε ένα πρόγραμμα, την αρχή του, για μια βάση δεδομένων μισθωτών. Δεν θα πάμε απ΄ευθείας σε βάση δεδομένων τύπου Access που φτιάχνει η Μ2000. Θα πάμε να φτιάξουμε μια κλάση Εργασία και μια κλάση Μισθωτός και θα φτιάξουμε έναν πίνακα Μισθωτοί.
Η βάση μας θα είναι ο πίνακας. Θέλουμε για κάθε μισθωτό να ξέρουμε αν είναι ή όχι εργαζόμενος, αν έχει ή όχι προϋπηρεσία και να έχουμε ένα βιογραφικό, που να δείχνει τι έχει κάνει!
Ενώ έχουμε ορίσει πίνακα μισθωτών για δέκα άτομα, δεν έχουμε ορίσει μέγιστο για προϋπηρεσία στον καθένα. Έχουμε δυναμικό πίνακα. Και ο πίνακας Μισθωτοί() είναι δυναμικός, δηλαδή αν δώσουμε ένα Πίνακας Μισθωτοί(100) θα αυξηθεί με άλλους 90 (οι πρώτοι δέκα θα παραμείνουν όπως είναι). Με την συνάρτηση Διάσταση(Μισθωτοί(),1) διαβάζουμε το μέγεθος της πρώτης διάστασης. Έχω βάλει διάφορα άλλα στοιχεία που δεν τα χρησιμοποιώ ή δεν γράφω γιατί τα έχω. Προφανώς θα τα δούμε στο Μέρος Β.

Οι Κλάσεις είναι γενικές (εκτός αν είναι μέλος ομάδας οπότε είναι ότι και η ομάδα).

Οθόνη 5
Πένα 14
Φόρμα 80,44
Γενικές ειναιδενειναι$="; είναι ; δεν είναι ", εχειδενεχει$="; έχει ; δεν έχει "
Τμημα Κατάσταση {
      Διάβασε
      Για Α {
            Τύπωσε .όνομ_επών$+γραφη$(.Είναι_Άνεργος(),ειναιδενειναι$)+.Λεκτικό_Άνεργος$()
            Τύπωσε .όνομ_επών$+γραφη$(.Έχει_Προϋπηρεσία(),εχειδενεχει$)+"προϋπηρεσία"
      }
}
Τμήμα Βιογραφικό {
      Διάβασε
      Τμήμα Εμφάνιση {
            Διάβασε Α
            Για Α {
                  Τύπωσε "","Επιχείρηση με ΑΦΜ:"; .ΑφμΕργοδ$
                  Τύπωσε "","Ιδιότητα:";.ΙδιότηταΕργαζομένου$
                  Τύπωσε "","Απο ";Ημέρα$(.ΗμΠρόσλ);
                  Αν .Τελική=0 Τότε { Τύπωσε } Αλλιώς Τύπωσε " Έως ";Ημέρα$(.Τελική)
            }
      }
      Για Α {
            Πένα 15 {
                  Τύπωσε "Βιογραφικό",@(20),.όνομ_επών$
                  Τύπωσε "Φύλο",@(20),γραφη$(.Φύλο,"ΆΝΔΡΑΣ;;ΓΥΝΑΙΚΑ")
                  Τύπωσε "ΑΜΚΑ",@(20),.αμκα$
                  Τύπωσε "ΑΦΜ",@(20),.αφμ$
                  Τύπωσε "Έτη ασφάλισης",@(20),Γραφή$(.έτη_ασφ, "# ")+Γραφή$(.έτη_ασφ-1, "Χρόνια;Χρόνια;Χρόνο")
            }
            Πένα 13 {
                  Τύπωσε "Κατάσταση";
                  Αν .Είναι_Άνεργος() Τότε {
                        Τύπωσε γραφη$(.Είναι_Άνεργος(),ειναιδενειναι$)+.Λεκτικό_Άνεργος$()
                 } Αλλιώς {
                       Τύπωσε " εργάζεται"
                       Πένα 14 {
                             Εμφάνιση .τρέχουσα(0)
                       }
                  }
            }
            Αν .Έχει_Προϋπηρεσία() τότε {
                  Τύπωσε "Προϋπηρεσία"
                  κ=Διάσταση(.προϋπηρεσία(),1)
                  Για ι=0 έως κ-1 {
                        Τύπωσε γραφη$(ι+1,"###)")
                              Εμφάνιση .προϋπηρεσία(ι)
                  }
            }
      }
}
Κλάση Εργασία {
      ΑφμΕργοδ$, ΙδιότηταΕργαζομένου$, ΗμΠρόσλ, Τελική
      Τμήμα Εργασία {
            Αν όχι Κενό τότε {
                  Διάβασε .ΑφμΕργοδ$, .ΙδιότηταΕργαζομένου$, .ΗμΠρόσλ
            }
      }
      Τμήμα Διακοπή_Συνεργασίας {
            Διάβασε .Τελική
            Αν .Τελική < .ΗμΠρόσλ Τότε Λάθος "Αδύνατη η διακοπή σε προηγούμενη μέρα"
      }
}
Κλάση Μισθωτός {
      αμκα$, όνομ_επων$, φύλο, αφμ$, μισθός, έτη_ασφ, κρατήσεις
      πίνακας κλιμακα() \\ φορολογική κλίμακα
      πινακας προϋπηρεσία(), τρέχουσα()
      Τμήμα Μισθωτός {
            Αν κενό τότε έξοδος
            Διάβασε .αμκα$, .όνομ_επων$, .φύλο, .αφμ$, .έτη_ασφ, .κλιμακα()
            \\ έλεγχος - αμακ 11 ψηφια, ονομα-επώνυμο μέγιστο 50,
            \\ αφμ  9 ψηφία...μια άλλη φορά!
      }
      Τμήμα Εισαγωγή_μισθός_κρατήσεις {
            \\ κρατήσεις ως ποσοστό π.χ. 30 σημαίνει 30%
            \\ μισθός - μεικτά - μηνιαίος
            Αν .Είναι_Ανεργος() Τότε Λάθος "Δεν έχεις δώσει εργασία"
            Διάβασε .μισθός, .κρατήσεις
      }
      Συνάρτηση Είναι_Άνεργος {
            =διάσταση(.τρεχουσα())=0
      }
      Συνάρτηση Λεκτικό_Άνεργος$ {
            Αν .Φύλο=1 Τότε { = "άνεργος" } Αλλιώς ="άνεργη"
      }
      Συνάρτηση Έχει_Προϋπηρεσία {
            =διάσταση(.προϋπηρεσία())<>0
      }
      Τμήμα Πρόσληψη {
            Αν Δεν .Είναι_Ανεργος() Τότε Λάθος "Δεν είναι "+.Λεκτικό_Άνεργος$()
            Πίνακας .τρέχουσα(1)
            Διάβασε .τρέχουσα(0)
      }
      Τμήμα Διακοπή_Εργασίας {
            Αν .Είναι_Ανεργος() Τότε Λάθος "Είναι "+.Λεκτικό_Άνεργος$()
            \\ αφήνουμε την ημερομηνία για το άλλο τμημα:
            .τρέχουσα(0).Διακοπή_Συνεργασίας
            κ=Διάσταση(.προϋπηρεσία())
            Αν κ=0 τότε {
                  κ=1
                  Πίνακας .προϋπηρεσία(1)=Εργασια()
             } αλλιώς {
                  κ=Διάσταση(.προϋπηρεσία(),1)+1
                  Πίνακας .προϋπηρεσία(κ)
            }
            .προϋπηρεσία(κ-1)=.τρέχουσα(0)
            Πίνακας .τρέχουσα()
      }
}
Πίνακας Φορολογία(5,2)
Φορολογία(0,0)=10000,22,10000,35,10000,50
Πίνακας Μισθωτοί(10)=Μισθωτός()
Μισθωτοι(0)=Μισθωτός("12345123451","ΧΑΡΗΣ ΑΧΑΡΟΣ",1,"012341234", 5, Φορολογία())
Μισθωτοι(1)=Μισθωτός("32345123451","ΧΑΡΟΥΛΑ ΑΧΑΡΟΥ",0,"052341234", 1, Φορολογία())
Μισθωτοι=2
Για Μισθωτοι(0) {
      Κατάσταση &Αυτό
      Πένα 15 { Τύπωσε "Πρόσληψη 12/10/2015" }
      .Πρόσληψη Εργασία("912341234","Ιδ. Υπάλληλος",ημερα("12/10/2015"))
      Κατάσταση &Αυτό
      Πένα 15 { Τύπωσε "Διακοπή 14/12/2015" }
      .Διακοπή_Εργασίας ημερα("14/12/2015")
      Κατάσταση &Αυτό
      Πένα 15 { Τύπωσε "Πρόσληψη 11/1/2016" }
      .Πρόσληψη Εργασία("992341235","Ιδ. Υπάλληλος",ημερα("11/1/2016"))
      Κατάσταση &Αυτό
      Πένα 15 { Τύπωσε "Διακοπή 1/2/2016" }
      .Διακοπή_Εργασίας ημερα("1/2/2016")
      Κατάσταση &Αυτό
}
Για Μισθωτοι(1) {
      Κατάσταση &Αυτό
      Πένα 15 { Τύπωσε "Πρόσληψη 12/10/2015" }
      .Πρόσληψη Εργασία("912341234","Διευθυντής",ημερα("12/10/2015"))
      Κατάσταση &Αυτό
}
Για ι=0 έως Μισθωτοι-1 {
      Για Μισθωτοι(ι) {
            Αν .αμκα$<>"" τότε Βιογραφικό &Αυτό
      }
}

Δεν χρησιμοποίησα ρουτίνες γιατί δεν κρατάνε χωριστό λογαριασμό στο σύστημα με τις τελείες. Όι ρουτίνες είναι μέρη του τμήματος, και όπως βλέπουν τις ίδιες μεταβλητές, χειρίζονται και τις τελείες στα αντικείμενα που έχουμε σε πίνακες ομοίως. Έτσι αν έχουμε δυο φωλιασμένα Για πινακαςΑ() { } και το δεύτερο είναι σε ρουτίνα τότε για να αναφερθούμε στο δεύτερο, εσωτερικό, αντικείμενο πρέπει να έχουμε διπλές τελείες. Η λίστα με τις τελείες καταγράφεται στο αντικείμενο εκτέλεσης. Οπότε μια ρουτίνα με βάθος 2ο (ως Για) θα έχει όλες τις μεταβλητές, τους πίνακες, τα τμήματα και τις συναρτήσεις με διπλή τελεία. Αν λοιπόν καλέσουμε τη ρουτίνα έξω από οποιαδήποτε ΓΙΑ ...{} τότε το Για {} της ρουτίνας θα είναι βάθους 1ου άρα οι διπλές τελείες..δεν θα βρίσκονται...
Παρακάτω είναι η παραλαγή με ρουτίνες. Η ρουτίνα εμφάνιση παίρνει αντίγραφο της εργασίας και μας δίνει το αποτέλεσμα!
Για τους φορολογικούς συντελεστές δεν έχω κατασταλάξει ακόμα!!!!!!

Είχε πρόβλημα κατά την μεταφορά. Διορθώθηκε (θέλει τις κλάσεις στην αρχή, από το προηγούμενο)

Πίνακας Φορολογία(5,2)
Φορολογία(0,0)=10000,22,10000,35,10000,50
Α=Μισθωτός("12345123451","ΧΑΡΗΣ ΑΧΑΡΟΣ",1,"012341234", 5, Φορολογία())
Κατάσταση(&Α)
Βιογραφικό(&Α)
Α.Πρόσληψη Εργασία("912341234","Ιδ. Υπάλληλος",ημερα("12/10/2015"))
Κατάσταση(&Α)
Βιογραφικό(&Α)
Α.Διακοπή_Εργασίας ημερα("14/12/2015")
Κατάσταση(&Α)
Βιογραφικό(&Α)
Ρουτίνα Κατάσταση(&Α)
Για Α {
      Τύπωσε .όνομ_επών$+γραφη$(.Είναι_Άνεργος(),ειναιδενειναι$)+.Λεκτικό_Άνεργος$()
      Τύπωσε .όνομ_επών$+γραφη$(.Έχει_Προϋπηρεσία(),εχειδενεχει$)+"προϋπηρεσία"
}
Τέλος Ρουτίνας
Ρουτίνα Βιογραφικό(&Α)
      Για Α {
            Πένα 15 {
                  Τύπωσε "Βιογραφικό",@(20),.όνομ_επών$
                  Τύπωσε "Φύλο",@(20),γραφη$(.Φύλο,"ΆΝΔΡΑΣ;;ΓΥΝΑΙΚΑ")
                  Τύπωσε "ΑΜΚΑ",@(20),.αμκα$
                  Τύπωσε "ΑΦΜ",@(20),.αφμ$
                  Τύπωσε "Έτη ασφάλισης",@(20),Γραφή$(.έτη_ασφ, "# ")+Γραφή$(.έτη_ασφ-1, "Χρόνια;Χρόνια;Χρόνο")
            }
            Πένα 13 {
                  Τύπωσε "Κατάσταση";
                  Αν .Είναι_Άνεργος() Τότε {
                        Τύπωσε γραφη$(.Είναι_Άνεργος(),ειναιδενειναι$)+.Λεκτικό_Άνεργος$()
                 } Αλλιώς {
                       Τύπωσε " εργάζεται"
                       Εμφάνιση( .τρέχουσα(0))
                  }
            }
            Αν .Έχει_Προϋπηρεσία() τότε {
                  Τύπωσε "Προϋπηρεσία"
                  κ=Διάσταση(.προϋπηρεσία(),1)
                  Για ι=0 έως κ-1 {
                        Τύπωσε γραφη$(ι+1,"###)")
                        Εμφάνιση(.προϋπηρεσία(ι))

                  }
            }
      }
Τέλος Ρουτίνας
Ρουτίνα Εμφάνιση(Α)
            Για Α {
                  Τύπωσε "","Επιχείρηση με ΑΦΜ:"; ..ΑφμΕργοδ$
                  Τύπωσε "","Ιδιότητα:";..ΙδιότηταΕργαζομένου$
                  Τύπωσε "","Απο ";Ημέρα$(..ΗμΠρόσλ);
                  Αν ..Τελική=0 Τότε { Τύπωσε } Αλλιώς Τύπωσε " Έως ";Ημέρα$(..Τελική)
            }
Τέλος Ρουτίνας


Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

You can feel free to write any suggestion, or idea on the subject.