项目:集合实现学生信息管理系统
存储自定义学生类
一、需求
添加学生:通过键盘录入学生信息,添加到集合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
查看学生:将集合中的学生对象信息进行展示
退出系统:结束程序
二、实现步骤
1. 定义学生类,包含以下成员变量
学生类: Student成员变量:
学号:sid
姓名:name
年龄:age
生日:birthday
构造方法:
无参构造
带四个参数的构造成员方法:
每个成员变量对应给出get/set方法
2. 学生管理系统主界面的搭建步骤
2.1 用输出语句完成主界面的编写
2.2 用Scanner实现键盘录入数据
2.3 用switch语句完成操作的选择
2.4 用循环完成再次回到主界面
3. 学生管理系统的添加学生功能实现步骤
3.1 用键盘录入选择添加学生
3.2 定义一个方法,用于添加学生
显示提示信息,提示要输入何种信息
键盘录入学生对象所需要的数据
创建学生对象,把键盘录入的数据赋值给学生对象的成员变量
将学生对象添加到集合中(保存)
给出添加成功提示
3.3 调用方法
4. 学生管理系统的查看学生功能实现步骤
4.1 用键盘录入选择查看所有学生信息
4.2 定义一个方法,用于查看学生信息
显示表头信息
将集合中数据取出按照对应格式显示学生信息,年龄显示补充“岁”
4.3 调用方法
5. 学生管理系统的删除学生功能实现步骤
5.1 用键盘录入选择删除学生信息
5.2 定义一个方法,用于删除学生信息
显示提示信息
键盘录入要删除的学生学号
调用getIndex方法,查找该学号在集合的索引
如果索引为-1,提示信息不存在
如果索引不是-1,调用remove方法删除并提示删除成功
5.3 调用方法
6. 学生管理系统的修改学生功能实现步骤
6.1 用键盘录入选择修改学生信息
6.2 定义一个方法,用于修改学生信息
显示提示信息
键盘录入要修改的学生学号
调用getIndex方法,查找该学号在集合的索引
如果索引为-1,提示信息不存在
如果索引不是-1,键盘录入要修改的学生信息
集合修改对应的学生信息
给出修改成功提示
6.3 调用方法
7. 退出系统
使用System.exit(0);退出JVM
三、从代码分析
三一、学生实现类
1.包含四个成员变量:
学号、姓名、年龄、生日
2.构造方法:
无参构造、带四个成员变量的有参构造
3.每个成员都给出get/set方法
package com.lyz.stusys;
public class Student {
private String sid;
private String name;
private int age;
private String birthday;
public Student() {
}
public Student(String sid, String name, int age, String birthday) {
this.sid = sid;
this.name = name;
this.age = age;
this.birthday = birthday;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
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 getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Student{" +
"sid='" + sid + '\'' +
", name='" + name + '\'' +
", age='" + age + "岁\'" +
", birthday='" + birthday + '\'' +
'}';
}
}
三二、main下
2.1 main
/**
* @author lyzLoser
* @version 1.0
* @since 集合实现学生信息管理系统
* @param args
*/
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
menuStu(list);
}
2.2 主体方法:menuStu
/**
* @since 菜单:定义标识flag,do-while循环接收chooseN方法的选项值。
* 当出现输入次数过多错误时、或选择退出系统选项时,改变标识退出循环
* @param list
*/
public static void menuStu(List<Student> list) {
//标识状态
boolean flag = false;
do {
faceStu();
int n = chooseN();
switch (n) {
case 1:
inPutStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 2:
deleteStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 3:
changeStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 4:
findStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 5:
showAllStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 6:
outStu();
flag = true;
break;
default:
if (n == -1) {
System.out.println("有误功能选项错误次数过多,自动退出系统,请重启。");
flag = true;
}
break;
}
} while (!flag);
}
2.2.1 界面面板:faceStu。
/**
* @since 面板:通过输出语句打印面板
*/
public static void faceStu() {
System.out.println("===========================================");
System.out.println("\t\t1.增");
System.out.println("\t\t2.删");
System.out.println("\t\t3.改");
System.out.println("\t\t4.查");
System.out.println("\t\t5.查看现有数据");
System.out.println("\t\t6.退出");
System.out.println("\t请输入数字1~5选择功能");
System.out.println("===========================================");
}
2.2.2 菜单功能选项:chooseN
/**
* @return n:选择功能编号
* @since 菜单功能选项:输入错误跳出当前循环,正确退出循环同时返回n,
* 输入错误到达三次返回n=-1
*/
public static int chooseN() {
Scanner input = new Scanner(System.in);
int n = -1;
System.out.println("输入功能选项:(1~6),有三次错误的机会");
for (int i = 0; i < 5; i++) {
if (i == 4) {
// System.out.println("错误次数过多。退出系统");
return -1;
}
if (input.hasNextInt()) {
n = input.nextInt();
if (n > 0 && n < 7) {
System.out.println("输入正确");
break;
} else {
if (i==3){
System.out.println("你没有机会了。");
continue;
}else {
System.out.println("内容输入错误!");
System.out.println("还有" + (3 - i) + "次机会");
continue;
}
}
} else {
System.out.println("输入类型错误");
return -1;
}
}
return n;
}
2.3 增:inPutStu
/**
* @since 增:直接调用showStu方法,进行判空:非空则录入,空则结束方法
* @param list
*/
public static void inPutStu(List<Student> list) {
Student stu=showStu(list);
if (stu==null){
return;
}else {
//将stu对象插入list集合中
list.add(stu);
System.out.println("添加成功");
}
}
2.3.1 输入学生类方法:showStu
/**
* @since 输入学生类方法:实例化学生类,边接收键盘选项边set学术类,出错是直接返回null
* @return Student
*/
public static Student showStu(List<Student> list){
Student stu = new Student();
Scanner input = new Scanner(System.in);
System.out.println("请输入学生学号:");
if (input.hasNext()) {
String sId = input.next();
//查询集合内是否已存在同学号信息
if (list.isEmpty()){
//将输入的录入stu中
stu.setSid(sId);
}else {
//遍历集合
for (int i=0;i<list.size();i++){
Student stuTemp=list.get(i);
//集合内已存在对应学号信息
if (stuTemp.getSid().equals(sId)){
System.out.println("已存在对应学号信息。默认内容输入错误。");
return null;
}else {
//将输入的录入stu中
stu.setSid(sId);
}
}
}
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生姓名:");
if (input.hasNext()) {
String name = input.next();
stu.setName(name);
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生年龄:");
if (input.hasNextInt()) {
int age = input.nextInt();
stu.setAge(age);
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生生日:");
if (input.hasNext()) {
String bir = input.next();
stu.setBirthday(bir);
} else {
System.out.println("内容输入错误!");
return null;
}
return stu;
}
2.4 删:deleteStu
/**
* @since 删:判空,判输入,遍历查询,删除对应
* @param list
*/
public static void deleteStu(List<Student> list) {
if (list.isEmpty()) {
System.out.println("数据为空,请先添加学生信息。");
} else {
Scanner input = new Scanner(System.in);
System.out.println("输入删除学生的学号");
if (input.hasNext()) {
String index = input.nextLine();
//标识记录状态
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
Student temp = list.get(i);
if (temp.getSid().equals(index)) {
list.remove(i);
System.out.println("删除" + temp + "学生信息成功");
flag = true;
}
}
if (!flag) {
System.out.println("数据中查无此人。");
}
}
}
}
2.5 改:changeStu
/**
* @since 改:判空,判输入,遍历修改对象,调用输入学术类方法,修改
* @param list
*/
public static void changeStu(List<Student> list) {
if (list.isEmpty()) {
System.out.println("数据为空,请先添加学生信息。");
} else {
Scanner input = new Scanner(System.in);
System.out.println("输入修改学生的学号");
if (input.hasNext()) {
String index = input.nextLine();
//标识记录状态
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
Student temp = list.get(i);
if (temp.getSid().equals(index)) {
Student stu=showStu(list);
if (stu==null){
return;
}else {
list.set(i, stu);
}
System.out.println("修改学生信息成功");
flag = true;
}
}
if (!flag) {
System.out.println("数据中查无此人。");
}
}
}
}
2.5.1 输入学生类方法:showStu(同2.3.1)
/**
* @since 输入学生类信息:实例化学生类,边接收键盘选项边set学术类,出错是直接返回null
* @return Student
*/
public static Student showStu(List<Student> list){
Student stu = new Student();
Scanner input = new Scanner(System.in);
System.out.println("请输入学生学号:");
if (input.hasNext()) {
String sId = input.next();
//查询集合内是否已存在同学号信息
if (list.isEmpty()){
//将输入的录入stu中
stu.setSid(sId);
}else {
//遍历集合
for (int i=0;i<list.size();i++){
Student stuTemp=list.get(i);
//集合内已存在对应学号信息
if (stuTemp.getSid().equals(sId)){
System.out.println("已存在对应学号信息。默认内容输入错误。");
return null;
}else {
//将输入的录入stu中
stu.setSid(sId);
}
}
}
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生姓名:");
if (input.hasNext()) {
String name = input.next();
stu.setName(name);
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生年龄:");
if (input.hasNextInt()) {
int age = input.nextInt();
stu.setAge(age);
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生生日:");
if (input.hasNext()) {
String bir = input.next();
stu.setBirthday(bir);
} else {
System.out.println("内容输入错误!");
return null;
}
return stu;
}
2.6 查:findStu
/**
* @since 查:判空,判输入,遍历查询对象,输出查找结果
* @param list
*/
public static void findStu(List<Student> list) {
if (list.isEmpty()) {
System.out.println("数据为空,请先添加学生信息。");
} else {
Scanner input = new Scanner(System.in);
System.out.println("输入查询学生的学号");
if (input.hasNext()) {
String index = input.nextLine();
//标识记录状态
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
Student temp = list.get(i);
if (temp.getSid().equals(index)) {
System.out.println(list.get(i));
System.out.println("查询学生信息成功");
flag = true;
}
}
if (!flag) {
System.out.println("数据中查无此人。");
}
}
}
}
2.7 遍历现存数据
/**
* @since 遍历存储数据:判空,增强for遍历
* @param list
*/
public static void showAllStu(List<Student> list) {
if (list.isEmpty()) {
System.out.println("数据为空,请先添加学生信息。");
} else {
for (Object obj : list) {
System.out.println(obj);
System.out.println("以上为现存储学生信息。");
}
}
}
2.8 退出:outStu
/**
* @since 调用System.exit(0);退出
*/
public static void outStu() {
System.out.println("退出系统。");
System.exit(0);
}
四、看完都不点赞?
public class Test03 {
public static void main(String[] args) throws IOException {
System.out.println("谢谢");
}
}
五、懒人大全copy
package com.lyz.stusys;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class stuSystem {
/**
* @author lyzLoser
* @version 1.0
* @since 集合实现学生信息管理系统
* @param args
*/
public static void main(String[] args) {
List<Student> list = new ArrayList<>();
menuStu(list);
}
/**
* @since 输入学生类信息:实例化学生类,边接收键盘选项边set学术类,出错是直接返回null
* @return Student
*/
public static Student showStu(List<Student> list){
Student stu = new Student();
Scanner input = new Scanner(System.in);
System.out.println("请输入学生学号:");
if (input.hasNext()) {
String sId = input.next();
//查询集合内是否已存在同学号信息
if (list.isEmpty()){
//将输入的录入stu中
stu.setSid(sId);
}else {
//遍历集合
for (int i=0;i<list.size();i++){
Student stuTemp=list.get(i);
//集合内已存在对应学号信息
if (stuTemp.getSid().equals(sId)){
System.out.println("已存在对应学号信息。默认内容输入错误。");
return null;
}else {
//将输入的录入stu中
stu.setSid(sId);
}
}
}
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生姓名:");
if (input.hasNext()) {
String name = input.next();
stu.setName(name);
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生年龄:");
if (input.hasNextInt()) {
int age = input.nextInt();
stu.setAge(age);
} else {
System.out.println("内容输入错误!");
return null;
}
System.out.println("请输入学生生日:");
if (input.hasNext()) {
String bir = input.next();
stu.setBirthday(bir);
} else {
System.out.println("内容输入错误!");
return null;
}
return stu;
}
/**
* @since 增:直接调用showStu方法,进行判空:非空则录入,空则结束方法
* @param list
*/
public static void inPutStu(List<Student> list) {
Student stu=showStu(list);
if (stu==null){
return;
}else {
//将stu对象插入list集合中
list.add(stu);
System.out.println("添加成功");
}
}
/**
* @since 删:判空,判输入,遍历查询,删除对应
* @param list
*/
public static void deleteStu(List<Student> list) {
if (list.isEmpty()) {
System.out.println("数据为空,请先添加学生信息。");
} else {
Scanner input = new Scanner(System.in);
System.out.println("输入删除学生的学号");
if (input.hasNext()) {
String index = input.nextLine();
//标识记录状态
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
Student temp = list.get(i);
if (temp.getSid().equals(index)) {
list.remove(i);
System.out.println("删除" + temp + "学生信息成功");
flag = true;
}
}
if (!flag) {
System.out.println("数据中查无此人。");
}
}
}
}
/**
* @since 改:判空,判输入,遍历修改对象,调用输入学术类方法,修改
* @param list
*/
public static void changeStu(List<Student> list) {
if (list.isEmpty()) {
System.out.println("数据为空,请先添加学生信息。");
} else {
Scanner input = new Scanner(System.in);
System.out.println("输入修改学生的学号");
if (input.hasNext()) {
String index = input.nextLine();
//标识记录状态
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
Student temp = list.get(i);
if (temp.getSid().equals(index)) {
Student stu=showStu(list);
if (stu==null){
return;
}else {
list.set(i, stu);
}
System.out.println("修改学生信息成功");
flag = true;
}
}
if (!flag) {
System.out.println("数据中查无此人。");
}
}
}
}
/**
* @since 查:判空,判输入,遍历查询对象,输出查找结果
* @param list
*/
public static void findStu(List<Student> list) {
if (list.isEmpty()) {
System.out.println("数据为空,请先添加学生信息。");
} else {
Scanner input = new Scanner(System.in);
System.out.println("输入查询学生的学号");
if (input.hasNext()) {
String index = input.nextLine();
//标识记录状态
boolean flag = false;
for (int i = 0; i < list.size(); i++) {
Student temp = list.get(i);
if (temp.getSid().equals(index)) {
System.out.println(list.get(i));
System.out.println("查询学生信息成功");
flag = true;
}
}
if (!flag) {
System.out.println("数据中查无此人。");
}
}
}
}
/**
* @since 遍历存储数据:判空,增强for遍历
* @param list
*/
public static void showAllStu(List<Student> list) {
if (list.isEmpty()) {
System.out.println("数据为空,请先添加学生信息。");
} else {
for (Object obj : list) {
System.out.println(obj);
System.out.println("以上为现存储学生信息。");
}
}
}
/**
* @since 调用System.exit(0);退出
*/
public static void outStu() {
System.out.println("退出系统。");
System.exit(0);
}
/**
* @since 面板:通过输出语句打印面板
*/
public static void faceStu() {
System.out.println("===========================================");
System.out.println("\t\t1.增");
System.out.println("\t\t2.删");
System.out.println("\t\t3.改");
System.out.println("\t\t4.查");
System.out.println("\t\t5.查看现有数据");
System.out.println("\t\t6.退出");
System.out.println("\t请输入数字1~5选择功能");
System.out.println("===========================================");
}
/**
* @since 菜单功能选项:输入错误跳出当前循环,正确退出循环同时返回n,
* 输入错误到达三次返回n=-1
* @return n:选择功能编号
*/
public static int chooseN() {
Scanner input = new Scanner(System.in);
int n = -1;
System.out.println("输入功能选项:(1~6),有三次错误的机会");
for (int i = 0; i < 4; i++) {
if (i == 3) {
// System.out.println("错误次数过多。退出系统");
return n = -1;
}
if (input.hasNext()) {
n = input.nextInt();
if (n > 0 && n < 7) {
System.out.println("输入正确");
break;
} else {
System.out.println("还有" + (i + 1) + "次机会");
System.out.println("内容输入错误!");
continue;
}
} else {
System.out.println("还有" + (i + 1) + "次机会");
System.out.println("内容输入错误!");
continue;
}
}
return n;
}
/**
* @since 菜单:定义标识flag,do-while循环接收chooseN方法的选项值。
* 当出现输入次数过多错误时、或选择退出系统选项时,改变标识退出循环
* @param list
*/
public static void menuStu(List<Student> list) {
//标识状态
boolean flag = false;
do {
faceStu();
int n = chooseN();
switch (n) {
case 1:
inPutStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 2:
deleteStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 3:
changeStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 4:
findStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 5:
showAllStu(list);
System.out.println("*********************************");
System.out.println("返回菜单");
System.out.println("*********************************");
break;
case 6:
outStu();
flag = true;
break;
default:
if (n == -1) {
System.out.println("有误功能选项错误次数过多,自动退出系统,请重启。");
flag = true;
}
break;
}
} while (!flag);
}
}