Java 菜单界面学生记录系统

Java 菜单界面学生记录系统,java,loops,interface,menu,Java,Loops,Interface,Menu,我有一个部分工作的记录系统,但我的菜单界面有问题。基本上,菜单应允许您: 添加一个学生 删除学生 印刷学生 退出 现在菜单工作正常,但我在添加学生部分遇到问题。当他们添加学生时,他们需要: 输入名字的提示 姓氏提示 提示输入身份证号码 当他们这样做时,它会询问他们是否想再添加一个;如果输入“y”,它将再次循环,如果输入“n”,它将返回主菜单 现在在我的电脑上,当他们按“n”时,什么都不会发生,当你按y时,它会再次循环,但它不会让你为名字输入任何值 以下是系统的所有代码: REGISTRYIN

我有一个部分工作的记录系统,但我的菜单界面有问题。基本上,菜单应允许您:

  • 添加一个学生
  • 删除学生
  • 印刷学生
  • 退出
  • 现在菜单工作正常,但我在添加学生部分遇到问题。当他们添加学生时,他们需要:

    • 输入名字的提示
    • 姓氏提示
    • 提示输入身份证号码
    当他们这样做时,它会询问他们是否想再添加一个;如果输入“y”,它将再次循环,如果输入“n”,它将返回主菜单

    现在在我的电脑上,当他们按“n”时,什么都不会发生,当你按y时,它会再次循环,但它不会让你为名字输入任何值

    以下是系统的所有代码:

    REGISTRYINTERFACE.java

    /**
     * @version 1.0
     * @author parry2411 
     */
    package student;
    
    import java.util.Scanner;
    
        public class RegistryInterface
        {
    
            private Registry theRegistry = new Registry();
            Scanner input = new Scanner(System.in);
    
            public RegistryInterface(Registry theRegistry)
            {
            }
    
            public void doMenu()
            {
                boolean done = false;
    
                while (!done)
                {
                    try
                    {
                        System.out.println("\nRegistry Main Menu\n*******************\n");
                        System.out.println("1. Add a Student \n2. Delete a Student"
                                + "\n3. Print Registry\n0. Quit");
    
                        System.out.println("Select Option [1, 2, 3, 0] :>");
                        String userDecission = input.nextLine();
    
                        int decission = Integer.parseInt(userDecission);
    
                        switch (decission)
                        {
                            case 0:
                                System.out.println("System Closing Down..");
                                break;
    
                            case 1:
                                doAddStudent();
                                break;
    
                            case 2:
                                doDeleteStudent();
                                break;
    
                            case 3:
                                doPrintRegistry();
                                break;
    
                            default:
                                System.out.println("\nPlease Enter in a valid"
                                        + " Menu Option");
                                doMenu();
                                break;
                        }
                        done = true;
                    }catch(Exception e)
                    {
                        System.out.println("Incorrect Value Entered, Try Again....");
                    }
                }
            }
    
    
        private void doAddStudent()
            {
                String addMore;
                do
                {
                    System.out.println("\nAdd New Student\n***********\n");
    
                    try
                    {
                        System.out.println("Enter Students Forename :>");
                        String fName = input.nextLine();
    
                        System.out.println("Enter Student Surname :>");
                        String sName = input.nextLine();
    
                        System.out.println("Enter Student ID Number :>");
                        int idNum = input.nextInt();
    
                        theRegistry.addStudent(new Student(fName, sName, idNum));
    
                    } catch (Exception e)
                    {
                        System.out.println("\nERROR OCCURED: Incorect Value Entered"
                                + "\nTry Again... \nStudent Was NOT added");
                    }
    
    
                    System.out.println("\nAdd Another Student (Y/N) : >");
                    addMore = input.next();
    
    
    
                } while (!"n".equals(addMore));
            }
    
            private void doDeleteStudent()
            {
                String another;
                do
                {
                    System.out.println("\nDelete Student\n***********\n");
                    System.out.println("Enter Student ID To Delete :>");
                    try
                    {
                        int studID = input.nextInt();
                        theRegistry.deleteStudent(studID);
    
                    } catch (Exception e)
                    {
                        System.out.println("\nERROR OCCURED: Incorect Value Entered"
                                + "\nTry Again...\n");
                    }
    
                    System.out.println("\nDelete Another? (Y/N)");
                    another = input.next();
    
    
                } while (!"n".equals(another));
            }
    
            private void doPrintRegistry()
            {
    
                System.out.println("\nPrinting Registry\n***********\n");
    
                if(theRegistry.studentList.size() == 0)
                {
                    System.out.println("The Student Record System Contains No Student"
                            + " Records, Please Add Students\n\n");
                }
                else
                {
                   System.out.println(theRegistry.format()); 
                    System.out.println("\n****Printing Finished........");
                }
    
                doMenu();
    
            }
        }
    
    REGISTRY.java

    /**
     * @version 1.0
     * @author parry2411 
     */
    package student;
    
    import java.util.Iterator;
    import java.util.LinkedList;
    
    public class Registry
    {
        public LinkedList<Student> studentList = new LinkedList<>();
        public Iterator<Student> iter = studentList.iterator();
    
        public Registry()
        {
        }
    
        public void addStudent(Student aStudent)
        {
            Iterator<Student> addIterator = studentList.iterator();
    
            while (addIterator.hasNext())
            {
                Student ob = addIterator.next();
                if (ob.getStudentID() == aStudent.getStudentID())
                {
                    System.out.println("This Student ID "
                            + ""+ aStudent.getStudentID()+ " Is Already Used"
                            + "\n Try Adding Again......");
                    return;
                }
            }
            System.out.println("Student "+ aStudent.getForeName() + " "
                    + "" + aStudent.getSurName() +" "
                    + "Successfully Added To System.....");
    
            studentList.addLast(aStudent);
        }
    
        public void deleteStudent(int studentID)
        {
            Iterator<Student> deleteIterator = studentList.iterator();
            boolean removed = false;
    
            while(deleteIterator.hasNext())
            {
                Student ob = deleteIterator.next();
    
                if(ob.getStudentID() == studentID)
                {
                    deleteIterator.remove();
                    removed = true;
                    System.out.println(ob.getForeName() + " " + ob.getSurName() + " Was Succesffully Removed from System. \n");
                }
            }
            if(!removed)
            {
                System.out.println("Student ID not found");
            }
        }
    
        public String format()
        {
            StringBuilder sB = new StringBuilder();
            Iterator<Student> formatIterator = studentList.iterator();
    
            while(formatIterator.hasNext())
            {
                Student ob = formatIterator.next();
                sB.append(ob.format());      
            }
            return sB.toString();
        }
    
        @Override
        public String toString()
        {
            Iterator<Student> toStringIterator = studentList.iterator();
            StringBuilder sB = new StringBuilder();
    
            while(toStringIterator.hasNext())
            {
                Student ob = toStringIterator.next();
                sB.append(ob.toString()).append("\n");
            }
            return sB.toString();
        }
    }
    
    Student.java

    /**
     * @version 1.0
     * @author parry2411
     * Date Created: 18-Mar-2013
     */
    
    package student;
    
    public class Student 
    {
        private String foreName;
        private String surName;
        private int studentID;
    
    
        public Student(String foreName, String surName, int studentID)
        {
            this.foreName = foreName;
            this.surName = surName;
            this.studentID = studentID;
        }
    
        public String getForeName()
        {
            return foreName;
        }
    
        public void setForeName(String foreName)
        {
            this.foreName = foreName;
        }
    
        public String getSurName()
        {
            return surName;
        }
    
        public void setSurName(String surName)
        {
            this.surName = surName;
        }
    
        public int getStudentID()
        {
            return studentID;
        }
    
        public void setStudentID(int studentID)
        {
            this.studentID = studentID;
        }
    
        @Override
        public String toString()
        {
            return getClass().getSimpleName()+"{" + "foreName=" + foreName + ", surName=" + surName + ", studentID=" + studentID + '}';
        }
    
        public String format()
        {
            return String.format("%-5s %-5s \t\t %-5d \n",foreName,surName,studentID);
        }
    }
    

    谢谢

    将您的
    DOADStudent
    方法更改为以下方式:

    private void doAddStudent()
        {
            String addMore;
            do
            {
                System.out.println("\nAdd New Student\n***********\n");
    
                try
                {
                    System.out.println("Enter Students Forename :>");
                    String fName = input.next();//use next() instead of nextLine()
    
                    System.out.println("Enter Student Surname :>");
                    String sName = input.next();//use next() instead of nextLine();
    
                    System.out.println("Enter Student ID Number :>");
                    int idNum = input.nextInt();
    
                    theRegistry.addStudent(new Student(fName, sName, idNum));
    
                } catch (Exception e)
                {
                    System.out.println("\nERROR OCCURED: Incorect Value Entered"
                            + "\nTry Again... \nStudent Was NOT added");
                }
    
    
                System.out.println("\nAdd Another Student (Y/N) : >");
                addMore = input.next();
    
    
    
            } while (!"n".equals(addMore));
        }
    
    由于使用的是
    Scanner.nextLine()
    ,所以出现错误。现在的问题是为什么

    如官方文件所述:

    使此扫描仪前进到当前行,并返回所需的输入 已跳过。此方法返回当前行的其余部分, 不包括末端的任何行分隔符。该位置设置为 下一行的开头

    Scanner.next()
    无法正确终止分配的内存行。因此,当通过
    String fName=input.nextLine()调用
    nextLine()
    after
    addMore=input.next()
    在用户输入
    y
    之后,它实际上终止了前一行中实际包含值的内容——通过
    next()
    输入,而不是接收新的
    字符串
    值。这就是它跳过用户输入内容的原因。因此,为了继续读取输入的值而不是前一个空行(因为
    next()
    )返回的值没有终止),您可以使用根据官方文件规定的值:

    查找并返回来自此扫描仪的下一个完整令牌。

    更新
    您还应替换:

    String userDecission = input.nextLine();
    


    您可以发布一个包含反映问题的代码的精简版本吗?基本上,错误发生在RegistryInterface类,老实说,我无法将其减少,因为问题可能在该类的任何地方。是的,它可能在任何地方-这就是问题的关键:如果您可以定位问题,你甚至不用发帖就能解决它。尝试阅读SSCCE页面。这已经起作用了,但当我按n键添加更多时,它应该会加载菜单,这只是添加If语句的情况吗?
    String userDecission = input.nextLine();
    
    String userDecission = input.next();