Create a sign up page. The user should be given options of whether to Register or Login in the console. If they type in "Register" or "register" than I want it prompt the user to display - this page should allow users to enter their first name, last name, age, username in the input box.There are conditions where the user name must contain an underscore and the length of the user name must not be longer than 5 characters long. If the user name meets the requirements than display a show message saying "User has successfully captured" and put their information that was enter into the text file. If the user name is more than 5 characters of length and does not contain a underscore then display show message saying "Your username is not correctly formatted, please ensure username contains an underscore is no more than 5 characters in length. Add a retry operator for the user to re enter instead of entering again. Write this code in java and put the username conditions in the methods. Make use of super class, sub class, constructors, getters an setters. Use a reasonable comments to explain what is going on in the program. Add message dialog if the user wants to exit the program. This must be a warning message saying "Leaving so soon".

import java.io.FileWriter;

import java.io.PrintWriter;
import java.util.Scanner;

public class SignUpPage {

// Super class for User
public class User {
String firstName;
String lastName;
int age;
String username;

public User(String firstName, String lastName, int age, String username) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.username = username;
}

// Getters and Setters
public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

}

// Sub class for RegisteredUser
public class RegisteredUser extends User {

public RegisteredUser(String firstName, String lastName, int age, String username) {
super(firstName, lastName, age, username);
}

@Override
public String toString() {
return "RegisteredUser{" +
"firstName='" + firstName + '\'' +
", lastName='" + lastName + '\'' +
", age=" + age +
", username='" + username + '\'' +
'}';
}
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

System.out.println("Welcome to the Sign Up Page!");
System.out.println("Would you like to Register or Login?");

String choice = scanner.nextLine();

if (choice.equalsIgnoreCase("Register")) {
System.out.println("Please enter your first name:");
String firstName = scanner.nextLine();

System.out.println("Please enter your last name:");
String lastName = scanner.nextLine();

System.out.println("Please enter your age:");
int age = scanner.nextInt();
scanner.nextLine(); // Consume newline character

System.out.println("Please enter a username (must contain an underscore and be no more than 5 characters long):");
String username = scanner.nextLine();

if (isValidUsername(username)) {
User user = new SignUpPage().new RegisteredUser(firstName, lastName, age, username);
System.out.println("User has been successfully registered!");

try {
PrintWriter writer = new PrintWriter(new FileWriter("users.txt", true));
writer.println(user.toString());
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
} else {
System.out.println("Your username is not correctly formatted. Please ensure username contains an underscore and is no more than 5 characters in length.");
System.out.println("Would you like to retry? (yes/no)");
String retry = scanner.nextLine();
if (retry.equalsIgnoreCase("yes")) {
main(null);
} else {
System.out.println("Leaving so soon. Goodbye!");
}
}

} else if (choice.equalsIgnoreCase("Login")) {
// Login functionality
} else {
System.out.println("Invalid choice. Please try again.");
}

scanner.close();
}

public static boolean isValidUsername(String username) {
return username.length() <= 5 && username.contains("_");
}
}