采用控制台的方式取书写学生管理系统。
初始菜单
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
学生类
属性:学号id,姓名,年龄,家庭地址
添加功能:
键盘录入一个学生信息并添加,且满足以下需求:
id唯一
删除功能:
键盘录入删除学生的id,且满足以下需求:
id存在删除
id不存在,需提示不存在,并返会到初始菜单
修改功能:
键盘录入要修改的学生id,需要满足以下要求:
id存在,继续录入其他信息
id不存在,需要提示不存在,并回到初始菜单
查询功能:
打印所有的学生信息,需要满足以下要求:
如果没有学生信息,提示:当前无学生信息,请添加后再查询
如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
学号 姓名 年龄 地址
001 张三 18 北京
002 李四 19 上海
003 王五 20 深圳
public class Student {
private String id;
private String name;
private int age;
private String address;
public Student() {
}
public Student(String id, String name, int age, String address) {
this.id = id;
this.name = name;
this.age = age;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String toString() {
return id+"\t" + name +"\t"+ age+"\t"+ address;
}
}
采用while循环嵌套switch
通过choice接收的字符串与switch中字符串匹配,从而执行不同语句
优点:采用while循环嵌套switch语句进行系统开发,可以结合两种控制结构的优势,实现灵活的条件判断、高效的循环控制以及清晰的代码逻辑,从而提升系统的开发效率和代码质量。
public static void main(String[] args) {
while (true) {
System.out.println("——————————————欢迎使用学生管理系统——————————————");
System.out.println("1:添加学生");
System.out.println("2:删除学生");
System.out.println("3:修改学生");
System.out.println("4:查询学生");
System.out.println("5:退出系统");
Scanner sc = new Scanner(System.in);
System.out.println("请输入您的选择:");
String choice = sc.next();
switch (choice) {//jdk版本大于12采用箭头函数,省事
case "1" -> System.out.println("添加学生");
case "2" -> System.out.println("删除学生");
case "3" -> System.out.println("修改学生");
case "4" -> System.out.println("查询学生");
case "5" -> System.out.println("退出系统");
default -> System.out.println("sorry,您的输入有误,请重新输入");
}
}
}
此时在控制台已能显示系统雏形
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
loop:while (true) {
//省略...
switch (choice) {
case "5" ->{
//省略...
System.out.println("退出系统");
break loop;//在前面设置loop,从而得知需要终止循环的位置
// System.exit(0);//结束程序的运行
}
}
}
带标签的break语句:
在嵌套循环中,可以使用标签来指定要终止的循环层次。(只写一个break,只能跳出当前循环)
例如:
outerLoop: while (i < 10) {
while (j < 10) {
if (i == j) break outerLoop; // 终止外层循环
j++;
}
i++;
}
定义学生集合用来储存学生
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
//省略...
定义queryStudent方法,判断集合长度是否为0,如果为0,则没有学生返回,如果不为0则返回查询结果
public static void queryStudent(ArrayList<Student> list) {
if (list.size() == 0) {
System.out.println("当前无学生信息,请添加后再查询");
return;
}else {
System.out.println("学号"+"\t"+"姓名"+"\t"+"年龄"+"\t"+"地址");
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
System.out.println(s);
}
}
}
这里返回到while循环中修该为:
case "4" ->queryStudent(list);
欧克欧克,查询方法已经书写完毕了!⭐
这里我们要定义一个方法contains,来判断学生id是否存在,来保证id唯一,存在返回true,不存在返回false;
//判断id是否存在
public static boolean contains(ArrayList<Student> list,String id) {
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
if (s.getId().equals(id)) {
return true;
}
}
return false;
}
,接下来书写学生添加方法
采用while循环判断id是存在,存在显示,id已存在,请重新输入,不存在则跳出循环,继续录入信息
// 添加学生
public static void addStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
Student s = new Student();
while (true) {
System.out.println("请输入学生id:");
String id = sc.next();
if (contains(list,id)) {// 判断id是否重复
System.out.println("id已存在,请重新输入");
}else {
s.setId(id);
break;
}
}
System.out.println("请输入学生姓名:");
String name = sc.next();
s.setName(name);
System.out.println("请输入学生年龄:");
int age = sc.nextInt();
s.setAge(age);
System.out.println("请输入学生地址:");
String address = sc.next();
s.setAddress(address);
list.add(s);
System.out.println("添加成功");
}
不要忘记修改前面的语句
case "1" ->addStudent(list);
再次之前优先书写一个根据学生id返回学生对象在集合内索引的方法getIndex()
//根据id返回索引
public static int getIndex(ArrayList<Student> list,String id) {
for (int i = 0; i < list.size(); i++) {
Student s = list.get(i);
if (s.getId().equals(id)) {
return i;
}
}
return -1;
}
在根据此方法书写删除,和修改都变得非常easy;
// 删除学生
public static void deleteStudent(ArrayList<Student> list) {
while (true) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学生id:");
String xid = sc.next();
int xIndex =getIndex(list,xid);
if (xIndex != -1) {
list.remove(xIndex);
System.out.println("删除成功");
return;
}
if (xIndex == -1) {
System.out.println("当前id无学生信息,请重新输入");
}
}
}
不要忘记修改前面的语句
case "2" ->deleteStudent(list);
// 修改学生
public static void updateStudent(ArrayList<Student> list) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的学生id:");
String xid = sc.next();
int xIndex =getIndex(list,xid);
while (true) {
if(xIndex != -1){
Student s = list.get(xIndex);
System.out.println("请输入学生姓名:");
String xname = sc.next();
s.setName(xname);
System.out.println("请输入学生年龄:");
int xage = sc.nextInt();
s.setAge(xage);
System.out.println("请输入学生地址:");
String xaddress = sc.next();
s.setAddress(xaddress);
System.out.println("修改成功");
return;
}else if (xIndex == -1) {
System.out.println("当前id无学生信息");
return;
}
}
}
不要忘记修改前面的语句
case "3" ->updateStudent(list);
,这样学生管理系统就书写完毕了,让我们来爽一下:
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
1
请输入学生id:
z001
请输入学生姓名:
张三
请输入学生年龄:
18
请输入学生地址:
周口
添加成功
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
1
请输入学生id:
l002
请输入学生姓名:
李四
请输入学生年龄:
20
请输入学生地址:
驻马店
添加成功
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
4
学号 姓名 年龄 地址
z001 张三 18 周口
l002 李四 20 驻马店
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
3
请输入要修改的学生id:
z001
请输入学生姓名:
王五
请输入学生年龄:
18
请输入学生地址:
南阳
修改成功
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
4
学号 姓名 年龄 地址
z001 王五 18 南阳
l002 李四 20 驻马店
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
2
请输入要删除的学生id:
l002
删除成功
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
4
学号 姓名 年龄 地址
z001 王五 18 南阳
——————————————欢迎使用学生管理系统——————————————
1:添加学生
2:删除学生
3:修改学生
4:查询学生
5:退出系统
请输入您的选择:
5
退出系统
Process finished with exit code 0