Hallo,
ich bin gerade dabei eine Art Shop zu programmieren auf noch ganz primitivem Niveau.
Ich habe verschiedene Artikel, die einmal in einem Inventory und einem Warenkorb gespeichert sind.
Inventory und Warenkorb schreibe ich je in ein File. Das funktioniert alles wunderbar, nur leider
weiß ich nicht, wie ich die Anzahl der Artikel in meinen Dateien ändern kann, da ich nicht weiß
an welcher Stelle ich dafür Casten muss. Hier mal zu dem für das Problem wesentlichem Code:
Mein Inventory das in die Storage geschrieben wird:
Und hier die Klasse in der Ich die Anzahl ändern möchte:
So jetzt müsste ich ja in der Methode einkaufen(int, int) nachdem ich die Anzahl der jeweiligen Artikel
in deren Klassen geändert habe, sie auch noch in der Klasse Storage neu setzen, damit die neue Anzahl auch in die Datei geschrieben wird. Aber ich stehe derzeit total auf dem Schlauch wie das funktionieren soll.
Ich dachte eigentlich es wäre logisch, dass ich einfach nochmal meine Arrays neu in die Datei schreibe,
nur das hat leider die Stückzahl nicht verändert.
ich bin gerade dabei eine Art Shop zu programmieren auf noch ganz primitivem Niveau.
Ich habe verschiedene Artikel, die einmal in einem Inventory und einem Warenkorb gespeichert sind.
Inventory und Warenkorb schreibe ich je in ein File. Das funktioniert alles wunderbar, nur leider
weiß ich nicht, wie ich die Anzahl der Artikel in meinen Dateien ändern kann, da ich nicht weiß
an welcher Stelle ich dafür Casten muss. Hier mal zu dem für das Problem wesentlichem Code:
Mein Inventory das in die Storage geschrieben wird:
Java:
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
import java.io.File;
import java.io.IOException;
import java.io.FileNotFoundException;
public class Storage implements java.io.Serializable{
private static final long serialVersionUID = 23421;
private static Storage mStorage = null;
private static Inventory inv = new Inventory();
private static ArrayList<String> mArrayListName = new ArrayList<String>(inv.getInventoryNames());
private static ArrayList<Integer> mArrayListPrice = new ArrayList<Integer>(inv.getInventoryPrice());
private static ArrayList<Integer> mArrayListAmount = new ArrayList<Integer>(inv.getInventoryAmount());
//*****Konstruktor***********************
public Storage(){}
//*********************************************************************
public static Storage instanciate(){ //Singleton
if(mStorage == null){
if(!Storage.readFile()){
mStorage = new Storage();
}
}
return mStorage;
}
//*********************************************************************
public static void writeFile(){
try{
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(new File("Storage.txt"), false));
out.writeObject(getArrayListName());
out.writeObject(getArrayListPrice());
out.writeObject(getArrayListAmount());
out.flush();
out.close();
}catch(FileNotFoundException e1){
System.out.println(e1);
}catch(IOException e2) {
System.out.println(e2);
}
}
//*********************************************************************
public static boolean readFile(){
try{
ObjectInputStream in = new ObjectInputStream(new FileInputStream("Storage.txt"));
setArrayListName((ArrayList<String>)in.readObject());
setArrayListPrice((ArrayList<Integer>)in.readObject());
setArrayListAmount((ArrayList<Integer>)in.readObject());
in.close();
return true;
}catch(FileNotFoundException e1){
System.out.println(e1);
}catch(IOException e2) {
System.out.println(e2);
}catch(ClassNotFoundException e3){
System.out.println(e3);
}
return false;
}
//*********************************************************************
public static ArrayList<String> getArrayListName(){
return mArrayListName;
}
public static void setArrayListName(ArrayList<String> aArrayListName){
Storage.mArrayListName = aArrayListName;
}
public static ArrayList<Integer> getArrayListPrice(){
return mArrayListPrice;
}
public static void setArrayListPrice(ArrayList<Integer> aArrayListPrice){
Storage.mArrayListPrice = aArrayListPrice;
}
public static ArrayList<Integer> getArrayListAmount(){
return mArrayListAmount;
}
public static void setArrayListAmount(ArrayList<Integer> aArrayListAmount){
Storage.mArrayListAmount = aArrayListAmount;
}
}
Und hier die Klasse in der Ich die Anzahl ändern möchte:
Java:
public class Worker{
private Storage mStorage;
private Account mAccount;
NumbReader nr = new NumbReader();
UI ui = new UI();
Inventory inv = new Inventory();
Warenkorb war = new Warenkorb();
private int mChooseMenu;
private int mChooseEinkauf;
private int mChooseWarenkorb;
private int mHowMuch;
//*****Konstruktor***********************
public Worker(){
setStorage(Storage.instanciate());
setAccount(Account.instanciate());
}
//*********************************************************************
public void doWork(){
ui.startMenu();
switch(chooseMenu()){
case 0:{
getStorage().writeFile();
uiEinkaufen();
switch(chooseEinkauf()){
case 0:{
ui.howMuch();
howMuch();
einkaufen(0, getHowMuch());
break;
}
case 1:{
ui.howMuch();
howMuch();
einkaufen(1, getHowMuch());
break;
}
case 2:{
ui.howMuch();
howMuch();
einkaufen(2, getHowMuch());
break;
}
case 3:{
ui.howMuch();
howMuch();
einkaufen(3, getHowMuch());
break;
}
case 4:{
ui.howMuch();
howMuch();
einkaufen(4, getHowMuch());
break;
}
case 5:{
ui.howMuch();
howMuch();
einkaufen(5, getHowMuch());
break;
}
case 6:{
ui.howMuch();
howMuch();
einkaufen(6, getHowMuch());
break;
}
}
}break;
case 1:{
getAccount().writeFile();
ui.warenkorb();
switch(chooseWarenkorb()){
case 0:{
getAccount().readFile();
ui.warenkorbAnsehen();
uiWarenkorbAnsehen();
}break;
case 1:{
}break;
}
}break;
case 2:{
System.out.println("Aufwiedersehen!");
System.exit(0);
}break;
}
}
//*********************************************************************
public int chooseMenu(){
setChooseMenu(nr.getIntValue());
return getChooseMenu();
}
//*********************************************************************
public int chooseEinkauf(){
setChooseEinkauf(nr.getIntValue());
return getChooseEinkauf();
}
//*********************************************************************
public int chooseWarenkorb(){
setChooseWarenkorb(nr.getIntValue());
return getChooseWarenkorb();
}
//*********************************************************************
public int howMuch(){
setHowMuch(nr.getIntValue());
return getHowMuch();
}
//*********************************************************************
public void uiEinkaufen(){
getStorage().readFile();
ui.einkaufen();
for(int i = 0; i < getStorage().getArrayListName().getArray().length; i++){
System.out.print("("+i+")"+getStorage().getArrayListName().getArray()[i]);
System.out.print('\t');
System.out.print(getStorage().getArrayListPrice().getArray()[i]);
System.out.print('\t');
System.out.println(getStorage().getArrayListAmount().getArray()[i]);
}
ui.einkaufen2();
}
//*********************************************************************
public void uiWarenkorbAnsehen(){
for(int i = 0; i < getAccount().getArrayListName().getArray().length; i++){
System.out.print("("+i+")"+getAccount().getArrayListName().getArray()[i]);
System.out.print('\t');
System.out.print(getAccount().getArrayListPrice().getArray()[i]);
System.out.print('\t');
System.out.println(getAccount().getArrayListAmount().getArray()[i]);
}
}
//*********************************************************************
public void einkaufen(int aNumber, int aAmount){
switch(aNumber){
case 0:{
inv.setCp0Amount(inv.getCp0Amount()-aAmount);
war.setCp0Amount(war.getCp0Amount()+aAmount);
}break;
case 1:{
inv.setCp1Amount(inv.getCp1Amount()-aAmount);
war.setCp1Amount(war.getCp1Amount()+aAmount);
}break;
case 2:{
inv.setCp2Amount(inv.getCp2Amount()-aAmount);
war.setCp2Amount(war.getCp2Amount()+aAmount);
}break;
case 3:{
inv.setCp3Amount(inv.getCp3Amount()-aAmount);
war.setCp3Amount(war.getCp3Amount()+aAmount);
}break;
case 4:{
inv.setMpAmount(inv.getMpAmount()-aAmount);
war.setMpAmount(war.getMpAmount()+aAmount);
}break;
case 5:{
inv.setOmpAmount(inv.getOmpAmount()-aAmount);
war.setOmpAmount(inv.getOmpAmount()+aAmount);
}break;
case 6:{
inv.setSmpAmount(inv.getSmpAmount()-aAmount);
war.setSmpAmount(inv.getSmpAmount()+aAmount);
}break;
}
}
//*********************************************************************
public Storage getStorage(){
return mStorage;
}
private void setStorage(Storage aStorage){
this.mStorage = aStorage;
}
public Account getAccount(){
return mAccount;
}
private void setAccount(Account aAccount){
this.mAccount = aAccount;
}
public int getChooseMenu(){
return mChooseMenu;
}
private void setChooseMenu(int aChooseMenu){
this.mChooseMenu = aChooseMenu;
}
public int getChooseEinkauf(){
return mChooseEinkauf;
}
private void setChooseEinkauf(int aChooseEinkauf){
this.mChooseEinkauf = aChooseEinkauf;
}
public int getChooseWarenkorb(){
return mChooseWarenkorb;
}
private void setChooseWarenkorb(int aChooseWarenkorb){
this.mChooseWarenkorb = aChooseWarenkorb;
}
public int getHowMuch(){
return mHowMuch;
}
private void setHowMuch(int aHowMuch){
this.mHowMuch = aHowMuch;
}
}
So jetzt müsste ich ja in der Methode einkaufen(int, int) nachdem ich die Anzahl der jeweiligen Artikel
in deren Klassen geändert habe, sie auch noch in der Klasse Storage neu setzen, damit die neue Anzahl auch in die Datei geschrieben wird. Aber ich stehe derzeit total auf dem Schlauch wie das funktionieren soll.
Ich dachte eigentlich es wäre logisch, dass ich einfach nochmal meine Arrays neu in die Datei schreibe,
nur das hat leider die Stückzahl nicht verändert.
Java:
public void einkaufen(int aNumber, int aAmount){
switch(aNumber){
case 0:{
inv.setCp0Amount(inv.getCp0Amount()-aAmount);
getStorage().writeFile();
war.setCp0Amount(war.getCp0Amount()+aAmount);
getAccount().writeFile();
}break;
case 1:{
inv.setCp1Amount(inv.getCp1Amount()-aAmount);
getStorage().writeFile();
war.setCp1Amount(war.getCp1Amount()+aAmount);
getAccount().writeFile();
}break;
case 2:{
inv.setCp2Amount(inv.getCp2Amount()-aAmount);
getStorage().writeFile();
war.setCp2Amount(war.getCp2Amount()+aAmount);
getAccount().writeFile();
}break;
case 3:{
inv.setCp3Amount(inv.getCp3Amount()-aAmount);
getStorage().writeFile();
war.setCp3Amount(war.getCp3Amount()+aAmount);
getAccount().writeFile();
}break;
case 4:{
inv.setMpAmount(inv.getMpAmount()-aAmount);
getStorage().writeFile();
war.setMpAmount(war.getMpAmount()+aAmount);
getAccount().writeFile();
}break;
case 5:{
inv.setOmpAmount(inv.getOmpAmount()-aAmount);
getStorage().writeFile();
war.setOmpAmount(inv.getOmpAmount()+aAmount);
getAccount().writeFile();
}break;
case 6:{
inv.setSmpAmount(inv.getSmpAmount()-aAmount);
getStorage().writeFile();
war.setSmpAmount(inv.getSmpAmount()+aAmount);
getAccount().writeFile();
}break;
}
}
Zuletzt bearbeitet: