需求
针对目前我们的所学内容,完成一个综合案例:学生管理系统!该系统主要功能如下:
添加学生:通过键盘录入学生信息,添加到集合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
查看学生:将集合中的学生对象信息进行展示
退出系统:结束程序
思路
- 定义学生类,包含以下成员变量
学生类: Student成员变量:
学号:sid
姓名:name
年龄:age
生日:birthday
构造方法:
无参构造
带四个参数的构造成员方法:
每个成员变量对应给出get/set方法 - 学生管理系统主界面的搭建
- 学生管理系统的查看学生功能
- 学生管理系统的添加学生功能
- 学生管理系统的判断学生是否重复功能
- 学生管理系统的删除学生功能
- 学生管理系统的修改学生功能
- 退出系统
定义学生类
package com.ch1;
/*
* 学生类
* */
public class Student {
private String studentId;//学号
private String name;//姓名
private String gender;//性别
private String age;//年龄
private String banji;//班级
//空参构造
public Student() {
}
//带参构造
public Student(String studentId, String name, String gender, String age, String banji) {
this.studentId = studentId;
this.name = name;
this.gender = gender;
this.age = age;
this.banji = banji;
}
/*
* studentID,name,age,gander,banji的get/set方法
* */
/**
* 获取
* @return studentId
*/
public String getStudentId() {
return studentId;
}
/**
* 设置
* @param studentId
*/
public void setStudentId(String studentId) {
this.studentId = studentId;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return gender
*/
public String getGender() {
return gender;
}
/**
* 设置
* @param gender
*/
public void setGender(String gender) {
this.gender = gender;
}
/**
* 获取
* @return age
*/
public String getAge() {
return age;
}
/**
* 设置
* @param age
*/
public void setAge(String age) {
this.age = age;
}
/**
* 获取
* @return banji
*/
public String getBanji() {
return banji;
}
/**
* 设置
* @param banji
*/
public void setBanji(String banji) {
this.banji = banji;
}
//重写toString方法
public String toString() {
return "Student{studentId = " + studentId + ", name = " + name + ", gender = " + gender + ", age = " + age + ", banji = " + banji + "}";
}
}
这里的学生类可以使用IDEA的PTG插件来使用快捷键生成写起来会比较快一点
主界面的搭建
package com.ch1;//包名
//导包,先导入下面需要用到的两个包,一个ArrayList和一个Scanner包
import java.util.ArrayList;
import java.util.Scanner;
/*
* 主界面
* */
public class index {
//这里我们把Scanner放在外边,用public static修饰,让Scanner在我们整个项目里边都能用到现在定义的这个扫描器,不用再去后边的每一个需要输入的地方去重复定义
public static Scanner user = new Scanner(System.in);
public static void main(String[] args) {
//定义一个ArrayList集合,类型是我们定义的Student类型
ArrayList<Student> arrayList = new ArrayList<Student>();
//创建Student对象
Student student = new Student();
//这里我们使用死循环来达到一个重复使用此系统的一个效果
//这里跳出循环的方法有很多,之前写的那个员工管理系统使用的是OUT标签,这里我们采用Java自带的退出语句System.exit(0)
while (true){
//打印出主菜单(功能列表)
System.out.println("----------欢迎来到学生信息管理系统----------");
System.out.println("1.学生信息 2.新增学生 3.删除学生 4.修改学生 5.退出系统");
System.out.println("请输入你要操作的功能");
int index = user.nextInt();
//这里接收到输入的编号之后使用switch进行一个功能的匹配
switch (index){
//当输入的编号为1时,进行学生信息查看的功能
case 1:
//给出提示信息,提示现在是查看学生信息的功能,并调用findAllStudent()方法实现查看学生信息的功能
System.out.println("学生信息");
findAllStudent(arrayList);
break;
//当输入的编号为2时,进行新增学生的功能
case 2:
//给出提示信息,提示现在是新增学生的功能,并调用addStudent()方法实现新增学生的功能
System.out.println("新增学生");
addStudent(arrayList);
break;
//当输入的编号为3时,进行删除学生的功能
case 3:
//给出提示信息,提示现在是删除学生的功能,并调用deleteStudent()方法实现删除学生的功能
System.out.println("删除学生");
deleteStudent(arrayList);
break;
//当输入的编号为4时,进行修改学生的功能
case 4:
//给出提示信息,提示现在是修改学生的功能,并调用updateStudent()方法实现修改学生信息的功能
System.out.println("修改学生");
updateStudent(arrayList);
break;
//当输入的编号为5时,进行退出系统的功能
case 5:
//给出提示信息,退出系统
System.out.println("系统已退出,谢谢使用");
System.exit(0);
break;
//当输入的不是以上的编号时,会提示一个输入编号错误,然后重新打印一次功能菜单,重新输入
default:
System.out.println("您输入的编号有误,请重新输入");
break;
}
}
}
}
查看学生功能
//查看学生信息
//这里传入一个参数,把集合传入进来
public static void findAllStudent(ArrayList<Student> arrayList){
//判断集合中是否有数据,如果有则打印出所有数据,如果没有则显示没有学生信息的提示信息
//arraylist.size()是ArrayList的一个内置方法,用于返回集合内的元素个数
if (arrayList.size() == 0){
System.out.println("没有学生信息,请至少输入一条学生信息后再进行查看");
}else {
//打印表头
System.out.println("学号" + "\t\t\t\t" + "姓名" + "\t\t\t\t" + "年龄" + "\t\t\t\t" + "性别" + "\t\t\t\t" + "班级");
//使用for循环遍历集合,这里可以使用增强for循环来进行遍历
for (int i = 0 ; i < arrayList.size() ; i++){
Student student = arrayList.get(i);
System.out.println(student.getStudentId() + "\t\t" + student.getName() + "\t\t\t" + student.getAge() + "\t\t\t\t" + student.getGender() + "\t\t\t\t" + student.getBanji());
}
}
}
添加学生功能
//添加学生信息
public static void addStudent(ArrayList<Student> arrayList){
System.out.print("请输入学号");
String studentID;
//这里使用死循环把刚刚输入的学号给下边的判重方法进行一个学号的判重,使学号唯一
while (true){
studentID= user.next();
//把集合和刚刚输入的学号传入得到判重的方法里边去,存在则显示提示信息,然后重新输入一个新的学号,不存在则进行后面的其他信息输入
if (isUsed(arrayList , studentID)){
System.out.println("该学号已经存在,请重新输入");
}else {
break;
}
}
System.out.print("请输入姓名");
String name = user.next();
System.out.print("请输入年龄");
String age = user.next();
System.out.print("请输入性别");
String gender = user.next();
System.out.print("请输入班级");
String banji = user.next();
//这里把输入的所有信息都放到Student类里边,然后用ArrayList集合保存起来,并显示添加成功的提示信息
Student student = new Student(studentID , name , age , gender , banji);
arrayList.add(student);
System.out.println("添加学生信息成功");
}
判断学生是否重复功能
//学号判重
//这里需要传入集合和需要配对的数据
public static boolean isUsed(ArrayList<Student> arrayList , String index){
//使用for循环进行遍历集合
for (int i = 0 ; i < arrayList.size() ; i++){
//这里取集合里边的每一个元素使用equals和传入进来的数据匹配
//这里不建议使用==进行匹配
if (arrayList.get(i).getStudentId().equals(index)){
return true;
}
}
return false;
}
删除学生功能
//删除学生信息
public static void deleteStudent(ArrayList<Student> arrayList){
//这里定义一个count后边使用这个cout判断学号是否存在
int count = -1;
System.out.println("请输入要删除的学生学号");
String index = user.next();
//使用for循环遍历一下arraylist集合
for (int i = 0 ; i < arrayList.size() ; i++){
//查找arraylist集合里边是否有输入的学号,如果有则把该索引值赋值给刚刚定义的count
if (arrayList.get(i).getStudentId().equals(index)){
count = i;
break;
}
}
//这里通过count值得改变进行一个学号是否存在的一个判断,如果count==-1则说明输入的学号不存在,给出提示信息,如果count!=-1,则说明学号存在,我们使用ArrayList的内置方法把该学生的学生信息删除掉,并给出删除成功的提信息
if (count == -1){
System.out.println("删除失败,请检查学生学号是否正确或存在");
}else {
arrayList.remove(count);
System.out.println("删除成功");
}
}
修改学生信息功能
//更新学生信息
public static void updateStudent(ArrayList<Student> arrayList){
//这里的count和上边删除学生信息的count作用是一样的
int count = -1;
System.out.println("请输入要修改的学生学号");
String index = user.next();
//使用for循环进行遍历
for (int i = 0 ; i < arrayList.size() ; i++){
//遍历arraylist集合和输入的学号进行比较,比较成功则把索引值赋值给count
//这里不建议使用==进行比较
if (arrayList.get(i).getStudentId().equals(index)){
count = i;
break;
}
}
//如果count==-1则说明输入的学号不存在或者输入的学号错误,count!=-1则说明学号存在,那我们就修改其学生信息
if (count == -1){
System.out.println("修改失败,请确认您输入的学生学号是否正确或存在");
}else {
System.out.print("请输入姓名");
String name = user.next();
System.out.print("请输入年龄");
String age = user.next();
System.out.print("请输入性别");
String gander = user.next();
System.out.print("请输入班级");
String banji = user.next();
//把刚刚输入的学生信息放到Student类里边,然后通过ArrayList的内置方法修改数据,并给出提示信息
Student student = new Student(index , name , age , gander , banji);
arrayList.set(count,student);
System.out.println("修改成功");
}
}