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;
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.