M3 - Programació estructurada / Exercicis UF1: Classes

De wikiserver
La revisió el 11:03, 3 març 2018 per Rsort (Discussió | contribucions) (Exercici 1)
Dreceres ràpides: navegació, cerca

Exercici 1

Estem creant una base de dades amb els alumnes de primer. Ens interessa el nom i els cognoms. També ens interessa saber les notes que tenen a cada una de les tres primeres UF de programació. En total volem guardar informació de 20 alumnes. Primer de tot cal definir la classe Alumne.

El programa ha de permetre mitjançant un menú: afegir un nou alumne, posar notes a un alumne, llistar (el que sigui) , etc...

Per no perdre la informació cada vegada que executeu el programa i no haver d’estar inserint contínuament alumnes podeu ajudar-vos del codi de fitxers que ja teniu implementat.

El vostre programa tindrà aquest aspecte:

public class ProgramaAlumnes {

     public static void main(String[] args) {

       GestioFitxer g= new GestioFitxer();
       Alumne alumnes[] = new Alumne[20];
       int quants=g.llegeix(alumnes);
       // Aquí va el vostre codi
       g.escriu(alumnes, quants);
     }
   }

Amb el codi anterior el que heu fet inicialment passar tota la informació del fitxer a la taula d’alumnes. La variable quants indica quantes posicions de la taula teniu ocupades (és a dir, quants alumnes teniu). Lògicament la primera vegada que executeu, el fitxer no existirà (ja que encara no hi ha alumnes), la taula d’alumnes estarà buida i la variable quants valdrà 0.

El codi del final del programa el que fa és traspassar tota la informació de la taula al fitxer. Per a que això funcioni bé, heu d’actualitzar la variable quants cada vegada que inseriu o elimineu un alumne.

Nota: Per a que funcioni aquest codi de fitxer cal que afegiu a la capçalera de la classe Alumne-->implements Serializable


Classes Base:

  • Alumne.java
/*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
    */
   package exAlumnesBase;

   import java.io.Serializable;

   /**
    *
    * @author albert
   */

   public class Alumne implements Serializable{
              
   }
  • GestioFitxer.java
/*
    * To change this license header, choose License Headers in Project Properties.
    * To change this template file, choose Tools | Templates
    * and open the template in the editor.
   */
   package exAlumnesBase;

   import java.io.FileInputStream;
   import java.io.FileOutputStream;
   import java.io.IOException;
   import java.io.ObjectInputStream;
   import java.io.ObjectOutputStream;

   /**
   *
   * @author albert
   */
   public class GestioFitxer {

     public int llegeix(Alumne alumnes[]) {
        int quants = 0;
        ObjectInputStream entrada = null;
        try {
            entrada = new ObjectInputStream(new FileInputStream("Alumnes.dat"));
            Alumne a = (Alumne) entrada.readObject();
            while (a != null) {
                alumnes[quants] = a;
                quants++;
                a = (Alumne) entrada.readObject();
            }
            entrada.close();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        return quants;
     }

     public void escriu(Alumne alumnes[], int quants) {
        try {
            ObjectOutputStream sortida = new ObjectOutputStream(new FileOutputStream("Alumnes.dat"));
            for (int i = 0; i <= quants; i++) {
                sortida.writeObject(alumnes[i]);
            }
            sortida.close();
        } catch (IOException Exception) {
        }

     }
  }
  • ProgramaAlumnes.java
/*
   * To change this license header, choose License Headers in Project Properties.
   * To change this template file, choose Tools | Templates
   * and open the template in the editor.
   */
   package exAlumnesBase;

   import exAlumnes.*;

   /**
   *
   * @author albert
   */
   public class ProgramaAlumnes {
    
     public static void main(String[] args) {
        GestioFitxer g= new GestioFitxer();
        Alumne alumnes[] = new  Alumne[20];
        int quants=g.llegeix(alumnes);
        
       // Aquí va el vostre codi                      
        
        
        g.escriu(alumnes, quants);
        
        
     }
   }

Exercici 2 (extra)

Una companyia d’assegurances té les següents dades dels seus 100 clients:

  • Nom i cognoms
  • Número de pòlissa
  • Tipus de pòlissa
  • Quantitat assegurada

Existeixen tres tipus de pòlisses: Vehicle, Vida i Vivenda. En el primer cas es coneix la marca i l’any de matriculació, en el segon l’any de naixement i en el tercer si la vivenda posseeix o no sistema de seguretat.

Volem un programa que obtingui el següent llistat :

   Client: ...............................................................................................
   Pòlissa Nº:.....................................Tipus:.................................................
   Quantitat assegurada ............................... Total a pagar ....................................

Per a obtenir el total a pagar s’ha de tenir en compte:

  • El cost de l’assegurança en general és del 1% de la quantitat assegurada
  • Les assegurances de vida i les de vivenda tenen un descompte del 20%
  • En l’assegurança de vehicles s’aplicarà la següent taula d’increments del cost d’acord amb l’antiguitat del vehicle referida a l’any actual:
-per a més de 5 anys el 5%
-per a més de 8 anys el 10%
-per a més de 10 anys el 20%
  • En les assegurances de vivenda, el cost s’incrementarà un 20% si no es posseeixen sistemes de seguretat.

Cada client té només un tipus d’assegurança.

Nota: Fes servir el mateix mètode de l’exercici anterior per a guardar-ho en un fitxer.