Jump to content



Project "κολλητός" @ Visual Basic


theoamd

Recommended Posts

Κατ' αρχάς Χριστός Ανέστη και Χρόνια Πολλά.

Ουδεμία σχέση είχα με τη VB, μέχρι που 3 εβδομάδες νωρίτερα, ένας φίλος, ζήτησε βοήθεια για μια εργασία του.

Η εργασία δεν ζητούσε κάτι εξαιρετικό και έτσι οι 150 γραμμές κώδικα, παρήχθησαν σχετικά άνετα, εξαιρώντας ορισμένες μικροδυσκολίες της γλώσσας.

Τώρα, όμως, κόλλησε κάπου το όλο θέμα στη δεύτερη εργασία του, η οποία ζητάει, εν ολίγοις :

- εισαγωγή και έλεγχο εγκυρότητας δεδομένων σε 4 text fields

- εμφάνισή τους σε ένα άλλο text field

- έλεγχο μικρότερης και μεγαλύτερης παρουσιασθείσας τιμής(η οποία παράγεται σαν πηλίκο 2 αριθμητικών τιμών από τα text fields), ο οποίος θα γίνεται αντιληπτός από τις συνεχείς ανανεώσεις 2 σχετικών text fields, κατά την εισαγωγή δεδομένων.

Το κώλυμα, είναι στο τελευταίο ζητούμενο, γιατί μάλλον θέλει πίνακα και δε μπορώ να καταλάβω πως θα λειτουργήσει ο βρόχος και ο πίνακας.

Για όποιον δεν έγινα κατανοητός, ιδού και η εκφώνηση http://elearning.teiser.gr/file.php/80/ergasies/ef-pli-II-ask2-12-13E.pdf

Link to comment
Share on other sites

Χρόνια πολλά και σε εσένα.Ας γράψουμε μερικά κιλά κώδικα

Από ότι βλέπω από την εκφώνηση το αντικείμενο (class) είναι αρκετά προφανές.

Αν θες να το κάνεις με καθαρό αντικειμενοστρεφή προγραμματισμό αρκεί να ορίσεις τις private και τις public ιδιότητες που θέλεις σαν πεδία και στον constructor απλώς να βάζεις τις τιμές.Μην ξεχάσεις να ορίσεις και την μέθοδο που θα σου επιστρέφει σαν ένα ενιαίο string της πληροφορίες του αντικειμένο (για συνένωση string ξέρεις υποθέτω :p)

Εναλλακτικά μπορείς να φτιάξεις properties με Get (για να παίρνεις τις τιμές) και Set (για να βάζεις τιμές) παράδειγμα property

Private _CategoryId As Integer
Public Property CategoryId() As Integer
Get
Return _CategoryId
End Get
Set(ByVal value As String)
_CategoryId = value
End Set
End Property

To "καλό" με τα properties είναι ότι δεν χρειάζεται να υπολοποιήσεις contructor.

O παραπάνω κώδικας θα μπει μέσα σε ένα απλό vb αρχείο.

Μετά ξεκινάς το window application project sto visual studio.Φτιάχνεις την φόρμα όπως την έχει το pdf.

Bάζεις περιγραφικά ονόματα στα textboxes για την δημιουργία του νεόυ δήμου μην βάλεις κανένα textbox1,textbox2,textbox3,textbox4.

Στο onclick event του button θα κάνεις πρώτα τους ελέγχους που ζητάει.

Κατά την εισαγωγή των 4 στοιχείων θα πρέπει

•ο κωδικός και το όνομα να μην είναι κενά αλφαριθμητικά,

•η έκταση (σε τετραγωνικά χιλιόμετρα) να είναι πραγματικός,μη αρνητικός αριθμός

και

•ο πληθυσμός να είναι μη αρνητικός ακέραιος.

Αν κάποια από αυτές τις συνθήκες δεν ισχύει, θα πρέπει να φροντίσετε να μη δέχεται το πρόγραμμα την εισαγωγή του δήμου

Για την εμφάνιση μηνύματος στον χρήστη υπάρχει η συνάρτηση MsgBox("Test Me!")

Για την τιμή που έχει βάλει ο χρήστης στο textbox κοίτα την ιδιότητα Text του textbox.

Η πραγματοποίηση των ελέγχων αφήνεται σαν άσκηση στον αναγνώστη.

Αφού όλοι οι έλεγχοι είναι αρνητικοί τότε θα φτιάχνεις ένα νέο αντικείμενο του τύπου που ορίσαμε αρχικά στο vb αρχείο απλώς καλώντας τον constructor με τις τιμές των textboxes.Kαι εδώ φτάνουμε στο πρόβλημα:Που θα κρατάς τα αντικείμενα που ίσως έφτιαξες νωρίτερα? Σε ένα πίνακα που είναι και το πιο απλό αλλά που θα αρχικοποιείται αυτός? Hint:και η φόρμα σου είναι στην ουσία ένα αντικείμενο (class) που μπορεί να έχεις ιδιοτητες και μεθόδους που έχεις ορίσει εσύ.

Αφού ξεπεράσεις και το παραπάνω "εμπόδιο" περνάς στην φάση των επιπλέον στοιχείων που πρέπει να υπολοποιήσεις

Αν η πυκνότητα πληθυσμού του δήμου είναι μεγαλύτερη όσων δήμων έχουν εξεταστεί μέχρι στιγμής,

θα ενημερώνεται επίσης το label με τίτλο Μέγιστη πυκνότητα πληθυσμού και εάν είναι μικρότερη όσων έχουν εξεταστεί,θα ενημερώνεται το label με τίτλο Ελάχιστη πυκνότητα πληθυσμού.

Θα χρησιμοποιήσεις το for each

For Each...Next Statement (Visual Basic)

Hint: For Each element [ As datatype ] In group

Οι έλεγχοι που πρέπει να γίνουν μέσα στο for each αφήνονται επίσης σαν άσκηση.

Link to comment
Share on other sites

Θα χρησιμοποιήσεις το for each

For Each...Next Statement (Visual Basic)

Hint: For Each element [ As datatype ] In group

Οι έλεγχοι που πρέπει να γίνουν μέσα στο for each αφήνονται επίσης σαν άσκηση.

Δυστυχώς, δεν έγινε κατανοητό το αρχικό post κι έτσι νομίζω άδικα έγραψες οτιδήποτε βρισκόταν πιο πάνω από το block της απάντησής σου που παραθέτω.

Βέβαια, στον προγραμματισμό, τίποτε και ποτέ δεν είναι χαμένος χρόνος, καθώς πολλές φορές, μπορούμε να υποδείξουμε/ανακαλύψουμε νέες μεθόδους/διεξόδους χωρίς να το καταλάβουμε.

Anyway, το ζητούμενο είναι ότι έχουν γίνει όλα τα απαραίτητα πρωτού δημιουργηθεί το post και το μόνο που έχει μείνει είναι το τελευταίο κομμάτι, δηλαδή αυτό στο οποίο αναφέρεται και η παράθεσή μου, αλλααααααά...αν σου πω ότι δεν κατάλαβα σχεδόν τίποτα σχετικά με το for each(δεν με βοήθησαν ιδιαίτερα και τα παραδείγματα)?

ίσως φταίει και η δεύτερη συνεχόμενη βραδινή προπόνηση :hang2:

Μπορείς να γίνεις λίγο πιο συγκεκριμένος?

Link to comment
Share on other sites

Πως έχεις ονομάσεις την κλάσση που φτιάξατε?Dhmos?

for each dhmos as Dhmos in (όνομα πίνακα που κρατάει τους δήμους)

[εδώ κάνεις τους ελέγχους κάθε στοιχείο του πίνακα είναι η μεταβλητή dhmos]

Νext

Link to comment
Share on other sites

Χαχ δεν μπορώ να καταλάβω γιατί δεν παίζει.

Νομίζω θα χρειαστούμε αναγκαστικά list για dynamic προσπέλαση των αντικειμένων.

Βασικά η λίστα θα αφορά μόνο την ποσότητα που θέλουμε να εξετάσουμε, δηλαδή την πυκνότητα, οπότε θα έχουμε σίγουρα κάτι του στυλ

Dim lista As New List(Of Double)

.

Αρχικά, έκανα την παραπάνω δήλωση στην κλάση και εντός του constructor κάνω ένα

lista.Add(getPP())

, όπου getPP(), η getter την πυκνότητας πληθυσμού.

Το σφάλμα είναι ότι συντάσσοντας το for each μου πετάει ότι το lista δεν είναι declared. Που κολλάει αυτό;

Link to comment
Share on other sites

Dim lista As New List(Of Double)

.

Αρχικά, έκανα την παραπάνω δήλωση στην κλάση και εντός του constructor κάνω ένα

lista.Add(getPP())

, όπου getPP(), η getter την πυκνότητας πληθυσμού.

Σε ποιά κλάση έβαλες την δήλωση της λίστας? Στην κλάση του form που περιέχει την φόρμα για το application ή στην κλάση Dhmos στο ξεχωριστό vb αρχείο?Πρέπει να μπει στην κλάση του form.Και εκεί δεν χρειάζεται καν να μπει στον constructor.

επίσης κάνεις αυτό

lista.Add(getPP())
η getPP() είναι public function στην κλάση Dhmos?Αν όχι εκεί πρέπει να την βάλεις.Αν ναι τότε την καλείς λάθος,δεν ορίζεις το αντικείμενο στο οποίο θα σου επιστρέψει την τιμή της πυκνότητας πληθυσμού. θέλει να την καλέσεις έτσι

Dim dhmosKallitheas as new Dhmos()

Dim pyknothtaPlithismoy = dhmosKallitheas.getPP()

Ελπίζω να κατάλαβα σωστά αυτή την φορά.

Link to comment
Share on other sites

Κάτι έχω σήμερα, δεν εξηγείται αλλιώς.

Edit, λοιπόν!

Αυτό που έπρεπε να αναφέρεται στο προηγούμενο ποστ είναι :

 lista.Add(acc.getPP())

, όπου acc το εν λόγω αντικείμενο.

Έβγαλα από την κλάση Dhmos τη λίστα-υπάρχει πλέον μόνο στην κλάση της φόρμας.


Public Class Form1

Dim lista As New List(Of Double)

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim acc As New Dhmos()

<<<@!1!@>>>

acc = New Dhmos(TextBox1.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text)

lista.Add(acc.getPP())
TextBox2.Text = acc.getInfo()

For Each dhmos As Dhmos In [S]lista[/S]

Next
End Sub

End Class

τα ονόματα των tb μην τα κοιτάς, πίστευα θα την έβγαζα σ' ένα βράδυ χαχ

Getting an error like this :

Value of type 'Double' cannot be converted to 'Project2.Dhmos' .

Link to comment
Share on other sites

Dim acc As New Dhmos()

acc = New Dhmos(TextBox1.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text)

Λάθος 1:

2 φορές ορίζεις το ίδιο αντικείμενο? Dim acc as New Dhmos(TextBox1.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text)

Λάθος 2:

Oρίζεις αρχικά την μεταβλητή lista σαν list(Of Double) και στο for each κάνεις αυτό

For Each dhmos As Dhmos In lista

Next

Αφού η lista είναι τύπου Double το Αs γιατί είναι Dhmos?

For Each pyknothtaPlithismoy as Double In lista

Next

Με το λάθος 2 λογικό το cast error.Επίσης στο For each το [As Τύπος] είναι προαιρετικό.Αλλά καλό είναι να το χρησιμοποιείς για τον έλεγχο λαθών.Αν πχ έγγραφες

For Each dhmos In lista

Next

Στον κώδικα σου η μεταβλητή dhmos θα γινόταν αυτόματα τύπου double γιατί η λίστα είναι τύπου Of Double

Link to comment
Share on other sites

Dim acc as New Dhmos(TextBox1.Text, TextBox3.Text, TextBox4.Text, TextBox5.Text)

Οπότε καλά το είχα, αρχικά.

Νόμιζα κατέληξα σε λύση, αλλά οι παρακάτω γραμμές ~μάλλον~ δουλεύουν για δυάδες :

For Each pp As Double In lista
largest = Math.Max(largest, pp)
smallest = Math.Min(smallest, pp)
Next

Κάτι πιο βέλτιστο;

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Δημιουργία...

Important Information

Ο ιστότοπος theLab.gr χρησιμοποιεί cookies για να διασφαλίσει την καλύτερη εμπειρία σας κατά την περιήγηση. Μπορείτε να προσαρμόσετε τις ρυθμίσεις των cookies σας , διαφορετικά θα υποθέσουμε ότι είστε εντάξει για να συνεχίσετε.