Student类
x
package ch5;
//学生类
public class Student {
//学号
private String sid;
//姓名
private String name;
//年龄
private String age;
//居住地
private String address;
//无参构造方法
public Student(){}
public Student(String sid, String name, String age, String address){
this.sid = sid;
this.name = name;
this.age = age;
this.address = address;
}
//---------------------------------------------------------------------------------------------
public String getSid() {//alt+insert,选getter and setter,按住shift全选再下一步,就生成下面的了
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {//alt+insert,选getter and setter,按住shift全选再下一步,就生成上面的了
this.address = address;
}
}
StudentManager类
x
package ch5;
import java.util.ArrayList;
import java.util.Scanner;
//学生管理系统
public class StudentManager {
public static void main(String[] args) {
//创建集合对象,用于存储所有的学生数据
ArrayList<Student> array = new ArrayList<Student>();
//把整体用循环包起来,用于再次回到主界面
while (true) {
//用输出语句完成主界面的编写
System.out.println("--------Welcome Student Administration--------");
System.out.println("1 addStudent");
System.out.println("2 deleteStudent");
System.out.println("3 changeStudent");
System.out.println("4 lookStudent");
System.out.println("5 leave");
System.out.println("please input your choose?");
//使用Scanner实现键盘录入数据
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
//使用Switch语句完成操作的选择
switch (line) {
case "1":
//System.out.println("addStudent");
addStudent(array);//把数据放到array这个集合里面
break;
case "2":
//System.out.println("deleteStudent");
deleteStudent(array);//调用下面写好的删除方法
break;
case "3":
//System.out.println("changeStudent");
updateStudent(array);//调用下面写好的修改方法
break;
case "4":
//System.out.println("lookStudent");
findAllStudent(array);
break;
case "5":
System.out.println("thank you! leave");
//break; 最后一步退出不要这样写,写法如下
System.exit(0);//JVM即java虚拟机退出
}
}
}
//---------------------------------------------------------------------------------------------
//定义一个方法,用于添加学生信息(建议学号录入规范为3个数字+3个英文)
public static void addStudent(ArrayList<Student> array){
//键盘录入学生对象所需要的数据
Scanner sc = new Scanner(System.in);
String sid;//定义在循环外面
//为了让程序能够回到这里,就需要使用循环实现
while (true) {
//提示信息
System.out.println("need input Student id_num:");
//String sid = sc.nextLine(); //把这一行的定义放到循环外面,避免this指针问题
sid = sc.nextLine();//外面已经定义了,直接赋值就好
boolean flag = isUsed(array, sid);//判断学号是否被使用过
if (flag) {//如果被使用过
System.out.println("this id_num already exist! please again input:");
} else{
break;
}
}
System.out.println("need input Student name:");
String name = sc.nextLine();
System.out.println("need input Student age:");
String age = sc.nextLine();
System.out.println("need input Student address:");
String address = sc.nextLine();
//创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
Student s = new Student();
//赋值采用set方法
s.setSid(sid);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//将学生对象添加到集合中
array.add(s);
//给出添加成功提示
System.out.println("addStudent success");
//记得还去main方法里面调用这个添加学生的方法
}
//--------------------------------------------------------------------------------------------
//定义一个方法,用于判断学号是否被使用
public static boolean isUsed(ArrayList<Student> array,String sid){
//如果与集合中的某一个学生学号相同,返回true,不相同则返回false
boolean flag = false;
for(int i=0; i<array.size(); i++){
Student s = array.get(i);
if(s.getSid().equals(sid)){//如果学号被使用
flag = true;
break;
}
}
return flag;
//要在main方法里面调用这个方法
}
//---------------------------------------------------------------------------------------------
/*定义一个方法,用于查看学生信息
public static void findAllStudent(ArrayList<Student> array){
//显示表头信息
System.out.println("id_num\t\tname\t\tage\t\taddress");//\t相当于空出tab键的距离
//将集合里的数据取出,按照对应格式提示学生信息,注意显示年龄时要补充'岁'
for(int i=0; i<array.size(); i++){
Student s = array.get(i);//得到每一个学生
//System.out.println(s.getSid() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "岁\t\t" + s.getAddress());
System.out.println(s.getSid() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getAddress());
}
//注意,还要在main方法里调用这里的方法
}
*/
//--------------------------------------------------------------------------------------------
//定义一个方法,用于查看学生信息(升级版)
public static void findAllStudent(ArrayList<Student> array){
//判断集合中是否有数据,如果没有就显示提示信息
if(array.size() == 0){
System.out.println("you can add message! please again try");
return;//终止程序
}
//显示表头信息
System.out.println("id_num\t\tname\tage\t\taddress");//\t相当于空出tab键的距离
//将集合里的数据取出,按照对应格式提示学生信息,注意显示年龄时要补充'岁'
for(int i=0; i<array.size(); i++){
Student s = array.get(i);//得到每一个学生
//System.out.println(s.getSid() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "岁\t\t" + s.getAddress());
System.out.println(s.getSid() + "\t\t" + s.getName() + "\t\t" + s.getAge() + "\t\t" + s.getAddress());
}
}
//--------------------------------------------------------------------------------------------
/*定义一个方法,用于删除学生信息
public static void deleteStudent(ArrayList<Student> array){
//键盘录入要删除的学生学号,显示提示信息
Scanner sc = new Scanner(System.in);
System.out.println("delete need input Student id_num:");
//接收键盘录入的数据
String sid = sc.nextLine();
//遍历集合将对应学生对象从集合中删除
for(int i=0; i<array.size(); i++){
Student s = array.get(i);//把得到的所有学生对象赋值给s
if(s.getSid().equals(sid)){//s.getSid()里面是字符串,字符串比较用equals()方法
array.remove(i);//如果遍历到的s跟键盘录入的sid相同,就删除集合里的s
break;//结束这个循环
}
}
//给出删除成功的提示
System.out.println("delete success");
//要在main方法里调用这个方法
}*/
//-------------------------------------------------------------------------------------------
//定义一个方法,用于删除学生(升级版)
public static void deleteStudent(ArrayList<Student> array) {
//键盘录入要删除的学生学号,显示提示信息
Scanner sc = new Scanner(System.in);
System.out.println("delete need input Student id_num:");
//接收键盘录入的数据
String sid = sc.nextLine();
//判断键盘输入的学号在集合里是否存在
int index = -1;//一开始给初始值为-1,
for (int i = 0; i < array.size(); i++) {
Student d = array.get(i);//得到集合里的所有对象
if (d.getSid().equals(sid)) {//如果存在该学号
//删除之前记录一下索引,定义写在外面比较好,避免this指向问题
//int index = i;
index = i;//给索引赋值
break;
}
}
//for循环外面判断一下索引
if (index == -1) {//如果索引还是-1,说明上面的for循环没执行,即这个学号不存在
System.out.println("error! again input id_sum:");
} else { //否则则说明学号存在
array.remove(index);//根据索引删除
//给出删除成功的提示
System.out.println("delete success");
}
}
//------------------------------------------------------------------------------------------
//定义一个方法,用于修改学生信息
public static void updateStudent(ArrayList<Student> array){
//键盘录入要修改的学生学号,提示显示信息
Scanner sc = new Scanner(System.in);
System.out.println("input need update student id_num:");
//接收键盘录入的学号
String sid = sc.nextLine();
//键盘录入要修改的学生信息
System.out.println("input student new id_num:");
String sid2 = sc.nextLine();
System.out.println("input student new name:");
String name = sc.nextLine();
System.out.println("input student new age:");
String age = sc.nextLine();
System.out.println("input student new address:");
String address = sc.nextLine();
//把上面键盘录入的新信息,创建成一个学生对象
Student s = new Student();
s.setSid(sid);
s.setSid(sid2);
s.setName(name);
s.setAge(age);
s.setAddress(address);
//遍历集合修改对应的学生信息
for(int i=0; i< array.size(); i++){
Student student = array.get(i);//得到所有学生对象,赋值给左边的student
if(student.getSid().equals(sid)){//getSid()里面是字符串,字符串比较用equals()方法
array.set(i,s);//根据索引,把新的数据s换上去
break;//结束这个循环
}
}
//给出修改成功的提示
System.out.println("update success");
//要在main方法里调用这个方法
}
}