Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

THIS QUESION IS FOR JAVA PROGRAMMER!! Each stop at a space station usually means

ID: 3704206 • Letter: T

Question

THIS QUESION IS FOR JAVA PROGRAMMER!!

Each stop at a space station usually means that we have to unload and reload our cargo bay. Each time we arrive at a station, we must unload our cargo into the station hold for inspection and reload it back into our own ship’s cargo hold when we wish to leave. This is becoming very tedious and taking away time that we could be plundering in space. We head into the station central to research a way to eliminate this problem. We meet a fellow space pirate who has found a solution to the problem we shared. We sit back and listen as he tells us how to find a workaround.

We must now store our items in a file and read from the file if prompted by the user. You can create a file with the list of items so you never have to type them in again, and you can control the items that are introduced to our world.

Items have attributes such as Name, Weight, Value, Durability and ID. (Create an object called ‘Item’)

We now classify our items by separating them into 3 distinct categories Equipable, Consumable or Weapon. (You must implement these 3 classes that are subclasses of Item and they must have at least 3 unique attributes in each subclass)

We can carry an unlimited number of items, as long as they don’t exceed the maximum weight of the cargo bay, 25 Tons. (Use an ArrayList that checks an item’s weight before placing it in the cargo hold)

We need to be able to add and remove items by their name.

We need to be able to search for a specific type of item in our cargo bay based on the item’s name and one of its attributes (Implement 2 searches – one on name and another on any attribute you choose).

We need to be able to sort items by their names alphabetically in descending order (A-Z)

We need to know how many of each item we have in our cargo bay and display their attributes.

We must also add a partial search (think of this as a ‘filter’ option).

Explanation / Answer

package ass9;

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

import java.io.Writer;

import java.util.*;

public class Assignment9

{

public static void main(String[] args) throws IOException{

new Assignment9();

}

public Assignment9() throws IOException

{

Scanner input = new Scanner(System.in);  

Item temp = new Item();  

ArrayList<Item> cargohold = new ArrayList<Item>();

File file=new File("fileItems.txt");

boolean fvar=false;

try{

fvar=file.createNewFile();

}

catch(Exception e){

e.printStackTrace();

}

while(true){

System.out.println("1:Add an item to the cargo hold.");

System.out.println("2:Add an item attribute to the cargo hold.");

System.out.println("3:Remove an item from the cargo hold.");

System.out.println("4:Sort the contents of the cargo hold .");

System.out.println("5:Search for an item.");

System.out.println("6:Search for an item by attribute.");

System.out.println("7:Display the items in the cargo hold.");

System.out.println("8:Perform a partial search for an item.");

System.out.println("0:Exit the BlackStar Cargo Hold interface.");

  

int userChoice = input.nextInt();

switch(userChoice){

case 1:

addItemB(cargohold, temp);

break;

case 2:

System.out.println("1: Add an equipable attributre.");

System.out.println("2: Add a consumble attribute.");

System.out.println("3: Add a weapon attribute.");

userChoice = input.nextInt();

switch(userChoice){

case 1:

temp = new Equipable();

addItem(cargohold, temp);

break;

case 2:

temp = new Consumable();

addItem(cargohold, temp);

break;

case 3:

temp = new Weapon();

addItem(cargohold, temp);

break;

}

break;

case 3:

removeItem(cargohold);

break;

case 4:

filterItem(cargohold);

break;

case 5:

searchItem(cargohold);

break;

case 6:

searchByAttribute(cargohold);

break;   

case 7:

displayItem(cargohold);

break;

case 8:

partialSearch(cargohold);

break;   

case 0:

System.out.println("Thank you for using the BlackStar Cargo Hold interface. See you again soon!");

System.exit(0);

}

if(changeInFile(cargohold, "fileItems.txt")){

saveToFile("fileItems.txt",cargohold);

}

System.out.println();

}

}

private boolean changeInFile(ArrayList<Item> cargohold, String filename) throws IOException{

FileReader fr = new FileReader(filename);

BufferedReader br = new BufferedReader(fr);

String itemInfo=null;

int i=0;

boolean change=false;

while((itemInfo = br.readLine()) != null && i<cargohold.size()) {

Item item=cargohold.get(i);

if(!itemInfo.equals(item.getID()+" "+item.getName()+" "+item.getWeight()+" "+item.getDurability()+" "+item.getCategory()+" "+item.getValue())){

change=true;

break;

}

i++;

}

if(br.readLine()!=null || i<cargohold.size())

return true;

return false;

}

private void saveToFile(String fileName, ArrayList<Item> cargohold) throws IOException{

Writer writer = new BufferedWriter(new OutputStreamWriter(

new FileOutputStream(fileName), "utf-8"));

for(Item item: cargohold){

writer.write(item.getID()+" "+item.getName()+" "+item.getWeight()+" "+item.getDurability()+" "+item.getCategory()+" "+item.getValue()+" ");

}

writer.close();

}

private void addItemB(ArrayList<Item> cargohold, Item temp) {

Scanner input = new Scanner(System.in);

  

if(temp instanceof Item){

  

System.out.print("Enter the name of the item: ");

temp.setName(input.nextLine());

  

System.out.print("Enter the item ID: ");

temp.setID(input.nextLine());

}

double getWeight = 0;

System.out.print("Enter item weight: ");

getWeight = input.nextDouble();

if(getWeight > 25)

{

System.out.println("Weight Limit Exceed");

return;

}

else

{

System.out.println("Enter the item value: ");

temp.setValue(input.nextLine());

}

System.out.println("Enter the item durability: ");

temp.setDurability(input.nextLine());

  

cargohold.add(temp);

}  

private void addItem(ArrayList<Item> cargohold, Item temp){

Scanner input = new Scanner(System.in);

if(temp instanceof Equipable){

System.out.print("Enter equipable item ID: ");

temp.setID(input.nextLine());

System.out.print("Enter equipable attribute name: ");

temp.setName(input.nextLine());

System.out.print("Enter equipable attribute color: ");

((Equipable)temp).setColor(input.nextLine());

System.out.print("Is this an outfit (Y/N): ");

String outfit = input.nextLine();

String y = "y";

if(y.equalsIgnoreCase(outfit.trim())){

((Equipable)temp).setoutfit(true);

}

else{   

((Equipable)temp).setoutfit(false);

}

System.out.print("What is the item size: ");

((Equipable)temp).setSize(input.nextInt());

cargohold.add(temp);

}  

else if(temp instanceof Consumable){

System.out.print("Enter the consumable ID: ");

((Consumable)temp).setID(input.nextLine());

System.out.print("Enter the consumable name: ");

((Consumable)temp).setName(input.nextLine());

  System.out.print("Enter the consumable color: ");

((Consumable)temp).setColor(input.nextLine());

System.out.print("Is the consumable a food (Y/N): ");

String Food = input.nextLine();

String y = "y";

if(y.equalsIgnoreCase(Food.trim())){

((Consumable)temp).setFood(true);

}

else{   

((Consumable)temp).setFood(false);

}

System.out.print("Is the consumable water(Y/N): ");

String Water = input.nextLine();

if(y.equalsIgnoreCase(Water.trim())){

((Consumable)temp).setWater(true);

}

else{   

((Consumable)temp).setWater(false);

}

System.out.print("Is the consumable healthy (Y/N): ");

String Healthy = input.nextLine();

if(y.equalsIgnoreCase(Healthy.trim())){

((Consumable)temp).setHealthy(true);

}

else{   

((Consumable)temp).setHealthy(false);

}

cargohold.add(temp);

}

else{

System.out.print("Enter weapon ID: ");

((Weapon)temp).setID(input.nextLine());

System.out.print("What is the weapon name: ");

((Weapon)temp).setName(input.nextLine());

System.out.print("Enter fungus color: ");

((Weapon)temp).setColor(input.nextLine());

System.out.print("Is it a projectile (Y/N): ");

String Projectile = input.nextLine();

String y = "y";

if(y.equalsIgnoreCase(Projectile.trim())){

((Weapon)temp).setProjectile(true);

}

else{   

((Weapon)temp).setProjectile(false);

}

cargohold.add(temp);

}

}

private void removeItem(ArrayList<Item> cargohold){

Scanner input = new Scanner(System.in);

System.out.print("Name of item to Remove: ");

String item = input.nextLine();

for(Item x: cargohold){

if (x.getName().equals(item))

{

cargohold.remove(x);

break;

}

}

}

private void filterItem(ArrayList<Item> cargohold) {

for (int i = 0; i < cargohold.size() - 1; i++ )

for (int j = 0; j < cargohold.size() - 1 - i; j++)

if (cargohold.get(j).getName().compareToIgnoreCase(cargohold.get(j+1).getName()) > 0) {

cargohold.add(j+1, cargohold.remove(j));

}

System.out.println("Item NOT found");

}

  

  

private void searchItem(ArrayList<Item> cargohold) {

Scanner input = new Scanner(System.in);

int itemfound = 0;

System.out.print("Search items: ");

String item = input.nextLine();

for (Item x : cargohold) {

if (x.getName().equalsIgnoreCase(item))

{

System.out.println(x.getName() + " found");

itemfound = 1;

break;

}

}

if(itemfound == 0){

System.out.println("Item NOT found");

}

}

private void searchByWeight(ArrayList<Item> cargohold) {

Scanner input = new Scanner(System.in);

int itemfound = 0;

System.out.print("Provide weight: ");

int weight = Integer.parseInt(input.nextLine());

for (Item x : cargohold) {

if (x.getWeight()==weight)

{

System.out.println(x.getName() + " found to have this weight");

itemfound = 1;

}

}

if(itemfound == 0){

System.out.println("Item NOT found");

}

}

private void searchByCategory(ArrayList<Item> cargohold) {

  Scanner input = new Scanner(System.in);

int itemfound = 0;

System.out.print("Provide weight: ");

String category = input.nextLine();

for (Item x : cargohold) {

if (x.getCategory().equalsIgnoreCase(category))

{

System.out.println(x.getName() + " found to have this category");

itemfound = 1;

}

}

if(itemfound == 0){

System.out.println("Item NOT found");

}

}

private void searchByDurability(ArrayList<Item> cargohold) {

Scanner input = new Scanner(System.in);

int itemfound = 0;

System.out.print("Provide durability: ");

String durability = input.nextLine();

for (Item x : cargohold) {

if (x.getDurability().equalsIgnoreCase(durability))

{

System.out.println(x.getName() + " found to have this durability");

itemfound = 1;

}

}

if(itemfound == 0){

System.out.println("Item NOT found");

}

}

private void searchByValue(ArrayList<Item> cargohold) {

  

Scanner input = new Scanner(System.in);

int itemfound = 0;

System.out.print("Provide durability: ");

String value = input.nextLine();

for (Item x : cargohold) {

if (x.getValue().equalsIgnoreCase(value))

{

System.out.println(x.getName() + " found to have this value");

itemfound = 1;

}

}

if(itemfound == 0){

System.out.println("Item NOT found");

}

}

private void searchByID(ArrayList<Item> cargohold) {

  

Scanner input = new Scanner(System.in);

int itemfound = 0;

System.out.print("Provide durability: ");

String Id = input.nextLine();

for (Item x : cargohold) {

if (x.getID().equalsIgnoreCase(Id))

{

System.out.println(x.getName() + " found to have this ID");

itemfound = 1;

break;

}

}

if(itemfound == 0){

System.out.println("Item NOT found");

}

}

private void searchByAttribute (ArrayList<Item> cargohold){

Scanner input = new Scanner(System.in);

System.out.println("What the is the item attribute?");

String attribute=input.nextLine();

if(("name").equalsIgnoreCase(attribute))

searchItem(cargohold);

else if(("weight").equalsIgnoreCase(attribute))

searchByWeight(cargohold);

else if(("category").equalsIgnoreCase(attribute))

searchByCategory(cargohold);

else if(("durability").equalsIgnoreCase(attribute))

searchByDurability(cargohold);

else if(("value").equalsIgnoreCase(attribute))

searchByValue(cargohold);

else

searchByID(cargohold); //In default case we search by ID

  

}

  

private void displayItem(ArrayList<Item> cargohold) {

  

for (Item x : cargohold) {  

System.out.println("Item ID " + x.getID() + " Item Name " + x.getName());

}

  

}

  

private void partialSearch(ArrayList<Item> cargohold) {

boolean flagFound = false;

System.out.println("Enter name of item to search: ");

Scanner input = new Scanner(System.in);

String partialName = input.nextLine();

for (int i = 0; i < cargohold.size(); i++)

if (cargohold.get(i).getName().contains(partialName)) {

System.out.println("Found " + cargohold.get(i).getName() + " at location " + i);

flagFound = true;

}

if (!flagFound)

System.out.println("The items are not found");

}

  

}