Σάββατο 18 Μαρτίου 2017

Παράδειγμα με Κλάσεις (Προχωρημένο, αναθ. παραδείγματος)

Από το παράδειγμα εδώ  έκανα μερικές αλλαγές βάσει της 8.5 αναθεώρηση 3. Κύρια με ενδιαφέρει εδώ να δείξω δυο πράγματα, το πώς ο κατασκευαστής στην κλάση μπορεί να αφαιρεθεί από το τελικό προιόν, την ομάδα, και το δεύτερο (αυτό υπήρχε και σε προηγούμενες εκδόσεις) πως θα βγάλουμε "λειτουργικότητα" από τη κλάση και θα την έχουμε σε πρώτη ζήτηση όταν την χρειαστούμε.

Στις αρχικές εκδόσεις με τις ομάδες, είχα συμπεριλάβει την δυνατότητα ομάδες να μένουν σε πίνακες, ως κλειστά αντικείμενα. Κλειστό σημαίνει ότι η θέαση των περιεχομένων γίνεται όταν η ομάδα πάρει όνομα, και μπουν ότι έχει στο σύστημα ονομάτων. Έτσι αν μια ομάδα έχει την μεταβλητή Χ (ή την ιδιότητα Χ), και βρίσκεται στο Α(3) τότε το Α(3).Χ θα κάνει ένα άνοιγμα του αντικειμένου  με κρυφό όνομα, έστω Μ1232 και από αυτό θα διαβάζει το Μ1232.Χ . Βολεύει η εντολή Για Α(3) { Τύπωσε .Χ} για πολλές ιδιότητες ώστε να μην ανοίγει συνέχεια το κλειστό αντικείμενο.Στην ουσία άνοιγμα αντικειμένου σημαίνει ότι η συλλογή πιάνει χώρο σε μεταβλητές/λίστα τμημάτων/συναρτήσεων, ενώ κλείσιμο σημαίνει αντιγραφή της συλλογής σε ιδιωτική συλλογή. Υπάρχει τρόπος να δούμε το σύνολο των μελών μιας ομάδας. Η συνάρτηση Μέλος() παίρνει ένα όνομα ομάδας και δίνει το 1...ν μέλος ως όνομα ισχνής αναφοράς. Στο κλειστό αντικείμενο στο Α(1) χρησιμοπούμε το λεκτικό Αυτό για να δηλώσουμε το όνομα που δεν γνωρίζουμε του προσωρινού ανοικτού αντικειμένου. Σε όλες της Για αντικείμενο{  } ότι νέο γίνεται εντός θα είναι προσωρινό, και θα διαγραφεί στην έξοδο από το μπλοκ { }. Έτσι διαγράφεται και το ανοικτό αντικείμενο που προσωρινά φτιάχνει ο διερμηνευτής.

Ομάδα Αλφα {
      Ιδιότητα Κ=100
      Ιδιότητα Μ$="οκ"
}
Για ι=1 Έως Ομάδα.Σύνολο(Άλφα)
      Τύπωσε Μέλος$(Άλφα, ι)
Επόμενο ι


Πίνακας Α(10)
Α(1)=Άλφα
Για Α(1) {
      Για ι=1 Έως Ομάδα.Σύνολο(Αυτό)
            Τύπωσε Μέλος$(Αυτό, ι)
      Επόμενο ι
}



Μια ιδιότητα των αντικειμένων Ομάδα είναι η Συγχώνευση Ομάδων. Δηλαδή αν σε μια επώνυμη ομάδα (ανοικτή) δώσουμε ότι "ισούτε" με μια άλλη τότε γίνεται συγχώνευση των μελών αυτής που "έρχεται" σε αυτή που "δέχεται", και ότι έχει ίδιο όνομα θα πάρει τιμή και ότι είναι νέο θα προστεθεί σαν μέλος. Σε θέσεις όπως πίνακες και καταστάσεις, όπου έχουμε κλειστά αντικείμενα, δεν έχουμε συγχώνευση αλλά αντικατάσταση, και το παλιό καταστρέφεται (δεν υπάρχει τμήμα για να κληθεί στην καταστροφή, πρέπει να προβλεφθεί από το προγραμματιστή). Μπορούμε βέβαια να κάνουμε συγχώνευση με χρήση του Αυτό σε μια Για {}, αλλά αν ο πίνακας έχει δηλωθεί ως πίνακας με περιεχόμενο συγκεκριμενη ομάδα τότε τα τμήματα και οι συναρτήσεις δεν αλλάζουν (μόνο προσωρινά), έτσι σε μια συγχώνευση θα πάρουμε πχ νέο ορισμό σε συνάρτηση αλλά δεν θα καταχωρησθεί μόνιμα και στο επόμενο άνοιγμα θα έχουμε το παλιό.

Τώρα λοιπόν μια νέα ιδέα ήρθε, να μπορούμε ένα τμήμα της ομάδας να μην καταχωρείται στο σύνολο, αλλά να λειτουργεί ως μέλος της ομάδας! Στο παράδειγμα η Μ (αρχικά δεν έχει τιμή), παίρνει από την άλφα ό,τι λέει η συλλογή της αλλά δεν θα πάρει τη Βάλε_Όνομα, αφού δεν ανήκει στη συλλογή  τυπικά αλλά ανήκει ουσιαστικά και φαίνεται όταν την χρησιμοποιήσουμε για να βάλουμε τιμή στην ιδιότητα Όνομα$ που κανονικά δεν αλλάζει με χρήση της κρυφής [Όνομα]$

Ομάδα Άλφα {
      Ιδιότητα Όνομα$ {Αξία}="Πέτρος"
Κλάση:
      Τμήμα Βάλε_Όνομα {
            Διάβασε .[Όνομα]$
      }
}
Τύπωσε Άλφα.Όνομα$
Άλφα.Βάλε_Όνομα "Νίκος"
Τύπωσε Άλφα.Όνομα$
Μ=Άλφα
Δες {
      Μ.Βάλε_Όνομα$ "Γιώργος"
}
Τύπωσε Μ.Όνομα$ \ Νίκος, γιατί ή Μ δεν έχει την Βάλε_Όνομα
 

Το όνομα της ετικέτας επιλέχθηκε το Κλάση για να φανεί ότι αυτό υπάρχει μόνο στο αρχικό αντικείμενο,είτε το φτιάχνουμε ως ομάδα, είτε με την Κλάση  όνομα  { } ως συνάρτηση που επιστρέφει ομάδα.

Εδώ είναι το μεγάλο παράδειγμα "Worker", όπου στήνουμε μια μικρή βάση δεδομένων. Θέλουμε να μην έχουμε στην Κατάσταση  (λίστα ειδών) όλες τις συναρτήσεις/τμήματα, που δεν χρειαζόμαστε στην καταχώρηση.  Για να αποφύγουμε τη συγχώνευση βάζουμε στην ομάδα Μισθωτός την ειδική συνάρτηση Θέσε που κάνει την αντικατάσταση με το = να πηγαίνει σε αυτήν. Εκεί παίρνουμε μόνο ότι θέλουμε από την κλάση που "σηκώνουμε", έτσι δεν παίρνουμε τα επιπλέον που θα μας έδινε η συγχώνευση. Δεν έχουμε συνάρτηση Αξία, που σημαίνει ότι επιστρέφουμε "κλειστό αντικείμενο".
Στην κλάση Υπερμισθωτός αν δώσουμε μια ομάδα Μισθωτός θα μας γυρίσει αυτή την ομάδα με τις επιπλέον συναρτήσεις. Λειτουργεί δηλαδή ως ένα είδος ενδιάμεσου (interface), μόνο που εδώ έχει ήδη κώδικα στις συναρτήσεις/τμήματα και μάλιστα αν δεν παρέχουμε την μισθωτός παρέχει μια δική του, που έχει τοπικά. Και στην Μισθωτός() και στην Υπερμισθωτός() έχουμε τη Κλάση: (με άνω και κάτω τελεία ως χαρακτήρας στη συνέχεια του ονόματος), που δηλώνει ότι το μέρος από κει και πέρα δεν θα περιέχεται στην ομάδα που εξάγει η Κλάση (Ισχύει η ετικέτα Κλάση: μέχρι να βρεθεί ετικέτα Δημόσιο: ή Ιδιωτικό: ή το τέλος του ορισμού - Προσοχή οι ιδιότητες αλλάζουν την ειτικέτα εσωτερικά, οπότε δεν βάζουμε ιδιότητες για προσωρινή χρήση)

Η πρώτη φάση του προγράμματος κάνει χρήση της λίστα Μισθωτοίλίστα η οποία παίρνει κλειδί τον ΑΜΚΑ, και αποθηκεύει σε αρχείο όλη τη δομή της βάσης. Στη δεύτερη φάση διαβάζω από αρχείο τη βάση και την τοποθετώ σε πίνακα και χρησιμοποιώ τρεις λίστες τύπου κατάσταση για αναζήτηση με Αμκα, με ΑΦΜ και με ΕπώνυμοΌνομα.Τη τελευταία την ταξινομώ και εμφανίζω τα ονόματα του αρχείου (σε πίνακα φορτωμένα) με την αλφαβητική σειρά με χρήση επαναλήπτη (φτιάχτηκε στην 8.2)

Στο παράδειγμα έχω ένα τμήμα με όνομα Κατάσταση, ενώ υπάρχει αυτή η εντολή. Πράγματι μετά την ετοιμασία του  τμήματος Κατάσταση, η εντολή βγήκε εκτός! Όμως μέχρι να τερματίσει το τμήμα, μετά επανέρχεται! Το άφησα έτσι γιατί το είχε το αρχικό πρόγραμμα πριν φτιάξω την εντολή Κατάσταση (που φτιάχνει λίστες), και έκανα το σύστημα να δέχεται αλλαγές. Μπορούμε με το @Κατάσταση να καλέσουμε την εντολή παρόλο που έχουμε το τμήμα Κατάσταση.

Αναθεώρηση Προγράμματος Worker 1

Οθόνη 5
Πένα 14
Φόρμα 80,60
Γενικές ειναιδενειναι$="; είναι ; δεν είναι ", εχειδενεχει$="; έχει ; δεν έχει "
Κατάσταση ΜισθωτοιΛίστα, ΝέαΛίσταΑμκα, ΝέαΛίσταΑΦΜ, ΝέαΛίσταΕπωνΟνομα
Τμημα Κατάσταση {
      Διάβασε &Α
      Για Α {
            Τύπωσε .όνομ_επών$+γραφη$(.Είναι_Άνεργος(),ειναιδενειναι$)+.Λεκτικό_Άνεργος$()
            Τύπωσε .όνομ_επών$+γραφη$(.Έχει_Προϋπηρεσία(),εχειδενεχει$)+"προϋπηρεσία"
      }
}
Τμήμα Πάτα_Διάστημα {
      Τύπωσε "<<<<<<<<<<< Πάτα Ένα Πλήκτρο >>>>>>>>>>>"
      α$=κομ$
}
Τμήμα Βιογραφικό {
      \\ τροποποίηση για να διαβάζει και με αναφορά και με τιμή
      \\ Περιμένει κάτι με υπερκλάση μισθωτός
      Αν Ταύτιση("Ο") τότε {
            Διαβασε Α
      } Αλλιώς Διάβασε
      Τμήμα Εμφάνιση {
            ΑΑ$=""
            Διάβασε Α
            Διάβασε ? ΑΑ$
            Για Α {
                  Τύπωσε ΑΑ$, "Επιχείρηση με ΑΦΜ:"; .ΑφμΕργοδ$
                  Τύπωσε "","Ιδιότητα:";.ΙδιότηταΕργαζομένου$
                  Τύπωσε "","Απο ";Ημέρα$(.ΗμΠρόσλ);
                  Αν .Τελική=0 Τότε { Τύπωσε } Αλλιώς Τύπωσε " Έως ";Ημέρα$(.Τελική)
            }
      }
      Για Α {
            Πένα 15 {
                  Τύπωσε "Βιογραφικό",@(20),.όνομ_επών$
                  Τύπωσε "Φύλο",@(20),γραφη$(.Φύλο,"ΆΝΔΡΑΣ;;ΓΥΝΑΙΚΑ")
                  Τύπωσε "ΑΜΚΑ",@(20),.αμκα$
                  Τύπωσε "ΑΦΜ",@(20),.αφμ$
                  Τύπωσε "Έτη ασφάλισης",@(20),Γραφή$(.έτη_ασφ, "# ")+Γραφή$(.έτη_ασφ-1, "Χρόνια;Χρόνια;Χρόνο")
            }
            Πένα 13 {
                  Τύπωσε "Κατάσταση";
                  Αν .Είναι_Άνεργος() Τότε {
                        Τύπωσε γραφη$(.Είναι_Άνεργος(),ειναιδενειναι$)+.Λεκτικό_Άνεργος$()
                 } Αλλιώς {
                       Τύπωσε " εργάζεται"
                       Σωρός Νέος {
                       \\ αν ο σωρός έχει κάτι άλλο η Εμφάνιση θα το πάρει σε δεύτερη παράμετρο
                       \\ άλλος τρόπος είναι να δώσουμε αυτό: Εμφάνιση .τρέχουσα(0), ?
                       \\ με αυτό το τρόπο δίνουμε οδηγία ότι δεν βάζουμε τιμή και να λήφθεί εξ ορισμού
                       \\ Στις συναρτήσεις έχουμε πάντα νέο σωρό τιμών και μπαίνουν τα ορίσματα των πσρσμέτρων
                             Πένα 14 {
                                   Εμφάνιση .τρέχουσα(0)
                             }
                        }
                  }
            }
            Αν .Έχει_Προϋπηρεσία() τότε {
                  Τύπωσε "Προϋπηρεσία"
                  κ=Διάσταση(.προϋπηρεσία(),1)
                  Για ι=κ-1 εως 0 {
                              Εμφάνιση .προϋπηρεσία(ι), μορφη$("{0::-3})", κ-ι)
                  }
            }
      }

}
Κλάση Γενική Εργασία {
      ΑφμΕργοδ$, ΙδιότηταΕργαζομένου$, ΗμΠρόσλ, Τελική
      Τμήμα Διακοπή_Συνεργασίας {
            Διάβασε .Τελική
            Αν .Τελική < .ΗμΠρόσλ Τότε Λάθος "Αδύνατη η διακοπή σε προηγούμενη μέρα"
      }
      Συνάρτηση Στοιχεία$ {
            =Σωρός$(.ΑφμΕργοδ$, .ΙδιότηταΕργαζομένου$, .ΗμΠρόσλ, .Τελική)
      }
      Τμήμα Στοιχεία {
            Διάβασε Α$
            Σωρός Α$
            Διάβασε .ΑφμΕργοδ$, .ΙδιότηταΕργαζομένου$, .ΗμΠρόσλ, .Τελική
      }
Κλάση:
      Τμήμα Εργασία {
            Αν όχι Κενό τότε {
                  Διάβασε .ΑφμΕργοδ$, .ΙδιότηταΕργαζομένου$, .ΗμΠρόσλ
            }
      }
}
Κλάση Μισθωτός {
      αμκα$, όνομ_επων$, φύλο, αφμ$, μισθός, έτη_ασφ, κρατήσεις
      πίνακας κλιμακα() \\ φορολογική κλίμακα
      πινακας προϋπηρεσία(), τρέχουσα()
      Θέσε {
            Διάβασε Ν
            Σωρός Νέος {
            Για Ν {
                  Σειρά .αμκα$, .όνομ_επων$, .φύλο, .αφμ$, .μισθός, .έτη_ασφ, .κρατήσεις, .κλιμακα(), .προϋπηρεσία(), .τρέχουσα()
            }
            Διάβασε .αμκα$, .όνομ_επων$, .φύλο, .αφμ$, .μισθός, .έτη_ασφ, .κρατήσεις, .κλιμακα(), .προϋπηρεσία(), .τρέχουσα()
            }
      }
Κλάση:
      Τμήμα Μισθωτός {
            Αν κενό τότε έξοδος
            Διάβασε .αμκα$, .όνομ_επων$, .φύλο, .αφμ$, .έτη_ασφ, .κλιμακα()
      }     


}
Κλάση ΥπερΜισθωτός {
      Τμήμα Εισαγωγή_μισθός_κρατήσεις {
            \\ κρατήσεις ως ποσοστό π.χ. 30 σημαίνει 30%
            \\ μισθός - μεικτά - μηνιαίος
            Αν .Είναι_Ανεργος() Τότε Λάθος "Δεν έχεις δώσει εργασία"
            Διάβασε .μισθός, .κρατήσεις
      }
      Συνάρτηση Είναι_Άνεργος {
            =Διάσταση(.τρεχουσα())=0
      }
      Συνάρτηση Λεκτικό_Άνεργος$ {
            Αν .Φύλο=1 Τότε { = "άνεργος" } Αλλιώς ="άνεργη"
      }
      Συνάρτηση Έχει_Προϋπηρεσία {
            =Διάσταση(.προϋπηρεσία())<>0
      }
      Τμήμα Πρόσληψη {
            Αν Δεν .Είναι_Ανεργος() Τότε Λάθος "Δεν είναι "+.Λεκτικό_Άνεργος$()
            Πίνακας .τρέχουσα(1)
            Διάβασε .τρέχουσα(0)
      }
      Τμήμα Διακοπή_Εργασίας {
            Αν .Είναι_Ανεργος() Τότε Λάθος "Είναι "+.Λεκτικό_Άνεργος$()
            \\ αφήνουμε την ημερομηνία για το άλλο τμημα:
            .τρέχουσα(0).Διακοπή_Συνεργασίας
            κ=Διάσταση(.προϋπηρεσία())
            Αν κ=0 τότε {
                  κ=1
                  Πίνακας .προϋπηρεσία(1)=Εργασια()
             } αλλιώς {
                  κ=Διάσταση(.προϋπηρεσία(),1)+1
                  Πίνακας .προϋπηρεσία(κ)
            }
            .προϋπηρεσία(κ-1)=.τρέχουσα(0)
            Πίνακας .τρέχουσα()
      }
      Συνάρτηση Στοιχεία$ {
            Εγγραφο Α$
            Α$=Σωρός$(.αμκα$, .όνομ_επων$, .φύλο, .αφμ$, .μισθός, .έτη_ασφ, .κρατήσεις)
            κ=Διάσταση(.κλιμακα())
            Αν κ<>2 τότε {
                  Α$=Σωρός$(0)
            } Αλλιώς {
                  Α$=Σωρός$(Διάσταση(.κλιμακα(),1))
                  Για ι=0 έως Διάσταση(.κλιμακα(),1)-1 {
                        Α$=Σωρός$(.κλιμακα(ι,0),.κλιμακα(ι,1))
                  }
            }
            κ=Διάσταση(.τρέχουσα())
            Αν κ=0 τότε {
                  Α$=Σωρός$(0)
            } αλλιώς {
                  Α$=Σωρός$(Διάσταση(.τρέχουσα(),1))
                  Για ι=0 έως Διάσταση(.τρέχουσα(),1)-1 {
                        Α$=Σωρός$(.τρέχουσα(ι).στοιχεία$())
                  }
            }
            κ=Διάσταση(.προϋπηρεσία())
            Αν κ=0 τότε {
                  Α$=Σωρός$(0)
            } αλλιώς {
                  Α$=Σωρός$(Διάσταση(.προϋπηρεσία(),1))
                  Για ι=0 έως Διάσταση(.προϋπηρεσία(),1)-1 {
                        Α$=Σωρός$(.προϋπηρεσία(ι).στοιχεία$())
                  }
            }
            =Α$
      }
      Τμήμα Στοιχεία {
            Διάβασε Α$
            Σωρός Α$
            Διάβασε .αμκα$, .όνομ_επων$, .φύλο, .αφμ$, .μισθός, .έτη_ασφ, .κρατήσεις
            Διαβασε κ
            Αν κ>0 τότε {
                  Πίνακας .κλιμακα(κ,2)
                  Για ι=0 έως κ-1 {
                  Διάβασε .κλιμακα(ι,0), .κλιμακα(ι,1)
                  }
            } Αλλιώς {
                  Πίνακας .κλιμακα()
            }
            Διάβασε κ
            Αν κ>0 τότε {
                  Πίνακας .τρέχουσα(0)
                  Πίνακας .τρέχουσα(κ)=Εργασια()
                  Για ι=0 έως κ-1 {
                        .τρέχουσα(ι).στοιχεια γράμμα$
                  }
            } Αλλιώς {
                  Πίνακας .τρέχουσα(0)
            }
            Διάβασε κ
            Αν κ>0 τότε {
                  Πίνακας .προϋπηρεσία(0)
                  Πίνακας .προϋπηρεσία(κ)=Εργασια()
                  Για ι=0 έως κ-1 {
                        .προϋπηρεσία(ι).στοιχεια γράμμα$
                  }
            } Αλλιώς {
                  Πίνακας .προϋπηρεσία(0)
            }
      }
Κλάση:
      Τμήμα ΥπερΜισθωτός {
            Αν Κενό τότε {
                  Κλάση Μισθωτός {
                        αμκα$, όνομ_επων$, φύλο, αφμ$, μισθός, έτη_ασφ, κρατήσεις
                        πίνακας κλιμακα() \\ φορολογική κλίμακα
                        πινακας προϋπηρεσία(), τρέχουσα()
                        Θέσε {
                              Διάβασε Ν
                              Σωρός Νέος {
                              Για Ν {
                                    Σειρά .αμκα$, .όνομ_επων$, .φύλο, .αφμ$, .μισθός, .έτη_ασφ, .κρατήσεις, .κλιμακα(), .προϋπηρεσία(), .τρέχουσα()
                              }
                              Διάβασε .αμκα$, .όνομ_επων$, .φύλο, .αφμ$, .μισθός, .έτη_ασφ, .κρατήσεις, .κλιμακα(), .προϋπηρεσία(), .τρέχουσα()
                              }
                        }
                  }
                  Αυτό<=Μισθωτός()
            } αλλιώς {
                  Διάβασε Μισθ
                  Αυτό<=Μισθ
            }
      }
}
Πίνακας Φορολογία(5,2)
Φορολογία(0,0)=10000,22,10000,35,10000,50
Προσθήκη ΜισθωτοιΛίστα, 12345123451:=Μισθωτός("12345123451","ΤΡΑΒΑΣ ΧΑΡΗΣ",1,"012341234", 5, Φορολογία())
Προσθήκη ΜισθωτοιΛίστα, 32345123451:=Μισθωτός("32345123451","ΠΟΛΥΛΟΓΟΥ ΧΑΡΟΥΛΑ",0,"052341234", 1, Φορολογία())
Μισθωτοι=2
Για ΜισθωτοιΛίστα(12345123451) {
      Προσωρινό=ΥπερΜισθωτός(Αυτό)
      Για Προσωρινό {
            Κατάσταση &Προσωρινό
            Πένα 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")
            Κατάσταση &Προσωρινό
      }
      Αυτό=Προσωρινό \\ εδώ έχουμε ειδική = για να μην κάνει συγχώνευση στα πάντα!
}
Τύπωσε ΜισθωτοιΛίστα(12345123451)


Για ΜισθωτοιΛίστα(32345123451) {
      Προσωρινό=ΥπερΜισθωτός(Αυτό)
      Για Προσωρινό {
            Κατάσταση &Προσωρινό
            Πένα 15 { Τύπωσε "Πρόσληψη 12/10/2015" }
            ..Πρόσληψη Εργασία("912341234","Διευθυντής",ημερα("12/10/2015"))
            Κατάσταση &Προσωρινό
      }
      Αυτό=Προσωρινό
}
Για ι=0 έως Μισθωτοι-1 {
      Για ΜισθωτοιΛίστα(ι!) {
            Προσωρινό=ΥπερΜισθωτός(Αυτό)
            Αν .αμκα$<>"" τότε Βιογραφικό &Προσωρινό
            \\ εδώ δεν αλλάζουμε τιμές οπότε δεν χρειάζεται η Αυτό=Προσωρινό
      }
}


Για Αυτό {
      Προσωρινό2=ΥπερΜισθωτός(ΜισθωτοίΛίστα(12345123451))
      Βιογραφικό &Προσωρινό2
      }
Πάτα_Διάστημα
οθόνη
Τύπωσε "Γράφουμε σε αρχείο"
κ=1
Ανοιξε "αλφα.μισθ"  για ευρεια εξαγωγή ως κ
Για ι=0 έως 1 {
      Για ΜισθωτοίΛίστα(ι!) { \\ ο χαρακτήρας ! δηλώνει ότι το ι δεν είναι κλειδί αλλά αριθμός σειράς από το 0
            Προσωρινό=ΥπερΜισθωτός(Αυτό)
            Βιογραφικό &Προσωρινό
            \\ Τύπωσε .στοιχεία$()
            Τύπωσε #κ, Προσωρινό.στοιχεία$()
      }
}
Κλείσε #κ
Τύπωσε "Τέλος εγγραφής"
Τύπωσε "Διαβάζουμε από αρχείο"
Τύπωσε αρχείου.μήκος("αλφα.μισθ")
Ανοιξε "αλφα.μισθ"  για ευρεια εισαγωγή ως κ
Ενώ όχι τέλος(#κ) {
     Γραμμή Εισαγωγής #κ, α$
     Προσωρινό=ΥπερΜισθωτός()
     Προσωρινό.στοιχεία α$
     Βιογραφικό &Προσωρινό
}
Κλείσε #κ
Τύπωσε "Τέλος ανάγνωσης"
Πάτα_Διάστημα
Τύπωσε "Διαβάζουμε από αρχείο σε πίνακα με εξωτερικούς δείκτες"
Τύπωσε αρχείου.μήκος("αλφα.μισθ")
\\ στους πίνακες έχουμε κοινές συναρτήσεις
Πίνακας άλλος(10)=ΥπερΜισθωτός()
Ανοιξε "αλφα.μισθ"  για ευρεια εισαγωγή ως κ
ι=0
Ενώ όχι τέλος(#κ) {
     Γραμμή Εισαγωγής #κ, α$
     Για Άλλος(ι) {
            .στοιχεία α$
           Προσθήκη ΝέαΛίσταΑμκα, .αμκα$:= ι
           Προσθήκη ΝέαΛίσταΑΦΜ, .αφμ$:= ι
           Προσθήκη ΝέαΛίσταΕπωνΟνομα .όνομ_επων$:=ι
           Βιογραφικό &Αυτό
           ι++
     }
}
   Πάτα_Διάστημα
Κλείσε #κ
Ταξινόμηση ΝέαΛίσταΕπωνΟνομα
Τύπωσε "Τέλος ανάγνωσης"
Τύπωσε "Αναζήτηση αμκα: 12345123451"
Αν Υπάρχει(ΝέαΛίσταΑμκα, 12345123451) τότε {
      Τύπωσε "Βρέθηκε"
      Τύπωσε "Στό επώνυμο/όνομα: ";
      Πένα 11 { Τύπωσε άλλος(εκφρ(ΝέαΛίσταΑμκα)).όνομ_επων$}
}
Τύπωσε "Αναζήτηση ΑΦΜ: 052341234"
Αν Υπάρχει(ΝέαΛίσταΑΦΜ, "052341234") τότε {
      Τύπωσε "Βρέθηκε"
      Τύπωσε "Στό επώνυμο/όνομα: ";
      Πένα 11 { Τύπωσε άλλος(εκφρ(ΝέαΛίσταΑΦΜ)).όνομ_επων$}
}
Τύπωσε "Λίστα με αλφαβητικά σειρά"
Πένα 15 {
      Επαναλήπτης=Κάθε(ΝέαΛίσταΕπωνΟνομα)
      Ενώ Επαναλήπτης {
            Τύπωσε Επαναλήπτης^+1, Άλλος(Εκφρ(ΝέαΛίσταΕπωνΟνομα)).όνομ_επών$
      }
      Επαναλήπτης=Κάθε(ΝέαΛίσταΕπωνΟνομα Τέλος Εως Αρχη)
      Ενώ Επαναλήπτης {
            Τύπωσε Επαναλήπτης^+1, Άλλος(Εκφρ(ΝέαΛίσταΕπωνΟνομα)).όνομ_επών$
      }
}



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

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

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