Enrera
Mòdul 2
Iniciació a la programació en Java
  Exercicis
   
 
   
Exercici 1 (obligatori): L'oficina de canvi
   
  En aquest exercici repassareu la utilització de sentències if i while, creareu mètodes i utilitzareu paràmetres.
   
 

Us encarreguen fer un programa que, des del caixer automàtic, donarà als clients del vostre banc la possibilitat de fer canvis de divises.

Heu d'escriure, doncs, un programa que reculli algunes dades del vostre client (la identificació, els tipus de moneda implicats i la quantitat que vol canviar) i que, després de fer el càlcul, retorni informació amb les dades de l'operació. Anem per passos.

  1. Obriu JCreator i creeu el projecte (empty project) amb nom M2ex01. En aquest projecte hi creeu una nova classe (java file), i li poseu de nom Canvi.java.

  2. Aquesta classe ha de tenir:

    • una sentència d'importació com aquesta: import java.io.*; (recordeu que l'heu de posar immediatament abans del nom de la classe).

    • un mètode main(String[] args) que comença de la següent manera:

      public static void main(String[] args) throws IOException {
          // la classe BufferedReader serveix per llegir del
          // teclat

          BufferedReader entrada=new BufferedReader(
                               new InputStreamReader(System.in));
          // Demanem informació a l'usuari i la recollim a la
          // variable divisain.

          System.out.println("Quina moneda desitgeu canviar? "+
                             "(E)uros, (D)olars o (I)ens?");
          String divisain=entrada.readLine();
          // carreguem la moneda canviada
          System.out.println("Quina moneda voleu rebre? "+
                             "(E)uros, (D)olars o (I)ens?");
          String divisaout=entrada.readLine();
      }

      La classe
      BufferedReader serveix per llegir del teclat. L'estudiareu amb més detall en els següents mòduls. Ara no cal entendre-la: només la usareu.

      Observeu que heu creat les
      cadenes divisain i divisaout. Serviran per recollir els tipus de divisa.

  3. Tot seguint el mateix sistema, creeu les següents variables: nom, cognom, dni i quantitat. Un cop creades, compileu el programa i executeu-lo. Ha de fer això:


  4. Ara heu de protegir divisain i divisaout per evitar entrades de dades incorrectes. Si algú demana la moneda "T", per exemple, heu de fer que es torni a repetir la pregunta. Embolcalleu aquestes sentències

        System.out.println("Quina moneda desitgeu canviar? "+
                           "(E)uros, (D)olars o (I)ens?");
        String divisain=entrada.readLine();

    amb un bucle while que només es completi quan la variable divisain sigui igual a "E", "D" o "I". Podeu declarar divisain fora del bucle i després construir el bucle while amb els següents operadors per a la sentència de control del bucle: !, divisain.equals("E") i &&.

  5. Feu el mateix amb divisaout. Compileu i executeu i verifiqueu que les entrades de tipus de moneda ja estan ben controlades.

  6. En el mètode main(String[] args) creeu-hi la variable doubleCalers, del tipus double. Ompliu-la de valor a partir de les dades de la variable String quantitat. Heu après el procediment de casting a la pràctica 5 (Conversió entre tipus primitius).

  7. Ara heu de crear un nou mètode de la classe. Aquest mètode es dirà getCanvi() i serà el motor del canvi de divises. L'heu d'escriure immediatament a sota del mètode main(String[] args). Aquest en serà l'encapçalament:

        public static double getCanvi(double doubleCalers,
                                      String divisain,
                                      String divisaout) {

        }

    A partir de l'encapçalament, sabeu interpretar la feina que fa?: rep una quantitat de diners (doubleCalers) del tipus de moneda divisain i l'ha de transformar a una quantitat de la nova moneda (divisaout).

    Si des del mètode main cridéssiu aquest mètode així:

    doubleCalers = getCanvi(10000,"I","E");

    significaria que voleu que el mètode us calculi quants euros són 10000 iens.

    Heu de construir el cor d'aquest mètode. Podeu seguir les següents pistes:

    • Podeu utilitzar sentències de control del tipus if (divisain.equals("D")) { per decidir com actuar en funció del tipus de divisa.

    • L'algorisme en pseudocodi pot ser: Pren el valor de doubleCalers i converteix-lo a euros. Després, pren aquesta quantitat i converteix-la a la moneda de sortida. D'aquesta forma només us cal saber el canvi del dòlar i el ien amb l'euro (0.825 el dòlar i 0.007463 el ien a dia d'avui). Per canviar 10 dolars a euros: 10*0.825. Per canviar 10 euros a yens: 10*(1/0.007463).

    • El resultat de la conversió s'ha de posar com a valor de return del mètode.

    Quan el mètode estigui llest, crideu-lo des del mètode main. Ompliu amb ell la variable doubleCalers:

    doubleCalers = getCanvi(doubleCalers,divisain,divisaout);

  8. Modifiqueu el valor de la variable doubleCalers tot restant-li el 2% en concepte de comissió. Reserveu el valor de la comissió en la variable de tipus double doubleComissio.

  9. Afegiu aquest altre mètode després del mètode getCanvi():

        public static String getLletra (String dni) {
            String cadena="TRWAGMYFPDXBNJZSQVHLCKET";
            String sdni=dni.substring(0,8);
            int posicio=(Integer.parseInt(sdni))%23;
            char lletra=cadena.charAt(posicio);
            return sdni+lletra;
        }

    que serveix per calcular la lletra del DNI. L'utilitzareu per emetre el "tiquet" de l'operació.

  10. Completeu la tasca del mètode main tot generant el tiquet de l'operació amb un codi que ha de ser semblant a aquest:

    System.out.println("----------------------------------");
    System.out.println("Resum Operació de Canvi de Divises");
    System.out.println("----------------------------------");
    System.out.println("Data: "+new java.util.Date());
    System.out.println("----------------------------------");
    System.out.println("Sr/a: "+nom+" "+cognom);
    System.out.println("DNI : "+getLletra(dni));
    System.out.println("----------------------------------");
    System.out.println("Input: "+quantitat+" "+divisain);
    System.out.println("Output: "+doubleCalers+" "+divisaout);
    System.out.println("Comissió: "+doubleComissio+" "+divisaout);

  11. Compileu i executeu al programa. Ha de reaccionar així:

   
  Exercici 2 (optatiu)
   
  Feu aquest exercici per verificar que sabeu utilitzar excepcions i crear paquets.
   
 
  1. Obriu JCreator i creeu el projecte (empty project) amb nom M2ex02. En aquest projecte hi creeu una nova classe (java file), i li poseu de nom Canvi2.java.

  2. Copieu tot el contingut de la classe Canvi de l'exercici anterior a dintre de la classe Canvi2.java.

  3. Protegiu l'entrada de la variable quantitat per garantir que sigui sempre un nombre enter: si l'usuari no entra un nombre enter, el programa ha d'avisar el client. Es pot combinar un bucle while i un bloc try - catch per resoldre el problema.

  4. Elimineu el mètode getLletra() de la classe Canvi2. Creeu una classe nova, DNItoLletra, amb el mètode getLletra() i afegiu-la al paquet d110.utils. Refeu el paquet i feu la conversió del DNI a lletra utilitzant la nova classe empaquetada.
   
  Tramesa al vostre tutor
   
  Comprimiu la carpeta M2ex01 (i M2ex02 i la carpeta c:\java\paquets\d110, si és que heu fet l'exercici optatiu) en un fitxer ZIP que es dirà <nom_usuari>_m2.zip i trameteu-lo al vostre tutor. Recordeu quina ha de ser l'estructura normalitzada de les carpetes de cada projecte (vegeu mòdul 1, pràctica 4)
   
   
 
Amunt