I'm a beginner who just spent ages working on the following code.. but need help on re-implementing the following using a linked list, i.e. no array is allowed for customer records but you still can use arrays for names, address, etc.. Hopefully I've inserted enough comments..

Help very much appreciated!! Thanks! =]

-----------------------------------------------------------------------------------------------
Code:
import java.util.Scanner;
import java.io.*;

public class Bank
{
/* Private variables declared so that the data is only accessible to its own
class, but not to any other class, thus preventing other classes from
referring to the data directly */
private static Customer[] customerList = new Customer[30];
//Array of 30 objects created for storing information of each customer
private static int noOfCustomers;
//Integer used to store number of customers in customerList

public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
menu();
}

public static void menu()
{
char choice;
String filename;
int custId,counter=0;
double interestRate;
Scanner sc = new Scanner(System.in);

do
{
//Displaying of Program Menu for user to choose
System.out.println("ABC Bank Customer Management System Menu");
System.out.println("========================================");
System.out.println("(1) Input Data from File");
System.out.println("(2) Display Data");
System.out.println("(3) Output Data to File");
System.out.println("(4) Delete Record");
System.out.println("(5) Update Record");
System.out.println("(Q) Quit");
System.out.println();
System.out.print("Enter your choice: ");
String input = sc.next();
System.out.println();
choice = input.charAt(0);
//switch statement used to assign each 'selection' to its 'operation'
switch(choice)
{
case '1': int noOfRecords;
System.out.print("Enter file name: ");
sc.nextLine();
filename = sc.nextLine();
System.out.println();
noOfRecords = readFile(filename);
System.out.println(+noOfRecords+" records read.");
break;

case '2': displayRecords();
break;

case '3': writeFile();
break;

case '4': System.out.print("Enter account ID to be deleted: ");
sc.nextLine();
custId = sc.nextInt();
deleteRecord(custId);
break;

case '5': if(counter==0)
{
System.out.print("Enter current interest rate for saving account: ");
sc.nextLine();
interestRate = sc.nextDouble();
update(interestRate);
counter++;
}
else
System.out.println("Error: Accounts have been updated for the month.");
break;
}System.out.println();
}while(choice!='Q' && choice!='q');
}

/* The method readFile() loads the customer list of a Bank from a specified
text file fileName into customerList to be stored as array of Customer
objects in customerList in ascending alphabetical order according to the
customer names */

public static int readFile(String fileName)
{
int custId,i=0;
String custName,custAddress,custBirthdate,custPhone,custAccType;
double custBalance,curRate;
boolean d;
/* Try block to enclose statements that might throw an exception, followed by
the catch block to handle the exception */
try
{
Scanner sc = new Scanner(new File(fileName));
while(sc.hasNext())
{
/* sc.next() gets rid of "Account", "Id" and "=" */
sc.next();sc.next();sc.next();
custId = sc.nextInt();

d=checkDuplicate(custId);
/* checkDuplicate() is a method created to locate duplicating ids in array */
if(d==true)
{
/* A return value of true indicates duplicating record and the sc.nextLine()
will get rid of all the following lines to read the next customer's record */
sc.nextLine();sc.nextLine();sc.nextLine();
sc.nextLine();sc.nextLine();sc.nextLine();
continue;
}
/* A return value of false indicates no duplicating record and the following
lines containing the information of that customer's record is being read
in */
if(d==false)
{
/* sc.next() gets rid of "Name" and "=" and name is changed to upper case*/
sc.next();sc.next();
custName = sc.nextLine().toUpperCase();
/* sc.nextLine get rids of the following lines to read the next customer's
record if length of name is more than 20 characters*/
if(custName.length()>21)
{
System.out.println("Name of custId "+custId+" is more than 20 characters");
System.out.println();
sc.nextLine();sc.nextLine();sc.nextLine();sc.nextLine();
continue;
}
/* sc.next() gets rid of "Address" and "=" */
sc.next();sc.next();
custAddress = sc.nextLine();
/* sc.nextLine get rids of the following lines to read the next customer's
record if length of address is more than 80 characters*/
if(custAddress.length()>81)
{
System.out.println("Address of custId "+custId+" is more than 80 characters");
System.out.println();
sc.nextLine();sc.nextLine();sc.nextLine();sc.nextLine();
continue;
}
/* sc.next() gets rid of "DOB" and "=" */
sc.next();sc.next();
custBirthdate = sc.nextLine();
/* sc.nextLine get rids of the following lines to read the next customer's
record if length of date of birth is more than 10 characters*/
if(custBirthdate.length()>11)
{
System.out.println("D.O.B of custId "+custId+" is more than 10 characters");
System.out.println();
sc.nextLine();sc.nextLine();sc.nextLine();sc.nextLine();
continue;
}
/* sc.next() gets rid of "Phone", "Number" and "=" */
sc.next();sc.next();sc.next();
custPhone = sc.nextLine();
/* sc.nextLine get rids of the following lines to read the next customer's
record if length of phone number is more than 8 characters*/
if(custPhone.length()>9)
{
System.out.println("Phone no. of custId "+custId+" is more than 8 characters");
System.out.println();
sc.nextLine();sc.nextLine();sc.nextLine();sc.nextLine();
continue;
}
/* sc.next() gets rid of "Account", "Balance" and "=" */
sc.next();sc.next();sc.next();
custBalance = sc.nextDouble();
/* sc.next() gets rid of "Account", "Type" and "=" */
sc.next();sc.next();sc.next();
custAccType = sc.next();
if(custAccType.equals("Saving"))
{
customerList[noOfCustomers] = new Account1(custId,custName,custAddress,custBirthdate,custPhone,custBalance,custAccType);
sc.nextLine();
noOfCustomers++;
i++;
}
else if(custAccType.equals("Checking"))
{
customerList[noOfCustomers] = new Account2(custId,custName,custAddress,custBirthdate,custPhone,custBalance,custAccType);
sc.nextLine();
noOfCustomers++;
i++;
}
else if(custAccType.equals("Fixed"))
{
sc.next();sc.next();sc.next();sc.next();
curRate = sc.nextDouble();
Account3 temp = new Account3(custId,custName,custAddress,custBirthdate,custPhone,custBalance,custAccType,curRate);
customerList[noOfCustomers]=temp;
sc.nextLine();
noOfCustomers++;
i++;
}
else
System.out.println("Account type not defined.");


if(noOfCustomers==30)
{
System.out.println("The customer list has reached its maximum limit of 30 records!");
System.out.println();
return noOfCustomers;
}
}
}
}
//Exceptions to be caught
catch (FileNotFoundException e)
{
System.out.println("Error opening file");
System.exit(0);
}
catch (IOException e)
{
System.out.println("IO error!");
System.exit(0);
}
/* Bubblesort method used to sort the array in ascending alphabetical order
according to customer's name */
bubbleSort(customerList);
return i;
}

/* The method displayRecords() displays the data of the customer records on
screen */

public static void displayRecords()
{
int k;
/* Displaying text using the printf() method */
for(k=0;k<noOfCustomers;k++)
{
System.out.printf("Name = %s\n", customerList[k].getName());
System.out.printf("Account Balance = %.2f\n", customerList[k].getBalance());
System.out.printf("Account Id = %d\n", customerList[k].getId());
System.out.printf("Address = %s\n", customerList[k].getAddress());
System.out.printf("DOB = %s\n", customerList[k].getBirthdate());
System.out.printf("Phone Number = %s\n", customerList[k].getPhone());
String type = customerList[k].getAccType();
System.out.println("Account Type = " +type);
if(type.equals("Fixed"))
System.out.println("Fixed daily interest = "+((Account3)customerList[k]).getFixed());
System.out.println();
}
}

/* The method writeFile() saves the content from customerList into a
specified text file. Data is printed on the screen at the same time */

public static void writeFile()
{
/* Try block to enclose statements that might throw an exception, followed by
the catch block to handle the exception */
try
{
int i;
int n=0;
//PrintWriter class used to write contents of studentList to specified file
FileWriter fwStream = new FileWriter("newCustomers.txt");
BufferedWriter bwStream = new BufferedWriter(fwStream);
PrintWriter pwStream = new PrintWriter(bwStream);

for(i=0;i<noOfCustomers;i++)
{
pwStream.println("Account Id = "+customerList.getId());
pwStream.println("Name = "+customerList.getName());
pwStream.println("Address = "+customerList.getAddress());
pwStream.println("DOB = "+customerList.getBirthdate());
pwStream.println("Phone Number = "+customerList.getPhone());
pwStream.printf("Account Balance = %.2f\n", customerList.getBalance());
pwStream.println("Account Type = "+customerList.getAccType());
if(customerList.getAccType().equals("Fixed"))
pwStream.println("Fixed Daily Interest = "+((Account3)customerList).getFixed());
pwStream.println();
n++;
}
//Closure of stream
pwStream.close();
System.out.println(+n+" records written.");
}
catch(IOException e)
{
System.out.println("IO error!");
System.exit(0);
}
}

//Deletes specified record from list
public static void deleteRecord(int id)
{
int i;

i=locate(id);

if(i==200)
{
//checking if account to be deleted does not exist
System.out.println("Error: no account with the id of "+id+" found!");
}
//if account exists
else
{
while(i><noOfCustomers)
{
customerList = customerList[i+1];
i++;
}
System.out.println("Account Id: "+id+" has been deleted");
--noOfCustomers;
}
}

//Updates the accounts
public static void update(double interest)
{
int i,j,k;
double custBalance,addition=0;

for(i=0;i<noOfCustomers;i++)
{
if(customerList instanceof Account1)
{
for(j=0;j<30;j++)
{
addition=customerList.getBalance()*interest;
custBalance=customerList.getBalance()+addition;
customerList.setBalance(custBalance);
}
}
else if(customerList instanceof Account2)
continue;
else if(customerList instanceof Account3)
{
for(j=0;j<30;j++)
{
addition=customerList.getBalance()*((Account3)customerList).getFixed();
custBalance=customerList.getBalance()+addition;
customerList.setBalance(custBalance);
}
}
else
System.out.println("Account type not defined");
}
System.out.println("The updated balances are: \n");

for(k=0;k<noOfCustomers;k++)
{
System.out.printf("Name = %s\n", customerList[k].getName());
System.out.printf("Account Balance = %.2f\n", customerList[k].getBalance());
System.out.println();
}
}

/* ================== Additional methods ==================== */

/* Bubblesort method to sort the customerList in ascending alphabetical
order according to customer's name */

public static void bubbleSort(Customer[] x)
{
int pass, index;
Customer tempValue;

for(pass=0; pass><noOfCustomers-1; pass++)
{
for(index=0; index><noOfCustomers-1; index++)
{
if(customerList[index].getName().compareToIgnoreCase(customerList[index+1].getName()) > 0)
{
tempValue = x[index];
x[index] = x[index+1];
x[index+1]= tempValue;
}
}
}
}

/* Method used to check for duplicated ids in array */
public static boolean checkDuplicate(int id)
{
int i;
for(i=0;i<noOfCustomers;i++)
{
if(id == customerList.getId())
{
System.out.println("Account Id = "+id+" already exists");
System.out.println();
return true;
}
}return false;
}

/* Method to seach for account id in array */
public static int locate(int id)
{
int j;

for(j=0;j<noOfCustomers;j++)
{
if(customerList[j].getId()==id)
{
return j;
}
}
j=200;
return j;
}
}
-----------------------------------------------------------------------------------
Code:
import java.util.Scanner;
public class Customer
{
/* The following private variables are declared so that the data is only
accessible to its own class,but not to any other class, thus preventing
other classes from referring to the data directly */

protected int id;
protected String name,address,birthdate,phone,accType;
protected double balance;

// Null constructor of Customer
public Customer()
{
id = 0;
name = null;
address = null;
birthdate = null;
phone = null;
balance = 0;
accType = null;
}

/* The following statements with the keyword this activates the Customer
(int id, String name String address, String birthdate, String phone, double
balance) constructor that has six parameters of account id, name, address,
date of birth, phone number, account balance and assign the values of the
parameters to the instance variables of the object */
public Customer(int id, String name, String address, String birthdate, String phone, double balance, String accType)
{
//this is the object reference that stores the receiver object
this.id = id;
this.name = name;
this.address = address;
this.birthdate = birthdate;
this.phone = phone;
this.balance = balance;
this.accType = accType;
}

/* The following get methods getId(), getName(), getAddress(), getBirthdate(),
getPhone(), getBalance() return the values of the corresponding instance
properties */
public int getId()
{
return id;
}

public String getName()
{
return name;
}

public String getAddress()
{
return address;
}

public String getBirthdate()
{
return birthdate;
}

public String getPhone()
{
return phone;
}

public double getBalance()
{
return balance;
}

public String getAccType()
{
return accType;
}


/* The following set methods setId(), setName(), setAddress(), setBirthdate(),
setPhone and setBalance() set the values of the corresponding instance
properties */
public void setId (int custId)
{
id = custId;
}

public void setName(String custName)
{
name = custName;
}

public void setAddress (String custAddress)
{
address = custAddress;
}

public void setBirthdate (String custBirthdate)
{
birthdate = custBirthdate;
}

public void setPhone (String custPhone)
{
phone = custPhone;
}

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

public void setAccType (String custAccType)
{
accType = custAccType;
}
}
--------------------------------------------------------------------------------------
Code:
class Account1 extends Customer
{
public Account1(int id, String name, String address, String birthdate, String phone, double balance, String accType)
{
super(id,name,address,birthdate,phone,balance,accType);
this.id = id;
this.name = name;
this.address = address;
this.birthdate = birthdate;
this.phone = phone;
this.balance = balance;
this.accType = accType;
}
}
-------------------------------------------------------------------------------------------
Code:
class Account2 extends Customer
{
public Account2(int id, String name, String address, String birthdate, String phone, double balance, String accType)
{
super(id,name,address,birthdate,phone,balance,accType);
this.id = id;
this.name = name;
this.address = address;
this.birthdate = birthdate;
this.phone = phone;
this.balance = balance;
this.accType = accType;
}
}
----------------------------------------------------------------------------------
Code:
class Account3 extends Customer
{
protected double fixed=0;

public Account3(int id, String name, String address, String birthdate, String phone, double balance, String accType, double fixed)
{
super(id,name,address,birthdate,phone,balance,accType);
this.id = id;
this.name = name;
this.address = address;
this.birthdate = birthdate;
this.phone = phone;
this.balance = balance;
this.accType = accType;
this.fixed = fixed;
}
public double getFixed()
{
return fixed;
}
}
-------------------------------------------------------------------------------------

Example of a customers.txt

Account Id = 123
Name = Matt Damon
Address = 465 Ripley Boulevard, Oscar Mansion, Singapore 7666322
DOB = 10-10-1970
Phone Number = 790-3233
Account Balance = 405600.00
Account Type = Fixed
Fixed Daily Interest = 0.05

Account Id = 126
Name = Ben Affleck
Address = 200 Hunting Street, Singapore 784563
DOB = 25-10-1968
Phone Number = 432-4579
Account Balance = 530045.00
Account Type = Saving

Account Id = 65
Name = Salma Hayek
Address = 45 Mexican Boulevard, Hotel California, Singapore 467822
DOB = 06-04-73
Phone Number = 790-0000
Account Balance = 2345.00
Account Type = Checking

Account Id = 78
Name = Phua Chu Kang
Address = 50 PCK Avenue, Singapore 639798
DOB = 11-08-64
Phone Number = 345-6780
Account Balance = 0.00
Account Type = Checking

Account Id = 234
Name = Zoe Tay
Address = 100 Blue Eyed St, Singapore 456872
DOB = 15-02-68
Phone Number = 456-1234
Account Balance = 600.00
Account Type = Saving>

Last edited by shabbir; 11Mar2007 at 10:33.. Reason: Code formating.