0

I've made an ArrayList of players that I want to search through to change the amount they have paid. I want to be able to enter in their ID, then be able to change their amount paid just for that player. I am also writing it to a CSV file but I am not sure how to update that file with the new value. I'm not sure about how to go about doing this.

What I want to do is just update a value in the ArrayList for a specific player based on player input on the registration ID, then I want to update that value in the file.

Here are my 3 classes that I have made: SquashPlayer

package squashapplication;

import java.util.Scanner;

/**
*
* @author Evan
*/
public class SquashPlayer {

private static int maxRegistrationId;
private int id;
private String name;
private String parentName;
private String phoneNumber;
private String email;
private int amountPaid;


public SquashPlayer() {

}


public SquashPlayer(boolean getFromUser){


    System.out.println("Enter Full Name:");
    this.name = FileUtility.getInput().nextLine();

    System.out.println("Enter Parents name:");
    this.parentName = FileUtility.getInput().nextLine();

    System.out.println("Enter phone number:");
    this.phoneNumber = FileUtility.getInput().nextLine();

    System.out.println("Enter e-mail:");
    this.email = FileUtility.getInput().nextLine();

    System.out.println("Enter amount paid:");
    this.amountPaid = FileUtility.getInput().nextInt();

    FileUtility.getInput().nextLine();

    this.id = ++ maxRegistrationId;

}
public SquashPlayer(int id, String name, int amountPaid , String phoneNumber, String parentName  , String email  ) {
    this.id = id;
    this.amountPaid = amountPaid;
    this.name = name;
    this.parentName = parentName;
    this.email = email;
    this.phoneNumber = phoneNumber;
}
public SquashPlayer(String[] parts) {
    this(Integer.parseInt(parts[0]), parts[1], Integer.parseInt(parts[2]), parts[3],parts[4], parts[5]);

    if (Integer.parseInt(parts[0]) > maxRegistrationId) {
        maxRegistrationId = Integer.parseInt(parts[0]);
    }
}
public SquashPlayer(String csvValues) {
    this(csvValues.split(","));
}

public String getCSV() {
    return  id + "," + name + "," + amountPaid + "," + phoneNumber + "," + email  + "," + parentName;
}
public String getCSV(boolean withLineFeed){
    if(withLineFeed){
        return getCSV()+System.lineSeparator();
    }else{
        return getCSV();
    }
}


public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getParentName() {
    return parentName;
}

public void setParentName(String parentName) {
    this.parentName = parentName;
}

public String getPhoneNumber() {
    return phoneNumber;
}

public void setPhoneNumber(String phoneNumber) {
    this.phoneNumber = phoneNumber;
}

public String getEmail() {
    return email;
}

public void setEmail(String email) {
    this.email = email;
}

public int getAmountPaid() {
    return amountPaid;
}

public void setAmountPaid(int amountPaid) {
    this.amountPaid = amountPaid;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}



@Override
public String toString() {
    return "ID=" +id+ ", Name=" + name + ", email=" + email + ", Phone Number=" + phoneNumber + ", Amount Paid=" + amountPaid + ", Parent's Name: "+parentName;
}

}

Here is my main class:

package squashapplication;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;

public class SquashMain {

public static String MENU = "Options:\nA) Add player\nS) Show players\n G) Update Amount Paid\nX) Exit";
public static String FILE_NAME = "c:\\cis2232\\players.csv";

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

    Files.createDirectories(Paths.get("/cis2232"));

    ArrayList<SquashPlayer> theList = new ArrayList();
    loadPlayers(theList);
    String choice = "";
    do{
        System.out.println(MENU);
        choice = FileUtility.getInput().nextLine().toUpperCase();

        switch(choice){
            case "A":
                SquashPlayer player = new SquashPlayer(true);
                theList.add(player);


                BufferedWriter bw = null;
                FileWriter fw = null;

                try {
                    fw = new FileWriter(FILE_NAME, true);
                    bw = new BufferedWriter(fw);
                    bw.write(player.getCSV(true));
                    System.out.println("Done");
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        if (bw != null) {
                            bw.close();
                        }

                        if (fw != null) {
                            fw.close();
                        }

                    } catch (IOException ex) {

                        ex.printStackTrace();

                    }

                }

                break;
            case "S":
                System.out.println("Here are the players");
                for (SquashPlayer SquashPlayer : theList) {
                    System.out.println(SquashPlayer);
                }
                break;
            case "G":

            case "X":
                System.out.println("Goodbye");
                break;
            default:
                System.out.println("Invalid option");
                break;    
        }


    }while (!choice.equalsIgnoreCase("x"));

}
public static void loadPlayers(ArrayList squash){
    System.out.println("Loading players from the list!");
    int counter = 0;

    try{
        ArrayList<String> tester = (ArrayList<String>) Files.readAllLines(Paths.get(FILE_NAME));
        for(String current:tester){
            System.out.println("Loading: "+current);
            SquashPlayer temp = new SquashPlayer(current);
            squash.add(temp);
            counter++;

        }
    }catch(IOException ex){
        System.out.println("Error loading players from file.");
        System.out.println(ex.getMessage());
    }
    System.out.println("Loaded players from file: "+ counter + " players");
}

}

And here is where I store my scanner in FileUtility:

package squashapplication;

import java.util.Scanner;

public class FileUtility {

private static Scanner input = new Scanner(System.in);

public static Scanner getInput() {
    return input;
}

}

Sachin Aggarwal
  • 1,095
  • 8
  • 17
Shuckyducky
  • 71
  • 11
  • Try looping over the list of Players, checking each for the id you want. https://stackoverflow.com/questions/19774374/arraylist-retrieve-object-by-id When you find that player, simply call the setAmountPaid() on that player to the new amount. Finally, write all players back out to the CSV file to update it with the new value. – Lukas Bradley Sep 26 '17 at 19:20
  • @LukasBradley Yeah I'm new to writing to files, how would you go about rewriting the file again? Or I guess writing all the players again back to it. – Shuckyducky Sep 26 '17 at 19:22
  • It looks like you're using java.nio Files to read a bunch of lines. Is there also a method on that class to write a bunch of lines? – Lukas Bradley Sep 27 '17 at 19:53

0 Answers0