Need help regarding Linked List

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! =]

--

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;

}

}

--

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;

}

}

--

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;

}

}

-

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;

}

}

-

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>

[19609 byte] By [aevylainredsa] at [2007-11-26 21:10:59]
# 1

1) When you post code, please use[code] and [/code] tags as described in [url=http://forum.java.sun.com/help.jspa?sec=formatting]Formatting tips[/url] on the message entry page. It makes it much easier to read.

2) Don't just post a huge pile of code and ask, "How do I make this work?" Ask a specific question, and post just enough code to demonstrate the problem you're having.

3) Don't just write a huge pile of code and then test it. Write a tiny piece, test it. Then write the piece that will work with or use the first piece. Test that by itself--without the first piece. Then put the two together and test that. Only move on to the next step after the current step produces the correct results. Continue this process until you have a complete, working program.

jverda at 2007-7-10 2:48:11 > top of Java-index,Java Essentials,New To Java...
# 2
=[sorry spent nights without sleeping just to get this done. guess won't be getting any help on linked list then.. java is just so hard.. sigh i give up..
aevylainredsa at 2007-7-10 2:48:11 > top of Java-index,Java Essentials,New To Java...
# 3

Hey, no one ever said you aren't going to get any help.

Just try not to post this huge block of code and expect us to re-implement whatever you are trying to do.

As suggested above, use the code tags if you want others to understand what it is you are trying to do.

If you want help on LinkedList, there is a wonderful Java Documentation at http://java.sun.com/j2se/1.4.2/docs/api/

LinkedList: http://java.sun.com/j2se/1.4.2/docs/api/java/util/LinkedList.html

If you get stuck on the implementation, just post and we'll be more than happy to help you.

C_Zhaoa at 2007-7-10 2:48:11 > top of Java-index,Java Essentials,New To Java...
# 4
ookie...thanks then will do...
aevylainredsa at 2007-7-10 2:48:11 > top of Java-index,Java Essentials,New To Java...
# 5

yea... ive read up on Linked Lists...

but it just doesnt make sense to me

im confused as to how to implement the customer records using a linked list rather than an array which ive been using so far...

u see..i want to supplement the customer account records with a transaction record now... meaning customers can withdraw or deposit cash into their accounts...

each transaction consists of 6 fields...id,date,type of transaction(withdraw or deposit), amt of money involve and the location(represented by a no.)

set of customer records = 1 linked list

set of transactions for each customer = 1 linked list

now have 2 types of linked lists involved... T_T

aevylainredsa at 2007-7-10 2:48:11 > top of Java-index,Java Essentials,New To Java...
# 6

What part of linked lists don't you understand?

Define a class called Node. A Node has a data member variable and a next member variable (and, if the list is doubly linked, a previous member variable). Data holds the actual value you're storing, and next and previous point to, well, the next and previous item in the list.

A LinkedList class has a head member variable, that is of type Node, and maybe a tail member variable that is also of typde Node. It provides operations for adding an element, for removing an element, and for traversing through the elements.

Note: You'll only need one LinkedList class. You create one instance of that class to store your customers, and each customer has an instance of that class as a member variable to store his transactions.

jverda at 2007-7-10 2:48:11 > top of Java-index,Java Essentials,New To Java...