Hallo,
in der Uni habe ich dieses Semester auch Informatik (studiere eigentlich etwas anderes).
Wir haben eine Aufgabe bekommen, an der ich schon einige Wochen sitze. Ich habe schon einiges an Quelltext geschrieben, da Programm läuft auch, aber gibt das falsche aus.
Die Aufgabe ist folgende:
Das ist die Datei ARTIKEL.TXT
Ich habe bisher ein Hauptprogramm mit 4 Unterprogrammen geschrieben:
Hauptprogramm
1. Unterprogramm
2. Unterprogramm
3. Unterprogramm
Kann mir einer helfen? Ich glaube, die Aufgabe ist für Informatik-Experten nicht so anspruchsvoll.
Liebe Grüße,
Jasmin
in der Uni habe ich dieses Semester auch Informatik (studiere eigentlich etwas anderes).
Wir haben eine Aufgabe bekommen, an der ich schon einige Wochen sitze. Ich habe schon einiges an Quelltext geschrieben, da Programm läuft auch, aber gibt das falsche aus.
Die Aufgabe ist folgende:
Java:
Vor Loesung der folgenden Aufgabe ist von der Datei ARTIKEL.TXT zu lesen.
Jeder Satz soll im Programm als Instanz einer Klasse Artikel Class
behandelt werden. Jede Textzeile hat folgenden Aufbau: - Artikelnummer : 8 Zeichen - Artikelbezeichnung: 30 Zeichen - Mengeneinheit : 2 Zeichen - Bestand : 4 Zeichen - Maximalbestand : 4 Zeichen - Minimalbestand : 3 Zeichen - Hersteller : 41 Zeichen - Preis : 7 Zeichen - Maximalpreis : 7 Zeichen - Minimalpreis 7 Zeichen - Lieferzeit 1 Zeichen
Zwischen diesen Angaben befindet sich jeweils ein trennendes Leerzeichen. Lösen Sie die folgende Aufgabe durch ein Java-Projekt:
Bestimmen Sie mit Hilfe eines Unterprogramms die Anzahl und den aktuellen Gesamtwert aller der Artikel im Lager, deren vorletzte Stelle der Artikelnummer kleiner oder gleich 2 ist. Die sind nach aktuellen Einzelwerten fallend sortiert zusammen mit den Artikel-bezeichnungen auszugeben. Hinweis: Wert - Menge * Preis
Ein gesondertes UP soll die Daten von ARTIKEL.TXT lesen und bereitstellen.
Das ist die Datei ARTIKEL.TXT
Java:
51100210 Holzfenster einfach 6*15 ST 0160 0800 150 Vereinigte Bauelementewerke Hennigsdorf 0495.80 0629.25 0499.80 5
51100211 Holzfenster einfach 10,5*15 ST 0410 0500 100 Vereinigte Bauelementewerke Hennigsdorf 0529.95 0595.00 0499.80 4
51100212 Holzfenster Verbund 6*15 ST 0620 1500 300 Fensterbau Halle 0563.00 0625.95 0545.95 5
51100213 Holzfenster Verbund 10,5*15 ST 0800 1500 300 Fensterbau Halle 0619.00 0649.00 0569.95 4
51100214 Holzfenster Thermoscheibe 6*15 ST 0570 1200 250 Bauelementewerke Erfurt 0665.50 0665.80 0583.95 4
51100215 Holzfenster Thermosch. 10,5*15 ST 0275 1200 200 Bauelementewerke Erfurt 0629.50 0679.80 0595.85 6
51300220 Aussentuer ATM 10,5*21 ST 0125 0400 100 Holzbau Neubrandenburg 1150.00 1384.00 1139.95 3
51300221 Aussentuer ATM 10,5*21 M ST 0380 0400 100 Holzbau Neubrandenburg 1440.50 1495.95 1180.00 5
51300222 Aussentuer ATM 10,5*21 S ST 0101 0370 080 Vereinigte Bauelementewerke Erfurt 2760.50 2830.22 2740.00 4
51400223 Tuerfluegel TV 9*20 L ST 1100 1050 195 Holzwerke Oranienbaum 0929.00 0995.00 0899.95 2
51400224 Tuerfluegel TV 9*20 R ST 0920 1050 195 Holzwerke Oranienbaum 0929.00 0995.00 0899.95 2
51600225 Futtertuer TV-F14,5 9*20 L ST 0720 0860 150 Vereinigte Bauelementewerke Stralsund 1499.50 1595.80 1490.50 4
51600226 Futtertuer TV-F14,5 9*20 R ST 0684 0860 150 Vereinigte Bauelementewerke Stralsund 1529.80 1595.80 1490.50 4
51700227 Blendrahmentuer TG2-B 9*20 L ST 0012 0480 080 Forstwirtschaftsbetrieb Waren 1859.20 1899.00 1595.00 3
51700228 Blendrahmentuer TG2-B 9*20 R ST 0310 0480 080 Forstwirtschaftsbetrieb Waren 1838.00 1899.00 1595.00 3
52100230 Likolit-Belag Extra QM 0100 2000 500 Linoleumwerke Kohlmuehle 0038.15 0047.95 0038.15 5
52100231 Radeberger Treppenbelag QM 0210 0800 200 Bauproduktion Radeberg 0029.55 0029.55 0028.95 1
52100232 Stahl-Pur-Bit-Dachelement QM 1150 3000 800 Holz- und Leichtmetallbauelemente Leipzig 0109.95 0119.00 0099.30 1
61100240 Brausekabine ST 0005 0080 010 TGA Magdeburg 0962.50 0983.45 0910.00 2
61100241 Praezisionsverdunkl.-Anl.15*20 ST 0007 0160 040 Licht- und Sonnenschutzanl. Friedrichroda 0316.60 0333.20 0316.60 5
Ich habe bisher ein Hauptprogramm mit 4 Unterprogrammen geschrieben:
Hauptprogramm
Java:
package programm;
// Import Fehlerklassen (Signalisierung durch repraesentation spezieller Klasse)
import java.io.IOException;
public class Gesamtprogramm
{
public static void main(String[] args) throws IOException
{
/**
* Eine Methode main() muss jede Java-Anwendung besitzen.
* Sie stellt den Einstiegspunkt in die Ausfuehrung einer Java-Anwendung dar und
* muss die Signatur public static void main(String[] args) besitzen.
* - public weil von ausserhalb der Klasse auf sie zugegriffen wird.
* - static weil sie aufgerufen wird ohne dass vorher ein Objekt einer Klasse gebildet wurde.
* - void weil sie keinen Rueckgabewert besitzt. (Alternativ integer/string/double)
* - der Parameter String[] args, der auch String args[] geschrieben werden darf, ist ein Array,
* das die vom Aufruf entgegen genommenen Kommandozeilenparameter enthaelt.
* throws IOException -> Weitergereichen der Exception (Ausnahme) falls diese auftritt
*/
/*
* Einbinden der Unterprogramme
*/
Zeilenzähler.anzahlZeilen(); // Aufruf Methode anzahl Zeilen() aus U3
Einlesen.readFile(); //Aufruf Methode readFile() aus U1
Sortieren.checkoutArtikelnummer(); //Aufruf Methode checkoutArtikelnummer() aus U2
Sortieren.tauschen(); // Aufruf Methode tauschen() aus U2
/*
* Ausgabe der Werte
*/
System.out.println("Die Anzahl der sortierten Werte Betraegt: " + Sortieren.k);
// Ausgabe Artikelnummermatrix
System.out.println("Die sortierten Artikelnummern mit dazugehoerigen Bestandsminima sind wie folgt:");
for (int i = 1; i <= Sortieren.k; i++) // Schleife fuer i=1, i<= Variable k aus U2; i++ entspricht i=i+1
{
System.out.println("Artikelnummer " + i + ": " + Sortieren.Matrix [i - 1] [1]
+ " Bestandsminimum " + i + ": " + Sortieren.Matrix [i - 1] [2]);
}
System.out.println("fertig!");
}
}
1. Unterprogramm
Java:
package programm;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
// * heisst import aller IO packages/Tools
/**
* Programm fuer das auslesen aus ARTIKEL.TXT
*/
public class Einlesen
{
/**
* Programm fuer das auslesen aus ARTIKEL.TXT
*/
public static void readFile() throws IOException
{
Artikel_gesamt = 0; // Definition Variable
/**
* oeffnen, Einlesen, Puffern der Datei ARTIKEL.TXT
*/
FileInputStream fis = new FileInputStream("ARTIKEL.TXT"); // Datei oeffnen
InputStreamReader isr = new InputStreamReader(fis); // Datei einlesen und in Zeichen umwandeln
BufferedReader bf = new BufferedReader(isr); // Eingabe puffern
int i = 0; // Variable i definiert
/*
* Schleife, jeweils eine Zeile lesen (Zeichenkette)
* wenn Zeile = 0, dann Schleife beenden
* ansonsten String erstellen und Zeile splitten
* Bestandteile separieren und auf einzelne Arrays speichern
*
*/
while (true)
{
Zeile = bf.readLine();
if (Zeile == null)
{
break;
}
else
{
String[] Spalte = Zeile.split("\\s+");
AN[i] = Spalte[0]; // Umwandlung von String zu Integer
AB[i] = Spalte[1]; // Artikelbezeichnung von i-ter Zeile (von Artikel.txt)
ME[i] = Spalte[2];
BE[i] = Spalte[3];
Bmax[i] = Spalte[4];
Bmin[i] = Spalte[5];
H[i] = Spalte[6];
P[i] = Spalte[7];
Pmax[i] = Spalte[8];
Pmin[i] = Spalte[9];
LZ[i] = Spalte[10];
Artikel_gesamt = Artikel_gesamt + 1;
i++; // = i + 1 -- naechste Textzeile
}
}
}
/*
* Lesezugriff, zugaenglichmachen privater, globaler Variablen, damit UP2 darauf zugreifen kann
* get = Es nimmt den Inhalt, kopiert ihn und gibt in dem aufrufenden Code (Object) zurueck.
* Das mit dem Kopieren ist etwas komplexer bei Objecten, an sich aber fuer den Anfang richtig.
* beinhaltete Information ist die jeweilige 8-stellige Artikelnummer
*/
public static String getAN(int zeile) {
return AN[zeile];
}
public static String getBmin(int zeile) {
return Bmin[zeile];
}
/*
* Tabelle mit Informationen der Artikel erstellen, Rueckgriff auf Zeilenzaehler U3
* globale Variablen -- stehen im Konstruktor -- private koennen nur in dieser Klasse "gesehen" werden
* erstellen von String Arrays mit soviel Zeilen wie ARTIKEL.TXT besitz
*/
private static String [] AN = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] AB = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] ME = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] BE = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] Bmax = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] Bmin = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] H = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] P = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] Pmax = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] Pmin = new String [Zeilenzähler.getZeilenzaehler()];
private static String [] LZ = new String [Zeilenzähler.getZeilenzaehler()];
public static int Artikel_gesamt;
private static String Zeile;
// private static int zeilenzaehler = 0;
}
2. Unterprogramm
Java:
package programm;
import programm.Einlesen;
/**
* Raussortieren der "richtigen" Minimalbestaende. Sortieren dieser.
*/
public class Sortieren
{
/**
* Methode für prüfen ob letze Artikelnummer > 3
*/
public static void checkoutArtikelnummer()
{
int j = 0;
/**
* Schleife für i=0
*/
for (int i = 0; i <= Einlesen.Artikel_gesamt - 1; i++)
{
/**
* "substring" = rausloesen d. 7. Stelle d. Strings "speicher" und wiederumwandlung zu Integer
* Lokale Zeilenabfragen einlesen
*/
// SA = Integer.parseInt(Einlesen.getAN(i).substring(7));
SA = Integer.parseInt(Einlesen.getAN(i).substring(6)); //
/**
* If-Abfrage - Abspeicherrung in Matrix mit k Zeilen und 2 Spalten
* Methode "getAN" aufrufen, i als Parameter mitgeben
*/
// if (SA > 3)
if (SA < 3) //
{
Matrix[j][1] = Integer.parseInt(Einlesen.getAN(i));
Matrix[j][2] = Integer.parseInt(Einlesen.getBmin(i));
k = k + 1;
j = j + 1;
}
}
}
/**
* Methode zum Tauschen der Zeilen
*/
public static void tauschen()
{
/**
* Variablen initialisieren
*/
int tauschwert;
int kleinster_wert;
int zeile_kleinster_wert = 0;
int temp1 = 0;
int temp2 = 0;
/**
* Schleife
*/
for (int j = 0; j <= k ; j++)
{
int Pruefer = 0; // pruefer initialisieren
tauschwert = Matrix[j][2];
for (int p = j + 1; p <= k - 1; p++)
{
kleinster_wert = Matrix[p][2];
if (kleinster_wert < tauschwert)
{
tauschwert = kleinster_wert;
zeile_kleinster_wert = p;
Pruefer = 1;
}
}
if (Pruefer > 0)
{
temp1 = Matrix[j][1]; // temporaere Abspeicherrung der kleinsten
// Artikelnummer
temp2 = Matrix[j][2]; // temporaere Abspeicherrung des kleinsten
// Bestandsminima
Matrix[j][1] = Matrix[zeile_kleinster_wert][1];
Matrix[j][2] = Matrix[zeile_kleinster_wert][2];
Matrix[zeile_kleinster_wert][1] = temp1;
Matrix[zeile_kleinster_wert][2] = temp2;
}
}
}
/**
* Globale Variablen
*/
private static int SA; // letzte Stelle Artikelnummer
public static int k = 0; // Zaehler für die Laenge der Matrix
public static int[][] Matrix = new int[Einlesen.Artikel_gesamt][3];
// Matrix 2 Dimensional mit "Artikel_gesamt" Zeilen und 2 Spalten
}
3. Unterprogramm
Java:
package programm;
import java.io.BufferedReader; /*
* Puffert Eingaben. Daten werden zuerst in Zwischenspeicher geladen,
* was insbesondere bei Dateien zu weniger Zugriffen auf den Datentraeger fuehrt und
* so die Geschwindigkeit der Anwendung erhoeht.
*/
import java.io.FileInputStream; // Erzeugt einen FileInputStream mit einem gegebenen Dateinamen.
import java.io.IOException; /*
* InputStreamReader bietet die Moeglichkeit,
* InputStream-Klassen an die zeichenbasierten Reader-Klassen zu koppeln.
* Sie ist die Basis fuer Reader-Klassen, die die Daten aus InputStreams lesen.
* Die aus dem darunter liegenden InputStream gelesenen Bytes werden gemaess
* einer bestimmten Zeichencodierung in Unicode-Zeichen umgewandelt.
* Falls der Benutzer keine Zeichencodierung angibt,
* wird die standardmaessige Codierung der Plattform verwendet.
*/
import java.io.InputStreamReader;
/*
* U3 Errechnet die Zeilen in ARTIKEL.TXT
*/
public class Zeilenzähler {
/*
* Einbinden der Methode ()= Inhalt ist eine Zahl
* ohne Rueckgabewert mit Fehlerdokumentation
*/
public static void anzahlZeilen() throws IOException
{
/*
* ARTIKEL.TXT oeffnen, Einlesen, Puffern
*/
FileInputStream fis = new FileInputStream("ARTIKEL.TXT"); //Textdatei oeffnen
InputStreamReader isr = new InputStreamReader(fis); // lesen, Umwandlung Bytes in Zeichen
BufferedReader bf = new BufferedReader(isr); // Puffert die Eingabe
/*
* Datentyp String deklarieren
*/
String tempzeile;
/*
* Schleife prueft die Zeilen in ARTIKEL.TXT
* wenn kein Inhalt vorhanden wird die Schleife beendet
* Zeile mit Inhalt wird addiert
*/
while (true)
{
tempzeile = bf.readLine();
if (tempzeile == null)
{
break;
}
else
{
zeilenzaehler = zeilenzaehler + 1;
}
}
}
/**
* Globale Variable vom Typ int wird zurueckgegeben
* entspricht der Zeilenanzahl
*/
public static int getZeilenzaehler()
{
return zeilenzaehler;
}
private static int zeilenzaehler;
}
Kann mir einer helfen? Ich glaube, die Aufgabe ist für Informatik-Experten nicht so anspruchsvoll.
Liebe Grüße,
Jasmin