Ryan Conway
Ryan Conway

Reputation: 125

Creating new objects with another class

Okay so I finally finished my assignment and had been testing it by creating objects using right click "New Account" etc, this has all been working fine and from what I can see the Superclasses and Subclasses are all linked correctly, however my work is tested using a test class called HW2 which when I run this is supposed to create some accounts and print their details to the terminal. However the output is missing loads of stuff compared to what it is supposed to look like, basically I want to know why the test script is not creating the objects correctly. I posted a lot of code but I believe the problem only lies in the constructors.

enter image description here

enter image description here

RUNHW2

/**
 * Class to test CG0048 Homework 2
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class RunHW2
{    
    private String name, id;
    private AccountList accounts;
    private PersonalAccount pa1, pa2;
    private TradeAccount ta1, ta2;

    /**
     * Constructor for objects of class HW2Test
     * 
     * @param name the student's name
     * @param id the student's id
     */
    public RunHW2(String name, String id)
    {
        this.name = name;
        this.id = id;

        accounts = new AccountList();        
        runTests();
    }

    /**
     * Run the various tests
     */

    public void runTests()
    {
        // print header
        System.out.println("Name: " + name + "\tID: " + id + "\n");

        testAddPersonalAccountNoPoints();
        testAddPersonalAccountWithPoints();
        testAddTradeAccountNoPoints();
        testAddTradeAccountWithPoints();      

        System.out.println("Student should now print out the contents of the terminal window."); 

    }


    /**
     * Create 2 Personal Accounts 
     */

    public void testAddPersonalAccountNoPoints()
    {
        try
        {
            // personal account with no initial points
            pa1 = new PersonalAccount ("Ann", "Archer","1000", 
                                          "1 Amble Way", "Amble", "AA1 1AA",
                                          "1111111111111111", 'D');
            accounts.addAccount(pa1);
            System.out.println(pa1);                
        }
        catch (Exception e)
        {
            System.out.println("An exception was raised in " 
                   + "testAddPersonalAccountNoPoints.");
        }
    }

    public void testAddPersonalAccountWithPoints()
    {
        try
        {
            // personal account with additional points
            pa2 = new PersonalAccount ("Barbara", "Bach","1001",
                                          "2 Blyth Boulevard", "Blyth", "BB2 2BB",
                                          "2222222222222222", 'M', 20);
            accounts.addAccount(pa2);
            System.out.println(pa2);            
        }
        catch (Exception e)
        {
            System.out.println("An exception was raised in testAddPersonalAccountWithPoints.");
        }
    }

    public void testAddTradeAccountNoPoints()
    {
        try
        {
            // trade account with no initial points
            ta1 = new TradeAccount ("Colin", "Cowdry","1002", 
                                "3 Consett Crescent", "Consett", "CC3 3CC",
                                "Cowdry Construction",
                                "33 Chopwell Close", "Chopwell", "CD3 3CD",
                                "GB333333");

            accounts.addAccount(ta1);                    
            System.out.println(ta1);              
        }
        catch (Exception e)
        {
            System.out.println("An exception was raised in testAddTradeAccountNoPoints.");
        }
    }

    public void testAddTradeAccountWithPoints()
    {
        try
        {
            // trade account with initial points
            ta2 = new TradeAccount ("Dave", "Dee","1004",
                                "4 Durham Dwellings", "Durham", "DD4 4DD",
                                "Dee Design", 
                                "44 Darlington Drive", "Darlington", "DE4 4DE",
                                "GB444444", 40);
            accounts.addAccount(ta2);                   
            System.out.println(ta2);            
        }
        catch (Exception e)
        {
            System.out.println("An exception was raised in testAddTradeAccounts.");
        }
    }
} // end class

ACCOUNT

public class Account 
{
    private String accountNumber;
    private Address address;
    private Name name;
    private int pointsHeld;

    /**
     * Constructor for objects of class Account.
     * The number of pointsHeld should be set to zero.
     * 
     * @param firstName The Account Holder's first name 
     * @param lastName The Account Holder's last name
     * @param accNumber The Account Holder's account number
     * @param street the account holder's street
     * @param town the account holder's town
     * @param postcode the account holder's postcode
     */
    public  Account (String fName, String lName, String accNumber,
    String street, String town, String postcode)
    {
        name = new Name(fName, lName);
        accountNumber = accNumber;
        pointsHeld = 0;       
        address = new Address(street, town, postcode);
    }

    /**
     * Constructor for objects of class Account.
     * The number of pointsHeld should should be set to
     * the supplied value.
     * 
     * @param fName The Account Holder's first name 
     * @param lName The Account Holder's last name
     * @param acctNumber The account number
     * @param thePoints the pointsHeld awarded when account is initialised
     * @param street the account holder's street
     * @param town the account holder's town
     * @param postcode the account holder's postcode
     */
    public Account(String fName, String lName, String acctNumber, int points,
    String street, String town, String postcode)
    {
        name = new Name(fName, lName);
        accountNumber = acctNumber;
        pointsHeld = points;     
        address = new Address(street, town, postcode);
    }

    // accessors

    /**
     * Increase the number of points held by a given number
     * and output a message to the console window giving 
     * the revised number of points held.
     * 
     * @param number of points to add to total
     */
    public void addPoints(int points)
    {
        pointsHeld = pointsHeld + points;
        System.out.println("Points now held: " + pointsHeld);        
    }

    public boolean equals (Object o)
    {
        if ( o == null ) 
            return false;

        if ( !this.getClass().equals(o.getClass()) )
            return false;

        else 

            return true;

    }

    /**
     * Get the Account Holder's account Number
     * 
     * @return the Account Holder's account number
     */
    public String getAccountNumber()
    {
        return accountNumber;
    }

    /**
     * Return the account holder's address
     * 
     * @return the account holder's address
     */
    public String getAddress()
    {
        return address.toString();
    }

    /**
     * Get the Account Holder's first name
     * 
     * @return the Account Holder's first name
     */
    public String getFirstName()
    {
        return name.getFirst();
    }

    /**
     * Get the Account Holder's last name
     * 
     * @return the Account Holder's last name
     */
    public String getLastName()
    {
        return name.getLast();
    }

    /**
     * Get the number of points held
     * 
     * @return the number of points held
     */
    public int getNoOfPoints()
    {
        return pointsHeld;
    }

    /**
     * Print out the Account Holder's details to the console window
     * 
     */
    public void printAccountDetails()
    {
        System.out.println ("Personal Account:" + accountNumber + " " + name.getFirst() + " " +
        name.getLast());

        System.out.println (address.toString());

        System.out.println ("Points Held:" + pointsHeld);


    }     

    /**
     * Remove pointsHeld by a given number and output a 
     * message to the console window giving the revised number 
     * of points held as long as the number of points would 
     * not fall below zero
     * - otherwise output message to console window instead.
     * 
     * @param number of pointsHeld to remove total.
     * 
     */
    public void removePoints (int points)
    {
        if ((pointsHeld - points) >=0)
        {
            pointsHeld = pointsHeld - points;
            System.out.println("Points now held: " + pointsHeld);        
        }
        else
        {
            System.out.println("Transaction refused: "
                + "Insufficient points available.");
        }
    }

    // mutators     

    /**
     *  Change the account holder's address
     *  
     *  @param street the street
     *  @param town the town
     *  @postcode the postcode
     */
    public void setAddress(String street, String town, String postcode)
    {
        address.setFullAddress(street, town, postcode);
    }

    /**
     * Change the first name
     * 
     * @param fName the new first name
     * 
     */
    public void setFirstName(String fName)
    {
        name.setFirst(fName);
    }

    /**
     * Change the last name
     * 
     * @param lName the new last name
     * 
     */
    public void setLastName(String lName)
    {

        name.setLast(lName);

    }

    public String toString() 
    {

        return name.toString();

    }

} // end class

PERSONALACCOUNT

/**
 * Write a description of class PersonalAccount here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class PersonalAccount extends Account
{
    // instance variables - replace the example below with your own
    private String cardNumber;
    private char cardType;

    /**
     * Constructor for objects of class PersonalAccount
     */

    public PersonalAccount (String firstName, String lastName, String accountNumber, 
    String street, String town, String postcode, String cardNumber, char cardType)
    {

        super(firstName,lastName,accountNumber,street,town,postcode);
        this.cardType = cardType;
        this.cardNumber = cardNumber;

    }

    public PersonalAccount(String firstName, String lastName, String accountNumber, 
    String street, String town, String postcode, String cardNumber, char cardType, int points)
    {
        super(firstName,lastName,accountNumber,street,town,postcode);

        this.cardType = cardType;
        this.cardNumber = cardNumber;
        super.addPoints(points);

    }


    public String getCardNumber() 
    {

        String input = cardNumber;

        StringBuilder result = new StringBuilder();
        for (int i = 0; i < input.length(); i++) {
           if (i % 4 == 0 && i != 0) {
              result.append(" ");
            }

           result.append(input.charAt(i));
        }

        return result.toString();


    }


        public String getCardType() 
        {
            if (cardType == 'D') {
                return "Debit";
            }
            else if (cardType == 'M') {
                return "Mastercard";
            }
            else 
                return "Visa";

        }

        public void print () 
        {

            super.printAccountDetails();
            System.out.println("Card Number:"+getCardNumber() + " Card Type: " + getCardType());

        }

        public String toString() 
        {
            return super.toString();

        }
    }

Upvotes: 0

Views: 304

Answers (1)

mattm
mattm

Reputation: 5949

Your toString methods are not complete. You can see the test suite is basically instantiating the class and printing it. The Account toString (and maybe the PersonalAccount too) needs to return the content in the right window, which includes more than just the name.

Instead of return name.toString();, you want something more like return name.toString() + "\n" + otherField.toString();

Upvotes: 1

Related Questions