FileDocCategorySizeDatePackage
cashclient.javaAPI DocExample11592Thu Oct 05 17:25:10 BST 2000None

cashclient.java

//file: cashclient.java

//loads classes needed for this program
import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;

public class cashclient 
{

 //Ensures port number is same as server's
 public final static int DEF_PORT = cashserver.DEF_PORT;
 public final static String DEF_HOST = cashserver.DEF_HOST;
 
 //initialise global variables
 public static String host = " ";
 private int port;
 
 static String accno = " ";
 static String pinno = " ";
 static int option = 0;
 static Socket soc = null;
 static PrintWriter outStream = null;
 static BufferedReader inStream = null;

//creates input stream, allows input from keyboard
 static DataInputStream userin = new DataInputStream(System.in);
 
 public cashclient()
 {

	System.out.println("\n\nEnter host name(e.g. usun22)-");
 	try
 	{
		 //reads host name entered by user
 		host = userin.readLine();
 	}

	//if host name is unreadable, terminate program
 	catch(IOException inputhost)
 	{
		System.out.println("Error reading host name");
		System.out.println("Exiting.........");
		System.exit(0);
 	}

	//if no host entered assume host = local host
	if(host.length() < 1)
 	{
		host=DEF_HOST;
 	}

 	try
 	{
		//create a socket connection using host name and server's port number
		soc = new Socket(host, DEF_PORT);
		
 		//create an input and output stream for new connection
		outStream = new PrintWriter(new OutputStreamWriter(soc.getOutputStream()));
		inStream = new BufferedReader(new InputStreamReader(soc.getInputStream()));
	}
	
	catch(IOException iesoc)
	{
	System.out.println("Error - initialisation failed");
	System.out.println("Exiting.........");
	System.exit(0);
	}

 }//end of cashclient

 public void input_user_data()
 {
	int cont=0;

	//display opening title
	System.out.println("\nWelcome to the Virtual Bank v1.0");
	System.out.println("--------------------------------");
	
	try
	{
		//wait 1500ms
		Thread.sleep(1500);
	}
	catch(InterruptedException iesleep)
	{
		System.out.println("Error - couldn't activate Sleep");
	}
	
	//while do not continue to next stage,loop
	while(cont==0)
	{
		cont = 1;
		try
		{
			System.out.println("\nPlease Enter Account no. - ");
 			try
 			{
				//read in account no. from user
				accno = userin.readLine();

				//convert string to int
				int acc_no = Integer.valueOf(accno).intValue();

				//if account no. is invalid account no. do not continue
				if(accno.length()!=6)
					{
					cont=0;
					}
 			}
			//caught if account no. could not be read,terminates program
 			catch(IOException ex2)
 				{
			 	System.out.println("Error - Could not read account no.");
				System.out.println("Exiting..........");
				System.exit(0);
 				}

			System.out.println("\nPlease Enter PIN no. - ");
 			try
 			{
				//read in pin no. from user input
				pinno = userin.readLine();

				//convert string to int
				int pin_no = Integer.valueOf(pinno).intValue();

				//if user input less than or greater than 4 digits do not continue
				if(pinno.length()!=4)
					{
					cont=0;
					}
 			}
			catch(IOException ex3)
		 	{
				System.out.println("Error - Could not read pin no.");
				System.out.println("Exiting.......");
				System.exit(0);
		 	}

		}//end ot try for numberformatexception
		catch(NumberFormatException nfe1)
		{
		cont = 0;
		}

		if(cont==0)
		{		
			System.out.println("\nError - incorrect entry");
			System.out.println("\nPlease try again");
			try
			{
				Thread.sleep(1500);
			}
			catch(InterruptedException iesleep2)
			{
				System.out.println("Error - couldn't activate Sleep");
			}
		}

	}//end of while(cont==0)

 }//end of input_user_data

 public void menu()
 {
	option = 0;
	
	//while option is not a vaild option loop	
	while(option!=1 && option!=2 && option!=3 && option!=4)
	{
		//display main menu
		System.out.println("\n\n----------------------");
		System.out.println("Main Menu");
		System.out.println("----------------------");
		System.out.println("1 - Display Balance");
		System.out.println("2 - Withdrawal");
		System.out.println("3 - Deposit");
		System.out.println("4 - Return Card");
		System.out.println("\nPlease Enter option - ");

		try
		{
			//read users choice from user input
			String choice = userin.readLine();
			try
			{
				//convert string to integer for vaildiating
				option = Integer.valueOf(choice).intValue();
			}

			//caught if option entered is not an integer
			catch(NumberFormatException nfe2)
			{
			option = 0;
			}
		}
		
		//caught if choice could not be read in,terminates program
		catch(IOException ex4)
		{
			System.out.println("Error - Could not read option no.");
			System.out.println("Exiting");
			System.exit(0);
		}

		//displays invaild option message if option not equal to 1,2,3 or 4 
		if(option!=1 && option!=2 && option!=3 && option!=4)
		{
			System.out.println("\nInvalid selection - please try again!");
			try
			{
				//wait 1500ms
				Thread.sleep(1500);
			}
			catch(InterruptedException iesleep)
			{
				System.out.println("Error - couldn't activate Sleep");
			}
	
		}//end of if option!=1,2,3,4

	}//end of while option !=1,2,3,4

 }//end of menu

 public void build_and_send()
 {
	//initialise local variables
	String user_amount = " ";
	float useramount = -1;
	String request = " ";	

	//begin building message
	request=accno + " ";
	request=request.concat(pinno) + " ";

	//build rest of message based on user's request in main_menu()
	switch(option)
	{
		//requests balance
		case 1:
		{
			//complete message for balance request	
			request=request.concat("b");
			break;
		}

		//requests withdrawal
		case 2:
		{
			//loop while invaild amount entered
			while(useramount<0)
			{	
				try
				{
					System.out.println("\nEnter Amount to Withdraw - ");
					try
					{
						//read in amount user wants to withdraw
						user_amount = userin.readLine();
						//convert string to int for validation
						useramount = Float.valueOf(user_amount).floatValue();
		
					}	
					//caught if amount could not be read
					catch(IOException ex5)
					{
						System.out.println("Error - Could not read amount to withdraw");
					}
				}
				
				//caught if user amount entered is invalid type
				catch(NumberFormatException nfe3)
				{
				useramount = -1;
				}
				
				//if amount invalid, display message to user
				if(useramount<0)
				{
					System.out.println("\nInvalid amount - please re-enter");
					try
					{
						Thread.sleep(1500);
					}
					catch(InterruptedException iesleep)
					{
						System.out.println("Error - couldn't activate Sleep");
					}
				}

			}//end of while
			
			//complete message for withdraw request			
			request=request.concat("w" + " " + user_amount);
			break;
		}

		//requests deposit
		case 3:
		{
			//loop while invaild amount entered
			while(useramount<0)
			{	
				try
				{
					System.out.println("\nEnter Amount to Deposit - ");
					try
					{
						//read in amount user wants to deposit
						user_amount = userin.readLine();
						//convert string to int for validation
						useramount = Float.valueOf(user_amount).floatValue();
		
					}
					//caught if amount could not be read	
					catch(IOException ex5)
					{
						System.out.println("Error - Could not read amount to withdraw");
					}
				}
				//caught if user amount entered is invalid type
				catch(NumberFormatException nfe3)
				{
				useramount = -1;
				}

				//if amount invalid ,display message to user
				if(useramount<0)
				{
					System.out.println("Invalid amount - please re-enter");
					try
					{
						Thread.sleep(1500);
					}
					catch(InterruptedException iesleep)
					{
						System.out.println("Error - couldn't activate Sleep");
					}
				}//end of if useramount<0

			}//end of while
			
			//complete message for withdraw request	
			request=request.concat("d" + " " + user_amount);
			break;
		}
		
	}//end of switch(option)
	
	//send request to server
	outStream.println(request);
	//flush output stream
	outStream.flush();
	
 }//end of build_and_send

 public void receive_and_process()
 {
	//initialise local variable
	StringTokenizer reply_st= null;
	String reply = " ";

	
	//get reply from server and display it
	try
	{
	
		//wait for message to be received 
		reply = inStream.readLine();
	}
	//caught if message could not be read
	catch(IOException ioinStream)
	{
		System.out.println("Error - due to Server not responding");
		System.out.println("Exiting.......");
		System.exit(0);
	}
	
	try
	{
		//break up message to get first char
		reply_st = new StringTokenizer(reply);
	
	}
	catch(NullPointerException ne1)
	{
		System.out.println("Server not responding");
		System.out.println("Exiting....");
		System.exit(0);
	}
	
	String reply_s = reply_st.nextToken();    	
	char reply_type = reply_s.charAt(0);
	
	//process reply
	switch(reply_type)
	{
		//displays balance
		case 'b':
		{	
			//gets balance amount from message
			String replyamount = reply_st.nextToken();
			//converts string amount to float amount
			float reply_amount = Float.valueOf(replyamount).floatValue();
			//defines local region
			Locale local = new Locale("en","US");
			//displays balance in form of local currency
			System.out.println("\nYour current balance is " + NumberFormat.getCurrencyInstance().format(reply_amount)); 
			break;
		}
						
		//acknowledges successful deposit
		case 'd':
		{
			System.out.println("\nDeposit transaction successful");
			break;
		}
					
		//acknowledges successful withdrawal
		case 'w':
		{
		System.out.println("\nWithdrawal transaction Successful");
		System.out.println("Please take your cash");
		break;
		}
			
		//informs user pin no. didn't match for given account no.
		case 'i':
		{
		System.out.println("\nIncorrect PIN code entered!!");
		option = 4;
		break;
		}
						
		//informs user withdrawal transaction failed due to lack of funds
		case 'o':
		{
		System.out.println("\nWithdrawal transaction not sucessful - due to lack of funds!");
		break;
		}
				
	}//end of switch

	try
	{
		//waits for 1500ms
		Thread.sleep(1500);
	}
	catch(InterruptedException iesleep)
	{
		System.out.println("Error - couldn't activate Sleep");
	}

 }//end of receive_and_process

 public static void main(String[] args)
 {
	//creates instance of cashclient
 	cashclient user_interface = new cashclient();
 	
	//loop forever
	while(true)
 	{
		//calls object to read in account no. and pin no. of account user wants to query
 		user_interface.input_user_data();

		option = 0;

		//while option doesn't equal return card,loop
 		while(option!=4)
  		{
			//displays main menu
 			user_interface.menu();

			if(option!=4)
			{	
				//builds message and sends
		 		user_interface.build_and_send();
		
				//displays transaction status message(if it was successful or not)
 				user_interface.receive_and_process();
			}
			else
			{
			System.out.println("\nPlease Take your Card");
			}

			try
			{
				//waits 1500ms
				Thread.sleep(1500);
			}
			catch(InterruptedException ie)
			{
				System.out.println("Error with sleep ");
			}

		}//end of while(option!=4)

	 }//end of while(true)
 }//end of main
}//end of class cashclient