Announcement

Collapse
No announcement yet.

File - leggere e modificare da file

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • File - leggere e modificare da file

    Traccia esercizio:
    Una libreria ha deciso di informatizzare il proprio archivio delle giacenze. Si è creato un file
    in cui, per ogni libro disponibile in magazzino, sono stati inseriti i seguenti elementi:
    - titolo del libro;
    - autore;
    - editore;
    - numero di copie disponibili.
    La libreria ha la necessità di effettuare le seguenti operazioni:
    - cercare tutti i libri di un particolare autore;
    - cercare tutti i libri che contengono una determinata stringa nel titolo;
    - cercare i libri che hanno il numero di copie massimo;
    - listare tutti i libri per cui il numero di copie disponibili è al di sotto di una determinata
    soglia.
    - aggiornare il numero di copie di un libro. Il libro da aggiornare è identificato dal titolo.
    L’operazione di aggiornamento deve essere propagata al file.
    Creare inoltre una classe main per testare le classi ed i metodi definiti. In particolare occorre
     leggere da un file contenente i dati dei 5 libri mostrati di seguito;
     visualizzare i libri scritti da Camilleri;
     visualizzare i libri che hanno la parola sogni nel titolo;
     visualizzare il libro con il numero massimo di copie;
     visualizzare i libri che hanno meno di 15 copie disponibili;
     aggiungere 30 copie al libro sogni rossi.
    Una voce di notte
    Camilleri Andrea
    Sellerio Editore Palermo
    44
    Cinquanta sfumature di grigio
    James E. L.
    Mondadori
    21
    Il corpo umano
    Giordano Paolo
    Mondadori
    33
    Sogni rossi
    Mo Yan
    Einaudi
    11
    Fai bei sogni
    Gramellini Massimo
    Longanesi
    14

    Ho pensato di risolvere questo esercizio dividendo il problema in 3 classi, qui sotto riportate:
    Classe Libro che poteva anche essere una classe interna a Libreria
    Allego anche il file se vi annoiate di copiare
    PHP Code:

    public class Libro {
        public 
    Libro(){}
        public 
    Libro(String titolo,String autore,String editore,int numCopie){
            
    this.titolo titolo;
            
    this.autore autore;
            
    this.editore editore;
            
    numeroCopie numCopie;
        }
        public 
    void showLibro(){
            
    System.out.println(titolo+", "+autore+", "+editore+", "+numeroCopie);
        }
        

        public 
    String titolo;
        public 
    String autore;
        public 
    String editore;
        public 
    int numeroCopie;



    Classe Libreria la più robusta dell'esercizio
    PHP Code:
    import java.io.File;
    import java.io.PrintStream;
    import java.util.ArrayList;
    import java.util.Scanner;


    public class 
    Libreria {
        public 
    Libreria(File xthrows Exception{
            
    libri x;

        }

        public 
    void ShowLibri() throws Exception{
            
    in = new Scanner(libri);
            
    Libro l = new Libro();
            while(
    in.hasNext() == true){
                
    l.titolo in.nextLine();
                
    l.autore in.nextLine();
                
    l.editore in.nextLine();
                
    String x in.nextLine();
                
    l.numeroCopie Integer.parseInt(x);
                
    l.showLibro();
            }

        }

        public 
    void ShowLibriAutore(String Autore)throws Exception{
            
    in = new Scanner(libri);
            
    Libro l = new Libro();
            while(
    in.hasNext() == true){
                
    l.titolo in.nextLine();
                
    l.autore in.nextLine();
                
    l.editore in.nextLine();
                
    String x in.nextLine();
                
    l.numeroCopie Integer.parseInt(x);
                
    String[] l.autore.split(" ");
                for(
    int i=0;k.length;i++){
                    if(
    k[i].compareToIgnoreCase(Autore) == 0)
                        
    l.showLibro();
                }
            }
        }


        public 
    void ShowLibriTitolo(String Titolothrows Exception{
            
    in = new Scanner(libri);
            
    Libro l = new Libro();
            while(
    in.hasNext() == true){
                
    l.titolo in.nextLine();
                
    l.autore in.nextLine();
                
    l.editore in.nextLine();
                
    String x in.nextLine();
                
    l.numeroCopie Integer.parseInt(x);
                
    String[] l.titolo.split(" ");
                for(
    int i=0;k.length;i++){
                    if(
    k[i].compareToIgnoreCase(Titolo) == 0)
                        
    l.showLibro();
                }
            }
        }


        public 
    void ShowLibriMaxCopie() throws Exception{
            
    in = new Scanner(libri);

            
    Libro max,l;
            
    max = new Libro(in.nextLine(),in.nextLine(),in.nextLine(),Integer.parseInt(in.nextLine()));
            while(
    in.hasNext() == true){
                
    = new Libro(in.nextLine(),in.nextLine(),in.nextLine(),Integer.parseInt(in.nextLine()));
                if(
    max.numeroCopie l.numeroCopie){
                    
    max l;
                }

            }

            
    max.showLibro();

        }


        public 
    void ShowLibriConPocheCopie(int copiethrows Exception{
            
    in = new Scanner(libri);
            
    Libro x;
            while(
    in.hasNext() == true){
                
    = new Libro(in.nextLine(),in.nextLine(),in.nextLine(),Integer.parseInt(in.nextLine()));
                if(
    x.numeroCopie copie){
                    
    x.showLibro();
                }
            }
        }


        public 
    void AggiungiCopieLibro(String titolo,int NuoveCopiethrows Exception{
            
    ArrayList<Librolibri = new ArrayList<Libro>();
            
    //carica ArrayList
            
    in = new Scanner(this.libri);
            while(
    in.hasNext() == true){
                
    libri.add(new Libro(in.nextLine(),in.nextLine(),in.nextLine(),Integer.parseInt(in.nextLine())));
            }
            
    //Scorri ArrayList e aggiungi nuove copie
            
    for(int i=0;i<libri.size();i++){
                if(
    libri.get(i).titolo.compareToIgnoreCase(titolo) == 0){
                    
    libri.get(i).numeroCopie += NuoveCopie;
                }
            }


            
    //stampa ArrayList nel file
            
    PrintStream x = new PrintStream(this.libri);
            for(
    int i=0;i<libri.size();i++){
                
    x.println(libri.get(i).titolo);
                
    x.println(libri.get(i).autore);
                
    x.println(libri.get(i).editore);
                
    x.println(libri.get(i).numeroCopie);
            }

        }

        private 
    File libri;
        private 
    Scanner in;

    ed infine la classe per testare il programma chiamata index
    PHP Code:
    import java.io.File;


    public class 
    index {
        public static 
    void main(String[] argsthrows Exception{
            
    File libri = new File("libreria.txt");
            
    Libreria l = new Libreria(libri);
            
    System.out.println("Visualizza tutti i libri");
            
    l.ShowLibri();

            
    System.out.println("\n\nVisualizza libri per autore: Camilleri");
            
    l.ShowLibriAutore("Camilleri");

            
    System.out.println("\n\nVisualizza libri per titolo: sogni");
            
    l.ShowLibriTitolo("sogni");

            
    System.out.println("\n\nVisualizza libro con più numero di copie disponibile:");
            
    l.ShowLibriMaxCopie();

            
    System.out.println("\n\nLibri con meno di 15 copie");
            
    l.ShowLibriConPocheCopie(15);

            
    System.out.println("\n\nAggiungere 30 libri al libro sogni rossi");
            
    l.AggiungiCopieLibro("Sogni rossi",30);
            
    l.ShowLibri();
        }

    Attached Files
    Last edited by TheAvenger; 11-08-2013, 11:02 PM.

  • #2
    eccoti la mia! non commentata perchè è altamente intuitiva

    main
    PHP Code:
    import java.util.*;
    import java.io.File;
    import java.io.PrintStream;
    import java.lang.*;

    import library.*;

    public class 
    main {

        public static 
    void main(String[] argsthrows Exception {
            
            
    ArrayList<booklibri library.global.build_book_array("data.txt",5);
            
            
    library.global.search_author_and_print_name(libri,"Camilleri Andrea",System.out);
            
    library.global.search_title_substring_and_print_name(libri,"sogni",System.out);
            
    library.global.max_count_and_print_name(libri,System.out);
            
    library.global.low_copy_and_print_name(libri15System.out);
            
    library.global.add_count_from_book_name(libri,"sogni rossi"30);
                

        }


    PACKAGE library

    book class
    PHP Code:
    package library;

    public class 
    book {
        
        public 
    void set_nameString in_name){
            
    name in_name;
        }
        
        public 
    void set_author(String in_author){
            
    author in_author; ;
        }
        
        public 
    void set_editorString in_editor){
            
    editor in_editor;
        }
        
        public 
    void set_countint in_count){
            
    count in_count;
        }
        
        public 
    void add_countint in_count){
            
    count += in_count;
        }
        
        
        
        
        
        
        public 
    String get_name(){
            return 
    name;
        }
        
        public 
    String get_author(){
            return 
    author;
        }
        
        public 
    String get_editor(){
            return 
    editor;
        }
        
        public 
    int get_count(){
            return 
    count;
        }
        
        
        
        
        
        
        private 
    String name "null";
        private 
    String author "null";
        private 
    String editor "null";
        private 
    int count 0;


    global class
    PHP Code:
    package library;


    import java.util.*;
    import java.io.*;

    public class global {
        
        
        public static 
    ArrayList<bookbuild_book_array (String file_nameint nthrows Exception{
            
            
    Scanner lettore = new Scanner(new File(file_name));
            
    ArrayList<booklibri = new ArrayList<book>();
            
            for(
    int i 0i<;++i){
                
    book temp = new book();
                    
    temp.set_name(lettore.nextLine());
                    
    temp.set_author(lettore.nextLine());
                    
    temp.set_editor(lettore.nextLine());
                    
    temp.set_count(Integer.parseInt(lettore.nextLine()));
                
    libri.add(temp);
            }
            
            return 
    libri;
            
        }
        
        
        public static 
    void search_author_and_print_name(ArrayList<booklibriString in_author,PrintStream output){
            
            
    int count libri.size();
            
    book temp;
            for(
    int i 0icount ; ++i){
                
    temp libri.get(i);
                if ((
    temp.get_author()).equals(in_author)){
                    
    output.println(temp.get_name());
                }
            }
            
        }
        
        
        public static 
    void search_title_substring_and_print_name(ArrayList<booklibriString in_substring,PrintStream output){
            
            
    int count libri.size();
            
    book temp;
            for(
    int i 0icount ; ++i){
                
    temp libri.get(i);
                if ((
    temp.get_name()).indexOf(in_substring) != -1){
                    
    output.println(temp.get_name());
                }
            }
            
        }
        
        public static 
    void max_count_and_print_name(ArrayList<booklibri,PrintStream output){
            
            
    int count libri.size();
            
    book temp;
            
    int flip 1;
            
    int max_id = -1;
            for(
    int i 0icount ; ++i){
                
    temp libri.get(i);
                if (
    flip == || temp.get_count() > libri.get(max_id).get_count() ){
                    
    flip=0;
                    
    max_id=i;
                }
            }
            
    output.println(libri.get(max_id).get_name());
            
        }
        
        public static 
    void low_copy_and_print_name(ArrayList<booklibri,int nPrintStream output){
            
            
    int count libri.size();
            
    book temp;
            for(
    int i 0icount ; ++i){
                
    temp libri.get(i);
                if (
    temp.get_count() < n){
                    
    output.println(temp.get_name());
                }
            }
        
        }
        
        public static 
    void add_count_from_book_name(ArrayList<booklibriString in_nameint n){
                
                
    int count libri.size();
                
    book temp;
                for(
    int i 0icount ; ++i){
                    
    temp libri.get(i);
                    if ((
    temp.get_name()).equals(in_name)){
                        
    temp.add_count(n);
                    }
                }
                
            }
        
        
        
        
        
        


    | VFX Artist, C++ Programmer, HW Overclocker | Web: xgiovio.com Email: xgiovio@gmail.com Twitter: @xgiovio

    Comment


    • #3
      Originally posted by TheAvenger View Post
      Traccia esercizio:
      Una libreria ha deciso di informatizzare il proprio archivio delle giacenze. Si è creato un file
      in cui, per ogni libro disponibile in magazzino, sono stati inseriti i seguenti elementi:
      - titolo del libro;
      - autore;
      - editore;
      - numero di copie disponibili.
      La libreria ha la necessità di effettuare le seguenti operazioni:
      - cercare tutti i libri di un particolare autore;
      - cercare tutti i libri che contengono una determinata stringa nel titolo;
      - cercare i libri che hanno il numero di copie massimo;
      - listare tutti i libri per cui il numero di copie disponibili è al di sotto di una determinata
      soglia.
      - aggiornare il numero di copie di un libro. Il libro da aggiornare è identificato dal titolo.
      L’operazione di aggiornamento deve essere propagata al file.
      Creare inoltre una classe main per testare le classi ed i metodi definiti. In particolare occorre
       leggere da un file contenente i dati dei 5 libri mostrati di seguito;
       visualizzare i libri scritti da Camilleri;
       visualizzare i libri che hanno la parola sogni nel titolo;
       visualizzare il libro con il numero massimo di copie;
       visualizzare i libri che hanno meno di 15 copie disponibili;
       aggiungere 30 copie al libro sogni rossi.
      Una voce di notte
      Camilleri Andrea
      Sellerio Editore Palermo
      44
      Cinquanta sfumature di grigio
      James E. L.
      Mondadori
      21
      Il corpo umano
      Giordano Paolo
      Mondadori
      33
      Sogni rossi
      Mo Yan
      Einaudi
      11
      Fai bei sogni
      Gramellini Massimo
      Longanesi
      14

      Ho pensato di risolvere questo esercizio dividendo il problema in 3 classi, qui sotto riportate:
      Classe Libro che poteva anche essere una classe interna a Libreria
      Allego anche il file se vi annoiate di copiare
      PHP Code:

      public class Libro {
      public 
      Libro(){}
      public 
      Libro(String titolo,String autore,String editore,int numCopie){
      this.titolo titolo;
      this.autore autore;
      this.editore editore;
      numeroCopie numCopie;
      }
      public 
      void showLibro(){
      System.out.println(titolo+", "+autore+", "+editore+", "+numeroCopie);
      }


      public 
      String titolo;
      public 
      String autore;
      public 
      String editore;
      public 
      int numeroCopie;




      luca ma cois uno che ha lindirizzo dell'oggetto puo cambiare tranquillamente i dati, dovrebbero essere privati
      | VFX Artist, C++ Programmer, HW Overclocker | Web: xgiovio.com Email: xgiovio@gmail.com Twitter: @xgiovio

      Comment


      • #4
        vabbè, lo faccio in buonafede ahahah :P comunque era per comodità mi scocciavo di farle private e fare i metodi per farli ritornare

        Comment


        • #5
          This is exceptionally pleasant and nice post....You shook posting it....Thanks a ton for posting it....!!!
          Johni

          Comment

          Working...
          X

          Google Profile


          My name is Giovanni Di Grezia, but people call me xgiovio.

          Here is my homepage:.

          I'm a VFX Artist and Software Developer.

          Giovanni Di Grezia