add lab05

This commit is contained in:
SowinskiBraeden committed 2025-10-26 16:07:21 -07:00
1 parent c600c9a9f1
commit f168656585
3 files changed
+503

No files matched your search

+1
View File
@@ -3,3 +3,4 @@
*.class *.class
/.idea/* /.idea/*
/src/code/ca/bcit/comp2522/testing/*
@@ -0,0 +1,406 @@
package ca.bcit.comp2522.lab05;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
/**
* BookStore to demonstrate Lists, ArrayLists, Sets,
* Maps, HashMaps and Iterators.
*
* @author Braeden Sowinski
* @author Trishaan Shetty
* @author Nico Agostini
* @version 1.0.0
*/
public class BookStore {
private static final int DECADE_RANGE = 9;
private final String bookStoreName;
private final List<Novel> novels;
/**
* validateString ensures string input is not null or empty
* @param str to validate
* @throws IllegalArgumentException if invalid string
*/
private static void validateString(final String str)
throws IllegalArgumentException
{
if (str == null || str.isEmpty()) {
throw new IllegalArgumentException("String cannot be null or empty");
}
}
/**
* BookStore constructor creats a bookstore, and tests
* hash maps and iterators
* @param bookStoreName to call bookstore
*/
public BookStore(
final String bookStoreName
) {
validateString(bookStoreName);
this.bookStoreName = bookStoreName;
this.novels = new ArrayList<>();
novels.add(new Novel("The Adventures of Augie March", "Saul Bellow", 1953));
novels.add(new Novel("All the Kings Men", "Robert Penn Warren", 1946));
novels.add(new Novel("American Pastoral", "Philip Roth", 1997));
novels.add(new Novel("An American Tragedy", "Theodore Dreiser", 1925));
novels.add(new Novel("Animal Farm", "George Orwell", 1946));
novels.add(new Novel("Appointment in Samarra", "John O'Hara", 1934));
novels.add(new Novel("Are You There God? It's Me, Margaret.", "Judy Blume", 1970));
novels.add(new Novel("The Assistant", "Bernard Malamud", 1957));
novels.add(new Novel("At Swim-Two-Birds", "Flann O'Brien", 1938));
novels.add(new Novel("Atonement", "Ian McEwan", 2002));
novels.add(new Novel("Beloved", "Toni Morrison", 1987));
novels.add(new Novel("The Berlin Stories", "Christopher Isherwood", 1946));
novels.add(new Novel("The Big Sleep", "Raymond Chandler", 1939));
novels.add(new Novel("The Blind Assassin", "Margaret Atwood", 2000));
novels.add(new Novel("Blood Meridian", "Cormac McCarthy", 1986));
novels.add(new Novel("Brideshead Revisited", "Evelyn Waugh", 1946));
novels.add(new Novel("The Bridge of San Luis Rey", "Thornton Wilder", 1927));
novels.add(new Novel("Call It Sleep", "Henry Roth", 1935));
novels.add(new Novel("Catch-22", "Joseph Heller", 1961));
novels.add(new Novel("The Catcher in the Rye", "J.D. Salinger", 1951));
novels.add(new Novel("A Clockwork Orange", "Anthony Burgess", 1963));
novels.add(new Novel("The Confessions of Nat Turner", "William Styron", 1967));
novels.add(new Novel("The Corrections", "Jonathan Franzen", 2001));
novels.add(new Novel("The Crying of Lot 49", "Thomas Pynchon", 1966));
novels.add(new Novel("A Dance to the Music of Time", "Anthony Powell", 1951));
novels.add(new Novel("The Day of the Locust", "Nathanael West", 1939));
novels.add(new Novel("Death Comes for the Archbishop", "Willa Cather", 1927));
novels.add(new Novel("A Death in the Family", "James Agee", 1958));
novels.add(new Novel("The Death of the Heart", "Elizabeth Bowen", 1958));
novels.add(new Novel("Deliverance", "James Dickey", 1970));
novels.add(new Novel("Dog Soldiers", "Robert Stone", 1974));
novels.add(new Novel("Falconer", "John Cheever", 1977));
novels.add(new Novel("The French Lieutenant's Woman", "John Fowles", 1969));
novels.add(new Novel("The Golden Notebook", "Doris Lessing", 1962));
novels.add(new Novel("Go Tell It on the Mountain", "James Baldwin", 1953));
novels.add(new Novel("Gone with the Wind", "Margaret Mitchell", 1936));
novels.add(new Novel("The Grapes of Wrath", "John Steinbeck", 1939));
novels.add(new Novel("Gravity's Rainbow", "Thomas Pynchon", 1973));
novels.add(new Novel("The Great Gatsby", "F. Scott Fitzgerald", 1925));
novels.add(new Novel("A Handful of Dust", "Evelyn Waugh", 1934));
novels.add(new Novel("The Heart Is a Lonely Hunter", "Carson McCullers", 1940));
novels.add(new Novel("The Heart of the Matter", "Graham Greene", 1948));
novels.add(new Novel("Herzog", "Saul Bellow", 1964));
novels.add(new Novel("Housekeeping", "Marilynne Robinson", 1981));
novels.add(new Novel("A House for Mr. Biswas", "V.S. Naipaul", 1962));
novels.add(new Novel("I, Claudius", "Robert Graves", 1934));
novels.add(new Novel("Infinite Jest", "David Foster Wallace", 1996));
novels.add(new Novel("Invisible Man", "Ralph Ellison", 1952));
novels.add(new Novel("Light in August", "William Faulkner", 1932));
novels.add(new Novel("The Lion, The Witch and the Wardrobe", "C.S. Lewis", 1950));
novels.add(new Novel("Lolita", "Vladimir Nabokov", 1955));
novels.add(new Novel("Lord of the Flies", "William Golding", 1954));
novels.add(new Novel("The Lord of the Rings", "J.R.R. Tolkien", 1954));
novels.add(new Novel("Loving", "Henry Green", 1945));
novels.add(new Novel("Lucky Jim", "Kingsley Amis", 1954));
novels.add(new Novel("The Man Who Loved Children", "Christina Stead", 1940));
novels.add(new Novel("Midnight's Children", "Salman Rushdie", 1981));
novels.add(new Novel("Money", "Martin Amis", 1984));
novels.add(new Novel("The Moviegoer", "Walker Percy", 1961));
novels.add(new Novel("Mrs. Dalloway", "Virginia Woolf", 1925));
novels.add(new Novel("Naked Lunch", "William Burroughs", 1959));
novels.add(new Novel("Native Son", "Richard Wright", 1940));
novels.add(new Novel("Neuromancer", "William Gibson", 1984));
novels.add(new Novel("Never Let Me Go", "Kazuo Ishiguro", 2005));
novels.add(new Novel("1984", "George Orwell", 1948));
novels.add(new Novel("On the Road", "Jack Kerouac", 1957));
novels.add(new Novel("One Flew Over the Cuckoo's Nest", "Ken Kesey", 1962));
novels.add(new Novel("The Painted Bird", "Jerzy Kosinski", 1965));
novels.add(new Novel("Pale Fire", "Vladimir Nabokov", 1962));
novels.add(new Novel("A Passage to India", "E.M. Forster", 1924));
novels.add(new Novel("Play It as It Lays", "Joan Didion", 1970));
novels.add(new Novel("Portnoy's Complaint", "Philip Roth", 1969));
novels.add(new Novel("Possession", "A.S. Byatt", 1990));
novels.add(new Novel("The Power and the Glory", "Graham Greene", 1939));
novels.add(new Novel("The Prime of Miss Jean Brodie", "Muriel Spark", 1961));
novels.add(new Novel("Rabbit, Run", "John Updike", 1960));
novels.add(new Novel("Ragtime", "E.L. Doctorow", 1975));
novels.add(new Novel("The Recognitions", "William Gaddis", 1955));
novels.add(new Novel("Red Harvest", "Dashiell Hammett", 1929));
novels.add(new Novel("Revolutionary Road", "Richard Yates", 1961));
novels.add(new Novel("The Sheltering Sky", "Paul Bowles", 1949));
novels.add(new Novel("Slaughterhouse-Five", "Kurt Vonnegut", 1969));
novels.add(new Novel("Snow Crash", "Neal Stephenson", 1992));
novels.add(new Novel("The Sot-Weed Factor", "John Barth", 1960));
novels.add(new Novel("The Sound and the Fury", "William Faulkner", 1929));
novels.add(new Novel("The Sportswriter", "Richard Ford", 1986));
novels.add(new Novel("The Spy Who Came in from the Cold", "John le Carré", 1964));
novels.add(new Novel("The Sun Also Rises", "Ernest Hemingway", 1926));
novels.add(new Novel("Their Eyes Were Watching God", "Zora Neale Hurston", 1937));
novels.add(new Novel("Things Fall Apart", "Chinua Achebe", 1959));
novels.add(new Novel("To Kill a Mockingbird", "Harper Lee", 1960));
novels.add(new Novel("To the Lighthouse", "Virginia Woolf", 1929));
novels.add(new Novel("Tropic of Cancer", "Henry Miller", 1934));
novels.add(new Novel("Ubik", "Philip K. Dick", 1969));
novels.add(new Novel("Under the Net", "Iris Murdoch", 1954));
novels.add(new Novel("Under the Volcano", "Malcolm Lowry", 1947));
novels.add(new Novel("Watchmen", "Alan Moore and Dave Gibbons", 1986));
novels.add(new Novel("White Noise", "Don DeLillo", 1985));
novels.add(new Novel("White Teeth", "Zadie Smith", 2000));
novels.add(new Novel("Wide Sargasso Sea", "Jean Rhys", 1966));
final Map<String, Novel> novelsMap;
final Set<String> keySet;
final List<String> keyList;
final Iterator<String> iter;
novelsMap = new HashMap<String, Novel>();
for (final Novel novel : this.novels) {
novelsMap.put(novel.getTitle(), novel);
}
keySet = novelsMap.keySet();
keyList = new ArrayList<>(keySet);
Collections.sort(keyList);
iter = keyList.iterator();
while (iter.hasNext())
{
final String key = iter.next();
if (key.toLowerCase().contains("the")) {
novelsMap.remove(key);
}
}
System.out.println("Sorted and cleaned novels:");
for (final Novel novel : novelsMap.values()) {
System.out.println(novel);
}
}
/**
* printAllTitles prints all the novels in the bookstore
*/
public void printAllTitles()
{
for (final Novel novel : this.novels) {
System.out.println(novel.getTitle().toUpperCase());
}
}
/**
* printBoolTitle of all books containing the input string
* @param title that book matches or contains
*/
public void printBookTitle(final String title)
{
for (final Novel novel : this.novels) {
if (novel.getTitle().toLowerCase().contains(title.toLowerCase())) {
System.out.println(novel.getTitle());
}
}
}
/**
* printTitlesInAlphaOrder takes all novels and
* prints them in alphabetical order
*/
public void printTitlesInAlphaOrder()
{
Collections.sort(this.novels);
for (final Novel novel : this.novels) {
System.out.println(novel.getTitle());
}
}
/**
* printGroupByDecade prints any books within a given decade
* e.g. 2000-2009
* @param decade to find books published in
*/
public void printGroupByDecade(final int decade)
{
for (final Novel novel : this.novels) {
if (novel.getYearPublished() >= decade && novel.getYearPublished() <= decade + DECADE_RANGE) {
System.out.println(novel.getTitle());
}
}
}
/**
* getLongest book title out of all novels
*/
public void getLongest()
{
String title;
int longest;
longest = 0;
title = "";
for (final Novel novel : this.novels) {
if (novel.getTitle().length() > longest) {
longest = novel.getTitle().length();
title = novel.getTitle();
}
}
System.out.println(title);
}
/**
* isThereABookWrittenIn checks if any books were written in
* a given year
* @param year to check for books
* @return if any books were published in a given year
*/
public boolean isThereABookWrittenIn(final int year)
{
for (final Novel novel : this.novels) {
if (novel.getYearPublished() == year) {
return true;
}
}
return false;
}
/**
* howManyBooksContain a given word
* @param word to check how many books contain it
* @return the number of books containing the word
*/
public int howManyBooksContain(final String word)
{
int count;
count = 0;
for (final Novel novel : this.novels) {
if (novel.getTitle().toLowerCase().contains(word.toLowerCase())) {
count++;
}
}
return count;
}
/**
* whichPercentWrittenBetween gives the percent
* of books from all books that were written
* between two given years
* @param first year book can be checked in
* @param last year book can be checked in
* @return the percent of books written between first year and last year
*/
public float whichPercentWrittenBetween(
final int first,
final int last
) {
int inRange;
inRange = 0;
for (final Novel novel : this.novels) {
if (novel.getYearPublished() >= first && novel.getYearPublished() <= last) {
inRange++;
}
}
return ((float) inRange / (float) this.novels.size()) * 100;
}
/**
* getOldestBook by year published
* @return the oldest book by year published
*/
public Novel getOldestBook()
{
Novel oldest;
oldest = null;
for (final Novel novel : this.novels) {
if (oldest == null) {
oldest = novel;
} else {
if (novel.getYearPublished() < oldest.getYearPublished()) {
oldest = novel;
}
}
}
return oldest;
}
/**
* getBooksThisLength returns a list of books that match
* a given title length
* @param titleLength to compare books to
* @return list of books matching given title length
*/
public List<Novel> getBooksThisLength(final int titleLength) {
final List<Novel> booksOfLength;
booksOfLength = new ArrayList<>();
for (final Novel novel : this.novels) {
if (novel.getTitle().length() == titleLength) {
booksOfLength.add(novel);
}
}
return booksOfLength;
}
/**
* main program entry to test methods of BookStore
* @param args form cli
*/
public static void main(final String[] args)
{
final BookStore bookstore;
final Novel oldest;
final List<Novel> fifteenCharTitles;
bookstore = new BookStore("Classic Novels Collection");
System.out.println("All Titles in UPPERCASE:");
bookstore.printAllTitles();
System.out.println("\nBook Titles Containing 'the':");
bookstore.printBookTitle("the");
System.out.println("\nAll Titles in Alphabetical Order:");
bookstore.printTitlesInAlphaOrder();
System.out.println("\nBooks from the 2000s:");
bookstore.printGroupByDecade(2000);
System.out.println("\nLongest Book Title:");
bookstore.getLongest();
System.out.println("\nIs there a book written in 1950?");
System.out.println(bookstore.isThereABookWrittenIn(1950));
System.out.println("\nHow many books contain 'heart'?");
System.out.println(bookstore.howManyBooksContain("heart"));
System.out.println("\nPercentage of books written between 1940 and 1950:");
System.out.println(bookstore.whichPercentWrittenBetween(1940, 1950) + "%");
System.out.println("\nOldest book:");
oldest = bookstore.getOldestBook();
System.out.println(oldest.getTitle() + " by " + oldest.getAuthorName() + ", " +
oldest.getYearPublished());
System.out.println("\nBooks with titles 15 characters long:");
fifteenCharTitles = bookstore.getBooksThisLength(15);
fifteenCharTitles.forEach(novel -> System.out.println(novel.getTitle()));
}
}
@@ -0,0 +1,96 @@
package ca.bcit.comp2522.lab05;
/**
* Novel class stores basic information about a novel
* and has useful methods for sorting alphabetically.
*
* @author Braeden Sowinski
* @author Nico Agostini
* @author Trishaan Shetty
*/
public class Novel implements Comparable<Novel> {
private final String title;
private final String authorName;
private final int yearPublished;
/**
* validateString ensures given string is not null or empty
* @param str to validate
* @throws IllegalArgumentException if invlalid string
*/
private static void validateString(final String str)
throws IllegalArgumentException
{
if (str == null || str.isEmpty()) {
throw new IllegalArgumentException("String cannot be null or empty");
}
}
/**
* Novel constructor
* @param title of novel
* @param authorName of the novel
* @param yearPublished of the novel
*/
public Novel(
final String title,
final String authorName,
final int yearPublished
) {
validateString(title);
validateString(authorName);
this.title = title;
this.authorName = authorName;
this.yearPublished = yearPublished;
}
/**
* getTitle of the novel
* @return title of the novel
*/
public String getTitle() { return this.title; }
/**
* getAuthorName of the novel
* @return author name of the novel
*/
public String getAuthorName() { return this.authorName; }
/**
* getYearPublished of the novel
* @return novel yearh published
*/
public int getYearPublished() { return this.yearPublished; }
/**
* compareTo to sort novels based on title
* @param novel to compare to
* @return number value of comparison, i.e. >1, 0, <1
*/
@Override
public int compareTo(final Novel novel) {
return this.title.compareTo(novel.getTitle());
}
/**
* toString gives a neat string representation
* of the novel
* @return the string representation of novel attributes
*/
@Override
public String toString() {
final StringBuilder builder;
builder = new StringBuilder();
builder.append("\"");
builder.append(this.title);
builder.append("\"");
builder.append(" by ");
builder.append(this.authorName);
builder.append(", ");
builder.append(yearPublished);
return builder.toString();
}
}