Assignment 6
due Thursday, February 28 at 11:59pm on Canvas


Pair Programming Extra Credit Opportunity (1 pt)
  • Both partners fill in, sign, date, and submit the pair programming contract
  • Upload the document(s) along with your source code files to Canvas.
  • Only ONE partner submits the assignment to Canvas. Please make sure both your names are on the files.

Thrice Sold Tales (10 pts)
  • For this assignment, you will improve your Lab 7 and work with interfaces.
  • Make the below updates to the files in your project folder.
  • Then, revise your assignment so that you get the example output as shown below.
  • When your program is complete, upload Media.java, Book.java, and TwiceSoldTales.java to Canvas

Updated Text File:
  • Write over the contents of your current books.txt with the contents below:
The Time in Between
Maria Duenas
9.86
43-453-44
2

Bleak House
Charles Dickens
8.99
35-678-97
4

Rebecca
Daphne Dumaurier
5.50
32-423-82
5

A Room with a View
E.M. Forster
7.50
11-778-89
3

Outlander
Diana Galbadon
19.95
54-665-65
7

Jane Eyre
Charlotte Bronte
7.90
23-456-74
4

The Hunger Games
Suzanne Collins
6.90
42-323-22
10

The Woman in White
Wilkie Collins
10.75
32-567-89
2

A Face like Glass
Frances Hardinge
15.95
44-554-43
1

Lady Audley's Secret
Mary Elizabeth Braddon
5.50
12-121-34
1

Murder on the Orient Express
Agatha Christie
2.99
98-375-83
8

Middlemarch
George Elliot
12.50
12-567-43
4

Our Souls at Night
Kent Haruf
11.99
78-474-89
2

Fangirl
Rainbow Rowell
10.79
24-137-25
6

Ramona Blue
Julie Murphy
9.99
93-283-11
4

The Rosie Project
Graeme Simsion
14.99
82-389-31
5

A Is for Alibi
Sue Grafton
4.55
34-323-21
3

Still Life
Louise Penny
18.99
33-443-22
5

Flight Behavior
Barbara Kingsolver
9.98
56-382-34
4


Implement Comparable for Book.java and the compareTo Method for Book:
  • Update the signature for the Book class to implement Comparable
  • Then add the following method signature to the class
/**
* Compares two Books.
* Returns 0 if the two Books are equal
* If the two books have the same title
* returns compareTo of the authors
* Otherwise, returns compareTo of the titles
*/
   
public int compareTo(Book b) {
    return -1; 
}

Additional Method for Media.java
  • Add an additional method to the Media.java class:

/**
* Updates the number of copies
* @param newCopies the number of
* copies to add to numCopies
*/
public void updateNumCopies(int newCopies) {
    numCopies += newCopies;
}

Catalogue.java Interface
  • Add a new interface to your project.
  • TwiceSoldTales.java will implement the Catalogue interface
/*
 * Catalogue.java
 * @author
 * CIS 36B, Assignment 12
 */

import java.io.IOException;
import java.util.Scanner;

public interface Catalogue {
    /**
     * Reads from a file and populates the catalogue
     * @param input the Scanner used to read in the data
     */
    void populateCatalogue(Scanner input) throws IOException;
   
    /**
     * Searches for Media m in the catalogue
     * @param m the piece of media to locate
     * @return the location of the media in
     * the catalogue
     */
    int binarySearch(Media m);
   
    /**
     * Sorts the catalogue into
     * ascending order
     */
    void bubbleSort();
   
    /**
     * Prints a menu of options to interact
     * with the catalogue
     */
    void printMenu();
   
    /**
     * Prints out the current catalogue
     */
    void printStock();
}



Updated TwiceSoldTales.java
  • Update TwiceSoldTales.java to implement the Catalogue interface
  • It should then offer a menu of options to the user
  • Option A: Search for a book
    • This menu option should take in a title and author, and call the two argument constructor of the Book class
    • It should then pass this new Book object into binarySearch to locate the book in the Catalogue.
    • If the book is not in the Catalogue, it should print a message that the book is not in stock
    • If the book is in stock, it should ask the user if they would like to purchase the book.
    • When a book is purchased, the number of copies should decrease (call updateNumCopies) and the price should increase (call updatePrice)
    • Please see below example output for more information
  • Option B: Sell a Book
    • This menu option should should prompt the user for a title, author, isbn and price. 
    • It should also prompt the user for the price they paid to buy the book originally.
    • Note that the price offered to the user should be one quarter (25%) the amount the user entered.
        • See this section highlighted below.
    • It should search for the Book using binarySearch. If the book is not in the catalogue, it should be added into the ArrayList. If it already exists in the Catalogue, the number of copies should be increased.
  • Option C: Print Catalogue
    • This menu option should print out the entire arrayList by calling the printStock method
  • Option X: Exit
    • This option should end the program with the message "Please come again!"
  • Any other options entered should provide a message "Invalid Option"

/**
 * TwiceSoldTales.java
 * Note: the name of an awesome
 * used bookstore in Seattle, WA!
 * @author
 * CIS 36B, Assignment 12
 */

import java.util.ArrayList;
import java.util.Scanner;
import java.io.File;
import java.io.IOException;

public final class TwiceSoldTales implements Catalogue {
    private ArrayList<Book> books = new ArrayList<Book>();
    private static final String filename = "books.txt";
   


Sample Output - Your Output Must Work Identically to What is Shown Below

Welcome to Twice Sold Tales!

We currently have 80 books in stock!

Please select from one of the options:

A. Search for a book to purchase
B. Sell a book
C. Print catalogue
X. Exit

Enter your choice: A

Enter the book information below:

Title: Flight Behavior
Author: Barbara Kingsolver

We have Flight Behavior in stock!
Title: Flight Behavior
Author: Barbara Kingsolver
Price: $9.98
ISBN #: 56-382-34
Copies: 4

Would you like to purchase it (y/n): y
Thank you for your purchase!

Please select from one of the options:

A. Search for a book to purchase
B. Sell a book
C. Print catalogue
X. Exit

Enter your choice: z

Invalid option!


Please select from one of the options:

A. Search for a book to purchase
B. Sell a book
C. Print catalogue
X. Exit

Enter your choice: z

Invalid option!


Please select from one of the options:

A. Search for a book to purchase
B. Sell a book
C. Print catalogue
X. Exit

Enter your choice: A

Enter the book information below:

Title: A Man Called Ove
Author: Fredrik Backman
Sorry! We don't carry that title right now.

Please select from one of the options:

A. Search for a book to purchase
B. Sell a book
C. Print catalogue
X. Exit

Enter your choice: A

Enter the book information below:

Title: A Is for Alibi
Author: Sue Grafton

We have A Is for Alibi in stock!
Title: A Is for Alibi
Author: Sue Grafton
Price: $4.55
ISBN #: 34-323-21
Copies: 3

Would you like to purchase it (y/n): n

Please select from one of the options:

A. Search for a book to purchase
B. Sell a book
C. Print catalogue
X. Exit

Enter your choice: B

Enter the book information below:

Title: A Is for Alibi
Author: Sue Grafton
ISBN: 34-323-21
Enter the price you paid: $10.99
Thank you! We will purchase the book for $2.75

Please select from one of the options:

A. Search for a book to purchase
B. Sell a book
C. Print catalogue
X. Exit

Enter your choice: C
Current Selection of Books:

Title: A Face like Glass
Author: Frances Hardinge
Price: $15.95
ISBN #: 44-554-43
Copies: 1

Title: A Is for Alibi
Author: Sue Grafton
Price: $4.55
ISBN #: 34-323-21
Copies: 4 (Note this value got updated from 3 to 4 when a new copy was purchased)

Title: A Room with a View
Author: E.M. Forster
Price: $7.5
ISBN #: 11-778-89
Copies: 3

Title: Bleak House
Author: Charles Dickens
Price: $8.99
ISBN #: 35-678-97
Copies: 4

Title: Fangirl
Author: Rainbow Rowell
Price: $10.79
ISBN #: 24-137-25
Copies: 6

Title: Flight Behavior
Author: Barbara Kingsolver
Price: $10.23
ISBN #: 56-382-34
Copies: 3

Title: Jane Eyre
Author: Charlotte Bronte
Price: $7.9
ISBN #: 23-456-74
Copies: 4

Title: Lady Audley's Secret
Author: Mary Elizabeth Braddon
Price: $5.5
ISBN #: 12-121-34
Copies: 1

Title: Middlemarch
Author: George Elliot
Price: $12.5
ISBN #: 12-567-43
Copies: 4

Title: Murder on the Orient Express
Author: Agatha Christie
Price: $2.99
ISBN #: 98-375-83
Copies: 8

Title: Our Souls at Night
Author: Kent Haruf
Price: $11.99
ISBN #: 78-474-89
Copies: 2

Title: Outlander
Author: Diana Galbadon
Price: $19.95
ISBN #: 54-665-65
Copies: 7

Title: Ramona Blue
Author: Julie Murphy
Price: $9.99
ISBN #: 93-283-11
Copies: 4

Title: Rebecca
Author: Daphne Dumaurier
Price: $5.5
ISBN #: 32-423-82
Copies: 5

Title: Still Life
Author: Louise Penny
Price: $18.99
ISBN #: 33-443-22
Copies: 5

Title: The Hunger Games
Author: Suzanne Collins
Price: $6.9
ISBN #: 42-323-22
Copies: 10

Title: The Rosie Project
Author: Graeme Simsion
Price: $14.99
ISBN #: 82-389-31
Copies: 5

Title: The Time in Between
Author: Maria Duenas
Price: $9.86
ISBN #: 43-453-44
Copies: 2

Title: The Woman in White
Author: Wilkie Collins
Price: $10.75
ISBN #: 32-567-89
Copies: 2


Please select from one of the options:

A. Search for a book to purchase
B. Sell a book
C. Print catalogue
X. Exit

Enter your choice: X

Please come again!


  • Once your program is working identically to what is shown, upload Book.java, Media.java and TwiceToldTales.java to Canvas