import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.LinkedList;
import java.util.Scanner;

public class Student_Manage {
	static Scanner scan = new Scanner(System.in);
	static Student tree;
	static LinkedList<Student> list = new LinkedList<Student>();
	public static boolean Save_to_file(LinkedList<Student> ds, String path) {
        try {
            FileOutputStream fos = new FileOutputStream(path);
            ObjectOutputStream oos = new ObjectOutputStream(fos);
            oos.writeObject(ds);
            oos.close();
            fos.close();
            return true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
    @SuppressWarnings("unchecked")
	public static LinkedList<Student> Read_from_file(String path) {
        
        LinkedList<Student> s=null;
		try {
            FileInputStream fis = new FileInputStream(path);
            ObjectInputStream ois = new ObjectInputStream(fis);
            Object o = ois.readObject();
            s = (LinkedList<Student>) o;
            ois.close();
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return s;
    }
   public static void Readstudentlist(LinkedList<Student> list) {
   System.out.printf("%-3s %-8s %-20s %-10s %-10s","#","Std_id","Std_name","Std_result","Std_rank");
   System.out.println();
    int stt=0;
    for (Student e:list) {
    	System.out.printf("%-3d %-8s %-20s %-10.2f %-10s",++stt,e.getStudent_id(),e.getStudent_name(),e.getStudent_result(),e.getStudent_rank());
    	System.out.println();
    	}
   
    }
   public static void InputResult(LinkedList<Student> list) {
	   for (Student e:list) {
		   System.out.println(e.getStudent_id()+","+e.getStudent_name()+" Input result ");
		   double result = scan.nextDouble();
		   e.setStudent_result(result);
		   if (result>=5) e.setStudent_rank("PASS");
		   else e.setStudent_rank("FAIL");
	   }
   }
   public static void AddStudent(LinkedList<Student> list) {
	   String id;
	   String name;
	   double result;
	   String rank;
	   scan.nextLine();
	   System.out.println("Input Student Information: ");
	   System.out.println("Student_id: ");
	   id = scan.nextLine();
	   System.out.println("Student_name: ");
	   name = scan.nextLine();
	   System.out.println("Student_result: ");
	   result = scan.nextDouble();
	   Student e = new Student(id,name);
	   e.setStudent_result(result);
	   if (result>=5) e.setStudent_rank("PASS");
	   else e.setStudent_rank("FAIL");
	   list.add(e);
	   
   }
   public static int FindStudent(LinkedList<Student> list,String id) {
	   int vitri = -1;
	   for (int i=0;i<list.size();i++) {
		   if (list.get(i).getStudent_id().compareTo(id)==0) {
			   vitri = i;
			   i=list.size();
		   }
	   }
	   return vitri;
   }
   public static void SortList(LinkedList<Student> list) {
	   list.sort((o1,o2)->(o1.getStudent_id().compareTo(o2.getStudent_id())));
   }
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int menu=1;
		
		while (menu!=0) {
		System.out.println("STUDENT MANAGE PROGRAM");
		System.out.println("1-Open Student List from File");
		System.out.println("2-View Student List ");
		System.out.println("3-Input Student Result");
		System.out.println("4-Add Student");
		System.out.println("5-Sort Student List");
		System.out.println("6-Find Student by Id");
		System.out.println("7-Delete Student by ID");
		System.out.println("0-Save/Exit");
		System.out.println("Please choose: ");
		menu = scan.nextInt();
					
		switch (menu) {
		case 1: {list=Read_from_file("D:\\StudentList.dat");break;}
		case 2: {System.out.println("READ LIST:"); Readstudentlist(list); break;}
		case 3: {System.out.println("Input Student Result: ");InputResult(list);break;}
		case 4: {System.out.println("Add Student : ");AddStudent(list);break;}
		case 5: {SortList(list);break;}
		case 6: {scan.nextLine();System.out.println("Input search id: "); String id = scan.nextLine();
		if (FindStudent(list,id)==-1) System.out.println("Not found");
		else System.out.println("Found Student at: "+FindStudent(list,id));
		break;
		}
		case 7: {
			scan.nextLine();
			System.out.println("Input delete id: ");
			String id = scan.nextLine();
			int vitri = FindStudent(list,id);
			if (vitri == -1) System.out.println("No delete id in Student List");
			else list.remove(vitri);
		}
		case 0: {Save_to_file(list,"D:\\StudentList.dat");break;}
		}
		}
		
		scan.close();
		}

	}




