Προς το περιεχόμενο

Πρόγραμμα σε Java


@kon_!

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα παιδιά..

Έχω να κάνω μια εργασία σε Java μέχρι το απόγευμα και χρειάζομαι βοήθεια σε κάποια πραγματάκια.

Λοιπόν,πρέπει να δημιουργήσω ένα ηλεκτρονικό κατάστημα το οποίο θα παρακολουθεί τις εργασίες που γίνονται σε ένα κατάστημα επισκευής υπολογιστών.Οι λειτουργίες που πρέπει να κάνει το πρόγραμμα περιληπτικά είναι οι εξής:

• Διαχειριστής: καταχώρηση νέου χρήστη, προβολή χρηστών με όλα τα στοιχεία.

• Γραμματεία: Καταχώρηση νέας εργασίας, προβολή ολοκληρωμένων εργασιών, Καταχώρηση εργασίας σε κατάσταση «Αρχείο», προβολή εργασιών αρχείου.

• Συντονιστής: Προβολή ανοικτών εργασιών, επιλογή αν το πρόβλημα θα ανατεθεί σε

τεχνικό υλικού ή λογισμικού, προβολή των εργασιών που βρίσκονται σε εξέλιξη.

• Τεχνικός: Προβολή των εργασιών που του έχουν ανατεθεί, καταχώρηση εργασίας

που του έχει ανατεθεί ως ολοκληρωμένη.

 

Το πρώτο μου πρόβλημα είναι η αποθήκευση των χρηστών από τον Διαχειριστή και των Εργασιών από την Γραμματεία.

Έχω χρησιμοποιήσει TreeSet για να βάζω τα στοιχεία μου σε λίστα και μετά με ObjectOutputStream τα αποθηκεύω σε ένα αρχείο Works.dat.

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

Οποιαδήποτε βοήθεια είναι επιθυμητή.

 

*Ο κώδικας που χρησιμοποιώ για την αποθήκευση είναι ο εξής:

>
public static void saveState() {
       try {
           ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Works.dat"));
           out.writeObject(works);
           out.close();
       } catch (IOException ex) {
           System.out.println(ex);
       }
   }

όπου works το TreeSet που έχω δημιουργήσει.

Δημοσ.

είσαι σίγουρος ότι το " out.writeObject(works); " μπορεί να γράψει όλη την λίστα;

έχω την εντύπωση ότι θες μία επανάληψη ώστε να γράψεις όλα τα στοιχεία τις λίστας.

Δημοσ.

Δεν είμαι σίγουρος για αυτό έγραψα τον κώδικα που χρησιμοποιώ.. :P

Έχω την εντύπωση ότι από την στιγμή που έχω δηλώσει ότι το works είναι TreeSet σημαίνει αυτόματα ότι θα αποθηκεύσει όλο το TreeSet στο αρχείο μου.Αλλά το σκεπτικό σου είναι σωστό..Πώς να υλοποιήσω την for στο συγκεκριμένο κομμάτι?

Δημοσ.

μπορώ να πω ότι δεν το έχω ξανά χρησιμοποιήσει,

αλλά σύμφωνα με εδώ http://download.oracle.com/javase/1.4.2/docs/api/java/util/TreeSet.html

εφόσον έχει μέθοδο Iterator

θα πρέπει να γίνει κάπως έτσι ο κώδικάς σου

>
public static void saveState() {
       try {
           ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Works.dat"));
           Iterator treeSetIterator = works.iterator;
           while (treeSetIterator.hasNext()){
              out.writeObject(treeSetIterator.next()+'\n');
           }
           out.close();
       } catch (IOException ex) {
           System.out.println(ex);
       }
   }

για δοκίμασε το..

Δημοσ.

Μου βγάζει λάθος..

cannot find symbol

symbol: variable iterator

location: interface java.util.Set<ComputerService.Users>

Ξέρεις ποιο είναι το θέμα;Ότι ο κώδικας που έχω αναρτήσει είναι από σημειώσεις του καθηγητή.Και δεν περίμενα να είναι λάθος.Και εκεί ακριβώς την ίδια υλοποίηση κάνει για αυτό σου είπα για το TreeSet ότι λογικά αποθηκεύεται όλο.

Δημοσ.

Έχω κάνει import το java.util.* που τα περιλαμβάνει όλα για τα Set.Οπότε ναι λογικά έχω κάνει τα import εκτός αν χρειάζεται κάτι επιπλέον.Ρε παιδιά θα τρελαθώ με αυτό το πράγμα.Προσπαθώ να βγάλω άκρη από χθές το βράδυ.

Δημοσ.

επειδή το έχει γράψει καθηγητής δεν το κάνει σωστό..

ωστόσο δεν έχω δουλέψει με τα treeset δεν ξέρω τι παίζει, απλώς ότι είδα από το documentation σου είπα..

 

**edit

λοιπόν μιας και άνοιξα το netbeans

αυτό δουλεύει

>
public static void saveState() {
       try {
           ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("Works.dat"));
           Iterator treeSetIterator = works.iterator();
           while (treeSetIterator.hasNext()){
              out.writeObject(treeSetIterator.next().toString()+'\n');
           }
           out.close();
       } catch (IOException ex) {
           System.out.println(ex);
       }
   }

το πρόβλημα ήταν ότι είχα γράψει works.iterator και έψαχνε για πεδίο και όχι για την μέθοδο iterator() αυτό όμως θα έπρεπε να το είχες δει και μόνος σου όταν το έγραψες

το θέμα είναι όταν γράφεις το works, Πάτα . και ctrl + space να σου βγάζει μεθόδους και πεδία που έχει να ξέρεις με τι να δουλέψεις.. καλή τύχη με την εργασία

Δημοσ.

Παιδιά αν μπορεί κάποιος να βοηθήσει.Με τα παραπάνω που έχω γράψει έχω βγάλει μια άκρη.

Το πρόβλημα μου τώρα είναι το εξής:

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

 

Έχω κάνει το παρακάτω:

>
public static void addSoftware(){
       int id;
       System.out.print("Δώσε το ID της εργασίας για ανάθεση: ");
       id = Integer.parseInt(sc.nextLine());
       for(Works w : works)
           if(w.getID()==id){
               saveSoftTech();
       }
}

και

>
public static void saveSoftTech() {
       try {
           ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("softtech.dat"));
           out.writeObject(works);
           out.close();
       } catch (IOException ex) {
           System.out.println(ex);
       }
   }

όπου works ενα TreeSet που έχει αποθηκευτεί στο άλλο αρχείο που δεν φαίνεται στον κώδικα που σας δίνω αλλά το τραβάω σωστά.

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

Δημοσ.

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

 

>public static void saveSoftTech(Works w) {
       try {
           ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("softtech.dat"));
           out.writeObject(w);
           out.close();
       } catch (IOException ex) {
           System.out.println(ex);
       }
   }

Αρχειοθετημένο

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

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