import java.io.*; public class List { static StudentRecord initial = null; //for the purpose of starting with the first node public static void main(String[] args) throws IOException { String input; BufferedReader br = new BufferedReader (new InputStreamReader (System.in)); boolean loop = true; System.out.println("Last name First name Grade Phone Number Criminal Record"); enrollStudent("Alex", "Kravtsov2", 99, "4167309664", true); enrollStudent("Do", "Juan", 56, "6669", true); enrollStudent("Jesusfucking", "Christ", 99, "777", false); viewStudentRecords(); } public static void viewStudentRecords() { StudentRecord currentpos = initial; while (currentpos != null) { System.out.println (currentpos.returnFormattedString ()); currentpos = currentpos.nextStudentRecord (); } } public static void enrollStudent(String firstname, String lastname, int grade, String phonenumber, boolean criminalrecord) { StudentRecord newStudentRecord = new StudentRecord(firstname, lastname, grade, phonenumber, criminalrecord); StudentRecord current = initial; boolean foundpos = false; if (initial != null) //check if it is the first iteration { if (lastname.compareTo (initial.returnlName()) > 0) //Now to check in which position to place the entry { while ((current.nextStudentRecord () != null) && !foundpos) //If it's not done, didn't find the position yet { if (lastname.compareTo ((current.nextStudentRecord ()).returnlName ()) > 0) //Compare the entry and the existing { current = current.nextStudentRecord (); //Advance to the next one } else { foundpos = true; //or indicate the position is found } } newStudentRecord.nextLink (current.nextStudentRecord ()); current.nextLink (newStudentRecord); } else { if (initial != null) { newStudentRecord.nextLink (initial); //go to the next link } initial = newStudentRecord; //set the var to the new record } } else { //if it is the first iteration then assign the variable (or else it will just be NULL) newStudentRecord.nextLink (initial); initial = newStudentRecord; } } } class StudentRecord { String fName, lName, phoneNum; int grade; boolean crimRecord; StudentRecord next; public StudentRecord (String fname1, String lName1, int grade1, String phoneNum1, boolean crimRecord1) { fName = fname1; lName = lName1; grade = grade1; phoneNum = phoneNum1; crimRecord = crimRecord1; } public void addStudentRecord (String fName2, String lName2, int grade2, String phoneNum2, boolean crimRecord2) { next = new StudentRecord (fName2, lName2, grade2, phoneNum2, crimRecord2); } public StudentRecord nextStudentRecord() { return next; } public String returnlName() { return lName; } public void nextLink (StudentRecord newLink) { next = newLink; } public int returnGrade () { return grade; } public void assignGrade (int newGrade) { grade = newGrade; } public String returnFormattedString () { return (lName + generateSpaces(18 - lName.length()) + fName + generateSpaces(18 - fName.length()) + grade + generateSpaces(6 - String.valueOf(grade).length()) + phoneNum + generateSpaces(15 - phoneNum.length()) + crimRecord); } private String generateSpaces(int numspaces) { String spaces = ""; for (int i = 0; i < numspaces; i++) { spaces = spaces + " "; } return spaces; } }