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

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

Δημοσ.

Προσπαθώ να υλοποιήσω μία java εφαρμογή η οποία θα διαχειρίζεται μία δανειστική βιβλιοθήκη. Ειδικότερα με την έναρξη της εφαρμογής θα ήθελα να εμφανίζεται στην οθόνη το ακόλουθο μενού επιλογών:

  1. Εισαγωγή νέου βιβλίου
  2. Τροποποίηση στοιχείων ενός βιβλίου.
  3. Αναζήτηση ενός βιβλίου (με βάση το ΙSBN του).
  4. Εμφάνιση όλων των βιβλίων
  5. Διαγραφή ενός βιβλίου (με βάση το ΙSBN του)
  6. Έξοδος

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

Για την αποθήκευση των βιβλίων χρησιμοποιείται ένας πίνακας 60 θέσεων. Τα στοιχεία κάθε βιβλίου θα είναι :

  • Το ΙSBN του βιβλίου (String)
  • Τίτλος(String)
  • Συγγραφέας (String)
  • Πλήθος Αντιτύπων (int)

Μήπως μπορεί κανείς να με βοηθήσει;

Δημοσ.

Επίσης ποιο IDE χρησιμοποιείς? Netbeans?Eclipse?JDeveloper?

 

Το eclipse χρησιμοποιώ.

 

Στείλε τι έχεις κάνει μέχρι τώρα να σε βοηθήσουμε.

 

Το παλεύω δεν έχω τελειώσει ακόμη την βασική δομή.

Δημοσ.

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

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

Δημοσ.

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


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.

Δημοσ. (επεξεργασμένο)

Λοιπόν πρέπει λίγο να επανασχεδιάσεις τη δομή σου. Με βάση την άσκηση έχεις κάποιες οντότητες:

 

- Βιβλίο

- Βιβλιοθήκη

- 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 θα κρίνει τι θα κάνει με αυτή την οντότητα.

 

Φτιάξε την δομή όπως σου είπα και ξαναπόσταρε τον κώδικα

Επεξ/σία από ZAKKWYLDE
  • Like 2
Δημοσ. (επεξεργασμένο)

Το έχω υλοποιήσει διαφορετικά με την βοήθεια του καθηγητή μου.

Έχω δημιουργήσει 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;
        }
    }
    }
}



Επεξ/σία από cris4524
Δημοσ.

Για fixed size array έχεις τις επιλογές

 

1.Μετακίνηση των στοιχείων μια θέση κάτω πάνω απο αυτό που έγινε remove και προσθέτεις πάντα στο τέλος

2.Nullify το στοιχείο που έγινε remove και ανάλογα φτιάχνεις και την εισαγωγή σου να γεμίζει τα κενά

 

τον κώδικα λίγο που τον είδα έχει λάθη

Δημοσ.

Λοιπόν 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;
			}
		}
	}
}

 

 

Δημοσ.

Ευχαριστώ για την βοήθεια! Μήπως μπορείς να μου πεις πως γίνεται να μην μείνει τρύπα με τιμή 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.

Δημοσ.

Ευχαριστώ για την βοήθεια! Μήπως μπορείς να μου πεις πως γίνεται να μην μείνει τρύπα με τιμή 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 τι κακό κάνουν :P).

Δημοσ.

Έχεις δίκιο εκεί μου ξέφυγε. Βάλε ένα uniqueTitles--; πριν το books = newLibrary μέσα στο deleteBook και λογικά δεν θα έχεις ούτε το πρόβλημα με το null. (Είδες τα data structure τι κακό κάνουν :P).

Δεν λειτουργεί σωστά αν κάνω αυτό που μου είπες...

Μου διαγράφει το τελευταίο στοιχείο του πίνακα.

 

Δηλαδή:

Από
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
Δημοσ. (επεξεργασμένο)

Το 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;
    }
Επεξ/σία από Aztec
  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...