rendered paste bodyimport java.io.*;class Wait { public static void oneSec() { try { Thread.currentThread().sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } public static void manySec(long s) { try { Thread.currentThread().sleep(s * 1000); } catch (InterruptedException e) { e.printStackTrace(); } }}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", "ASDasd", 99, "4167309664", true); enrollStudent("Jesus", "Christ", 5, "777", false); enrollStudent("Steve", "Spurrier", 66, "1111111", true); enrollStudent("Your", "Mother", 39, "133123434", true); enrollStudent("Don", "Juan", 56, "6669", true); viewStudentRecords(); System.out.println("Now order by grades"); sortByGrade(); viewStudentRecords(); } public static void viewStudentRecords() { StudentRecord currentpos = initial; while (currentpos != null) { System.out.println (currentpos.returnFormattedString ()); currentpos = currentpos.nextStudentRecord (); } } public static void sortByGrade () { StudentRecord currentpos; StudentRecord templink; StudentRecord secondpos; StudentRecord lastpos; StudentRecord previouslink; StudentRecord currentpostemp; boolean sort = true; int debugcount = 0; //Sort it now (alter the link list) while (sort) { sort = false; //Sorting the first one if (initial.returnGrade() < initial.nextStudentRecord().returnGrade()) { templink = initial.nextStudentRecord(); initial.nextLink(templink.nextStudentRecord()); templink.nextLink(initial); initial = templink; } previouslink = initial; currentpos = initial.nextStudentRecord(); while (currentpos.nextStudentRecord() != null) { currentpostemp = currentpos; if (currentpos.nextStudentRecord() != null) { secondpos = currentpos.nextStudentRecord(); } else { secondpos = null; } if (secondpos.nextStudentRecord() != null) { lastpos = secondpos.nextStudentRecord(); } else { lastpos = null; } viewStudentRecords(); if (currentpos.returnGrade() < secondpos.returnGrade()) { previouslink.nextLink(secondpos); if (secondpos.nextStudentRecord() != null) { secondpos.nextLink(currentpos); currentpos.nextLink(lastpos); } sort = true; previouslink = currentpostemp; currentpos = currentpostemp.nextStudentRecord(); } else { previouslink = currentpos; currentpos = currentpostemp.nextStudentRecord(); } System.out.println ("-----------"); Wait.oneSec(); } } } public static void enrollStudent(String firstname, String lastname, int grade, String phonenumber, boolean criminalrecord) { StudentRecord newStudentRecord = new StudentRecord(firstname, lastname, grade, phonenumber, criminalrecord); if (initial != null) { if (lastname.compareTo (initial.returnlName ()) < 0) { newStudentRecord.nextLink(initial); initial = newStudentRecord; } else { StudentRecord searchResult = searchByName(firstname, lastname); newStudentRecord.nextLink (searchResult.nextStudentRecord()); searchResult.nextLink (newStudentRecord); } } else { initial = newStudentRecord; newStudentRecord.nextLink(null); } } //Expells the student //The searchByName cannot be used (as there is no link to the previous node) public static void expellStudent(String firstname, String lastname) { if (initial != null) { if (((initial.returnlName()).equals(lastname)) && ((initial.returnfName()).equals(firstname))) { //First check if the first user in the list is a match initial = initial.nextStudentRecord(); } else { StudentRecord currentpos = initial; boolean foundpos = false; //Checks for two records ahead so that it's possible to expel the last student in the list while ((currentpos.nextStudentRecord()).nextStudentRecord() != null && !foundpos) { if (lastname.compareTo ((currentpos.nextStudentRecord ()).returnlName ()) > 0) { currentpos = currentpos.nextStudentRecord(); } else { foundpos = true; } } currentpos.nextLink(currentpos.nextStudentRecord().nextStudentRecord()); } } else { System.out.println ("No students to expell"); } } public static int classAverage() { StudentRecord currentpos = initial; int gradeTotal = 0; int numStudents = 0; while (currentpos.nextStudentRecord() != null) { gradeTotal = gradeTotal + currentpos.returnGrade(); numStudents++; currentpos = currentpos.nextStudentRecord(); } return gradeTotal / numStudents; } //Enters a new grade for a student (no output) public static void enterGrade(String firstname, String lastname, int newgrade) { if (initial != null) { if (((initial.returnlName()).equals(lastname)) && ((initial.returnfName()).equals(firstname))) { initial.assignGrade(newgrade); } else { StudentRecord searchResult = searchByName(firstname, lastname); searchResult.nextStudentRecord().assignGrade(newgrade); } } else { System.out.println ("Error: No entries exist in database"); } } //Performs a search for the name (outputs the search result) private static StudentRecord searchByName(String firstname, String lastname) { boolean foundpos = false; StudentRecord current = initial; if (lastname.compareTo (current.returnlName ()) < 0) { foundpos = true; } while (((current.nextStudentRecord ()) != null) && !foundpos) //Start the search { 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 } } return current; } } /*public static void expellStudent(String firstname, String lastname) { StudentRecord currentpos = first; //To check if the student is first in the list }*/ //START OF SELECTDB/*String selectdb () throws IOException{ //Lists the List .txt files in the List folder and their respective ids //List files start with "DB" and have no extention String userdir = System.getProperty ("user.dir"); File f = new File (userdir); String[] files = f.list (); for (int i = 0 ; i < files.length ; i++) { File f2 = new File (userdir, files [i]); if (!f2.isDirectory () && f2.exists ()) { if (f2.isFile ()) { //Check if it starts with "DB" if ((f2.getName ().charAt (0) == 68) && (f2.getName ().charAt (1) == 66)) { System.out.println (f2.getName ()); } } } }*/ /*boolean error = false; BufferedReader br = new BufferedReader (new InputStreamReader (System.in)); String dbchosen = br.readLine (); try { FileInputStream fstream = new FileInputStream (dbchosen); } catch (Exception e) { error = true; } if (error) { return ("Error"); } else { System.out.println ("Success"); return (dbchosen); }}//END OF SELECTDB*/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 String returnfName() { return fName; } 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; }}