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

JAVA Popular Names You will need to ask for the Year, Gender and Name. Use a Com

ID: 3809365 • Letter: J

Question

JAVA Popular Names

You will need to ask for the Year, Gender and Name. Use a ComboBox for the Year and Gender, and a Textbox for the Name. There should be a button named Find Ranking, and a non-editable Textbox that shows the ranking for the entered information.

You have been provided with 5 text files containing ranking information. You are free to edit these anyway you wish. However, your application needs to read from a text file(s) into a Java Collection. The information is not to be hardcoded in the code.

The text file(s) should be included in the BlueJ Project directory so they will be included in the Jar file to be submitted.

The GUI should look something like this:

If there is no ranking for the entered information, a message saying such should be shown in the bottom Textbox.

Error Checking

There must be a value in all three user entered fields.

All fields need to be correct when the Find Ranking button is pressed.

Use a Try-Catch blocks where you deem appropriate.

Example of text files:

2006.txt

    Jacob   24,216   Emily   19,322
2   Michael   21,915   Isabella   19,105
3   Ethan   20,996   Emma   18,338
4   Joshua   20,599   Ava   18,031
5   Daniel   20,194   Madison   17,918
6   Christopher   19,960   Sophia   17,002
7   Anthony   19,570   Olivia   16,548
8   William   18,839   Abigail   15,447
9   Matthew   18,693   Hannah   13,268
10   Andrew   18,407   Elizabeth   13,013
11   Alexander   18,107   Addison   11,940
12   David   17,468   Samantha   11,849

2007.txt

1   Jacob   22,507   Emma    18,765
2   Michael   20,524   Isabella    18,564
3   Ethan   20,174   Emily    17,397
4   Joshua   19,133   Olivia    17,030
5   Daniel   18,935   Ava    17,007
6   Alexander   18,639   Madison    16,985
7   Anthony   18,347   Sophia    16,042
8   William   18,337   Abigail    15,045
9   Christopher   17,876   Elizabeth    11,956
10   Matthew   17,526   Chloe    11,802
11   Jayden   17,088   Samantha    11,157
12   Andrew   16,711   Addison    10,742

2008.txt

1   Jacob   21,036   Isabella   22,222
2   Ethan   19,783   Emma   17,830
3   Michael   18,822   Olivia   17,374
4   Alexander   18,175   Sophia   16,869
5   William   17,852   Ava   15,826
6   Joshua   17,549   Emily   15,295
7   Daniel   17,456   Madison   15,181
8   Jayden   17,193   Abigail   14,342
9   Noah   17,176   Chloe   11,859
10   Christopher   16,264   Mia   11,382
11   Anthony   16,237   Elizabeth   10,969

Explanation / Answer

FinalProjectTemplate.java


import javax.swing.*;
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.Label;
import javafx.scene.control.RadioButton;
import javafx.scene.control.TextField;
import javafx.scene.control.ToggleGroup;
import javafx.scene.layout.GridPane;

public class FinalProjectTemplate extends Application {
    //TODO: This program initializes the GUI for the Baby names program.
    public static String name, year, gender, result;
    @Override
    public void start(Stage primaryStage) {
        //a GridPane arrange nodes in a grid(matrix) formation
        try {
            final GridPane mainPane = new GridPane();
            mainPane.setVgap(10);//sets the gap between rows

            //add(Node, colIndex, rowIndex)
            mainPane.add(new Label("Select a year: "), 0, 0);
            mainPane.add(new Label("Male or Female? "), 0, 1);
            mainPane.add(new Label("Enter a name: "), 0, 2);
            //Place the next text field on the same row with the last label
            //(that is column 1 (next column) and row 2 (same row))


            //The Radio button creation and positioning
            final RadioButton rbMale = new RadioButton("Male");
            final RadioButton rbFemale = new RadioButton("Female");
            final ToggleGroup group = new ToggleGroup();
            rbMale.setToggleGroup(group);
            rbFemale.setToggleGroup(group);
            mainPane.add(rbMale, 1, 1);
            mainPane.add(rbFemale, 2, 1);

            //Radio button action
            rbMale.setOnAction(e -> {
                gender = "M";
                mainPane.setStyle("-fx-background-color: aqua");
            });
            rbFemale.setOnAction(e -> {
                gender = "F";
                mainPane.setStyle("-fx-background-color: hotpink");
            });

            //Placing the ComboBox for the year selection
            final ComboBox<String> cboYear = new ComboBox<String>();
            cboYear.getItems().add("All");
            for (int i = 2001; i <= 2010; i++)
                cboYear.getItems().add(Integer.toString(i));
            //Handler for the ComboBox
            cboYear.setOnAction(e -> {
                year = cboYear.getValue();
            });
            final TextField textField = new TextField();
            mainPane.add(textField, 1, 2);
            textField.setOnMouseMoved(e -> {
                name = textField.getText();
                name = name.replaceAll("\s", "");
            });

            mainPane.add(cboYear, 1, 0);
            //Placing the Buttons for Clear, Find Ranking, and Print Top 5
            final Button btClear = new Button("Clear");
            final Button btFindRank = new Button("Find Ranking");
            final Button btPrintTop5 = new Button("Print Top 5");
            //Handler for the btFindRank button

            btFindRank.setOnAction(e -> {
                TemplateChecker.run();

                try{
                    System.out.println(" File parsing successful");
                    result = Part1.resultReturn();
                    JOptionPane.showMessageDialog(null, result);

                } catch (Exception e1){
                    System.out.println("File parsing failed. restarting");

                }

            });
            btPrintTop5.setOnAction(e -> {
                    try {
                        JFrame frame = new JFrame("");
                        String message = "";
                        String[] prompt = new String[5];
                        if(cboYear.getValue().equals("All")) {
                            prompt = TopFiveReader.labelList("ranking_cumulative.txt");
                        } else {
                            prompt = TopFiveReader.labelList("Babynamesranking" + cboYear.getValue() +".txt");
                        }
                        for(int i = 0; i < prompt.length; i++){
                            message += prompt[i] + " ";
                        }
                        JOptionPane.showMessageDialog(frame, message);

                    }
                    catch (Exception e2){
                        System.err.print("File parsing failed");
                    }


        });

            btClear.setOnAction(e -> {
                textField.setText(" ");
            });

            //add all three buttons on the same row
            mainPane.add(btClear, 0, 3);
            mainPane.add(btFindRank, 1, 3);
            mainPane.add(btPrintTop5, 2, 3);

            Scene scene = new Scene(mainPane, 400, 200);
            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
    public static String getGender(){
        return gender;
    }
    public static String getName(){
        return name;
    }
    public static String getYear(){
        return year;
    }

}

TemplateChecker.java


public class TemplateChecker {
    public static void main(String[] args) {
        run();
    }
    public static void run(){
        System.out.println(FinalProjectTemplate.getGender());
        System.out.println(FinalProjectTemplate.name);
        System.out.println(FinalProjectTemplate.getYear());
    }
}
TopFiveReader.java

import java.util.Scanner;
import java.io.*;

public class TopFiveReader {
    public static String[] labelList(String file) throws FileNotFoundException {
        Scanner input = new Scanner(new File(file));
        String[] list = new String[5];
        for(int i = 0; i < list.length; i++){
            list[i] = input.nextLine();
        }
        return list;
    }
    public static String[] labelYearList() throws FileNotFoundException {
        String year = FinalProjectTemplate.getYear();
        String yearList = "Babynamesranking" + year + ".txt";
        Scanner input = new Scanner(new File(yearList));
        String[] list = new String[5];
        for(int i = 0; i < list.length; i++){
            list[i] = input.nextLine();
        }
        return list;
    }

}

Part1.java

import java.io.FileNotFoundException;
import java.io.IOException;

public class Part1 {

    public static void main(String[] args) throws IOException {
        run();
    }
    public static void run() throws FileNotFoundException {
        String gender = FinalProjectTemplate.getGender();
        String name = FinalProjectTemplate.getName();
        String year = FinalProjectTemplate.getYear();
        String list = SearchFile.searchList(year, name);
        String[] array = SearchFile.lineToArray(list);
        SearchFile.printResult(array, name, gender, year);
    }
    public static String resultReturn() throws FileNotFoundException {
        String result;
        if(FinalProjectTemplate.getYear().equals("All")){
            String gender = FinalProjectTemplate.getGender();
            String name = FinalProjectTemplate.getName();
            String list = SearchCumulativeFile.searchList(name);
            String[] array = SearchCumulativeFile.lineToArray(list);
            result = SearchCumulativeFile.returnResult(array, name, gender);
            return result;
        } else {
            String gender = FinalProjectTemplate.getGender();
            String name = FinalProjectTemplate.getName();
            String year = FinalProjectTemplate.getYear();
            String list = SearchFile.searchList(year, name);
            String[] array = SearchFile.lineToArray(list);
            result = SearchFile.returnResult(array, name, gender, year);
            return result;
        }
    }

}

SearchFile.java

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.StringTokenizer;

public class SearchFile {
    public static String searchList(String year, String name) throws FileNotFoundException {
        String targetLine = null;
        @SuppressWarnings("resource")
        Scanner input = new Scanner(new File("Babynamesranking" + year + ".txt"));
        while(input.hasNextLine()){
            String currentLine = input.nextLine();
            if(currentLine.contains(name)){
                StringTokenizer tokenizer = new StringTokenizer(currentLine);
                while(tokenizer.hasMoreTokens()){
                    if(tokenizer.nextToken().equals(name)) {
                        targetLine = currentLine;
                    }
                }
            }
        }
        return targetLine;
    }

    public static String[] lineToArray(String list){
        String[] table = new String[5];

        try{
            StringTokenizer tokenizer = new StringTokenizer(list);
            while(tokenizer.hasMoreTokens()) {
                for(int i = 0; i < table.length; i++){
                    table[i] = tokenizer.nextToken();
                }
            }
        } catch (Exception e) {

        }
        return table;
    }

    public static void printResult(String[] list, String name, String gender, String year){
        if(gender.equals("M") && name.equals(list[1])){
            System.out.println(name + " is ranked #" + list[0] + " in the year " + year);
        }
        else if(gender.equals("F") && name.equals(list[3])){
            System.out.println(name + " is ranked #" + list[0] + " in the year " + year);
        }
        else {
            System.out.println(name + " is unranked in the year " + year);
        }
    }

    public static String returnResult(String[] list, String name, String gender, String year){
        String result;
        if(gender.equals("M") && name.equals(list[1])){
            result = (name + " is ranked #" + list[0] + " in the year " + year);
        }
        else if(gender.equals("F") && name.equals(list[3])){
            result = (name + " is ranked #" + list[0] + " in the year " + year);
        }
        else {
            result = (name + " is unranked in the year " + year);
        }
        return result;
    }

}


SearchCumulativeFile.java

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.StringTokenizer;

public class SearchCumulativeFile {
    public static String searchList(String name) throws FileNotFoundException {
        String targetLine = null;
        @SuppressWarnings("resource")
        Scanner input = new Scanner(new File("ranking_cumulative.txt"));
        while(input.hasNextLine()){
            String currentLine = input.nextLine();
            if(currentLine.contains(name)){
                StringTokenizer tokenizer = new StringTokenizer(currentLine);
                while(tokenizer.hasMoreTokens()){
                    if(tokenizer.nextToken().equals(name)) {
                        targetLine = currentLine;
                    }
                }
            }
        }
        return targetLine;
    }

    public static String[] lineToArray(String list){
        String[] table = new String[5];

        try{
            StringTokenizer tokenizer = new StringTokenizer(list);
            while(tokenizer.hasMoreTokens()) {
                for(int i = 0; i < table.length; i++){
                    table[i] = tokenizer.nextToken();
                }
            }
        } catch (Exception e) {

        }
        return table;
    }

    public static void printResult(String[] list, String name, String gender){
        if(gender.equals("M") && name.equals(list[1])){
            System.out.println(name + " is ranked #" + list[0] + " overall " );
        }
        else if(gender.equals("F") && name.equals(list[3])){
            System.out.println(name + " is ranked #" + list[0] + " overall ");
        }
        else {
            System.out.println(name + " is unranked overall " );
        }
    }

    public static String returnResult(String[] list, String name, String gender){
        String result;
        if(gender.equals("M") && name.equals(list[1])){
            result = (name + " is ranked #" + list[0] + " overall ");
        }
        else if(gender.equals("F") && name.equals(list[3])){
            result = (name + " is ranked #" + list[0] + " overall " );
        }
        else {
            result = (name + " is unranked overall ");
        }
        return result;
    }

}