/*
* 学生管理系统
*
* 1.定义学生类
* 2.学生管理系统的主界面的代码编码
* 3.学生管理系统的查看所有学生的代码编写
* 4.学生管理系统的添加学生的代码编写
* 5.学生管理系统的删除学生的代码编写
* 6.学生管理系统的修改学生的代码编写
*
*/
public class StudentManager {
public static void main(String[] args) {
ArrayList<Student> arrl=new ArrayList<Student>();
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.退出");
System.out.println("请输入你的选择");
Scanner sc = new Scanner(System.in);
String xuanze = sc.nextLine();
switch (xuanze) {
case "1":
// 1.查看所有学生
findAllStudent(arrl);
break;
case "2":
// 2.添加学生
addStudent(arrl);
break;
case "3":
// 3.删除学生
deleteStudent(arrl);
break;
case "4":
// 4.修改学生
updateStudent(arrl);
break;
case "5":
// 5.退出
default:
System.out.println("感谢使用");
System.exit(0);
break;
}
}
}
public static void findAllStudent(ArrayList<Student> arrl){
if(arrl.size()==0){
System.out.println("暂无信息,返回上一层");
//return是不往下执行的意思,并不是返回值
return;
}
// \t是tap键的文字写法
System.out.println("学号\t姓名\t年龄\t性别\t家庭地址");
for(int a=0;a<arrl.size();a++){
Student s=arrl.get(a);
System.out.println(s.getId()+"\t"+s.getName()+"\t"+s.getAge()+"\t"+s.getXingbie()+"\t"+s.getAddress());
}
}
public static void addStudent(ArrayList<Student> arrl){
//1.键盘输入学生信息
Scanner sc=new Scanner(System.in);
//定义对象id放这里,因为放while里面,下面外面的代码会报错
String id;
//循环判断学号有没有被人占用
while(true){
System.out.println("请输入学号:");
id=sc.nextLine();
//标记
boolean flag=false;
//遍历集合
for(int a=0;a<arrl.size();a++){
//定义对象s接收集合索引a的元素
Student s=arrl.get(a);
//如果对象s接收的元素和键盘输入的元素一样,标记变成true,break退出for循环
if(s.getId().equals(id)){
flag=true;
break;
}
}
//如果标记flag变成true,继续循环,false就跳出while循环
if(flag){
System.out.println("输入的学号重复,重新输入");
}else{
break;
}
}
System.out.println("请输入姓名:");
String name=sc.nextLine();
System.out.println("请输入年龄:");
String age=sc.nextLine();
System.out.println("请输入性别:");
String xingbie=sc.nextLine();
System.out.println("请输入家庭地址:");
String address=sc.nextLine();
//2.把输入的信息通过方法存到学生类
Student s=new Student();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setXingbie(xingbie);
s.setAddress(address);
//3.把学生类的信息加到集合中
arrl.add(s);
System.out.println("信息添加成功");
}
public static void deleteStudent(ArrayList<Student> arrl){
//创建键盘输入,输入学号
Scanner sc=new Scanner(System.in);
System.out.println("请输入要删除学生的学号");
String id=sc.nextLine();
//标记,索引=-1表示不存在
int index=-1;
//循环比较集合中是否有匹配的信息
for(int a=0;a<arrl.size();a++){
Student s=arrl.get(a);
if(s.getId().equals(id)){
//如果相同,进来,a赋值给index
index=a;
break;
}
}
//如果index等于-1,说明上面if不成立,说明没找到,else则是找到了
if(index==-1){
System.out.println("未找到要删除的学生信息,重新输入");
}else{
arrl.remove(index);
System.out.println("删除成功");
}
}
public static void updateStudent(ArrayList<Student> arrl){
//创建键盘输入
Scanner sc=new Scanner(System.in);
System.out.println("请输入要修改学生的学号");
String id=sc.nextLine();
//标记,索引=-1时,不存在该元素
int index=-1;
//创建循环看集合中有没有匹配信息
for(int a=0;a<arrl.size();a++){
Student s=arrl.get(a);
//如果找到集合中有匹配的信息,把索引a赋值给index,然后跳出for循环
if(s.getId().equals(id)){
index=a;
break;
}
}
//如果索引=-1,说明上面for循环中没有匹配的信息
if(index==-1){
System.out.println("未找到要修改的学生信息,请重新输入");
}else{
//键盘输入要修改的信息
System.out.println("请输入姓名:");
String name=sc.nextLine();
System.out.println("请输入年龄:");
String age=sc.nextLine();
System.out.println("请输入性别:");
String xingbie=sc.nextLine();
System.out.println("请输入家庭地址:");
String address=sc.nextLine();
//2.把输入的信息通过方法存到学生类
Student s=new Student();
s.setId(id);
s.setName(name);
s.setAge(age);
s.setXingbie(xingbie);
s.setAddress(address);
//3.把学生类的信息加到集合中
//arrl.add(index, s);不能用这个,用这个的话,是新加上一条信息了
arrl.set(index,s);
System.out.println("信息添加成功");
}
}
}
成功输入的截图
碰到的问题
又做了一遍练习
package com.StudentManager;
import java.util.ArrayList;
import java.util.Scanner;
/*
* 学生管理系统
*
* 1.定义学生类
* 2.学生管理系统的主界面的代码编码
* 3.学生管理系统的查看所有学生的代码编写
* 4.学生管理系统的添加学生的代码编写
* 5.学生管理系统的删除学生的代码编写
* 6.学生管理系统的修改学生的代码编写
*
*/
public class StudentManager {
public static void main(String[] args) {
// 创建一个集合对象
ArrayList<Student> arrl = new ArrayList<Student>();
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);
String xuanze = sc.nextLine();
// 通过键盘输入来选择以下
switch (xuanze) {
case "1":
// 1.查看所有学生资料
findAllStudent(arrl);
break;
case "2":
// 2.添加新的学生信息
addNewStudent(arrl);
break;
case "3":
// 3.删除学生信息
deleteStudent(arrl);
break;
case "4":
// 4.修改学生信息
updateStudent(arrl);
break;
case "5":
// 5.退出系统
default:
System.out.println("感谢使用本系统");
System.exit(0);
}// 这个大括号是switch
} // 这个大括号是while
}// 这个大括号是main方法
// 查看所有学生资料方法
public static void findAllStudent(ArrayList<Student> arrl) {
if (arrl.size() == 0) {
System.out.println("对不起,暂时没有学生资料");
return;
}
System.out.println("学号\t姓名\t年龄");
for (int a = 0; a < arrl.size(); a++) {
Student s = arrl.get(a);
System.out.println(s.getId() + "\t" + s.getName() + "\t" + s.getAge() + "\t");
}
System.out.println("已加载所有学生资料");
}// 这个大括号是findAllStudent
public static void addNewStudent(ArrayList<Student> arrl) {
// 键盘输入
Scanner sc = new Scanner(System.in);
// 因为加了一个while循环,下面s.setId(id)报错了,于是就把id定义在外面了
String id;
while (true) {
System.out.println("请输入学号");
id = sc.nextLine();
// 回过头来考虑,如果输入的学号跟已有的有重复,怎么办??
// 首先定一个标记
int index = -1;
// 循环遍历出集合中已有的元素
for (int a = 0; a < arrl.size(); a++) {
Student s = arrl.get(a);
// 如果集合已有的学号和键盘输入的学号相同,a赋值给index,循环结束
if (s.getId().equals(id)) {
index = a;
break;
}
} // 这个大括号是for循环
// 如果index=-1,说明上面遍历后没有相同的学号
if (index == -1) {
// 满足就跳出循环,注意如果不加break下面Syso("请输入姓名")报错,
break;
} else {
System.out.println("输入的学号有重复,请重新输入");
}
} // 这个大括号是while
System.out.println("请输入姓名");
String name = sc.nextLine();
System.out.println("请输入年龄");
String age = sc.nextLine();
// 键盘录入的信息赋值给学生类
Student s = new Student();
s.setId(id);
s.setName(name);
s.setAge(age);
// 学生类的信息赋值给集合arrl
arrl.add(s);
System.out.println("添加成功");
}// 这个大括号是addNewStudent
public static void deleteStudent(ArrayList<Student> arrl) {
// 键盘输入学号
Scanner sc = new Scanner(System.in);
if(arrl.size()==0){
System.out.println("对不起,暂时没有学生资料");
return;
}
while (true) {
System.out.println("请输入要删除的学生学号");
String id = sc.nextLine();
// 标记
int index = -1;
// for循环找匹配信息
for (int a = 0; a < arrl.size(); a++) {
Student s = arrl.get(a);
// 如果学号相同,进if,把a赋值给index
if (s.getId().equals(id)) {
index = a;
break;
}
}
// 如果标记==-1,说明没有匹配的学号,return重新输入
if (index == -1) {
System.out.println("输入的学号不存在,请重新输入");
} else {
arrl.remove(index);
System.out.println("删除成功");
return;
}
} // 这个大括号是while
}// 这个大括号是deleteStudent
public static void updateStudent(ArrayList<Student> arrl){
//键盘输入学号
Scanner sc=new Scanner(System.in);
if(arrl.size()==0){
System.out.println("对不起,暂时没有学生资料");
return;
}
while(true){
System.out.println("请输入要修改的学生学号");
String id=sc.nextLine();
int index=-1;
//for循环找匹配信息
for(int a=0;a<arrl.size();a++){
Student s=arrl.get(a);
//如果集合中找到和键盘输入相同的对象,a赋值给index
if(s.getId().equals(id)){
index=a;
}
}//这个大括号是for
//如果index==-1,没找到匹配信息
if(index==-1){
System.out.println("输入的学号不存在,请重新输入");
}else{
System.out.println("请输入姓名");
String name=sc.nextLine();
System.out.println("请输入年龄");
String age=sc.nextLine();
Student s=new Student();
s.setId(id);
s.setName(name);
s.setAge(age);
arrl.set(index,s);
System.out.println("修改成功");
return;
}
}//这个大括号是while
}//这个大括号是updateStudent
}// 这个大括号是类的