Computer/IT expert only
week7/Assignment7.java
week7/Assignment7.java
/*-------------------------------------------------------------------------
// AUTHOR: CSE110 Instructor
// FILENAME: Assignnment7.java
// SPECIFICATION: This program will read a series of customers' information
// from a file specified by a user. A user will also specify the size
// (the number of rows and columns for a movie theatre. Then the program
// will try to assign each customer to a seat.
// FOR: CSE 110- days and time of your class
// TIME SPENT: how long it took you to complete the assignment
//----------------------------------------------------------------------*/
//*** This program will read some information from a file and ***//
//** some information from a keyboard. ***//
import
java
.
io
.
*
;
public
class
Assignment7
{
public
static
void
main
(
String
[]
args
)
throws
IOException
{
MovieSeating
theatreSeating
;
Customer
tempCustomer
;
int
row
,
col
,
rowNum
,
columnNum
;
String
line
,
fileName
;
// create InputStreamReader and BufferedReader object
// to read input from a KEYBOARD.
InputStreamReader
isr
=
new
InputStreamReader
(
System
.
in
);
BufferedReader
stdin
=
new
BufferedReader
(
isr
);
// Ask a user to enter a number of rows for a movie theatre seating from a KEYBOARD.
System
.
out
.
println
(
"Please enter a number of rows for a movie theatre seating."
);
rowNum
=
Integer
.
parseInt
(
stdin
.
readLine
());
// Ask a user to enter a number of columns for a movie theatre seating from a KEYBOARD.
System
.
out
.
println
(
"Please enter a number of columns for a movie theatre seating."
);
columnNum
=
Integer
.
parseInt
(
stdin
.
readLine
());
// instantiate a MovieSeating object
theatreSeating
=
new
MovieSeating
(
rowNum
,
columnNum
);
// get a file name read from a KEYBOARD.
System
.
out
.
println
(
"Please enter a file name"
);
fileName
=
stdin
.
readLine
();
// create FileReader and BufferedReader object to
// read from a file.
FileReader
fr
=
new
FileReader
(
fileName
);
BufferedReader
inFile
=
new
BufferedReader
(
fr
);
/*** reading a customer's information from a FILE ***/
line
=
inFile
.
readLine
();
/*** we will read line by line until we read the end of a given file ***/
while
(
line
!=
null
)
{
System
.
out
.
println
(
"\nA customer information is read from a file."
);
// printing information read from a file.
System
.
out
.
println
(
line
);
// creating a customer object using information from a file
tempCustomer
=
new
Customer
(
line
);
// Ask a user to decide where to seat a customer by asking for row and column of a seat
System
.
out
.
println
(
"Please enter a row number where the customer wants to sit."
);
row
=
Integer
.
parseInt
(
stdin
.
readLine
());
System
.
out
.
println
(
"Please enter a column number where the customer wants to set."
);
col
=
Integer
.
parseInt
(
stdin
.
readLine
());
// Checking if the row number and column number are valid (exist in the theatre that we created.)
if
(
theatreSeating
.
checkBoundaries
(
row
,
col
)
==
false
)
{
System
.
out
.
println
(
"\nrow or column number is not valid."
);
System
.
out
.
println
(
"A customer "
+
tempCustomer
.
getFirstName
()
+
" "
+
tempCustomer
.
getLastName
()
+
" is not assigned a seat."
);
}
else
{
// Assigning a seat for a customer
if
(
theatreSeating
.
assignCustomerAt
(
row
,
col
,
tempCustomer
)
==
true
)
{
System
.
out
.
println
(
"\nThe seat at row "
+
row
+
" and column "
+
col
+
" is assigned to the customer "
+
tempCustomer
.
toString
());
System
.
out
.
println
(
theatreSeating
);
}
else
{
System
.
out
.
println
(
"\nThe seat is taken."
);
}
}
// Read next line in a FILE
line
=
inFile
.
readLine
();
}
// Closing the file
inFile
.
close
();
}
}
week7/Assignment7.pdf
Assignment #7
CSE110 - Arizona State University
Topics
• 2-Dimensional Arrays
• Classes
• Searching
• Reading from a file
Coding Guidelines:
• Give identifiers semantic meaning and make them easy to read (examples numStudents, grossPay, etc).
• Keep identifiers to a reasonably short length.
• User upper case for constants. Use title case (first letter is upper case) for classes. Use lower case with uppercase word separators for all other identifiers (variables, methods, objects).
• Use tabs or spaces to indent code within blocks (code surrounded by braces). This includes classes, methods, and code associated with ifs, switches and loops. Be consistent with the number of spaces or tabs that you use to indent.
• Use white space to make your program more readable.
Part #1: Written Exercises (0 pts)
None.
Part #2 - Programming (20 pts)
Write a program that reads customers’ information from a file, and creates a movie theatre seating with a number of rows and columns specified by a user. Then it will attempt to assign each customer to a seat in a movie theatre.
You will be creating a class called MovieSeating. This class should be defined in a file named MovieSeating.java. The class MovieSeating will contain a 2 dimensional array called seating of Customer objects as its in- stance variable.
We will be using the following files. These files are complete. Download the following files (available on Blackboard) and use them for this assignment (do not change the content of the following files).
• Assignment7.java
• Customer.java
• CustomerData.java
1
The last file is an input file (text file) that will be read from the Assignment7 class. Save all of the files in the same folder.
The class MovieSeating must include the following constructor and methods. (If your class does not contain any of the following methods, points will be deducted.)
• public MovieSeating(int rowNum, int columnNum) - It instantiates a two dimensional array of the size rowNum by columnNum specified by the parameters. Then it initializes each customer element of this array using the constructor of the class Customer without any parameter. So each customer will have default values for its instance variables.
• private Customer getCustomerAt(int row, int col) - It returns a customer at the indexes row and col (specified by the parameters of this method) of the array seating.
• public boolean assignCustomerAt(int row, int col, Customer tempCustomer) - The method attempts to assign tempCustomer to the seat at row and col (specified by the parameters of this method). If the seat has a default customer, i.e., a customer with the last name "???" and the first name "???", then we can assign the new customer tempCustomer to that seat and the method returns true. Otherwise, this seat is considered to be taken by someone else, the method does not assign the customer and returns false.
• public boolean checkBoundaries(int row, int col) - The method checks if the parameters row and col are valid. If at least one of the parameters row or col is less than 0 or larger than the last index of the array (note that the size of rows and columns can be different), then it returns false. Otherwise it returns true.
• public String toString() - Returns a String containing information of the seating. It should show the list of customers assigned to the seating using the toString method of the class Customer (it shows initials of each customer) and the following format:
The current seating
--------------------
C.B. ?.?. E.P.
?.?. ?.?. G.B.
B.C. H.C. ?.?.
Please see the sample output listed below.
Helpful Hints
• Work on it in steps - write one method, test it with a test driver and make sure it works before going on to the next method.
• Always make sure your code compiles before you add another method.
• Your methods should be able to be called in any order.
Sample Output
Make sure that your program works at least with this scenario (the inputs entered by a user are shown in bold).
Please enter a number of rows for a movie theatre seating 3 Please enter a number of columns for a movie theatre seating. 3 Please enter a file name
2
customerData.txt
A customer information is read from a file. George Bush/111111111/3/4 Please enter a row number where the customer wants to sit. 1 Please enter a column number where the customer wants to sit. 2
The seat at row 1 and column 2 is assigned to the customer G.B. The current seating ——————– ?.?. ?.?. ?.?. ?.?. ?.?. G.B. ?.?. ?.?. ?.?.
A customer information is read from a file. Bill Clinton/222222222/6/5 Please enter a row number where the customer wants to sit. 2 Please enter a column number where the customer wants to sit. 0
The seat at row 2 and column 0 is assigned to the customer B.C. The current seating ——————– ?.?. ?.?. ?.?. ?.?. ?.?. G.B. B.C. ?.?. ?.?.
A customer information is read from a file. Hilary Clinton/444444444/5/3 Please enter a row number where the customer wants to sit. 2 Please enter a column number where the customer wants to sit. 1
The seat at row 2 and column 1 is assigned to the customer H.C. The current seating ——————– ?.?. ?.?. ?.?. ?.?. ?.?. G.B. B.C. H.C. ?.?.
A customer information is read from a file. Charlie Brown/333333333/4/3 Please enter a row number where the customer wants to sit. 0 Please enter a column number where the customer wants to sit. 0
The seat at row 0 and column 0 is assigned to the customer C.B. The current seating ——————–
3
C.B. ?.?. ?.?. ?.?. ?.?. G.B. B.C. H.C. ?.?.
A customer information is read from a file. David Beckham/555666777/4/5 Please enter a row number where the customer wants to sit. 5 Please enter a column number where the customer wants to sit. 1 Row or column number is not valid. A customer David Beckham is not assigned a seat.
A customer information is read from a file. David Johnson/666888999/16/5 Please enter a row number where the customer wants to sit. 2 Please enter a column number where the customer wants to sit. 0
The seat is taken.
A customer information is read from a file. Snow White/777777777/43/23 Please enter a row number where the customer wants to sit. -1 Please enter a column number where the customer wants to sit. 0
Row or column number is not valid. A customer Snow White is not assigned a seat.
A customer information is read from a file. Elvis Presley/888888888/2/4 Please enter a row number where the customer wants to sit. 0 Please enter a column number where the customer wants to sit. 2
The seat at row 0 and column 2 is assigned to the customer E.P. The current seating ——————– C.B. ?.?. E.P. ?.?. ?.?. G.B. B.C. H.C. ?.?.
Submission
• Go to the course web site (my.asu.edu), and then click on the on-line Submission tab.
• Submit your Assignment7.java, MovieSeating.java, Customer.java, and customerData.txt files on-line. Make sure to choose Hw7 from drop-down box.
Important Note: You may resubmit as many times as you like until the deadline, but we will only mark your last submission.
4
NO LATE ASSIGNMENTS WILL BE ACCEPTED.
5
week7/Customer.java
week7/Customer.java
/*-------------------------------------------------------------------------
// AUTHOR: CSE110 instructor
// FILENAME: Customer.java
// SPECIFICATION: The class Customer describes information on a customer
// and has a first name (a String), last name (String), ID number (integer),
// number of matinee tickets (integer), number of normal tickets (integer), and total cost (double).
// YOUR Lab Letter and Name of the TA for your Closed lab
// FOR: CSE 110- on-line section A
// TIME SPENT: how long it took you to complete the assignment
//----------------------------------------------------------------------*/
import
java
.
util
.
StringTokenizer
;
import
java
.
text
.
NumberFormat
;
public
class
Customer
{
private
String
lastName
;
private
String
firstName
;
private
int
customerID
;
private
int
matineeTickets
;
private
int
normalTickets
;
private
double
totalCost
;
// This constructor sets the first name and last name to "???", customer ID,
// the number of matinee tickets, and the number of normal tickets to 0,
// and the total cost to 0.0.
public
Customer
()
{
lastName
=
"???"
;
firstName
=
"???"
;
customerID
=
0
;
matineeTickets
=
0
;
normalTickets
=
0
;
totalCost
=
0.0
;
}
// This constructor constructs a Customer object given the last name,
// first name, customer id, the number of matinee tickets, the number
// of normal tickets.
public
Customer
(
String
customerInfo
)
{
String
[]
tokenizer
=
customerInfo
.
split
(
" "
);
firstName
=
tokenizer
[
0
].
trim
();
lastName
=
tokenizer
[
1
].
trim
();
customerID
=
Integer
.
parseInt
(
tokenizer
[
2
].
trim
());
matineeTickets
=
Integer
.
parseInt
(
tokenizer
[
3
].
trim
());
normalTickets
=
Integer
.
parseInt
(
tokenizer
[
4
].
trim
());
totalCost
=
0.0
;
computeTotalCost
();
}
// This constructor cConstructs a Customer object using the string containing customer's info.
// It uses the StringTokenizer to extract first name, last name, id, the number of matinee tickets,
// and the number of normal tickets.
public
Customer
(
String
lName
,
String
fName
,
int
id
,
int
matineeNum
,
int
normalNum
)
{
lastName
=
lName
;
firstName
=
fName
;
customerID
=
id
;
matineeTickets
=
matineeNum
;
normalTickets
=
normalNum
;
totalCost
=
0.0
;
computeTotalCost
();
}
// This method sets the last name.
public
void
setLastName
(
String
lName
)
{
lastName
=
lName
;
}
// This method sets the first name.
public
void
setFirstName
(
String
fName
)
{
firstName
=
fName
;
}
// This method sets the customer ID.
public
void
setCustomerID
(
int
id
)
{
customerID
=
id
;
}
// This method set the value of number of matineeTickets to have its parameter value.
// And it re-computes total cost.
public
void
setMatineeTickets
(
int
matinee
)
{
matineeTickets
=
matinee
;
computeTotalCost
();
}
// This method set the value of number of notmalTickets to have its parameter value.
// And it re-computes total cost.
public
void
setNormalTickets
(
int
normal
)
{
normalTickets
=
normal
;
computeTotalCost
();
}
// This method returns the last name.
public
String
getLastName
()
{
return
lastName
;
}
// This method returns the first name.
public
String
getFirstName
()
{
return
firstName
;
}
// This method returns the customer ID.
public
int
getCustomerID
()
{
return
customerID
;
}
// This method returns the number of matinee tickets.
public
int
getMatineeTickets
()
{
return
matineeTickets
;
}
// This method returns the number of normal tickets.
public
int
getNormalTickets
()
{
return
normalTickets
;
}
// This method returns the total cost.
public
double
getTotalCost
()
{
return
totalCost
;
}
// This method compute the total cost based on the number of matinee tickets and normal tickets.
private
void
computeTotalCost
()
{
totalCost
=
(
5.00
)
*
matineeTickets
+
(
7.50
)
*
normalTickets
;
}
// This method checks if a customer object passed as a parameter and itself (customer object)
// are same using their last names, first names, and customerIDs.
public
boolean
equals
(
Customer
other
)
{
if
(
lastName
.
equals
(
other
.
lastName
)
&&
firstName
.
equals
(
other
.
firstName
)
&&
(
customerID
==
other
.
customerID
)
)
return
true
;
else
return
false
;
}
// This method compares a customer object passed as a parameter to itself (customer object)
// are same using their total costs.
public
Customer
hasMore
(
Customer
other
)
{
if
(
totalCost
>=
other
.
totalCost
)
return
this
;
else
return
other
;
}
// This method returns a string containing a customer's initials
// (first characters of firstName and lastName.)
public
String
toString
()
{
String
result
=
firstName
.
charAt
(
0
)
+
"."
+
lastName
.
charAt
(
0
)
+
"."
;
return
result
;
}
}
// end of the class Customer
week7/customerData.txt
Bob Sponge 111111111 3 4 Pika Chu 222222222 6 5 Charlie Brown 333333333 4 3 Donald Trump 555666777 4 5 Thomas Jefferson 666888999 16 5 Snow White 777777777 43 23 George Washington 888888888 2 4