19 Jul JAVA
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
Regis University CC&IS
CS310 Data Structures
Programming Assignment 2: Arrays and ArrayLists
Problem Scenario
The real estate office was very impressed with your work from last week. The IT director now needs you to
modify the program so it will store data about multiple realtors and properties.
Program Requirements
Last week, you created your Realtor and Property classes. This week you will be implementing arrays and
ArrayLists containing objects from those classes. The two data structures you will implement are:
An ordered ArrayList, in ascending order by realtor license number, containing Realtor objects.
An unordered array, containing Property objects.
The program must follow the CS310 Coding Standards from Content section 1.9.
Input Data File
This csv file input file for this program will be called “assn2input.txt”, and will be modified slightly from last
week. The file still will contain lines of data about realtors and properties. But the second data item on each
line that describes an action to take, will now indicate whether to ADD or DEL (delete) the specified realtor
or property.
If the action is “ADD”, then the remaining data fields will be the same as in assignment 1.
But if the action is “DEL”, the data line will contain only one more data field:
a license number for realtors, or an MLS number for properties.
The format will be (any of the following data lines, in any order):
REALTOR,ADD,licenseNum,firstName,lastName,phoneNumber,commissionPercentage
REALTOR,DEL,licenseNum
PROPERTY,ADD,mlsNum,licenseNum,streetAddr,city,state,zipCode,numBedrooms,
numBathRooms,sold(Y/N),askingPrice
PROPERTY,DEL,mslNum
Note that a REALTOR, ADD line must appear before any lines to add Property objects for that Realtor,
because a Property can only be added for existing Realtors.
See the sample input file provided in Appendix A below, to see how the data lines will look. You will need
to create your own test input data files to test all aspects of your program.
When you created your project last week, NetBeans created the initial source file, which contained the main
method (CS310<lastname>.java). We will refer to this as the “main class”. The code to where the program
starts execution will be in the main method of the main class file, CS310<lastname>.java file.
Domain Classes
This program will no longer use the setRealtorAttributes and setPropertyAttributes methods that you
used to test your setters in the previous assignment. Instead, you will convert the methods to be constructors
in the Realtor and Property classes.
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
Each of these constructors will have an array of String values as a parameter (containing the data line read
from the input file), and will use the values in the array to initialize each attribute value in the new object.
Note that you will also need to modify the code in the main class that instantiates your Realtor and Property
objects to use this new constructor, instead of using the default empty constructor, and eliminate the calls to
the set attributes methods.
After creating the new constructors, you can delete the setRealtorAttributes and setPropertyAttributes
methods from the main class. You can also delete the displayRealtorAttributes and
displayPropertyAttributes that were used to test the getters last week.
Implementation Classes
You will add separate implementation classes to implement the array and ArrayList. Your main class file
will not know what data structure is being used. In fact, this main class file will be used with future
assignments, and will process the same (or a similar) input file format each time.
The implementation classes will also be modified each week, to reflect whichever data structure is being
used that week. This week you will create the following classes for implementation of the unordered array
and ordered ArrayList:
RealtorLogImpl and PropertyLogImpl
Note that appending “Impl” to the end of an implementation class name is a standard.
We have also added “Log” for now, to aid in your understanding of what is being implemented
(i.e. a log of realtors and a log of properties).
The RealtorLogImpl class will be used to create and manage an ArrayList that holds an ordered list of
Realtor objects (ordered by ascending realtor license number). The class will have one private attribute, the
ArrayList of Realtor objects.
The class will minimally contain the following methods:
public ArrayList<Realtor> getRealtorLog // return the ArrayList attribute
public void add(Realtor obj) // add realtor object to ordered list
public boolean remove (String license)// remove Realtor with specific license from list
// and return true if successful
// test if Realtor with specific license exists in log
public boolean isLicenseUnique(String license)
Since the ArrayList of Realtors is an ordered list, when adding an object to the log, you will need to
search for the correct index location to add it to (i.e. the index after the index containing the largest
license that is smaller than the license being inserted). HINT: Use String method compareTo().
The PropertyLogImpl class will be used to create and manage an unordered array that holds Property
objects.
The maximum number of Property objects that can be stored in the array will be 1000 (which should be
defined as a constant within the class).
The class will have two private attributes, an array of Property objects and a count of how many Property
objects are stored in the array.
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
The class will minimally contain the following methods:
public Property[] getPropertyArray // return the array attribute
public int getNumProperties // return the count attribute
// add Property to log if there is room, and return true if successful
public boolean add(Property obj)
// delete all Property objects from log for realtor with license
// & return true if any Property objects were deleted
public boolean remove(String license)
// overloaded – remove Property with mlsNum from log
public boolean remove(int mlsNum)
public boolean isMlsUnique(int mlsNum) // test if Property with mlsNum exists in log
// return count of Property objects in log with specific realtor license
public int numberOfProperties(String license)
public double totalPropertyValue() // return sum of all asking prices
// overloaded – return sum of asking prices for specific realtor license
public double totalPropertyValue(String license)
Since the array of Property objects is an unordered list, when adding a Property object to the log,
you can just add to the end of the log. When deleting a Property object from the log, you can just
replace the object being deleted with the last object in the log and decrement the count.
The program will also have a PrintImpl class, which will contain a method to generate a report (more
below).
You may also add any other additional methods that you think you need to your implementations.
The main class
All implementations will be instantiated as objects in the main class. For example:
static RealtorLogImpl realtorLogImpl = new RealtorLogImpl();
In this example, the realtorLogImpl object has a single attribute, which is the ArrayList of realtors.
In addition to the implementation instantiations, the main class will contain the following static methods:
Method to read the data file and process each data line
o Try to open the input data file and throw/handle an exception if the file cannot be opened.
o If the file opens, for each line in the data file:
Read the data line.
Use split() to parse the line to extract the individual data fields into an array.
Depending on the String values in the array at:
index 0 (REALTOR or PROPERTY) index 1 (ADD or DEL)
Call a method to process the addition or process the deletion, passing in the parsed String
array as a parameter.
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
Method to process a Realtor addition to the list
o Create a new Realtor object using the new constructor and String array parameter values passed into this method.
o Validate the realtor license number and phone number using the methods you wrote for Assn 1.
If either is not valid, display an error message that includes the realtor license number.
If the phone number is invalid, include the bad phone number too.
NOTE: Invalid data will not prevent the Realtor from being added to the ArrayList.
o Check to see if Realtor license number is unique using the Realtor isLicenseUnique() method.
If the Realtor license number is unique,
Call Realtor add to add the Realtor object to the Realtor ArrayList data structure and
display a message that includes the realtor license number, stating that the Realtor
has been added to the log.
Otherwise,
Realtors with non-unique Realtor license numbers will not be added to the Realtor
ArrayList. So display an error message that includes the realtor license number,
stating the Realtor will not be added to the log.
NOTE: You cannot use == to compare Strings. You must use a String class method.
Method to process a Property addition to the list
o Create a new Property object using the new constructor and the String array parameter values passed into this method.
o Validate the MLS number, state, and zip code using the methods you wrote for Assn 1.
If any of them are invalid, display an error message that includes the MLS number and any additional bad data.
NOTE: Invalid data will not prevent the Property from being added to the array.
o Check to see if the Realtor license number is NOT unique using the Realtor isLicenseUnique() method.
When NOT unique, the Realtor is in the Realtor list, so a Property can be added for that Realtor.
o Check if the Property MLS number is unique using the Property isMlsUnique () method.
When unique, the MLS number is not already in the Property list and the Property can be added.
o If the Realtor license number is not unique AND the Property MLS number is unique,
Call Property add to add the Property object to the Property array data structure and
display a message that includes the realtor license number and MLS number, stating
that the Property has been added.
Otherwise,
Property objects with unique realtor license numbers or non-unique property MLS
numbers will not be added to the Property array.
So display an error message stating that the Property will not be added to the log,
and explain why (bad Realtor license or bad MLS number).
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
Method to process a Realtor deletion
o Check if the Realtor license number is NOT unique using the Realtor isLicenseUnique() method.
If the Realtor is in the Realtor list, it can be deleted.
o If the Realtor license number is in the list:
Call Realtor remove to find the Realtor object with the correct Realtor license number and remove that Realtor object from the Realtor ArrayList data structure.
o Display a message confirming which Realtor license number was deleted, and that all the realtor’s properties will also be deleted.
Call Property remove to delete all Property objects associated with the Realtor license number that has been deleted.
o Otherwise issue an error message that the Realtor license number was not found in the log.
Method to process a Property deletion
o Check if the Property MLS number is NOT unique, using the Property isMlsUnique() method.
If the Property is in the Property list, it can be deleted.
o If the Property MLS number is in the list:
Call Property remove to:
o Find the Property object with the correct Property MLS number
o Remove that Property object from the Property array data structure.
Display a message confirming which Property MLS number was deleted.
o Otherwise issue an error message that the Property MLS number was not in the log.
See the sample display output in the Appendix A below, to see what will be output while reading and the
data file and calling methods to process each line.
Method to create a report (see requirements below)
The main class will also (obviously) still contain a main method. Remove all the testing code (created for
Assn 1) from the main method, and instead add code to:
Call the method to read and process the data file.
Call the method to create the report.
Output Report
After all input has been read and processed, the real estate office would like you to create a report. You will
use a print implementation class, PrintImpl, to do this.
The PrintImpl class will contain a single method that will create the report. The method will have both
implementation objects as its input parameters, and will use those objects with getters to populate the local
data fields, within the PrintImpl class.
The report will be written to an output file named “assn2report.txt”, which will be located in the output
folder of the project. The PrintImpl class should have a constant to hold this filename, as follows: final String OUTPUT_FILENAME = “output/assn2report.txt”;
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
The PrintImpl class will have three data fields, one for an ArrayList of Realtor objects, one for the array of
Property objects, and one for a count of Property objects in the array. Each of these data fields should be
populated using the getters from the other implementation methods.
To create the report:
For each Realtor in the Realtor ArrayList, the code will examine each Property in the Property array and
find Property objects with realtor licenses that match the realtor license of the Realtor object.
HINT: Use nested loops.
So for each Realtor, the report will include the following:
RealtorLicense RealtorLastname, RealtorFirstname
MLSnumber streetAddress bedrooms/bathrooms askingPrice SOLD*
city, state, zipCode
:
:
MLSnumber streetAddress bedrooms/bathrooms askingPrice SOLD*
city, state, zipCode
Number of Property Listings for Realtor: totalNum
Total sales value of Property Listings for Realtor: $ totalValue
*only display SOLD if true
At the end of the report, the program will also display the total number of Property Listings for all Realtors,
and the total sales value of all Property Listings for all Realtors. And after creating the report, the program
should tell the user which file the report was stored in.
See the sample output in the Appendix A below, to see how the formatting will look.
Additional Requirements
Create Javadoc headers, and generate Javadoc files for each of your new implementation classes and for all new static methods in the main class. You are responsible for completing the comment
headers created.
Your input data file will still be read from the input folder in your project.
Place all test data files that you create to test your program in the input folder of your project, and
name them as follows: assn2input1.txt
assn2input2.txt
(i.e. number each data file after the filename of assn2input.txt)
Together, all of your test data files should demonstrate that you have tested every possible execution
path within your code, including erroneous data which causes errors or exceptions.
For example, make sure you have test files with Realtor license numbers that are not in the correct
order, so you can validate that your program is inserting them in order.
WARNING: You will not be given ANY credit for the input file that is included as an example with
these requirements. The test files should be of your own creation.
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
You will need to add another folder to your project for this assignment, called “output”. The report your program creates will be written to the output folder.
Add screen shots of clean compile of your classes to the documentation folder.
o Remember, if you have compile errors, a red error symbol is placed on the file and folder name tabs. Be sure to clear all compile errors before capturing the screen shot.
WARNING: Submittals without the clean compile screenshots will not be accepted.
(This means that programs that do not compile will not be accepted)
Program Submission
This programming assignment is due by midnight of the date listed on the Course Assignments by Week
page of the Content.
Export your project from NetBeans (same as Assn 1): o Highlight the project name. o Click on File from the top menu, and select Export Project. o Select To ZIP o Name your export file in the following format:
CS310<lastname>Assn<x>.zip
For example: CS310SmithAssn2.zip
NOTE: Save this zip file to some other directory, not your project directory.
Submit your .zip file to the Prog Assn 2 Submission Folder (located under Assignments tab in online course).
Only NetBeans export files will be accepted.
Do not use any other kind of archive or zip utility.
Grading
This program will be graded using the rubric that is linked under Student Resources page.
WARNING:
Programs submitted more than 5 days past the due date will not be accepted,
and will receive a grade of 0.
See Appendices on next pages for sample inputs and outputs, and a sample code outline.
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
Appendix A – Sample Input and Output
Sample Input File
REALTOR,ADD,AA1111111,Anna,Astrid,111-111-1111,0.011
PROPERTY,ADD,1111111,AA1111111,111 Main St,Denver,CO,80221,2,1,Y,111111
PROPERTY,ADD,11111222,AA1111111,112 Main St,Denver,CO,80221,1,1,N,111111
REALTOR,ADD,BB2222222,Bob,Benson,222-222-22222,0.012
PROPERTY,ADD,2222211,BB2222222,222 Flower Ln,Somewhere,WX,802211,3,1.5,N,222222
PROPERTY,ADD,2222222,BB2222222,1234 First St,Elsewhere,CO,80221,4,2,Y,222222
PROPERTY,DEL,2222221
REALTOR,ADD,CC333333X,Carl,Carlson,333-333-3333,0.013
PROPERTY,ADD,3333333, CC333333X,222 Flower Ln,Somewhere,WX,80221,4,3,Y,333333
REALTOR,DEL,CC333333X
Sample Display Output
Reading data from file input/assn2Input.txt
ADDED: Realtor with license AA1111111
ADDED: Property with MLS number 1111111 listed by realtor AA1111111
ERROR: Property with MLS number 11111222 has an invalid MLS number.
ADDED: Property with MLS number 11111222 listed by realtor AA1111111, regardless of data errors.
ERROR: Realtor with license BB2222222 has invalid phone number 222-222-22222
ADDED: Realtor with license BB2222222, regardless of data errors.
ERROR: Property with MLS number 2222211 has invalid state abbreviation WX
ERROR: Property with MLS number 2222211 has invalid zip code 802211
ADDED: Property with MLS number 2222211 listed by realtor BB2222222, regardless of data errors.
ADDED: Property with MLS number 2222222 listed by realtor BB2222222
DEL ERROR: Property with MLS number 2222221 is not in the property log, so it cannot be deleted.
ERROR: Realtor with license CC333333X has invalid license number.
ADDED: Realtor with license CC333333X, regardless of data errors.
ERROR: Property with MLS number 3333333 has invalid state abbreviation WX
ADD ERROR: Property with MLS number 3333333 has Realtor with license CC333333X,
but there is no such Realtor license in the realtor log.
So property will NOT be added to property log.
DELETED: Realtor with license CC333333X has been removed from the realtor log
All realtor’s properties will also be removed from the property log
Done reading file. 10 lines read
Creating report…
Report is located in file: output/assn2report.txt
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
Sample Report Output
AA1111111 Astrid, Anna
1111111 111 Main St 2/1.0 $ 111111.00 SOLD
Denver, CO 80221
11111222 112 Main St 1/1.0 $ 111111.00
Denver, CO 80221
Number of Property Listings for Realtor: 2
Total sales value of Property Listings for Realtor: $ 222222.00
BB2222222 Benson, Bob
2222211 222 Flower Ln 3/1.5 $ 222222.00
Somewhere, WX 802211
2222222 1234 First St 4/2.0 $ 222222.00 SOLD
Elsewhere, CO 80221
Number of Property Listings for Realtor: 2
Total sales value of Property Listings for Realtor: $ 444444.00
Total Number of Property Listings for ALL Realtors = 4
Total sales value of Property Listings for ALL Realtors = $ 666666.00
©Regis University, All Rights Reserved Unauthorized distribution (including uploading to any non-Regis Internet website) violates copyright law
Appendix B – Partial Sample Code outline
Sample main class
public class CS310Lastname {
static RealtorLogImpl realtorLogImpl = new RealtorLogImpl ();
static PropertyLogImpl propertyLogImpl = new PropertyLogImpl ();
static PrintImpl printImpl = new PrintImpl();
public static void main(String[] args) {
processFile();
createReport();
}
public static void processRealtorAddition (String [] inputLineValues) {
:
}
public static void processPropertyAddition (String []inputLineValues) {
:
}
public static void processRealtorDeletion(String [] inputLineValues) {
:
}
public static void processPropertyDeletion(String [] inputLineValues) {
:
}
private static void processFile() {
// Try to open file and throw exception if file not found
// Loop:
// Read and parse data line
// Call processRealtorAddition, processPropertyAddition, processRealtorDeletion, or processPropertyDeletion
}
public static void createReport() {
// Call method from PrintImpl class to print the report
}
// Any other static methods that you would like to define
Our website has a team of professional writers who can help you write any of your homework. They will write your papers from scratch. We also have a team of editors just to make sure all papers are of HIGH QUALITY & PLAGIARISM FREE. To make an Order you only need to click Ask A Question and we will direct you to our Order Page at WriteDemy. Then fill Our Order Form with all your assignment instructions. Select your deadline and pay for your paper. You will get it few hours before your set deadline.
Fill in all the assignment paper details that are required in the order form with the standard information being the page count, deadline, academic level and type of paper. It is advisable to have this information at hand so that you can quickly fill in the necessary information needed in the form for the essay writer to be immediately assigned to your writing project. Make payment for the custom essay order to enable us to assign a suitable writer to your order. Payments are made through Paypal on a secured billing page. Finally, sit back and relax.
About Writedemy
We are a professional paper writing website. If you have searched a question and bumped into our website just know you are in the right place to get help in your coursework. We offer HIGH QUALITY & PLAGIARISM FREE Papers.
How It Works
To make an Order you only need to click on “Order Now” and we will direct you to our Order Page. Fill Our Order Form with all your assignment instructions. Select your deadline and pay for your paper. You will get it few hours before your set deadline.
Are there Discounts?
All new clients are eligible for 20% off in their first Order. Our payment method is safe and secure.