2012-03-27 5 views
0

Part4: Lesen Sie eine Zeichenkette aName, eine int aPin, eine doppelte aWithdraw, und eine doppelte aDeposit. Suchen Sie dann in einem anderen Array, um einen Kundendatensatz mit dem Namen aName und dem Pin aPin zu finden. Wenn der Datensatz gefunden wird, führen Sie die Auszahlung und Einzahlungen mit einerWithdraw- und einerEinzahlungsbeträge durch und aktualisieren Sie den Saldo des Datensatzes. Sonst eine Fehlermeldung ausgeben. Dieser Vorgang kann für andere Transaktionen in anderen Datensätzen wiederholt werden. Ich habe ein wenig getan, ich bekomme einen Fehler in der 'if-Anweisung'.Wie suche ich nach einem Datensatz in einem Array und aktualisiere dann den Saldo?

Teil5: Schreiben Sie die Kundendatensätze aus einem anderenArray in die Binärdatei customer_records.dat, nachdem Sie die Kundendatensätze aktualisiert haben.

Bitte Hilfe! Ich würde das wirklich zu schätzen wissen!

import java.io.Serializable; 
    import java.util.Scanner; 

/** 
Serialized class for data on endangered species. 
Includes a main method. 
*/ 
public class CustomerRecord implements Serializable 
{ 
private String name; 
private int pin; 
private int account; 
private static double balance; 

public CustomerRecord() 
{ 
    name = null; 
    pin = 0; 
    account = 0; 
    balance = 0.00; 
} 

public CustomerRecord(String initialName, int initialPin, int initialAccount, double initialBalance) 
{ 
    name = initialName; 

    if (initialPin >= 1111 && initialPin <= 9999) 
      pin = initialPin; 
    else 
    { 
      System.out.println("ERROR: Pin is not acceptable."); 
      System.exit(0); 
    } 

if (initialAccount >= 400111 && initialAccount <= 500111) 
     account = initialAccount; 
else 
{ 
    System.out.println("ERROR: Account number is not acceptable."); 
      System.exit(0); 
} 

if (initialBalance >= 0) 
     balance = initialBalance; 
else 
{ 
    System.out.println("ERROR: Initial Balance is not acceptable."); 
      System.exit(0); 
} 
} 

public String toString() 
{ 
    return ("Name = " + name 
      + " Account = " + account 
    + " Balance = " + "$" + balance + "\n"); 
} 

public void setCustomerRecord() 
{ 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("\nEnter new customer's name: "); 
    name = keyboard.nextLine(); 

    System.out.println("Enter new customer's pin: "); 
    pin = keyboard.nextInt(); 
    while (pin < 1111 || pin > 9999) 
    { 
     System.out.println("Pin should be in the range of 1111-9999."); 
     System.out.println("Reenter pin:"); 
     pin = keyboard.nextInt(); 
    } 

    System.out.println("Enter new customer's account no: "); 
account = keyboard.nextInt(); 
    while (account < 400111 || pin > 500111) 
    { 
     System.out.println("Account should be in the range of 400111-500111."); 
     System.out.println("Reenter account number:"); 
     account = keyboard.nextInt(); 
    } 

System.out.println("Enter new customer's initial balance: "); 
    balance = keyboard.nextDouble(); 
while (balance < 0) 
    { 
     System.out.println("Initial balance should be positive or zero."); 
     System.out.println("Reenter initial balance:"); 
     balance = keyboard.nextDouble(); 
    } 
} 

public void writeOutput() 
{ 
    System.out.print("Name = " + name + "\t"); 
    System.out.print("Account = " + account + "\t"); 
    System.out.print("Balance = " + "$" + balance + "\n"); 
} 

public String getName() 
{ 
    return name; 
} 

public int getPin() 
{ 
    return pin; 
} 

public int getAccount() 
{ 
    return account; 
} 



public void setBalance(double amount) 
{ 
    balance = amount; 
} 

public static void deposit(double aDeposit) 
{ 
balance = balance + aDeposit; 
} 
public static void withdraw(double aWithdraw) 
{ 
    if 
    (balance >= aWithdraw) 
     balance = balance - aWithdraw; 
    else if 
    (balance < aWithdraw) 
     System.out.println("Cannot withdarw amount."); 
    return; 
} 
    public double getBalance() 
    { 
    return balance; 
} 
public boolean equal(CustomerRecord otherObject) 
{ 
    return (name.equalsIgnoreCase(otherObject.name) && 
      (pin == otherObject.pin) && 
      (account == otherObject.account) && 
      (balance == otherObject.balance)); 
} 
} 

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

public class BankCustomers 
    { 
public static void main(String[] args) 
{ 
    //---------------------------------------------------------------- 

    //part1: Create array of customer records and write them 
    //in the file customer_record.dat 


    CustomerRecord[] oneArray = new CustomerRecord[100]; 
    oneArray[0] = new CustomerRecord("John Gray", 2222, 400222, 10000.00); 
    oneArray[1] = new CustomerRecord("Ann Black", 3333, 400333, 1500.00); 
    oneArray[2] = new CustomerRecord("Mary White", 4444, 400555, 16500.00); 
    oneArray[3] = new CustomerRecord("Jack Green", 7777, 400888, 100.00); 

    int index = 4; 

    String fileName = "customer_records.dat"; 
    System.out.println("---Open file: " + fileName); 
    System.out.println("---Customer records written to file: " + fileName); 
    System.out.println("---Close file: " + fileName); 
    try 
    { 
     ObjectOutputStream outputStream = 
       new ObjectOutputStream(
        new FileOutputStream(fileName)); 
     outputStream.writeObject(oneArray); 
     outputStream.close(); 
    } 
    catch(IOException e) 
    { 
     System.out.println("Error writing to file " + 
          fileName + "."); 
     System.exit(0); 
    } 
    System.out.println("\n"); 


    //------------------------------------------------------------------- 
    //Part2: Read from the file customer_record.dat and save 
    //the customer records in anotherArray 


    System.out.println("---Open file: " + fileName); 
    System.out.println("---Customer records read from file: " + fileName); 
    System.out.println("---Close file: " + fileName); 
    CustomerRecord[] anotherArray = null; 
    try 
    { 
     ObjectInputStream inputStream = 
        new ObjectInputStream(
          new FileInputStream(fileName)); 
     anotherArray = (CustomerRecord[])inputStream.readObject(); 
     inputStream.close(); 
    } 
    catch(Exception e) 
    { 
     System.out.println("Error reading file " + 
          fileName + "."); 
     System.exit(0); 
    } 
      //Print the records on screen 
    for (int i = 0; i < index; i++) 
     System.out.print(anotherArray[i]); 


    //------------------------------------------------ 
    //Part3: Add a new customer record to anotherArray 

    anotherArray[index] = new CustomerRecord(); 
    anotherArray[index].setCustomerRecord(); 
    index++; 
      //Print the records on screen 
    for (int i = 0; i < index; i++) 
     System.out.print(anotherArray[i]); 


    //------------------------------------------------ 
    //Part4: Find a customer record from anotherArray 
    //to do transaction(s) and update the record's balance 

    char repeat; // User control to repeat or quit 


    do{ 


     System.out.println("Enter the name"); 
     String aName; 
     Scanner keyboard = new Scanner(System.in); 
     aName = keyboard.nextLine(); 

     System.out.println("Enter the pin"); 
     int aPin; 
     aPin = keyboard.nextInt(); 


     System.out.println("Enter the amount you wish to withdraw"); 
     double aWithdraw; 
     aWithdraw = keyboard.nextDouble(); 
     CustomerRecord.withdraw(aWithdraw); 

     System.out.println("Enter the amount you wish to deposit"); 
     double aDeposit; 
     aDeposit = keyboard.nextDouble(); 
     CustomerRecord.deposit(aDeposit); 

      for 
      (int i = 0; i < anotherArray.length; i++) { 
       CustomerRecord record = anotherArray[i]; 
       if 
       ((record.getName().equalsIgnoreCase(aName)) && (record.getPin() == (aPin))) 
    { 


       System.out.println(record); 
       record.getBalance(); 

       } 

       } 


     System.out.println("\nAnother Transaction? (y for yes)"); 
     repeat = keyboard.next().charAt(0); 

    } 
    while 
     (

     repeat == 'y' || repeat == 'Y') ; 

     //Print the records on screen 

    { for (int i = 0; i < index; i++) 
     System.out.print(anotherArray[i]); 
    } 


    //------------------------------------------------ 
    //Part5: Write the customer records from anotherArray 
    //in the file customer_record.dat 

    String fileName1 = "customer_records.dat"; 
    System.out.println("---Open file: " + fileName1); 
    System.out.println("---Customer records written to file: " + fileName1); 
    System.out.println("---Close file: " + fileName1); 
    try 
    { 
     ObjectOutputStream outputStream = 
       new ObjectOutputStream(
        new FileOutputStream(fileName1)); 
     outputStream.writeObject(anotherArray); 
     outputStream.close(); 
    } 
    catch(IOException e) 
    { 
     System.out.println("Error writing to file " + 
          fileName1 + "."); 
     System.exit(0); 
    } 
    System.out.println("\n"); 

    //End of program 
    System.out.println("\n---End of program."); 
} 
}  

bearbeiten
Fehlermeldung:
Exception in thread "main" java.lang.NullPointerException bei BankCustomers.main (BankCustomers.java:115)

+0

Entschuldigung. – Jake

+1

42. (Ernsthafter, geben Sie Ihr Problem, Fehler und so weiter.) –

+2

* "Ich bekomme einen Fehler in der 'if-Anweisung'." * - Welcher Fehler? (Mein Gedankenlesegerät funktioniert heute Morgen nicht.) –

Antwort

0

Das ist wirklich keine Überraschung hier - Sie werden diese zuerst tun:

CustomerRecord[] oneArray = new CustomerRecord[100]; 
oneArray[0] = new CustomerRecord("John Gray", 2222, 400222, 10000.00); 
oneArray[1] = new CustomerRecord("Ann Black", 3333, 400333, 1500.00); 
oneArray[2] = new CustomerRecord("Mary White", 4444, 400555, 16500.00); 
oneArray[3] = new CustomerRecord("Jack Green", 7777, 400888, 100.00); 

Sie dann eine von Hand erstellen (alles schön und gut), aber dann versuchst du, durch die GESAMTE Reihe von Kunden zu iterieren!

oneArray[0] = 'John Gray'; 
oneArray[1] = 'Ann Black'; 
oneArray[2] = 'Mary White'; 
oneArray[3] = 'Jack Green'; 
oneArray[4] = 'WHowever you made up'; 
oneArray[5] to oneArray[99] = NULL; 

BAM, Sie erhalten eine NullPointerException, wenn Sie versuchen, den Pin und den Namen zu erhalten.

+0

Wie kann ich das umgehen? – Jake

+0

Danke Buddy, @mellamokb hat mir geholfen. Nur eine andere Frage - Wie kann man sicherstellen, dass die Zahlen, die die Benutzer für Abhebungs- und Einzahlungsbeträge eingeben, den Regeln in der Klasse CustomerRecord entsprechen? – Jake

+0

@Jake: Was sind die Regeln? Wie ich sehe, schauen Sie nach genügend Geld, was gibt es sonst noch? –

0

Die Ursache Ihrer Ausnahme ist, dass Sie sind eine Reihe von Länge zu schreiben 100 einzureichen, auch wenn es nicht ganz voll ist:

CustomerRecord[] oneArray = new CustomerRecord[100]; 

Dann lesen Sie, dass wieder in ein Array:

anotherArray = (CustomerRecord[])inputStream.readObject(); 

Nun ist dieses Array enthält 5 echte Aufzeichnungen (da Sie ein in Teil 3 erstellen), aber die Array-Größe ist 100. Wenn Sie also eine Schleife durch die gesamte Länge des Arrays:

for (int i = 0; i < anotherArray.length; i++) { 

und rufen Sie record.getName() oder record.getPin(), auf Datensätze 6, 7, 8, ... 100 erhalten Sie eine NullReferenceException, weil diese Datensätze nicht existieren. Ich glaube, Sie zu i < index loopen möchten, wie Sie in Teil tun 3.

+0

Fantastisch! das hat wirklich funktioniert. Irgendeine Idee, wie man sicherstellt, dass die Zahlen, die die Benutzer für Abhebungs- und Einzahlungsbeträge eingeben, den Regeln in der Klasse CustomerRecord entsprechen? – Jake