目录
1.MVC设计模式初探
文件结构的搭建
2.Student类用来初始化学生信息
3.主函数里的两个功能
1.调用初始化学生信息的功能
2.输出欢迎界面功能
4.Global类中方法的编写
5.StuPage类,StuCtrl类,StuModel类中方法的编写
1.查询功能
·selStu方法的编写(StuPage类中)
·selAction方法的编写
1.查询全部信息
·selAllStu方法的编写(StuModel类中)
·ShowStuList方法的编写(StuPage页面中)
2.按学号查询
·getStuID方法的编写
·getbyStuID方法的编写
3.按姓名查询
·getStuName方法编写
·getbyStuName方法的编写
4.按性别查询
·getStuSex方法编写
·getbyStuSex方法编写
5.按年龄查询
·getStuAge方法编写
·getbyStuAge方法编写
6.按成绩查询
·getStuScore方法编写
·getbyStuScore方法编写
2.添加功能
·addStu功能的编写
·doAddStu方法的编写
3.修改功能
·editStu()方法的编写
·doUpdate方法的编写
4.删除功能
·delAlert()方法的编写
·doDelStuID()方法的编写
·StuPage.failed()方法的编写
6.完整代码
1.Student类
2.Global类
3.StuPage类
4.StuCtrl类
5.StuModel类
7.StuMain类
1.MVC设计模式初探
学生信息管理系统是对前面的基础知识的一个综合运用
用到了MVC的设计模式
MVC是一种软件设计模式,用于将应用程序的逻辑进行分离和组织。MVC代表Model-View-Controller,即模型-视图-控制器。
模型(Model)是应用程序中处理数据逻辑的部分。它管理应用程序中的数据,并定义了数据的操作和访问方式。
视图(View)是用户界面的部分。它负责将数据呈现给用户,并根据用户的输入更新数据。
控制器(Controller)是连接模型和视图的部分。它接收用户的输入,并根据输入更新模型和视图。
MVC模式的优势在于分离了应用程序的不同部分,使得逻辑更加清晰和可维护。模型与视图分离,使得数据和展示相互独立,方便对数据的增删改查操作和UI的修改。控制器作为中间人,负责协调模型和视图之间的交互。
MVC模式也提供了良好的可扩展性和可重用性。不同的模型和视图可以被重复使用,因为它们之间的关系已经定义清楚。新的模型和视图可以很容易地添加到应用程序中。
总之,MVC设计模式通过将应用程序的逻辑分离和组织,提供了一种灵活和可维护的架构,使得开发人员可以更方便地开发和维护应用程序。
文件结构的搭建
首先创建一下文件结构
1.Student类用来初始化学生信息
2.Global类用来搭载学生信息
3.StuPage类用来显示初始化界面
4.StuCtrl类用来实现功能调度,增删改查
5.StuModel类存储数据、处理数据逻辑和提供数据操作的接口的作用
2.Student类用来初始化学生信息
我们来构思一下思路,学生信息管理系统最基本的实现学生信息的增删改查。首先我们需要学生信息,则需要在Student类中来初始化一下学生信息,定义一些和学生相关的属性。
public class Student {
private int id;
private String name;
private String sex;
private int age;
private float score;
public Student() {
}
public Student(String name, String sex, int age, float score) {
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
}
public Student(int id, String name, String sex, int age, float score) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
这段代码定义了一个名为 Student
的Java类,用于表示学生对象。下面是对代码的解释:
-
类的属性包括:
id
:学生ID,整型。name
:学生姓名,字符串类型。sex
:学生性别,字符串类型。age
:学生年龄,整型。score
:学生成绩,浮点型。
-
构造方法:
- 无参构造方法
public Student()
:创建一个空的学生对象。 - 带参构造方法
public Student(String name, String sex, int age, float score)
:根据给定的姓名、性别、年龄和成绩创建学生对象。 - 带参构造方法
public Student(int id, String name, String sex, int age, float score)
:根据给定的ID、姓名、性别、年龄和成绩创建学生对象。
- 无参构造方法
-
Getter 和 Setter 方法:
- 提供了对私有属性的访问和设置方法,如
getId()
,setId()
,getName()
,setName()
,getSex()
,setSex()
,getAge()
,setAge()
,getScore()
,setScore()
。
- 提供了对私有属性的访问和设置方法,如
-
toString()
方法:- 重写了
Object
类的toString()
方法,返回包含学生对象各个属性值的字符串表示,便于打印输出。
- 重写了
通过以上定义,可以在程序中创建 Student
对象,并操作其属性值,同时也可以方便地将对象转换为字符串进行输出显示。
3.主函数里的两个功能
1.调用初始化学生信息的功能
Global.initStudent();
2.输出欢迎界面功能
下面是完整代码
public class StuMain {
private static StuCtr sc = new StuCtr();//定义静态私有StuCtr类型变量sc,以便在整个StuCtrl类中使用
public static void main(String[] args) {
Global.initStudent(); //Global调用initStudent()方法
while (true){
int a = StuPage.welcome();//输出欢迎页面,并让用户选择要操作的功能,获取功能对应的序号
sc.action(a); //action为“用户操作的行为”的方法
}
}
}
这段代码是一个 Java 类 StuMain
的定义,主要包括了一个静态私有变量 sc
和一个 main
方法。下面是对代码的解释:
-
类成员:
private static StuCtr sc = new StuCtr();
:声明了一个静态私有成员变量sc
,类型为StuCtr
。用于在整个StuMain
类中使用该StuCtr
实例。
-
main
方法:public static void main(String[] args)
:程序的入口方法,是程序执行的起点。Global.initStudent()
:调用Global
类中的initStudent()
方法进行学生信息的初始化。- 进入一个无限循环
while (true)
,一直执行以下步骤:- 调用
StuPage.welcome()
方法显示欢迎页面,并获取用户选择的功能序号赋值给变量a
。 - 调用
sc.action(a)
方法,实际上是调用StuCtr
类中的action
方法来处理用户选择的操作行为
- 调用
注意:我写代码的方式是先写出要调用的方法,然后通过alt+enter快捷键去生成所对应的方法,其实这样会使思路更清晰
就像这样,红色的是未生成的方法。
4.Global类中方法的编写
public class Global {
public static int stuID = 1;
public static ArrayList<Student> stuList = new ArrayList<>();
public Global() {
}
public static void initStudent() {
stuList.add(new Student(stuID++,"ZS","1",19,81));
stuList.add(new Student(stuID++,"LS","0",18,86));
stuList.add(new Student(stuID++,"WU","1",20,78));
stuList.add(new Student(stuID++,"ZL","0",19,80));
stuList.add(new Student(stuID++,"NQ","1",20,87));
}
}
这段代码是一个Java类 Global,其中定义了一个静态变量 stuID 和一个静态 ArrayList 存放 Student 对象。在构造方法中没有具体的代码实现,而在 initStudent() 方法中,向 stuList 中添加了五个 Student 对象,每个学生对象包括学号、姓名、性别、年龄和分数。每次添加完一个学生对象后,stuID 自增 1。这段代码的作用是初始化学生数据并存储在 stuList 列表中
5.StuPage类,StuCtrl类,StuModel类中方法的编写
接下来回到主函数中alt+enter 快捷键进入welcom()方法,在StuPage类中编写
public class StuPage {
public StuPage() {
}
public static int welcome() {
System.out.println("******* 欢迎进入学生管理系统*********");
System.out.println("********1.查看学生信息*************");
System.out.println("********2.增加学生信息*************");
System.out.println("********3.修改学生信息*************");
System.out.println("********4.删除学生信息*************");
System.out.println("********0.退出学生管理系统**********");
int a;
do {
System.out.println("请输入功能选项:");
a = new Scanner(System.in).nextInt();
}while (a>4 || a<0);
return a;
}
}
这段代码是一个名为 StuPage 的 Java 类,其中定义了一个静态方法 welcome()。在该方法中,首先打印欢迎信息和一些选项,然后使用 do-while 循环来接受用户输入的功能选项。循环会要求用户输入一个整数,并检查输入是否在 0 到 4 之间(包括 0 和 4)。如果输入不在这个范围内,就会提示用户重新输入,直到输入符合要求才跳出循环并返回该值。
这段代码的作用是展示学生管理系统的主页面,让用户选择不同的操作(查看学生信息、增加学生信息、修改学生信息、删除学生信息或退出系统),并返回用户选择的功能选项。
再回到主函数中alt+enter 快捷键进入action()方法,在StuCtrl类中编写增删改查退出功能
1.查询功能
思路
定义二级查询菜单,通过二级界面获取一个查询请求,二级菜单的调度
public class StuCtr {
public StuCtr() {
}
public void action(int a) {
switch (a){
case 0://退出
System.out.println("退出");
System.exit(0);
break;
case 1://查询
int ss = StuPage.selStu();
selAction(ss);
break;
case 2://添加
break;
case 3://修改
break;
case 4://删除
break;
}
}
}
该代码是一个名为StuCtr的类,用于控制学生信息的操作。
构造方法:
- StuCtr():无参构造方法。
方法:
- action(int a):根据传入的参数a的值执行不同的操作。具体操作如下:
- 当a为0时,执行退出操作,输出"退出",并使用System.exit(0)方法退出程序。
- 当a为1时,执行查询操作,调用StuPage类的selStu()方法获取用户输入的查询条件,并调用selAction()方法执行查询操作。
- 当a为2时,执行添加操作。
- 当a为3时,执行修改操作。
- 当a为4时,执行删除操作。
·selStu方法的编写(StuPage类中)
public static int selStu() {
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("** 6. 按成绩查询 **");
System.out.println("** 0. 退出查询 **");
System.out.println("*****************");
int a;
do{
a = new Scanner(System.in).nextInt();
}while (a>6 || a<0);
return a;
}
·selAction方法的编写
1.查询全部信息
private static StuModel sm = new StuModel();
private void selAction(int ss) {
switch (ss){
case 0:
System.out.println("退出查询功能");
System.exit(0);
break;
case 1:
ArrayList<Student> allStu = sm.selAllStu();
StuPage.ShowStuList(allStu);
break;
case 2:break;
case 3:break;
case 4:break;
case 5:break;
case 6:break;
}
}
·selAllStu方法的编写(StuModel类中)
public class StuModel {
public ArrayList<Student> selAllStu() {
return Global.stuList;
}
}
该代码是一个名为StuModel的类,其中包含了一个名为selAllStu的方法。
方法体:
- selAllStu方法是一个公共方法,返回类型为ArrayList<Student>。
- 方法体内,直接返回了一个全局变量Global.stuList,这是一个学生对象列表,包含了所有学生的信息。
总结: StuModel类的selAllStu方法用于获取所有学生信息的列表。该方法返回了一个包含所有学生信息的ArrayList<Student>对象。
·ShowStuList方法的编写(StuPage页面中)
public static void ShowStuList(ArrayList<Student> allStu) {
System.out.printf("┌────┬────────────┬──────┬──────┬──────┐ \n");
System.out.printf("│%-4s│%-12s│%-6s│%-6s│%-6s│ \n","ID","NAME","SEX","AGE","SCORE");
for (Student stu:
allStu) {
System.out.printf("├────┼────────────┼──────┼──────┼──────┤\n");
System.out.printf("│ %-4d %-12s %-6s %-6d %-6.1f\n",stu.getId(),stu.getName(),stu.getSex(),stu.getAge(),stu.getScore());
}
System.out.printf("└────┴────────────┴──────┴──────┴──────┘\n");
}
该代码是一个名为ShowStuList的静态方法,用于展示学生信息列表。
参数:
- ArrayList<Student> allStu:包含所有学生信息的学生对象列表。
方法体:
- 首先,使用System.out.printf()方法打印表格的表头。表头包括ID、NAME、SEX、AGE和SCORE这五个字段,使用"│%-4s│%-12s│%-6s│%-6s│%-6s│"的格式控制各字段的宽度和对齐方式。
- 然后,使用一个for-each循环遍历allStu列表中的每个学生对象。
- 在循环中,首先打印表格的分隔行。
- 然后,使用System.out.printf()方法打印每个学生对象的信息。使用"│ %-4d %-12s %-6s %-6d %-6.1f"的格式控制各字段的宽度和对齐方式,并传入stu对象的getId()、getName()、getSex()、getAge()和getScore()方法的返回值作为参数。
- 最后,打印表格的结束行。
总结: 该方法用于在控制台打印学生信息列表的表格形式,每个学生信息占据一行。每行包括ID、NAME、SEX、AGE和SCORE这五个字段的信息,并使用表格的形式展示出来。
2.按学号查询
private static StuModel sm = new StuModel();
private void selAction(int ss) {
switch (ss){
case 0:
System.out.println("退出查询功能");
System.exit(0);
break;
case 1:
ArrayList<Student> allStu = sm.selAllStu();
StuPage.ShowStuList(allStu);
break;
case 2://按学号查询
int StuID = StuPage.getStuID(); //获取学生ID
ArrayList<Student> getStuID = sm.getbyStuID(StuID);//通过学生ID获取学生信息
StuPage.ShowStuList(getStuID);
break;
case 3://按姓名查询
break;
case 4:break;
case 5:break;
case 6:break;
}
}
case 2:获取学生ID,然后通过StuModel的getbyStuID方法获取指定学生信息的列表,并通过StuPage类的ShowStuList方法显示学生列表。
·getStuID方法的编写
public static int getStuID() {
System.out.println("输入学生学号:");
return new Scanner(System.in).nextInt();
}
·getbyStuID方法的编写
public ArrayList<Student> getbyStuID(int stuID) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuID == stu.getId()){
resList.add(stu);
}
}
return resList;
}
该代码是StuModel类中的一个方法,用于根据学生ID获取学生信息的列表。
方法体:
- 方法内部定义了一个名为resList的ArrayList,用于存储符合条件的学生信息。
- 使用for-each循环遍历Global.stuList中的每个学生对象。
- 判断当前学生对象的ID是否与参数stuID相等,如果相等则将该学生对象添加到resList中。
- 循环结束后,返回resList。
总结: getbyStuID方法通过遍历学生列表,将ID与参数stuID相等的学生信息添加到另一个列表中并返回。这样可以根据学生ID获取对应的学生信息列表。
3.按姓名查询
代码思路和按学号查询的完全一样
case 3://按姓名查询
String StuName = StuPage.getStuName();
ArrayList<Student> getStuName = sm.getbyStuName(StuName);
StuPage.ShowStuList(getStuName);
break;
先,它从界面类(StuPage)获取用户输入的学生姓名(StuName)。
然后,它调用学生管理类(sm)的getbyStuName()方法,传递StuName作为参数来查询学生列表。
查询结果是一个包含符合条件的学生对象的ArrayList。
最后,它调用StuPage的ShowStuList()方法,将查询结果作为参数来显示符合条件的学生列表。
·getStuName方法编写
public static String getStuName() {
System.out.println("输入学生姓名:");
return new Scanner(System.in).nextLine();
}
该代码片段是一个静态方法,方法名称为getStuName。该方法的作用是获取用户输入的学生姓名,并将其作为字符串返回。
在方法内部,首先会打印一条消息提示用户输入学生姓名。然后,使用Scanner类获取用户输入的字符串,这里使用了nextLine()方法。
最后,将获取到的学生姓名作为字符串返回给调用该方法的地方。
·getbyStuName方法的编写
public ArrayList<Student> getbyStuName(String stuName) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuName == stu.getName()){
resList.add(stu);
}
}
return resList;
}
该代码片段是一个方法,方法名称为getbyStuName。该方法接收一个参数stuName,类型为String,表示要查找的学生姓名。
在方法内部,首先创建一个名为resList的ArrayList对象,用于存储符合条件的学生对象。然后,使用for-each循环遍历全局变量Global中的stuList列表,该列表存储了所有学生对象。
在循环中,通过调用stu对象的getName()方法获取学生的姓名,并与传入的stuName进行比较。如果相等,表示找到了目标学生对象,将其添加到resList列表中。
最后,返回resList列表,该列表中存储了所有符合条件的学生对象。
4.按性别查询
case 4://性别
String StuSex = StuPage.getStuSex();
ArrayList<Student> getStuSex = sm.getbyStuSex(StuSex);
StuPage.ShowStuList(getStuSex);
break;
·getStuSex方法编写
public static String getStuSex() {
System.out.println("输入学生性别:");
return new Scanner(System.in).nextLine();
}
·getbyStuSex方法编写
public ArrayList<Student> getbyStuSex(String stuSex) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuSex == stu.getSex()){
resList.add(stu);
}
}
return resList;
}
5.按年龄查询
case 5://年龄
int StuAge = StuPage.getStuAge();
ArrayList<Student> getStuAge = sm.getbyStuAge(StuAge);
StuPage.ShowStuList(getStuAge);
break;
·getStuAge方法编写
public static int getStuAge() {
System.out.println("输入学生年龄:");
return new Scanner(System.in).nextInt();
}
·getbyStuAge方法编写
public ArrayList<Student> getbyStuAge(String stuAge) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuAge == stu.getAge()){
resList.add(stu);
}
}
return resList;
}
6.按成绩查询
case 6://成绩
int StuScore = StuPage.getStuScore();
ArrayList<Student> getStuScore = sm.getbyStuScore(StuScore);
StuPage.ShowStuList(getStuScore);
break;
·getStuScore方法编写
public static int getStuScore() {
System.out.println("输入学生成绩:");
return new Scanner(System.in).nextFloat();
}
·getbyStuScore方法编写
public ArrayList<Student> getbyStuAge(String stuScore) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuSore == stu.getScore()){
resList.add(stu);
}
}
return resList;
}
2.添加功能
获取要添加的学生对象,将要添加的学生对象传递给model层来实现
case 2://添加
while (sm.doAddStu(StuPage.addStu()));
break;
这段代码是在一个 switch
语句中的 case 2
中的逻辑。
在这段代码中,首先通过调用 StuPage.addStu()
方法获取一个 Student
对象,并将其传递给 sm.doAddStu()
方法进行添加。
接下来,使用 while
循环来不断执行添加学生的操作,直到 sm.doAddStu(StuPage.addStu())
返回 false
。
当 sm.doAddStu(StuPage.addStu())
返回 false
时,说明添加学生失败,此时循环结束。
·addStu功能的编写
public static Student addStu() {
System.out.println("输入学生姓名:");
String name = new Scanner(System.in).nextLine();
if("over".equals(name)){
return null;
}
System.out.println("输入学生性别:");
String sex = new Scanner(System.in).nextLine();
System.out.println("输入学生年龄:");
int age = new Scanner(System.in).nextInt();
System.out.println("输入学生成绩:");
float score = new Scanner(System.in).nextFloat();
return new Student(name,sex,age,score);
}
这段代码是一个静态方法 addStu
,它返回一个类型为 Student
的对象。
在方法的实现中,首先通过调用 System.out.println
打印出提示信息 "输入学生姓名:",然后通过 Scanner
类的 nextLine()
方法,从用户输入中获取学生的姓名,并将其赋值给 name
变量。
接下来,通过比较 name
和字符串 "over" 是否相等,如果相等,则返回 null
,表示结束学生输入。
如果 name
不等于 "over",则继续获取学生的性别,通过 System.out.println
打印出提示信息 "输入学生性别:",然后通过 Scanner
类的 nextLine()
方法,从用户输入中获取学生的性别,并将其赋值给 sex
变量。
然后,继续获取学生的年龄,通过 System.out.println
打印出提示信息 "输入学生年龄:",然后通过 Scanner
类的 nextInt()
方法,从用户输入中获取学生的年龄,并将其赋值给 age
变量。
最后,获取学生的成绩,通过 System.out.println
打印出提示信息 "输入学生成绩:",然后通过 Scanner
类的 nextFloat()
方法,从用户输入中获取学生的成绩,并将其赋值给 score
变量
·doAddStu方法的编写
public boolean doAddStu(Student sa) {
if (null == sa){
return false;
}
Student student = new Student(
Global.stuID++,
sa.getName(),
sa.getSex(),
sa.getAge(),
sa.getScore()
);
return Global.stuList.add(student);
}
这段代码是一个方法,在方法签名中,它返回一个布尔值。方法名是 doAddStu
,并且它接受一个类型为 Student
的参数 sa
。
在方法的实现中,首先进行了一个判断,如果参数 sa
是 null
,则返回 false
。
接下来,通过使用参数 sa
的 getName()
、getSex()
、getAge()
和 getScore()
方法,创建了一个新的 Student
对象。在创建新的 Student
对象时,Global.stuID
自增,并将其作为新学生的 ID 属性。
最后,将新创建的学生对象添加到名为 Global.stuList
的列表中,并返回 add()
方法的结果,表示是否成功将学生对象添加到列表中。
3.修改功能
思路:
获取要修改的学生ID,通过ID查出要修改的学生信息,在编辑页面中显示原有的学员信息,并且等待输入新息,更新学员信息
case 3://修改
int editStuID = StuPage.getStuID();
ArrayList<Student> editStu = sm.getbyStuID(editStuID);
Student newStu = StuPage.editStu(editStu.get(0));
sm.doUpdate(newStu);
break;
这段代码是在一个 switch
语句中的 case 3
中的逻辑。
在这段代码中,首先调用 StuPage.getStuID()
方法获取要修改的学生的ID。然后,使用该ID调用 sm.getbyStuID()
方法获取与该ID相匹配的学生列表。
接下来,从获取到的学生列表中取出第一个学生对象,并将其作为参数传递给 StuPage.editStu()
方法。该方法会显示该学生的信息,并允许用户修改。
用户修改完学生信息后,得到一个新的学生对象 newStu
。
最后,将 newStu
作为参数调用 sm.doUpdate()
方法进行更新操作。
·editStu()方法的编写
public static Student editStu(Student student) {
System.out.println("输入姓名("+student.getName()+"):");
String name = new Scanner(System.in).nextLine();
System.out.println("输入性别("+student.getSex()+"):");
String sex = new Scanner(System.in).nextLine();
System.out.println("输入年龄("+student.getName()+"):");
int age = new Scanner(System.in).nextInt();
System.out.println("输入成绩("+student.getName()+"):");
Float score = new Scanner(System.in).nextFloat();
return new Student(student.getId(),name,sex,age,score);
}
这段代码定义了一个静态方法 editStu(Student student)
,该方法用于修改学生信息。
在方法中,首先通过 student
参数获取要修改学生的原始信息,并在提示信息中显示出来。然后,分别提示用户输入新的姓名、性别、年龄和成绩。
用户输入完毕后,使用 Scanner
类接收用户输入的新的姓名、性别、年龄和成绩,并将其赋值给对应的变量。
最后,使用原始学生的 ID 和新的姓名、性别、年龄和成绩创建一个新的学生对象,并将其返回。
总结来说,这段代码的作用是在控制台上提示用户输入新的学生信息,并返回一个包含新信息的学生对象。
·doUpdate方法的编写
public void doUpdate(Student newStu) {
for (int i = 0; i < Global.stuList.size(); i++) {
if (newStu.getId() == Global.stuList.get(i).getId()){
Global.stuList.set(i,newStu);
return;
}
}
}
这段代码是一个方法,名为doUpdate,接受一个Student对象作为参数。
该方法的作用是根据传入的Student对象的id属性,在全局变量Global.stuList中查找对应的学生对象,并将传入的Student对象替换掉原来的对象。
具体流程如下:
- 方法使用一个for循环遍历全局变量Global.stuList中的每一个学生对象。
- 在循环中,使用if语句判断当前遍历到的学生对象的id属性是否和传入的newStu对象的id属性相同。
- 如果相同,说明找到了需要更新的学生对象,就把newStu对象替换掉Global.stuList中原来的对象。
- 最后,使用return语句终止方法的执行。
4.删除功能
思路
获取要删除的学生ID,通过ID查出要删除的学生信息,如果要删除的学生信息存在则删除(先展示学生列表,再显示界面提示删除信息,再开始进行删除操作),不存在则提示不存在
case 4://删除
int delStu = StuPage.getStuID();
ArrayList<Student> delStuID = sm.getbyStuID(delStu);
if (!delStuID.isEmpty()){
StuPage.ShowStuList(delStuID);
if (StuPage.delAlert()){
sm.doDelStuID(delStu);
}
}else
StuPage.failed("删除失败");
break;
这段代码是一个switch语句的一个case分支,针对选项4(删除)进行处理。
具体流程如下:
- 首先,从StuPage类中获取输入的待删除学生的ID。
- 使用StudentManager类的getByStuID方法,根据输入的学生ID从学生管理器中获取学生对象列表delStuID。
- 使用if语句判断delStuID列表是否为空。
- 如果不为空,表示找到了对应的学生对象。然后调用StuPage类的ShowStuList方法,展示delStuID列表中的学生信息。
- 接着,使用StuPage类的delAlert方法,显示一个确认删除的提示框。如果用户确认删除,就调用StudentManager类的doDelStuID方法,删除该学生。
- 如果delStuID列表为空,表示找不到对应的学生对象,就调用StuPage类的failed方法,显示一个删除失败的提示信息。
- 最后,使用break语句结束该分支的执行。
·delAlert()方法的编写
public static boolean delAlert() {
System.out.println("Y/y(确认删除),N/n(取消删除)");
switch (new Scanner(System.in).nextLine()){
case "Y":
case "y":
return true;
case "N":
case "n":
return false;
default:
System.out.println("输入非法,取消删除");
}
return false;
}
这段代码是一个静态方法delAlert(),用于显示一个确认删除的提示信息,并根据用户的输入返回一个布尔值。
具体流程如下:
- 首先,使用System.out.println()方法在控制台打印出一个确认删除的提示信息,提示用户输入"Y"或"y"表示确认删除,输入"N"或"n"表示取消删除。
- 使用switch语句对用户输入的字符串进行匹配。
- 如果用户输入的是"Y"或"y",则返回true,表示确认删除。
- 如果用户输入的是"N"或"n",则返回false,表示取消删除。
- 如果用户输入的既不是"Y"也不是"y"也不是"N"也不是"n",则使用System.out.println()方法打印出一个输入非法的提示信息,并继续执行代码。
- 最后,使用return false语句作为默认情况,返回false,表示取消删除。
·doDelStuID()方法的编写
public void doDelStuID(int delStu) {
for (int i = 0; i < Global.stuList.size(); i++) {
if (delStu == Global.stuList.get(i).getId()){
Global.stuList.remove(i);
return;
}
}
}
这段代码是一个方法doDelStuID(int delStu),用于根据给定的学生ID删除学生信息。
具体流程如下:
- 首先,使用for循环遍历全局变量Global.stuList中的所有学生对象。
- 在每次循环中,使用if语句判断当前学生对象的ID是否与给定的delStu相等。
- 如果相等,则使用Global.stuList.remove(i)方法将该学生对象从列表中移除,并返回。
- 如果不相等,则继续循环判断下一个学生对象。
- 最后,如果循环结束后仍未找到与给定ID相等的学生对象,则说明删除失败或不存在该学生ID。
·StuPage.failed()方法的编写
public static void failed(String info) {
System.out.println("学员信息不存在"+info);
}
这段代码是一个静态方法failed(String info),用于在控制台输出学员信息不存在的提示信息。
具体流程如下:
- 首先,使用System.out.println()方法在控制台输出"学员信息不存在"以及传入的info参数。
- 这段代码的作用是在特定情况下提示用户所输入的学员信息不存在。当找不到对应的学员信息时,可以调用该方法输出提示信息给用户。
6.完整代码
1.Student类
package com.H.Demo03;
/**
* @Description:
* @Author: Hongming
*/
public class Student {
private int id;
private String name;
private String sex;
private int age;
private float score;
public Student(String name, String sex, int age, float score) {
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
}
public Student(int id, String name, String sex, int age, float score) {
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
this.score = score;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
2.Global类
package com.H.Demo03;
import java.util.ArrayList;
/**
* @Description:
* @Author: Hongming
*/
public class Global {
public static int stuID = 1;
public static ArrayList<Student> stuList = new ArrayList<>();
public Global() {
}
public static void initStudent() {
stuList.add(new Student(stuID++,"ZS","1",19,81));
stuList.add(new Student(stuID++,"LS","0",18,86));
stuList.add(new Student(stuID++,"WU","1",20,78));
stuList.add(new Student(stuID++,"ZL","0",19,80));
stuList.add(new Student(stuID++,"NQ","1",20,87));
}
}
3.StuPage类
package com.H.Demo03;
import sun.util.locale.provider.FallbackLocaleProviderAdapter;
import java.util.ArrayList;
import java.util.Scanner;
/**
* @Description:
* @Author: Hongming
*/
public class StuPage {
public StuPage() {
}
public static int welcome() {
System.out.println("******* 欢迎进入学生管理系统*********");
System.out.println("********1.查看学生信息*************");
System.out.println("********2.增加学生信息*************");
System.out.println("********3.修改学生信息*************");
System.out.println("********4.删除学生信息*************");
System.out.println("********0.退出学生管理系统**********");
int a;
do {
System.out.println("请输入功能选项:");
a = new Scanner(System.in).nextInt();
}while (a>4 || a<0);
return a;
}
public static int selStu() {
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("** 6. 按成绩查询 **");
System.out.println("** 0. 退出查询 **");
System.out.println("*****************");
int a;
do{
a = new Scanner(System.in).nextInt();
}while (a>6 || a<0);
return a;
}
public static void ShowStuList(ArrayList<Student> allStu) {
System.out.printf("┌────┬────────────┬──────┬──────┬──────┐ \n");
System.out.printf("│%-4s│%-12s│%-6s│%-6s│%-6s│ \n","ID","NAME","SEX","AGE","SCORE");
for (Student stu:
allStu) {
System.out.printf("├────┼────────────┼──────┼──────┼──────┤\n");
System.out.printf("│ %-4d %-12s %-6s %-6d %-6.1f\n",stu.getId(),stu.getName(),stu.getSex(),stu.getAge(),stu.getScore());
}
System.out.printf("└────┴────────────┴──────┴──────┴──────┘\n");
}
public static int getStuID() {
System.out.println("输入学生学号:");
return new Scanner(System.in).nextInt();
}
public static String getStuName() {
System.out.println("输入学生姓名:");
return new Scanner(System.in).nextLine();
}
public static String getStuSex() {
System.out.println("输入学生性别:");
return new Scanner(System.in).nextLine();
}
public static int getStuAge() {
System.out.println("输入学生年龄:");
return new Scanner(System.in).nextInt();
}
public static float getStuScore() {
System.out.println("输入学生成绩:");
return new Scanner(System.in).nextFloat();
}
public static Student addStu() {
System.out.println("输入学生姓名:");
String name = new Scanner(System.in).nextLine();
if("over".equals(name)){
return null;
}
System.out.println("输入学生性别:");
String sex = new Scanner(System.in).nextLine();
System.out.println("输入学生年龄:");
int age = new Scanner(System.in).nextInt();
System.out.println("输入学生成绩:");
float score = new Scanner(System.in).nextFloat();
return new Student(name,sex,age,score);
}
public static Student editStu(Student student) {
System.out.println("输入姓名("+student.getName()+"):");
String name = new Scanner(System.in).nextLine();
System.out.println("输入性别("+student.getSex()+"):");
String sex = new Scanner(System.in).nextLine();
System.out.println("输入年龄("+student.getAge()+"):");
int age = new Scanner(System.in).nextInt();
System.out.println("输入成绩("+student.getScore()+"):");
Float score = new Scanner(System.in).nextFloat();
return new Student(student.getId(),name,sex,age,score);
}
public static boolean delAlert() {
System.out.println("Y/y(确认删除),N/n(取消删除)");
switch (new Scanner(System.in).nextLine()){
case "Y":
case "y":
return true;
case "N":
case "n":
return false;
default:
System.out.println("输入非法,取消删除");
}
return false;
}
public static void failed(String info) {
System.out.println("学员信息不存在"+info);
}
}
4.StuCtrl类
package com.H.Demo03;
import java.util.ArrayList;
/**
* @Description:
* @Author: Hongming
*/
public class StuCtr {
public StuCtr() {
}
public void action(int a) {
switch (a){
case 0://退出
System.out.println("退出");
System.exit(0);
break;
case 1://查询
int ss = StuPage.selStu();
selAction(ss);
break;
case 2://添加
while (sm.doAddStu(StuPage.addStu()));
break;
case 3://修改
int editStuID = StuPage.getStuID();
ArrayList<Student> editStu = sm.getbyStuID(editStuID);
Student newStu = StuPage.editStu(editStu.get(0));
sm.doUpdate(newStu);
break;
case 4://删除
int delStu = StuPage.getStuID();
ArrayList<Student> delStuID = sm.getbyStuID(delStu);
if (!delStuID.isEmpty()){
StuPage.ShowStuList(delStuID);
if (StuPage.delAlert()){
sm.doDelStuID(delStu);
}
}else
StuPage.failed("删除失败");
break;
}
}
private static StuModel sm = new StuModel();
private void selAction(int ss) {
switch (ss){
case 0:
System.out.println("退出查询功能");
System.exit(0);
break;
case 1:
ArrayList<Student> allStu = sm.selAllStu();
StuPage.ShowStuList(allStu);
break;
case 2://按学号查询
int StuID = StuPage.getStuID();
ArrayList<Student> getStuID = sm.getbyStuID(StuID);
StuPage.ShowStuList(getStuID);
break;
case 3://按姓名查询
String StuName = StuPage.getStuName();
ArrayList<Student> getStuName = sm.getbyStuName(StuName);
StuPage.ShowStuList(getStuName);
break;
case 4://性别
String StuSex = StuPage.getStuSex();
ArrayList<Student> getStuSex = sm.getbyStuSex(StuSex);
StuPage.ShowStuList(getStuSex);
break;
case 5://年龄
int StuAge = StuPage.getStuAge();
ArrayList<Student> getStuAge = sm.getbyStuAge(StuAge);
StuPage.ShowStuList(getStuAge);
break;
case 6://成绩
float StuScore = StuPage.getStuScore();
ArrayList<Student> getStuSore = sm.getbyStuScore(StuScore);
StuPage.ShowStuList(getStuSore);
break;
}
}
}
5.StuModel类
package com.H.Demo03;
import java.util.ArrayList;
/**
* @Description:
* @Author: Hongming
*/
public class StuModel {
public ArrayList<Student> selAllStu() {
return Global.stuList;
}
public ArrayList<Student> getbyStuID(int stuID) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuID == stu.getId()){
resList.add(stu);
}
}
return resList;
}
public ArrayList<Student> getbyStuName(String stuName) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuName == stu.getName()){
resList.add(stu);
}
}
return resList;
}
public ArrayList<Student> getbyStuSex(String stuSex) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuSex == stu.getSex()){
resList.add(stu);
}
}
return resList;
}
public ArrayList<Student> getbyStuAge(int stuAge) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuAge == stu.getAge()){
resList.add(stu);
}
}
return resList;
}
public ArrayList<Student> getbyStuScore(float stuScore) {
ArrayList<Student> resList = new ArrayList<>();
for (Student stu:
Global.stuList) {
if(stuScore == stu.getScore()){
resList.add(stu);
}
}
return resList;
}
public boolean doAddStu(Student sa) {
if (null == sa){
return false;
}
Student student = new Student(
Global.stuID++,
sa.getName(),
sa.getSex(),
sa.getAge(),
sa.getScore()
);
return Global.stuList.add(student);
}
public void doUpdate(Student newStu) {
for (int i = 0; i < Global.stuList.size(); i++) {
if (newStu.getId() == Global.stuList.get(i).getId()){
Global.stuList.set(i,newStu);
return;
}
}
}
public void doDelStuID(int delStu) {
for (int i = 0; i < Global.stuList.size(); i++) {
if (delStu == Global.stuList.get(i).getId()){
Global.stuList.remove(i);
return;
}
}
}
}
7.StuMain类
package com.H.Demo03;
/**
* @Description:
* @Author: Hongming
*/
public class StuMain {
private static StuCtr sc= new StuCtr();
public static void main(String[] args) {
Global.initStudent();
while(true){
int a = StuPage.welcome();
sc.action(a);
}
}
}