利用之前已发博客的知识,可以自行创建一个I/O流的学员管理系统,简单的实现增、删、改、查。
后续播客将逐渐强化该系统
以下内容会一步一步完善该系统:
在写界面前,要有一个学员类来存储学员的基本信息
这里只写了学员的学号stuNo、姓名name、性别sex、年龄。如果有更多需求可以自行添加
构造方法、get,set方法和toString方法可以使用alt+int快捷键生成
public class Student {
private int stuNo;
private String name;
private String sex;
private int age;
public Student() {
}
public Student(int stuNo, String name, String sex, int age) {
this.stuNo = stuNo;
this.name = name;
this.sex = sex;
this.age = age;
}
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {//重写toString方法(),方便println(Student对象)进行打印Student的属性信息
return "Student{" +
"stuNo=" + stuNo +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
在画简单界面前,要先将Student的数据放在集合中,从而实现对Student对象的增删改查。
再对Student集合进行操作前要先初始化集合内容(init(students)
);
因为用户输入操作指令在退出系统前是循环的,所以使用while(true){}
死循环;
其中添加数据的方法addStudent();
修改的方法 upStudent();
删除的方法deleteStudent();
按学号查询的方法findById();
查询全部的方法findAll();
将在后面一一实现;
使用死循环实现重复执行系统,直到退出系统
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList students = new ArrayList<>();
init(students);//初始化集合
System.out.println("--欢迎使用学员信息管理系统--");
while (true){//在退出该系统前一直循环
System.out.println("【请输入你要操作的编号】:");
System.out.println("1、添加 2、修改 3、删除 4、按学号查询 5、查询全部 6、退出");
int num = scanner.nextInt();
switch (num){
case 1://添加
//addStudent();
break;
case 2://修改
//upStudent();
break;
case 3://删除
//deleteStudent();
break;
case 4://按学号查询
//findById();
break;
case 5://查询全部
//findAll();
break;
case 6://退出
System.out.println("感谢使用,已退出");
System.exit(0);
break;
default://没有以上序号时的提示
System.out.println("输入有误,请重新输入");
break;
}
}
}
findAll
方法查询集合中所有Student数据就需要将集合作为参数传给findAll方法,再进行遍历打印
private static void findAll(ArrayList students) {
System.out.println("---------------------------------");
System.out.println("学号\t\t姓名\t\t性别\t\t年龄\t\t");
System.out.println(".................................");
for (int i = 0; i < students.size(); i++) {
Student student = students.get(i);
System.out.println(student.getStuNo()+"\t\t"+student.getName()+
"\t\t"+student.getSex()+"\t\t"+student.getAge());
}
System.out.println(".................................");
}
这里在遍历集合时使用了fori对集合进行遍历,代码不太简洁,所以使用增强for循环修改为以下代码
private static void findAll(ArrayList students) {
System.out.println("---------------------------------");
System.out.println("学号\t\t姓名\t\t性别\t\t年龄\t\t");
System.out.println(".................................");
for (Student s:students) {
System.out.println(s.getStuNo()+"\t\t"+s.getName()+
"\t\t"+s.getSex()+"\t\t"+s.getAge());
}
System.out.println(".................................");
}
addStudent
方法添加学生信息到集合中,就要把集合传递到addStudent方法中,因为在此方法中要用户输入添加的学生信息,所以Scanner对象也要作为方法的参数传递进来
private static void addStudent(ArrayList students, Scanner scanner) {
int num = 0;
loop:
while (true){
System.out.println("请输入学号:");
num = scanner.nextInt();
for (Student s:students) {
if (s.getStuNo()==num){
System.out.println("你输入的学号已存在,请重新输入:");
continue loop;
}
}
break;
}
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入性别:");
String sex = scanner.next();
System.out.println("请输入年龄:");
int age = scanner.nextInt();
Student student = new Student(num,name,sex,age);
students.add(student);
}
其中的loop为循环前的标签名,在循环中continue后加标签名,再代码运行到这一句时,便会跳到标签名的位置继续向下执行。
要从集合中查找学号,所以要将学生集合作为实参传递到方法中,方法中要获取用户输入的学号,所以将Scanner对象作为实参传入方法中;
在方法中使用加强for循环遍历学生集合,对比用户输入的学号,相同就输出查找到的结果,并结束此方法下面的运行;当遍历结束也没有找到与用户输入的学号相同的内容,就在继续进行死循环,提示后再次输入
private static void findById(ArrayList stuList, Scanner scanner) {
int stuNo = 0;
loop:
while (true){
System.out.println("请输入要查询的学号:");
stuNo = scanner.nextInt();
for (Student s: stuList) {
if (stuNo == s.getStuNo()){
System.out.println("查找结果:");
System.out.println(s);
return;//立即结束程序
}
}
//输入学号在集合中不存在
System.out.println("你输入的学号不存在,请重新输入");
continue loop;
}
}
先查找用户输入的学号,在集合的遍历中查找到用户输入的学号时,在输入新的其他属性,输入零不会修改
private static void upData(ArrayList stuList, Scanner scanner) {
int stuNo = 0;
loop://定义标签,在输入学号不存在时,再次运行标签处代码
while (true){
//先对学号进行查找
System.out.println("请输入要修改的学号:");
stuNo = scanner.nextInt();
for (Student s: stuList) {
if (stuNo == s.getStuNo()){
System.out.println("请输入新的姓名[输入0不进行修改]:");
String name = scanner.next();
System.out.println("请输入新的性别[输入0不进行修改]:");
String sex = scanner.next();
System.out.println("请输入新的年龄[输入0不进行修改]:");
int age = scanner.nextInt();
if (!name.equals("0")){
s.setName(name);
}
if (!sex.equals("0")){
s.setSex(sex);
}
if (age != 0){
s.setAge(age);
}
System.out.println("修改成功!");
return;
}
}
//输入学号在集合中不存在
System.out.println("你输入的学号不存在,请重新输入");
continue loop;
}
}
先查找用户输入的学号,在集合的遍历中查找到用户输入的学号时,在进行删除,且提示用户是否进行删除
private static void deleteStudent(ArrayList stuList, Scanner scanner) {
int stuNo = 0;
loop:
while (true){
//对学号进行查找
System.out.println("请输入要删除的学号:");
stuNo = scanner.nextInt();
for (Student s: stuList) {
if (stuNo == s.getStuNo()){
//提示是否删除
System.out.println("确定要删除以下学员么?(y/n):");
System.out.println(s);
String chack = scanner.next();
if (chack.equalsIgnoreCase("y")){//忽略大小写
stuList.remove(s);
System.out.println("信息已删除");
}else {
System.out.println("信息没有进行删除");
}
return;
}
}
//输入学号在集合中不存在
System.out.println("你输入的学号不存在,请重新输入");
continue loop;
}
}
Student类:
public class Student {
private int stuNo;
private String name;
private String sex;
private int age;
public Student() {
}
public Student(int stuNo, String name, String sex, int age) {
this.stuNo = stuNo;
this.name = name;
this.sex = sex;
this.age = age;
}
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student{" +
"stuNo=" + stuNo +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
测试类:
public static void main(String[] args) {
System.out.println("----欢迎使用学员管理系统----");
Scanner scanner = new Scanner(System.in);
ArrayList stuList = new ArrayList<>();
init(stuList);//初始化集合
while (true) {
System.out.println("【请选择要操作的功能编号】");
System.out.println("1、添加 2、修改 3、删除 4、按学号查询 5、查询所有学员 6、退出");
int num = scanner.nextInt();
switch (num) {
case 1://添加
addStudent(stuList, scanner);
break;
case 2://修改
upData(stuList,scanner);
break;
case 3://删除
deleteStudent(stuList,scanner);
break;
case 4://按学号查询
findById(stuList,scanner);
break;
case 5://查询所有学员
findAll(stuList);
break;
case 6://退出
System.out.println("感谢使用,已退出");
System.exit(0);
break;
default:
System.out.println("您的输入有误,请重新输入");
break;
}
}
}
//查询全部
private static void findAll(ArrayList stuList) {
System.out.println("----------------------------");
System.out.println("学号\t\t姓名\t\t性别\t\t年龄");
System.out.println("............................");
if (stuList.size() == 0) {
System.out.println("【无数据】");
} else {
for (Student student : stuList) {
System.out.println(student.getStuNo() + "\t\t" + student.getName() + "\t\t" + student.getSex() + "\t\t" + student.getAge());
}
}
System.out.println("----------------------------");
}
//按学号查找
private static void findById(ArrayList stuList, Scanner scanner) {
int stuNo = 0;
loop:
while (true){
System.out.println("请输入要查询的学号:");
stuNo = scanner.nextInt();
for (Student s: stuList) {
if (stuNo == s.getStuNo()){
System.out.println("查找结果:");
System.out.println(s);
return;//立即结束程序
}
}
//输入学号在集合中不存在
System.out.println("你输入的学号不存在,请重新输入");
continue loop;
}
}
//删除
private static void deleteStudent(ArrayList stuList, Scanner scanner) {
int stuNo = 0;
loop:
while (true){
//对学号进行查找
System.out.println("请输入要删除的学号:");
stuNo = scanner.nextInt();
for (Student s: stuList) {
if (stuNo == s.getStuNo()){
//提示是否删除
System.out.println("确定要删除以下学员么?(y/n):");
System.out.println(s);
String chack = scanner.next();
if (chack.equalsIgnoreCase("y")){//忽略大小写
stuList.remove(s);
System.out.println("信息已删除");
}else {
System.out.println("信息没有进行删除");
}
return;
}
}
//输入学号在集合中不存在
System.out.println("你输入的学号不存在,请重新输入");
continue loop;
}
}
//修改
private static void upData(ArrayList stuList, Scanner scanner) {
int stuNo = 0;
loop://定义标签,在输入学号不存在时,再次运行标签处代码
while (true){
//先对学号进行查找
System.out.println("请输入要修改的学号:");
stuNo = scanner.nextInt();
for (Student s: stuList) {
if (stuNo == s.getStuNo()){
System.out.println("请输入新的姓名[输入0不进行修改]:");
String name = scanner.next();
System.out.println("请输入新的性别[输入0不进行修改]:");
String sex = scanner.next();
System.out.println("请输入新的年龄[输入0不进行修改]:");
int age = scanner.nextInt();
if (!name.equals("0")){
s.setName(name);
}
if (!sex.equals("0")){
s.setSex(sex);
}
if (age != 0){
s.setAge(age);
}
System.out.println("修改成功!");
return;
}
}
//输入学号在集合中不存在
System.out.println("你输入的学号不存在,请重新输入");
continue loop;
}
}
//添加
private static void addStudent(ArrayList stuList, Scanner scanner) {
int no = 0;
loop:
while (true) {
System.out.println("请输入学号:");
no = scanner.nextInt();
for (Student s : stuList) {
if (no == s.getStuNo()) {
System.out.println("你输入的学号已存在,请重新输入:");
continue loop;
}
}
break;
}
System.out.println("请输入姓名:");
String name = scanner.next();
System.out.println("请输入性别:");
String sex = scanner.next();
System.out.println("请输入年龄:");
int age = scanner.nextInt();
//创建Student对象
Student student = new Student(no, name, sex, age);
//添加到集合中
stuList.add(student);
}
//集合初始化
private static void init(ArrayList stuList) {
stuList.add(new Student(1, "ez", "男", 12));
stuList.add(new Student(2, "蚂蚱", "男", 45));
stuList.add(new Student(3, "奥特曼", "男", 158));
stuList.add(new Student(4, "轮子妈", "女", 34));
}