需求:
采取控制台的方式去书写学生管理系统。
针对目前我们的所学内容,完成一个综合案例:学生管理系统。该系统主要功能如下:
添加学生:通过键盘录入学生信息,添加到集合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
查看学生:将集合中的学生对象信息进行展示
退出系统:结束程序
实现思路:
- 创建学生类
- 创建main函数
- 简易的交互界面
- Arraylist集合记录学生信息
- 分别实现增加,删除,修改,查询的功能
- 最终调试
学生类:
属性:id、姓名、年龄、家庭住址
添加功能:
键盘录入每一个学生信息并添加,需要满足以下要求:
-
id唯一
删除功能:
键盘录入要删除的学生id,需要满足以下要求:
-
id存在删除
-
id不存在,需要提示不存在,并回到初始菜单
修改功能:
键盘录入要修改的学生id,需要满足以下要求
-
id存在,继续录入其他信息
-
id不存在,需要提示不存在,并回到初始菜单
查询功能:
打印所有的学生信息,需要满足以下要求
-
如果没有学生信息,提示:当前无学生信息,请添加后再查询
-
如果有学生信息,需要按照以下格式输出。(不用过于纠结对齐的问题)
学生类:
创建一个学生类的JavaBean类:
- 私有成员变量(name id age address)
- 空参构造,有参构造
- get set
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;
}
/**
* 获取
* @return id
*/
public String getId() {
return id;
}
/**
* 设置
* @param id
*/
public void setId(String id) {
this.id = id;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return age
*/
public int getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(int age) {
this.age = age;
}
/**
* 获取
* @return address
*/
public String getAddress() {
return address;
}
/**
* 设置
* @param address
*/
public void setAddress(String address) {
this.address = address;
}
public String toString() {
return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";
}
}
Mian类 :
首先,要创建一个简单的界面来实现功能选择和交互,由于是列举出来的功能选择Switch...Case语句来选择实现的功能。学生信息管理系统不是运行一次就结束,要采取一个死循环来嵌套界面。由于要零时存储数据,我们用一个ArrayList来存取学生类对象。在界面中值得一提的是程序的退出功能,单使用break只能退出switch语句不能退出循环。采用两种方法来退出程序:1.指定退出循环,给循环起一个别名loop( loop :while )再在退出功能使用break loop就是指定退出while循环 2.退出Java虚拟机,采用system.exit(0)退出虚拟机从而退出系统。其他功能实现参考注释:
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<>();
loop :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);
int chose = sc.nextInt();
switch (chose){
case 1-> {
addStudent(list);
}
case 2-> {
delStudent(list);
}
case 3-> {
updateStudent(list);
}
case 4-> {
queryStudent(list);
}
case 5-> {
System.out.println("Exit");
break loop;//退出 loop为while的标号
// System.exit(0);//退出虚拟机
}
default -> {
System.out.println("Input Error!");
}
}
}
}
public static void addStudent(ArrayList<Student> list) {
System.out.println("1.添加学生");
Scanner stu = new Scanner(System.in);//创建键盘输入
Student s = new Student();//空参构造
while (true) {
System.out.print("Id:");
String id = stu.next();
if (contains(list,id)){//true id重复
System.out.println("id重复!");
}else {//不重复
s.setId(id);//设置id
break;
}
}//判断id是否重复
System.out.print("姓名:");
String name = stu.next();
s.setName(name);//设置姓名
System.out.print("年龄:");
int age = stu.nextInt();
s.setAge(age);
System.out.print("地址:");
String address = stu.next();
s.setAddress(address);
list.add(s);//添加对象到arraylist
}//添加学生
public static void delStudent(ArrayList<Student> list){
System.out.println("2.删除学生");
if (list.size()==0){//判断顺序表是否有对象
System.out.println("没有学生!");
}else {
System.out.println("输入删除Id");
Scanner scanner = new Scanner(System.in);//输入
String id = scanner.next();
if (!contains(list,id)){//判断是否有对应id
System.out.println("查无此人!");
}else {
int index = index(list,id);//id为string类不能当作索引,根据id寻找索引返回id对应的索引
list.remove(index);//删除对应索引对应的学生
System.out.println("删除成功!");
}
}
}//删除学生
public static void updateStudent(ArrayList<Student> list){
System.out.println("3.修改学生");
Student student = new Student();
if (list.size() == 0){//判断空
System.out.println("列表为空");
}else {
System.out.println("输入修改学生的id");
Scanner scanner = new Scanner(System.in);
String id = scanner.next();
if (!contains(list,id)){//判断是否有此id
System.out.println("查无此人!");
}else {
int index = index(list,id);//获取索引
student = list.get(index);//获取索引对应的对象
System.out.print("输入修改姓名:");//修改对象属性
String name = scanner.next();
student.setName(name);
System.out.print("输入修改年龄:");
int age = scanner.nextInt();
student.setAge(age);
System.out.print("输入修改地址:");
String address = scanner.next();
student.setAddress(address);
}
}
}//修改学生
public static void queryStudent(ArrayList<Student> list){
System.out.println("4.查询学生");
if (list.size() == 0){
System.out.println("没有学生!");
}
System.out.print("id\t姓名\t年龄\t地址\t");//\t制表符
System.out.println();
for (int i = 0; i < list.size(); i++) {//循环遍历
System.out.println(//打印属性
list.get(i).getId()+"\t"+list.get(i).getName()+"\t"+list.get(i).getAge()+"\t"+list.get(i).getAddress()
);
}
}//查询学生
public static boolean contains(ArrayList<Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
if (stu.getId().equals(id)){//判断id是否在此顺序表中
return true;
}
}
return false;
}//id判断
public static int index(ArrayList<Student> list,String id){
for (int i = 0; i < list.size(); i++) {
Student student = new Student();
student = list.get(i);
if (student.getId().equals(id)){
return i;//获取索引
}
}
return -1;//无此id,返回-1
}//索引
}