M3 - Programació estructurada / Pràctiques UF1: Pt2

De wikiserver
Dreceres ràpides: navegació, cerca

Estem creant una base de dades amb informació de productes. Ens interessa el nom dels productes i les vendes trimestrals. En total volem guardar informació de com a màxim 50 productes.

La informació de cada producte estarà definida lògicament en una classe que definireu com més us agradi, encara que acostuma a ser bastant pràctic que també li agradi al professor.

El que es demana és: un programa que mitjançant un menú permeti a l’usuari gestionar aquests productes. El programa ha de permetre : altes, baixes, modificacions, qualsevol tipus de consultes, estadístiques....... El límit el poseu vosaltres, penseu que féu un programa perquè l’utilitzi una empresa.

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

El vostre programa tindrà aquest aspecte:

package programaproductes;
public class ProgramaProductes {

  public static void main(String[] args) {

    Producte productes[] = new Producte[50];
    GestioFitxer g= new GestioFitxer();
    int quants = g.llegeix(productes);

    //Aquí anirà el teu codi

    g.escriu(productes, quants);
  }
}

Amb el codi anterior el que heu fet inicialment és passar tota la informació del fitxer a la taula de productes. La variable quants indica quantes posicions de la taula teniu ocupades (és a dir, quants productes teniu). Lògicament la primera vegada que executeu, el fitxer no existirà (ja que encara no hi ha productes), la taula de productes 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 producte.

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

  • Per a no haver d’introduir tot des de zero, en un fitxer adjunt hi ha informació de 30 productes, per tant una vegada tingueu definides les estructures i només un sol cop, carregueu aquesta informació sobre la vostra taula. Penseu a actualitzar la variable quants.

Classes Base:

  • Producte.dat
package programaproductes;

import java.io.Serializable;

public class Producte implements Serializable{
   String nom;
   int vendesTri[] = new int[4];
 }
  • GestioFitxer.java
package programaproductes;

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

public class GestioFitxer {

  public int llegeix(Producte productes[]) {

    int quants = 0;
    ObjectInputStream entrada = null;
    try {
         entrada = new ObjectInputStream(new FileInputStream("Productes.dat"));
         Producte a = (Producte) entrada.readObject();
         while (a != null) {
           productes[quants] = a;
            quants++;
            a = (Producte) entrada.readObject();
         }
         entrada.close();
        } catch (Exception ex) {
            
        }
    return quants;
  }

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

    }
  }
  • ProgramaProductes.java
package programaproductes;

public class ProgramaProductes {

    public static void main(String[] args) {
        Producte productes[] = new Producte[50];
        GestioFitxer g= new GestioFitxer();
        int quants = g.llegeix(productes);
     


        //Aquí anirà el teu codi




        g.escriu(productes, quants);
    }
}
  • Dades inicial dels fitxer Productes.dat:
String nomproductes[]={
"4LIFE TRANSFER FACTOR PLUS 90 TBS",
"AB SOLUTION PLUS 240ml",
"ABRASONE RECTAL crema 30 gr.",
"ABRAXANE 100mg 1vial 50ml",
"ACID HYALURONIC 20MG 30CAPS",
"ACID HYALURONIC 60MG 30CAPS TRIPLE STRENGTH",
"ACIDOPHILUS PLUS 60caps",
"ACOMPLIA 20mg 28 tabs",
"ACT eau dentaire fluor classic cinnamon fl 400 ml",
"ACTOVEGIN 10 ML 5 AMP",
"ACTOVEGIN FORTE 200 mg 100 dragees",
"ACTOVEGIN INJ. 5 X 5 ML",
"ADRENALIN 1:1000 ( 1mg/ ml ) 10x1 ml",
"AETHOXYSKLEROL 0.25% 5Ampo 2ml",
"AETHOXYSKLEROL 0.5% 5 Ampo 2ml",
"AETHOXYSKLEROL 1% 30 ml VIAL",
"AETHOXYSKLEROL 1% 5x2ml",
"AETHOXYSKLEROL 2% 5x2ml",
"AETHOXYSKLEROL 3% 5 Amp 2ml",
"AETHOXYSKLEROL 4% 5x2ml",
"AGGRENOX  200/25mg 60 caps",
"AGIOCUR Granulat 250g",
"AGIOLAX MITE 1000gr",
"AHAVA CREMA CORPORAL VAINILLA 300 GR.",
"AHAVA DERMUD BODY MILK 250 ml.",
"AHAVA DERMUD CR.HUMECTANT CALMANT 50 ML SPF15",
"AHAVA DERMUD CREMA COLZES I GENOLLS 75 ml.",
"AHAVA DERMUD CREMA CORPORAL 200 ML.",
"AHAVA DERMUD CREMA MANS 125 ML",
"AHAVA DERMUD CREMA NUTRITIVA 50 ML"};
  
 int vendesTrim [][]= {
     {290,316,877,924},
     {339,874,158,359},
     {485,754,80,38},
     {490,358,628,330},
     {52,118,852,463},
     {925,69,164,458},
     {234,680,342,758},
     {290,316,877,924},
     {339,874,158,359},
     {485,754,80,38},
     {490,358,628,330},
     {52,118,852,463},
     {925,69,164,458},
     {234,680,342,758},
     {290,316,877,924},
     {339,874,158,359},
     {485,754,80,38},
     {490,358,628,330},
     {52,118,852,463},
     {925,69,164,458},
     {234,680,342,758},
     {290,316,877,924},
     {339,874,158,359},
     {485,754,80,38},
     {490,358,628,330},
     {52,118,852,463},
     {925,69,164,458},
     {234,680,342,758},
     {485,754,80,38},
     {490,358,628,330}};
  • Per generar el fitxer Productes.dat:
1r executar ProgramaProductes sense dades, això crearà el fitxer Productes.dat buit;
2n afegir les dades dels productes i actualitzar la taula productes i la variable quants
for (int i=0; i < nomproductes.length; i++){
         Producte producte = new Producte();
         producte.nom = nomproductes[i];
         for (int j=0; j < vendesTrim[i].length; j++){
             producte.vendesTri[j] = vendesTrim[i][j];
         }
         productes[i] = producte;
         quants++;         
     }
3r comentar o eliminar el codi de introducció de les dades inicials.