更新学生信息(运行时)

时间:2013-12-30 09:48:26

标签: java arrays arraylist runtime updating

这是我的学生记录系统代码。我认为它完成了80%。这里的问题是,当我有很多学生并且我更新特定学生(主题和年级)时,更新的元素不会保存在该特定学生上。当我显示所有结果时,更新的值将提供给其他学生。请帮我解决这个问题。顺便说一句,这段代码有2个班级Student和StudentGrade。我希望你能帮我解决这个问题。提前致谢。 :)并提前新年快乐!

public class Student
    {
    private String IDNumber;
    private String firstName;
    private String middleName;
    private String lastName;
    private String degree;
    private int yearLevel;

    public Student()
    {
        String IDNum;
        String fName;
        String mName;
        String lName;
        String deg;
        int level;  
    }

    public Student(String IDNum, String fName, String mName, String lName, String      deg,int level )
    {
        this.IDNumber=IDNum;
        this.firstName=fName;
        this.middleName=mName;
        this.lastName=lName;
        this.degree=deg;
        this.yearLevel=level;
    }


    public void setIdNumber(String IDNumber)
    {
        this.IDNumber = IDNumber;
    }
    public String getIdNumber()
    {
        return IDNumber;
    }


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


    public void setMiddleName(String middleName)
    {
        this.middleName=middleName;
    }
    public String getMiddleName()
    {
        return middleName;
    }


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


    public void setDegree(String degree)
    {
        this.degree=degree;
    }
    public String getDegree()
    {
        return degree;
    }


    public void setYearLevel(int yearLevel)
    {
        this.yearLevel=yearLevel;
    }
    public int getYearLevel()
    {
        return yearLevel;
    }

    }

    public class StudentGrade
    {
        private String IDNumber;
        private String subject;
        private double grade;
        private double average;

        public StudentGrade()
        {
            String IDNum;
            String sub;
            double grad;
            double ave;

        }

        public StudentGrade(String IDNum,String sub,double grad,double ave)
        {
            this.IDNumber=IDNum;
            this.subject=sub;
            this.grade=grad;
            this.average=ave;

        }

        public void setSubject(String subject)
        {
            this.subject=subject;
        }
        public String getSubject()
        {
            return subject;
        }

        public void setGrade(double grade)
        {
            this.grade=grade;
        }
        public double getGrade()
        {
            return grade;
        }

        public String getIDNumber()
        {
            return IDNumber;
        }

    }

    public class StudentGrade
    {
        private String IDNumber;
        private String subject;
        private double grade;
        private double average;

        public StudentGrade()
        {
            String IDNum;
            String sub;
            double grad;
            double ave;

        }

        public StudentGrade(String IDNum,String sub,double grad,double ave)
        {
            this.IDNumber=IDNum;
            this.subject=sub;
            this.grade=grad;
            this.average=ave;

        }

        public void setSubject(String subject)
        {
            this.subject=subject;
        }
        public String getSubject()
        {
            return subject;
        }

        public void setGrade(double grade)
        {
            this.grade=grade;
        }
        public double getGrade()
        {
            return grade;
        }

        public String getIDNumber()
        {
            return IDNumber;
        }

    }

    import java.util.ArrayList;
    import java.util.Scanner;

    public class test2 {
    static ArrayList<Student> studentList = new ArrayList<Student>();
    static ArrayList<StudentGrade> studentLists = new ArrayList<StudentGrade>();

    public static void main(String[] args) 
    {
        menu();
    }

    public static void menu() 
    {
        Scanner in = new Scanner(System.in);

        int choice = 0;

        System.out.print("*********STUDENT RECORD SYSTEM*********\n\n");
        System.out.println("\t MENU ");
        System.out.println("[1]ADD STUDENT");
        System.out.println("[2]DISPLAY ALL");
        System.out.println("[3]DISPLAY SPECIFIC");
        System.out.println("[4]UPDATE");
        System.out.println("[5]AVERAGE");
        System.out.println("[6]EXIT");
        System.out.println("?");

        choice = in.nextInt();
        if (choice == 1) 
        {
            add();
        }

        else if (choice == 2) 
        {
            displayAll();
        }

        else if (choice == 3) 
        {
            displaySpecific();
        }

        else if (choice == 4) 
        {
            update();
        }

        else if (choice == 5)
        {
            average();
        }


        else if( choice == 6)
        {
        System.exit(0);
        }

        else
            menu();

    }

    public static void add() 
    {
        Scanner in = new Scanner(System.in);
        char ans;
        String temp;

        int total;

        do {

            System.out.println("NUMBER OF STUDENTS YOU WANT TO INPUT: ");
            total = in.nextInt();

            Student[] student = new Student[total];

            for (int index = 0; index < student.length; index++) {
                student[index] = new Student();

                System.out.print("**********STUDENT INFORMATION**********\n\n");
                System.out.println("PRESS ENTER");
                in.nextLine();
                System.out.print("ID NUMBER: ");
                student[index].setIdNumber(in.nextLine());

                System.out.print("FIRST NAME: ");
                student[index].setFirstName(in.nextLine());

                System.out.print("MIDDLE NAME: ");
                student[index].setMiddleName(in.nextLine());

                System.out.print("LAST NAME: ");
                student[index].setLastName(in.nextLine());

                System.out.print("DEGREE: ");
                student[index].setDegree(in.nextLine());

                System.out.print("YEAR LEVEL: ");
                student[index].setYearLevel(in.nextInt());

                studentList.add(student[index]);

            }

            System.out.print("Would you like to enter in a new student (y/n)? ");
            String answer = in.next();
            ans = answer.charAt(0);

        } while (ans == 'y');

        /* // SEARCH and DISPLAY SPECIFIC
        String id = new String();
        in.nextLine();
        System.out.print("Enter ID NUMBER: ");
        id = in.nextLine();

        for (int j = 0; j < studentList.size(); j++) {
            if (id.equals(studentList.get(j).getIdNumber())) {
                System.out.printf("STUDENT SEARCHED");
                System.out.print("\nID NUMBER:             "
                        + studentList.get(j).getIdNumber());
                System.out.print("\nFULL NAME: "
                        + studentList.get(j).getFirstName() + " "
                        + studentList.get(j).getMiddleName() + " "
                        + studentList.get(j).getLastName());
                System.out.print("\nDEGREE and YEAR: "
                        + studentList.get(j).getDegree() + "-"
                        + studentList.get(j).getYearLevel() + "\n\n");
                System.out.println();
            }
        }

        // DISPLAY ALL
        for (int i = 0; i < studentList.size(); i++) {
            System.out.printf("STUDENT[%d]", i + 1);
            System.out
                    .print("\nID NUMBER: " + studentList.get(i).getIdNumber());
            System.out.print("\nFULL NAME: "
                    + studentList.get(i).getFirstName() + "   "
                    + studentList.get(i).getMiddleName() + " "
                    + studentList.get(i).getLastName());
            System.out.print("\nDEGREE and YEAR: "
                    + studentList.get(i).getDegree() + "-"
                    + studentList.get(i).getYearLevel());
            System.out.println();
        } */

        menu(); 

    }

    public static void displayAll() {
        Scanner in = new Scanner(System.in);
        if(studentList.size() == 0)
        {
            System.out.print("EMPTY lageeeee!!! \nPLEASE INPUT FIRST\n\n");
            in.nextLine();
        }
        else
        {
            if(studentLists.size() == 0){
                System.out.print("************STUDENT   RECORD*************");

                for (int i = 0; i < studentList.size(); i++) {
                    System.out.printf("\nSTUDENT[%d]", i + 1);
                    System.out
                            .print("\nID NUMBER: " +   studentList.get(i).getIdNumber());
                    System.out.print("\nFULL NAME: "
                            + studentList.get(i).getFirstName()    + " "
                            + studentList.get(i).getMiddleName() + " "
                            + studentList.get(i).getLastName());
                    System.out.print("\nDEGREE and YEAR: "
                            + studentList.get(i).getDegree() + "-"
                            + studentList.get(i).getYearLevel()/* +"\nGrade: "
                            + studentLists.get(i).getGrade() */+"\n\n");


                }
                in.nextLine();
            }

            else{
                System.out.print("************STUDENT RECORD*************");

                for (int i = 0; i < studentList.size(); i++) 
                {
                    System.out.printf("\nSTUDENT[%d]", i + 1);
                    System.out
                            .print("\nID NUMBER: " + studentList.get(i).getIdNumber());
                    System.out.print("\nFULL NAME: "
                            + studentList.get(i).getFirstName() + " "
                            + studentList.get(i).getMiddleName() + " "
                            + studentList.get(i).getLastName());
                    System.out.print("\nDEGREE and YEAR: "
                            + studentList.get(i).getDegree() + "-"
                            + studentList.get(i).getYearLevel()+"\n\n");

                }

                for(int xxx = 0 ; xxx < studentLists.size(); xxx++ )
                {
                                   System.out.printf("\nSUBJECT: "
                                +   studentLists.get(xxx).getSubject()+" Grade: "
                                +   studentLists.get(xxx).getGrade());
                }

                in.nextLine();
            }
        }
    menu();
    }

    public static void displaySpecific() {
        Scanner in = new Scanner(System.in);
        if(studentList.size() == 0)
        {
            System.out.print("EMPTY oe!!! KALAGOT!\nPLEASE INPUT FIRST\n");
            in.nextLine();
        }
        else
        {

            String id = new String();
            /* in.nextLine(); */
            System.out.print("Enter ID NUMBER: ");
            id = in.nextLine();
            if(studentLists.size()==0)
            {
                for (int j = 0; j < studentList.size(); j++) 
                {
                    if (id.equals(studentList.get(j).getIdNumber())) 
                    {
                        System.out.printf("\n*************STUDENT    SEARCHED*************");
                        System.out.print("\nID NUMBER: "
                                + studentList.get(j).getIdNumber());
                        System.out.print("\nFULL NAME: "
                                + studentList.get(j).getFirstName() + " "
                                + studentList.get(j).getMiddleName() + " "
                                + studentList.get(j).getLastName());
                        System.out.print("\nDEGREE and YEAR: "
                                + studentList.get(j).getDegree() + "-"
                                + studentList.get(j).getYearLevel() + /* "\nGrade: "
                                + studentLists.get(j).getGrade()+ */"\n\n");
                        System.out.println();
                        in.nextLine();
                    }

                    /* else
                    {
                        System.out.print("STUDENT DOES NOT EXIST IN  THIS WORLD!");
                        in.nextLine();
                    } */

                }
            }

            else
            {
                for (int j = 0; j < studentList.size(); j++) 
                {
                        if  (id.equals(studentList.get(j).getIdNumber())) 
                        {
                            System.out.printf("\n*************STUDENT SEARCHED*************");
                            System.out.print("\nID NUMBER: "
                                    + studentList.get(j).getIdNumber());
                            System.out.print("\nFULL NAME: "
                                    + studentList.get(j).getFirstName() + " "
                                    + studentList.get(j).getMiddleName() + " "
                                    + studentList.get(j).getLastName());
                            System.out.print("\nDEGREE and YEAR: "
                                    + studentList.get(j).getDegree() + "-"
                                    + studentList.get(j).getYearLevel() +"\n\n");
                            System.out.println();
                        }

                }
                for(int xxx = 0 ; xxx < studentLists.size(); xxx++ )
                {
                                System.out.printf("\nSUBJECT: "
                                + studentLists.get(xxx).getSubject()+" Grade: "
                                +  studentLists.get(xxx).getGrade());
                }

                in.nextLine();
            }

        }
        menu();
    }

    public static void update()
    {
        Scanner in = new Scanner(System.in);
        String idnum = new String();    
        char answer;
        in.nextLine();
        System.out.print("Enter ID NUMBER: ");
        idnum = in.nextLine();
        int total;

        for(int x=0;x<studentList.size();x++)
        {
            if(idnum.equals(studentList.get(x).getIdNumber()))
            {
                    System.out.println("NUMBER OF SUJECTS YOU WANT TO  INPUT: ");
                    total = in.nextInt();
                do
                {
                        StudentGrade[] update = new StudentGrade[total];

                        for(int y = 0;y<update.length;y++)
                        {
                            update[y] = new StudentGrade();

                            in.nextLine();
                            System.out.print("ENTER SUBJECT:  ");
                             update[y].setSubject(in.nextLine());

                            System.out.print("ENTER GRADE: ");
                             update[y].setGrade(in.nextDouble());

                            studentLists.add(update[y]);
                        }

                        System.out.print("Enter another subject and  grade? [y/n]");
                        String ans = in.next();
                        answer = ans.charAt(0);

                }while(answer == 'y');

            }

        menu();
        }
    }

    public static void average()
    {
            Scanner in = new Scanner(System.in);

            double sum=0;
            double average=0;
            String ID = new String();

            System.out.print("ENTER ID NUMBER: ");
            ID = in.nextLine();

            for(int xx=0;xx<studentList.size();xx++)
            {
                if(ID.equals(studentList.get(xx).getIdNumber()))
                {
                    for(int ind=0;ind<studentLists.size();ind++)
                    {
                            sum +=  studentLists.get(ind).getGrade();
                            average=sum/studentLists.size();


                    }
                            System.out.print("ID NUMBER:"+studentList.get(xx).getIdNumber()+"\nNAME: "
                                                +studentList.get(xx).getFirstName()+" "
                                                +studentList.get(xx).getMiddleName()+" "
                                                +studentList.get(xx).getLastName());

                            System.out.print("\nAVERAGE: "+average+"\n");

                            in.nextLine();
                }

            }

    menu();
    }
    }

2 个答案:

答案 0 :(得分:0)

首先,我将studentList更改为Map,以便能够直接通过id获取学生,而不是每次都搜索匹配的学生。

对所有学生的收藏的访问是这样的:

for(Map.Entry<String, Student> entry : studentList.entrySet()){
    String id = entry.getKey();
    Student student = entry.getValue();

    // ...
}

第二步,您应该检查更新方法。我看,你是在搜索学生,但是你没有更新这个对象。您在循环结束时使用studentList.add()添加新的。

您已将匹配的学生存储到本地变量中,只需修改此项而不修改学生集合。

答案 1 :(得分:0)

更新功能中有两个读者语句

public static void update()
    {
        Scanner in = new Scanner(System.in);
        String idnum = new String();    
        char answer;
    Scanner in = new Scanner(System.in);
            String idnum = new String();    
            char answer;
            in.nextLine();//1
            System.out.print("Enter ID NUMBER: ");
            idnum = in.nextLine();//2

我认为应该只有一个作为你刚读取的id号,而@Vlad说你在数组列表中添加一个新元素而不是修改现有数据。 您的代码也可以使用

arrayList.set(index i,String replaceElement);// this will help you replace the value at a particular index

最好使用HashMap而不是数组列表,以便在将现有元素放入时使用 地图上的值被覆盖。

static Map <String,Student> studentList = new HashMap<String,Student>();
static Map<String, List<StudentGrade>> studentLists = new HashMap<String, List<StudentGrade>>();

这里的密钥将是学生idNumber