Skip to content
Snippets Groups Projects
LueTRek.java 5.53 KiB
package tiedosto;
import java.io.*;

import fi.jyu.mit.ohj2.*;
/**
 * Ohjelma lukee tiedostoa tuotteet.dat, joka on muotoa:
 * <pre>
 *   Volvo |  12300 | 1
 *   Audi  |  55700 | 2
 *   Saab  |   1500 | 4
 *   Volvo | 123400 | 1
 * </pre>
 * Ohjelma tulostaa kuhunkin tuoteluokkaan kuuluvien tuotteiden
 * yhteishinnat ja kappalemrt sek koko varaston yhteishinnan
 * ja kappalemrn.  Eli em. tiedostosta tulostetaan:
 * <pre>
 * -------------------------------------------
 * Volvo                 135700    2
 * Audi                  111400    2
 * Saab                    6000    4
 * -------------------------------------------
 * Yhteens              253100    8
 * -------------------------------------------
 *</pre>
 * @author Vesa Lappalainen
 * @version 1.0, 09.03.2003
 */
@SuppressWarnings("javadoc")
public class LueTRek {

    /****************************************************************************/
    /**
     * Luokka yhden tuotteen tiedoille.
     */
    public static class Tuote {
        private String nimike = "";
        private double hinta = 0.0;
        private int kpl = 0;

        public Tuote() {}
        public Tuote(String rivi) {
            try {
                parse(rivi);
            } catch (NumberFormatException ex) {
                //
            }
        }

        public void parse(String s) throws NumberFormatException {
            StringBuilder sb = new StringBuilder(s);
            nimike = Mjonot.erotaEx(sb,'|',nimike);
            hinta  = Mjonot.erotaEx(sb,'|',hinta);
            kpl    = Mjonot.erotaEx(sb,'|',kpl);
        }

        public String toPrintString() {
            return Mjonot.fmt(nimike,-20) + " " + Mjonot.fmt(hinta,7,0) +
                    Mjonot.fmt(kpl,4);
        }

        public void ynnaa(Tuote tuote) {
            hinta += tuote.hinta * tuote.kpl;
            kpl   += tuote.kpl;
        }

        public String getNimike() { return nimike; }
        public void setNimike(String nimike) { this.nimike = nimike; }

    }
    /****************************************************************************/
    /**
     * Luokka joka silytt kunkin ero tuotteen yhteissumman ja lukumr'n
     * sek kaikkien tuotteiden yhteissumman ja lukumrn
     */
    static public class Tuotteet {
        @SuppressWarnings("unused")
        private String nimi = "";
        private int lkm;
        private Tuote alkiot[];
        private Tuote yhteensa = new Tuote("Yhteens");

        public Tuotteet(String nimi) {
            this.nimi = nimi;
            alkiot = new Tuote[10];
        }

        public int etsi(String tnimi) {
            for (int i=0; i<lkm; i++)
                if ( alkiot[i].getNimike().equalsIgnoreCase(tnimi) ) return i;
            return -1;
        }

        public int lisaa(String tnimi) {
            if ( alkiot.length <= lkm ) return -1;
            alkiot[lkm] = new Tuote(tnimi);
            return lkm++;
        }

        public boolean ynnaa(Tuote tuote) {
            if ( tuote.getNimike().equals("") ) return false;
            int i = etsi(tuote.getNimike());
            if ( i < 0 ) i = lisaa(tuote.getNimike());
            if ( i < 0 ) return false;

            alkiot[i].ynnaa(tuote);
            yhteensa.ynnaa(tuote);
            return true;
        }


        public boolean lue() {
            @SuppressWarnings("resource")
            BufferedReader fi = Tiedosto.avaa_lukemista_varten("tuotteet.dat");
            if ( fi == null ) return false;

            try {
                String rivi;  Tuote tuote = new Tuote();
                while ( ( rivi = fi.readLine() ) != null ) {
                    try {
                        tuote.parse(rivi);
                        ynnaa(tuote);
                    } catch (NumberFormatException ex) {
                        System.err.println("Rivill jotakin pieless " + rivi + "  " +
                                ex.getMessage());
                        continue;
                    }
                }
            } catch (IOException ex) {
                System.err.println("Vikaa tiedostoa luettaessa: " + ex.getMessage());
            } finally {
                try {
                    fi.close();
                } catch (IOException ex) {
                    System.err.println("Ongelmia tiedoston sulkemisessa: " + ex.getMessage());
                }
            }

            return true;
        }

        public void tulosta(OutputStream os) {
            @SuppressWarnings("resource")
            PrintStream out = Tiedosto.getPrintStream(os);

            out.println(); out.println(); out.println();
            out.println("-------------------------------------------");

            for (int i=0; i<lkm; i++)
                out.println(alkiot[i].toPrintString());

            out.println("-------------------------------------------");
            out.println(yhteensa.toPrintString());
            out.println("-------------------------------------------");
            out.println(); System.out.println(); System.out.println();
        }

    }

    /**
     * @param args ei kytss 
     ***************************************************************************/
    public static void main(String[] args)  {
        Tuotteet varasto = new Tuotteet("tuotteet.dat");
        if ( !varasto.lue() ) {
            System.err.println("Tuotteita ei saada luetuksi");
            return;
        }
        varasto.tulosta(System.out);
    }
}