Java 菜单界面学生记录系统
我有一个部分工作的记录系统,但我的菜单界面有问题。基本上,菜单应允许您:Java 菜单界面学生记录系统,java,loops,interface,menu,Java,Loops,Interface,Menu,我有一个部分工作的记录系统,但我的菜单界面有问题。基本上,菜单应允许您: 添加一个学生 删除学生 印刷学生 退出 现在菜单工作正常,但我在添加学生部分遇到问题。当他们添加学生时,他们需要: 输入名字的提示 姓氏提示 提示输入身份证号码 当他们这样做时,它会询问他们是否想再添加一个;如果输入“y”,它将再次循环,如果输入“n”,它将返回主菜单 现在在我的电脑上,当他们按“n”时,什么都不会发生,当你按y时,它会再次循环,但它不会让你为名字输入任何值 以下是系统的所有代码: REGISTRYIN
- 输入名字的提示
- 姓氏提示
- 提示输入身份证号码
/**
* @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()
时
afteraddMore=input.next()
在用户输入y
之后,它实际上终止了前一行中实际包含值的内容——通过next()
输入,而不是接收新的字符串
值。这就是它跳过用户输入内容的原因。因此,为了继续读取输入的值而不是前一个空行(因为next()
)返回的值没有终止),您可以使用根据官方文件规定的值:
查找并返回来自此扫描仪的下一个完整令牌。
更新您还应替换:
String userDecission = input.nextLine();
到
您可以发布一个包含反映问题的代码的精简版本吗?基本上,错误发生在RegistryInterface类,老实说,我无法将其减少,因为问题可能在该类的任何地方。是的,它可能在任何地方-这就是问题的关键:如果您可以定位问题,你甚至不用发帖就能解决它。尝试阅读SSCCE页面。这已经起作用了,但当我按n键添加更多时,它应该会加载菜单,这只是添加If语句的情况吗?
String userDecission = input.nextLine();
String userDecission = input.next();