-
Vesa Lappalainen authoredVesa Lappalainen authored
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);
}
}