cris4524 Δημοσ. 29 Απριλίου 2014 Δημοσ. 29 Απριλίου 2014 Προσπαθώ να υλοποιήσω μία java εφαρμογή η οποία θα διαχειρίζεται μία δανειστική βιβλιοθήκη. Ειδικότερα με την έναρξη της εφαρμογής θα ήθελα να εμφανίζεται στην οθόνη το ακόλουθο μενού επιλογών: Εισαγωγή νέου βιβλίου Τροποποίηση στοιχείων ενός βιβλίου. Αναζήτηση ενός βιβλίου (με βάση το ΙSBN του). Εμφάνιση όλων των βιβλίων Διαγραφή ενός βιβλίου (με βάση το ΙSBN του) Έξοδος Αφού ο χρήστης πληκτρολογήσει την επιλογή θα εμφανίζεται στην οθόνη το αποτέλεσμα της επιλογής του. Για την αποθήκευση των βιβλίων χρησιμοποιείται ένας πίνακας 60 θέσεων. Τα στοιχεία κάθε βιβλίου θα είναι : Το ΙSBN του βιβλίου (String) Τίτλος(String) Συγγραφέας (String) Πλήθος Αντιτύπων (int) Μήπως μπορεί κανείς να με βοηθήσει;
ZAKKWYLDE Δημοσ. 29 Απριλίου 2014 Δημοσ. 29 Απριλίου 2014 Στείλε τι έχεις κάνει μέχρι τώρα να σε βοηθήσουμε.
nucleus Δημοσ. 29 Απριλίου 2014 Δημοσ. 29 Απριλίου 2014 Επίσης ποιο IDE χρησιμοποιείς? Netbeans?Eclipse?JDeveloper?
cris4524 Δημοσ. 29 Απριλίου 2014 Μέλος Δημοσ. 29 Απριλίου 2014 Επίσης ποιο IDE χρησιμοποιείς? Netbeans?Eclipse?JDeveloper? Το eclipse χρησιμοποιώ. Στείλε τι έχεις κάνει μέχρι τώρα να σε βοηθήσουμε. Το παλεύω δεν έχω τελειώσει ακόμη την βασική δομή.
Timonkaipumpa Δημοσ. 29 Απριλίου 2014 Δημοσ. 29 Απριλίου 2014 Και πώς θα μπορούσε κάποιος να σε βοηθήσει εφόσον δεν έχεις αρχίσει ακόμα; Τι βοήθεια ζητάς;
Lanike71 Δημοσ. 29 Απριλίου 2014 Δημοσ. 29 Απριλίου 2014 Δεν ξέρω τι έχεις κάνει ως τώρα, εγώ θα ξεκινούσα από τις οντότητες που παίρνουν μέρος ώστε να καταλάβω τι παίζει.Μετά προχωράς σιγά-σιγά με getters και setters και τις μεθόδους που πρέπει να υλοποιήσεις. Συνήθως, με ένα διάγραμμα κλάσεων έχεις παραπάνω από τη μισή εικόνα του προβλήματος.
cris4524 Δημοσ. 29 Απριλίου 2014 Μέλος Δημοσ. 29 Απριλίου 2014 Αρχικά να πω ότι όπου δεν ξέρω τον κώδικα έχω γράψει ολογράφως το τι θέλω να κάνει εκείνο το σημείο του κώδικα. public class Library_Database { int[][] Database=new int[60][4]; String ISBN; String Title; String Author; int count_of_books; public Library_Database(int[][] database, String iSBN, String title, String author, int count_of_books) { Database = database; ISBN = iSBN; Title = title; Author = author; this.count_of_books = count_of_books; } public int[][] getDatabase() { return Database; } public void setDatabase(int[][] database) { Database = database; } public String getISBN() { return ISBN; } public void setISBN(String iSBN) { ISBN = iSBN; } public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getAuthor() { return Author; } public void setAuthor(String author) { Author = author; } public int getCount_of_books() { return count_of_books; } public void setCount_of_books(int count_of_books) { this.count_of_books = count_of_books; } } import java.util.*; public class User_Menu { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input=new Scanner(System.in); int option=0; while(option!=6){ System.out.println("1.Εισαγωγή νέου βιβλίου"); System.out.println("2.Τροποποίηση στοιχείων ενός βιβλίου."); System.out.println("3.Αναζήτηση ενός βιβλίου (με βάση το ΙSBN του)."); System.out.println("4.Εμφάνιση όλων των βιβλίων"); System.out.println("5.Διαγραφή ενός βιβλίου (με βάση το ΙSBN του)"); System.out.println("6.Έξοδος."); } if (option==1){ System.out.println("Δώσε ISBN: "); String ISBN=input.next(); System.out.println("Δώσε Τίτλο: "); String Title=input.next(); System.out.println("Δώσε Όνομα Συγγραφέα: "); String Author=input.next(); System.out.println("Δώσε Πλήθος Αντιτύπων: "); double Count_of_books=input.nextInt(); } if (option==2){ System.out.println("Δώσε ISBN του βιβλίου που θες να τροποποιήσεις: "); String ISBN_s=input.next(); if (EAN to ISBN YPARXEI TOTE NA PAEI STO YPOMENOY){ System.out.println("Επέλεξε μια από τις παρακάτω επιλογές: "); System.out.println("1.Τροποπίησε το ISBN "); System.out.println("2.Τροποπίησε τον Τίτλο "); System.out.println("3.Τροποπίησε το Όνομα Συγγραφέα "); System.out.println("4.Τροποπίησε το Πλήθος Αντίτυπων "); } KAI STIN SINEXEIA META TIN EPILOGI TOU XRISTI NA GINEI I KATALILI TROPOPOIHSH STON PINAKA. } if (option==3){ NA PSAKSEI STON PINAKA EAN YPARXEI TO SIGKEKRIMENO ISBN KAI STIN SINEXEIA NA TO EMFANISEI STIN OTHONI ALIOS NA EMFANISEI MINIMA LATHOUS } if (option==4){ EMFANISI OLOY TOY PINAKA STIXISMENO. } if (option==5){ NA ANAZITISEI TO ISBN SE PIA GRAMMI TOY PINAKA EINAI KAI STIN SINEXEIA NA NA KANEI NULL OLI TIN GRAMI TOU PINAKA POU VRISKETE TO SIGKEKRIMENO VIVLIO. } if (option==6){ return; } } Επίσης δεν ξέρω αν χρειάζεται ξεχωριστή κλάση για τις καταχωρίσεις τον βιβλίων ή αν γίνεται και μέσα στην κλάση Library_Database.
ZAKKWYLDE Δημοσ. 29 Απριλίου 2014 Δημοσ. 29 Απριλίου 2014 (επεξεργασμένο) Λοιπόν πρέπει λίγο να επανασχεδιάσεις τη δομή σου. Με βάση την άσκηση έχεις κάποιες οντότητες: - Βιβλίο - Βιβλιοθήκη - User Interface Άρα 3 ξεχωριστές κλάσεις. Για το βιβλίο έχεις τη δομή του απο την εκφώνηση. Το πιό σημαντικό είναι η βιβλιοθήκη: - Η βιβλιοθήκη θα κρατάει Βιβλία. Άρα θες έναν πίνακα που θα κρατάει "Βιβλία" δηλαδή ( Book[] books = new Book[60] - Για να διευκολυνθείς θεώρησε ότι είναι ΜΙΑ η βιβλιοθήκη. Οπότε κάνε static τον πίνακά σου. Οπότε private static Book[] books = new Book[60]; Η βιβλιοθήκη τι άλλο θα κάνει; - θα προσθέτει ένα βιβλίο - θα επεξεργάζεται ένα βιβλίο - θα βρίσκει ένα βιβλίο - θα διαγράφει ένα βιβλίο - θα επιστρέφει τον αριθμό των βιβλίων - θα επιστρέφει όλα τα βιβλία Αυτά είναι μέθοδοι που πρέπει να υλοποιήσεις ΜΕΣΑ στην κλάση Library. Η κλάση UI αφορά MONO το UI, άρα όποια λογική του στύλ "αν το ISBN υπάρχει κάνε το Χ" πρέπει να υπάρχει ΜΕΣΑ στη LIbrary. Άρα στο σχετικό option στο UI εσύ θα κάνεις library.addBook(book); και η κλάση Library θα κρίνει τι θα κάνει με αυτή την οντότητα. Φτιάξε την δομή όπως σου είπα και ξαναπόσταρε τον κώδικα Επεξ/σία 29 Απριλίου 2014 από ZAKKWYLDE 2
cris4524 Δημοσ. 6 Μαΐου 2014 Μέλος Δημοσ. 6 Μαΐου 2014 (επεξεργασμένο) Το έχω υλοποιήσει διαφορετικά με την βοήθεια του καθηγητή μου. Έχω δημιουργήσει 2 κλάσεις την Books και την Library.\ Ρίξτε και εσείς μια ματιά στον κώδικα για τυχών λάθη επειδή δεν τον έχω ολοκληρώσει και δεν τον έχω τρέξει. Θέλω τώρα λίγη βοήθεια στο μέρος που γίνετε η διαγραφή ενός βιβλίου (ενός πεδίου του πίνακα). public class Books { String ISBN; String Title; String Author; int count_of_books; public Books(String iSBN, String title, String author, int count_of_books) { ISBN = iSBN; Title = title; Author = author; this.count_of_books = count_of_books; } public String getISBN() { return ISBN; } public void setISBN(String iSBN) { ISBN = iSBN; } public String getTitle() { return Title; } public void setTitle(String title) { Title = title; } public String getAuthor() { return Author; } public void setAuthor(String author) { Author = author; } public int getCount_of_books() { return count_of_books; } public void setCount_of_books(int count_of_books) { this.count_of_books = count_of_books; } } import java.util.*; public class User_Interface { public static void main(String[] args) { // TODO Auto-generated method stub Scanner input=new Scanner(System.in); int option=0; Books[] Book = new Books[60]; int new_books=0; while(option!=6){ System.out.println("1.Eisagogi neou vivliou"); System.out.println("2.Tropopoihsh stoixeion enos viviliou."); System.out.println("3.Anazitisi enos vivliou (me vasi to ISBN))."); System.out.println("4.Emfanisi olon ton vivlion"); System.out.println("5.Diagrafi enos vivliou me vasi to ISBN tou)"); System.out.println("6.Exit."); option=input.nextInt(); if (option==1){ System.out.println("Dose ISBN: "); String ISBN=input.next(); System.out.println("Dose Title: "); String Title=input.next(); System.out.println("Dose Author"); String Author=input.next(); System.out.println("Dose Plithos Antitipon: "); int Count_of_books=input.nextInt(); if (new_books<60){ Book[new_books]=new Books(ISBN,Title,Author,Count_of_books); new_books++; } else { System.out.println("Library is full!"); } } if (option==2){ System.out.println("Dose to ISBN tou vivliou poy thes na tropopoihseis: "); String ISBN_s=input.next(); for (int i=0; i<60; i++) if (ISBN_s==Book[i].ISBN){ System.out.println("Dose ISBN: "); String ISBN=input.next(); System.out.println("Dose Title: "); String Title=input.next(); System.out.println("Dose Author"); String Author=input.next(); System.out.println("Dose Plithos Antitipon: "); int Count_of_books=input.nextInt(); } } if (option==3){ System.out.println("Dose to ISBN tou vivliou poy thes na Anazitiseis: "); String ISBN_s=input.next(); int x=0; while (ISBN_s==Book[x].ISBN){ System.out.println(Book[x].ISBN+" "+Book[x].Title+" "+Book[x].Author+" "+Book[x].count_of_books); x++; } System.out.println("To vivilio den eiparxei!"); } if (option==4){ int i=0; for (i=0; i==new_books; i++) { System.out.println(Book[i].ISBN+" "+Book[i].Title+" "+Book[i].Author+" "+Book[i].count_of_books); } } if (option==5){ System.out.println("Dose to ISBN tou vivliou poy thes na Diagrapseis: "); String ISBN_d=input.next(); int y=0; while (ISBN_d==Book[y].ISBN){ int a=0; y++; } } if (option==6){ return; } } } } Επεξ/σία 6 Μαΐου 2014 από cris4524
Aztec Δημοσ. 6 Μαΐου 2014 Δημοσ. 6 Μαΐου 2014 Για fixed size array έχεις τις επιλογές 1.Μετακίνηση των στοιχείων μια θέση κάτω πάνω απο αυτό που έγινε remove και προσθέτεις πάντα στο τέλος 2.Nullify το στοιχείο που έγινε remove και ανάλογα φτιάχνεις και την εισαγωγή σου να γεμίζει τα κενά τον κώδικα λίγο που τον είδα έχει λάθη
ZAKKWYLDE Δημοσ. 7 Μαΐου 2014 Δημοσ. 7 Μαΐου 2014 Λοιπόν 3 βασικά πράγματα που πρέπει να ξέρεις. - Οι κλάσεις γράφονται πάντα με το πρώτο γράμμα κεφαλαίο. - Οι μέθοδοι και οι μεταβλητες πάντα ξεκινάνε με μικρά (Άρα δεν γράφουμε Books[] Book = new Books[60] ...το οποίο και σαν όνομα μεταβλητής δεν βγάζει νόημα μιας και αυτό υποτίθεται είναι το Library σου. - Τα constants πάντα όλα κεφαλαία χωρισμένα απο '_' όπου χρειάζεται. Έχεις πολλά λάθη στον κώδικα και δείχνεις ότι δεν έχεις καταλάβει αρκετά πράγματα. Σου στέλνω μια ενδεικτική λύση...σίγουρα κάποια πράγματα μπορούσαν να γίνουν καλύτερα αλλά πιστεύω θα σε βοηθήσει: Καλό είναι να τα μελετήσεις να να καταλάβεις γιατί γίνονται ορισμένα πράγματα. //Book και όχι Books μιας και αντιπροσωπεύει 1 Book. //Είναι το Data-Model μας public class Book { //private ta fields μας και όπως είπαμε με μικρά για να καταλαβαίνουμε ότι είναι //variables private String isbn; private String title; private String author; //to number αρκεί να το χαρακτηρήσει, αφού ξέρουμε ότι είναι member της κλάσης Book private int number; public Book(String isbn, String title, String author, int number) { this.isbn = isbn; this.title = title; this.author = author; this.number = number; } public String getIsbn() { return isbn; } public void setIsbn(String iSBN) { isbn = iSBN; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getNumber() { return number; } public void setNumber(int number) { this.number = number; } //Με αυτή τη μέθοδο μπορούμε να κάνουμε απευθείας //System.out.println(book) χωρίς κάθε φορά να επιλέγουμε τα συγκεκριμένα πεδία @Override public String toString() { return "Book{" + "isbn='" + isbn + '\'' + ", title='" + title + '\'' + ", author='" + author + '\'' + ", number=" + number + '}'; } } public class Library { private static final int LIBRARY_CAPACITY = 60; private static Book[] books = new Book[LIBRARY_CAPACITY]; private static int uniqueTitles = 0; public boolean addBook(Book book) { boolean success = false; if (uniqueTitles < books.length) { books[uniqueTitles++] = book; success = true; } return success; } public boolean updateBook(String oldIsbn, Book book) { boolean success = false; Book oldBook = findBook(oldIsbn); if (oldBook != null) { oldBook.setAuthor(book.getAuthor()); oldBook.setTitle(book.getTitle()); oldBook.setNumber(book.getNumber()); success = true; } return success; } public boolean deleteBook(String isbn) { boolean success = false; Book oldBook = findBook(isbn); if (oldBook != null) { Book[] newLibrary = new Book[60]; //inefficient αλλά μας κάνει για την ώρα. for (int i = 0; i < uniqueTitles; i++) { if (!books[i].getIsbn().equals(isbn)) { newLibrary[i] = books[i]; } } books = newLibrary; success = true; } return success; } public Book findBook(String isbn) { Book book = null; for (int i = 0; i < uniqueTitles; i++) { if (books[i].getIsbn().equals(isbn)) { book = books[i]; break; } } return book; } //Ομοίως εδώ μπορούμε να κάνουμε απλά System.out.println(library); @Override public String toString() { StringBuilder sb = new StringBuilder(); for (int i = 0; i < uniqueTitles; i++) { sb.append(books[i]).append("\n"); } return sb.toString(); } } public class UserInterface { public static void main(String[] args) { Library library = new Library(); Scanner input = new Scanner(System.in); int option = 0; while (option != 6) { System.out.println("1.Eisagogi neou vivliou"); System.out.println("2.Tropopoihsh stoixeion enos viviliou."); System.out.println("3.Anazitisi enos vivliou (me vasi to ISBN))."); System.out.println("4.Emfanisi olon ton vivlion"); System.out.println("5.Diagrafi enos vivliou me vasi to ISBN tou)"); System.out.println("6.Exit."); option = input.nextInt(); if (option == 1) { System.out.println("Dose ISBN: "); String isbn = input.next(); System.out.println("Dose Title: "); String title = input.next(); System.out.println("Dose Author"); String author = input.next(); System.out.println("Dose Plithos Antitipon: "); int number = input.nextInt(); boolean success = library.addBook(new Book(isbn, title, author, number)); if (!success) System.out.println("Library is full!"); } if (option == 2) { System.out.println( "Dose to ISBN tou vivliou poy thes na tropopoihseis: "); String ISBN_s = input.next(); if (library.findBook(ISBN_s) != null) { System.out.println("Dose ISBN: "); String isbn = input.next(); System.out.println("Dose Title: "); String title = input.next(); System.out.println("Dose Author"); String author = input.next(); System.out.println("Dose Plithos Antitipon: "); int number = input.nextInt(); library.updateBook(ISBN_s, new Book(isbn, title, author, number)); } else { System.out.println("To vivilio den eiparxei!"); } } if (option == 3) { System.out.println("Dose to ISBN tou vivliou poy thes na Anazitiseis: "); String ISBN_s = input.next(); Book book = library.findBook(ISBN_s); if (book != null) { System.out.println(book); } else { System.out.println("To vivilio den eiparxei!"); } } if (option == 4) { System.out.println(library); } if (option == 5) { System.out.println("Dose to ISBN tou vivliou poy thes na Diagrapseis: "); String ISBN_d = input.next(); boolean success = library.deleteBook(ISBN_d); if (!success) { System.out.println("To vivilio den eiparxei!"); } } if (option == 6) { break; } } } }
cris4524 Δημοσ. 7 Μαΐου 2014 Μέλος Δημοσ. 7 Μαΐου 2014 Ευχαριστώ για την βοήθεια! Μήπως μπορείς να μου πεις πως γίνεται να μην μείνει τρύπα με τιμή null στον πίνακα και να πάνε όλα τα στοιχεία του πίνακα μία θέση πιο πάνω όταν διαγράφετε ένα βιβλίο; Δηλαδή: Από Isbn= 1524 Title=X Author=Y Number=6 null Isbn= 1236 Title=Z Author=C Nubmer=4 Isbn= 1235 Title=n Author=e Nubmer=4 Σε Isbn= 1524 Title=X Author=Y Number=6 Isbn= 1236 Title=Z Author=C Nubmer=4 Isbn= 1235 Title=n Author=e Nubmer=4 Και το uniqueTitles να μειωθεί κατά 1.
ZAKKWYLDE Δημοσ. 7 Μαΐου 2014 Δημοσ. 7 Μαΐου 2014 Ευχαριστώ για την βοήθεια! Μήπως μπορείς να μου πεις πως γίνεται να μην μείνει τρύπα με τιμή null στον πίνακα και να πάνε όλα τα στοιχεία του πίνακα μία θέση πιο πάνω όταν διαγράφετε ένα βιβλίο; Δηλαδή: Από Isbn= 1524 Title=X Author=Y Number=6 null Isbn= 1236 Title=Z Author=C Nubmer=4 Isbn= 1235 Title=n Author=e Nubmer=4 Σε Isbn= 1524 Title=X Author=Y Number=6 Isbn= 1236 Title=Z Author=C Nubmer=4 Isbn= 1235 Title=n Author=e Nubmer=4 Και το uniqueTitles να μειωθεί κατά 1. Έχεις δίκιο εκεί μου ξέφυγε. Βάλε ένα uniqueTitles--; πριν το books = newLibrary μέσα στο deleteBook και λογικά δεν θα έχεις ούτε το πρόβλημα με το null. (Είδες τα data structure τι κακό κάνουν ).
cris4524 Δημοσ. 7 Μαΐου 2014 Μέλος Δημοσ. 7 Μαΐου 2014 Έχεις δίκιο εκεί μου ξέφυγε. Βάλε ένα uniqueTitles--; πριν το books = newLibrary μέσα στο deleteBook και λογικά δεν θα έχεις ούτε το πρόβλημα με το null. (Είδες τα data structure τι κακό κάνουν ). Δεν λειτουργεί σωστά αν κάνω αυτό που μου είπες... Μου διαγράφει το τελευταίο στοιχείο του πίνακα. Δηλαδή: Από Isbn= 1524 Title=X Author=Y Number=6 null Isbn= 1236 Title=Z Author=C Nubmer=4 Isbn= 1235 Title=n Author=e Nubmer=4 Σε Isbn= 1524 Title=X Author=Y Number=6 null Isbn= 1236 Title=Z Author=C Nubmer=4
Aztec Δημοσ. 7 Μαΐου 2014 Δημοσ. 7 Μαΐου 2014 (επεξεργασμένο) Το new library πρέπει να,έχει δικό του counter στην λουπα . Όχι τον ίδιο με τον books public boolean deleteBook(String isbn) { boolean success = false; Book oldBook = findBook(isbn); if (oldBook != null) { Book[] newLibrary = new Book[60]; //inefficient αλλά μας κάνει για την ώρα. int p = 0; for (int i = 0; i < uniqueTitles; i++) { if (!books[i].getIsbn().equals(isbn)) { newLibrary[p++] = books[i]; } } books = newLibrary; uniqueTitles--; success = true; } return success; } Επεξ/σία 7 Μαΐου 2014 από Aztec 1
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα