JAVA基础 —— 学生管理系统项目设计(控制台版)

目录

一、项目需求

 二 、项目分析

三、代码实现

1.   创建学生类

2.  编写测试类

2.1  欢迎界面设计

 2.2  功能设计

2.3  查询学生信息功能

2.4  添加学生信息功能

 2.5  删除学生信息功能

2.6  修改学生信息功能


一、项目需求

采取控制台的方式去书写学生管理系统。

1. 初始菜单:

"----------欢迎来到学生管理系统----------"
"1:添加学生"
"2:删除学生"

"3:修改学生"

"4:查询学生"

"5:退出"
"请输入您的选择:"


通过键盘录入,使得用户可以输入1~5选择不同的操作。

2.  学生类:

属性:id、姓名、年龄、家庭住址

3.  添加功能:

键盘录入每一个学生信息并添加,需要满足以下要求:

  •  id唯一

4. 删除功能: 

 键盘录入要删除的学生id,需要满足以下要求:

  • id存在删除
  • id不存在,需要提示不存在,并回到初始菜单

 5. 修改功能:

键盘录入要修改的学生id,需要满足以下要求:

  • id存在,继续录入其他信息
  • id不存在,需要提示不存在,并回到初始菜单

6. 查询功能:

打印所有的学生信息,需要满足以下要求

  • 如果没有学生信息,提示:当前无学生信息,请添加后再查询
  • 如果有学生信息,需要按照功下格式输出。(不用过于纠结对齐的问题)
id姓名年龄家庭住址
001张三23南京
002李四24北京
003王五25广州
004赵六26深圳

 二 、项目分析

此时,我们就可以根据分析图打开我们心爱的编程软件开始设计学生管理系统了。

三、代码实现

1.   创建学生类

public class Student {
    //id name age address
	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;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	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 getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
	
}

2.  编写测试类

2.1  欢迎界面设计

public static void main(String[] args) {

	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);
			String choose = sc.next();

			if (choose.equalsIgnoreCase("1")) {
				System.out.println("添加学生");
			} else if (choose.equalsIgnoreCase("2")) {
				System.out.println("删除学生");
			} else if (choose.equalsIgnoreCase("3")) {
				System.out.println("修改学生");
			} else if (choose.equalsIgnoreCase("4")) {
				System.out.println("查询学生");
			} else if (choose.equalsIgnoreCase("5")) {
				System.out.println("退出系统");
			} else {
				System.out.println("您输入的选项有误");
			}
}

此时,我们发现每次只执行一次就结束循环,那我们怎样做能够让用户反复循环的进行操作呢?

方案:While(true)死循环 

while (true) {

			if (choose.equalsIgnoreCase("1")) {
				System.out.println("添加学生");
			} else if (choose.equalsIgnoreCase("2")) {
				System.out.println("删除学生");
			} else if (choose.equalsIgnoreCase("3")) {
				System.out.println("修改学生");
			} else if (choose.equalsIgnoreCase("4")) {
				System.out.println("查询学生");
			} else if (choose.equalsIgnoreCase("5")) {
                System.out.println("退出系统");

				break;  

			} else {
				System.out.println("您输入的选项有误");
			}

		}
	}

 2.2  功能设计

定义四个方法类:addStudent()、deleteStudent()、updateStudent()、selectStudent()

并将方法类连接到用户操作主菜单中。

public class StudentTest {
	public static void main(String[] args) {
       //创建学生对象集合
		ArrayList<Student> list = new ArrayList<>();

		while (true) {
		
			if (choose.equalsIgnoreCase("1")) {

				addStudent(list);

			} else if (choose.equalsIgnoreCase("2")) {

				deleteStudent(list);

			} else if (choose.equalsIgnoreCase("3")) {

				updateStudent(list);

			} else if (choose.equalsIgnoreCase("4")) {

				selectStudent(list);

			} else if (choose.equalsIgnoreCase("5")) {
				System.out.println("退出系统");
				break;
			} else {
				System.out.println("您输入的选项有误");
			}

		}
	}

	// 添加学生
	public static void addStudent(ArrayList<Student> list) {
		System.out.println("添加学生");
	}

	// 删除学生
	public static void deleteStudent(ArrayList<Student> list) {
		System.out.println("2:删除学生");
	}

	// 修改学生
	public static void updateStudent(ArrayList<Student> list) {
		System.out.println("修改学生");

	}

	// 查找学生
	public static void selectStudent(ArrayList<Student> list) {
		System.out.println("查询学生");
	}
}

2.3  查询学生信息功能

// 查找学生
	public static void selectStudent(ArrayList<Student> list) {
		if (list.size() ==0) {
			System.out.println("当前没有学生信息,请添加后再查看");
			//结束方法
			return ;
		}
		//执行到此,说明集合中由数据
		//打印表头信息
		// 制表符: \t
		System.out.println("id\t姓名\t年龄\t家庭住址");
		for (int i = 0; i < list.size(); i++) {
			Student stu = list.get(i);
			System.out.println(stu.getId() + "\t" + stu.getName()
			+ "\t" + stu.getAge() + "\t" +stu.getAddress());
		}
	}

 运行结果:

2.4  添加学生信息功能

键盘录入每一个学生信息并添加。

// 添加学生
	public static void addStudent(ArrayList<Student> list) {
		//利用空参构造先创建学生对象
		Student s = new Student();
		
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入学生的id:");
		String id = sc.next();
		s.setId(id);
		
		System.out.println("请输入学生的姓名:");
		String name = sc.next();
		s.setName(name);
		
		System.out.println("请输入学生的年龄:");
		int age = sc.nextInt();
		s.setAge(age);
		
		System.out.println("请输入学生的家庭住址:");
		String address = sc.next();
		s.setAddress(address);
		
//		Student stu = new Student(id,name,age,address);
		
		//把学生对象添加到集合当中
		list.add(s);
		
		//提示学生添加成功
		System.out.println("学生信息添加成功");
	}

要求:id唯一

public static void addStudent(ArrayList<Student> list) {
		// 利用空参构造先创建学生对象
		Student s = new Student();

		Scanner sc = new Scanner(System.in);
		String id = null;
		while (true) {
			System.out.println("请输入学生的id:");
			id = sc.next();
			boolean falg = contains(list, id);
			if (falg) {
				//表示id已经存在
				System.out.println("id已经存在,请重新录入");
			} else {
				//表示id不存在
				s.setId(id);
				break;
			}
		}


	}

// 判断id在集合中是否存在
	public static boolean contains(ArrayList<Student> list, String id) {
		// 遍历集合得到每一个学生对象
		// 拿到学生对象后,获取id并进行判断
		// 存在 : true 不存在: false
		for (int i = 0; i < list.size(); i++) {
			Student stu = list.get(i);
			String sid = stu.getId();
			if (sid.equals(id)) {
				return true;
			}

		}
		return false;
	}
}

 运行结果:

 2.5  删除学生信息功能

// 删除学生
	public static void deleteStudent(ArrayList<Student> list) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要删除的学生id:");
		String id = sc.next();
		//查询id在集合中的索引
		int index = getIndex(list, id);
		//对index进行判断
		//-1 表示不存在,结束方法,返回初始菜单
		if (index >=0) {
			//表示存在,直接删除
			list.remove(index);
			System.out.println("id为:"+id +"的学生信息已经删除成功");
		}else {
			System.out.println("id不存在,删除失败");
		}
	}

// 通过id获取索引
	public static int getIndex(ArrayList<Student> list, String id) {
		// 遍历集合
		for (int i = 0; i < list.size(); i++) {
			// 得到每一个学生对象
			Student stu = list.get(i);
			// 得到每一个学生对象的id
			String sid = stu.getId();
			// 拿着集合中的的学生id跟要删除的学生id进行比较
			if (sid.equals(id)) {
				// 一样返回索引
				return i;
			}
		}
		//当循环结束之后还没找到,表示不存在,返回-1
		return -1;
	}
}

此时,我们发现contains()方法与getIndex()方法中代码重复,所以我们加以修改。

    public static boolean contains(ArrayList<Student> list, String id) {
		return getIndex(list, id)>=0;
	}

	public static int getIndex(ArrayList<Student> list, String id) {
		for (int i = 0; i < list.size(); i++) {
			Student stu = list.get(i);
			String sid = stu.getId();
			if (sid.equals(id)) {
				return i;
			}
		}
		return -1;
	}

 运行结果: 

2.6  修改学生信息功能

// 修改学生
	public static void updateStudent(ArrayList<Student> list) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要修改的学生id:");
		String id = sc.next();
		//getIndex contains 方法都可以
		int index = getIndex(list, id);
		if (index == -1) {
			System.out.println("要修改的"+id+ "不存在,请重新输入");
			return;
		}
		//当代码运行的到此,说明当前id存在
		//获取要修改id的学生对象
		Student stu = list.get(index);
		
		//输入其他信息并修改
		System.out.println("请输入要修改的学生姓名:");
		String newName =sc.next();
		stu.setName(newName);
		
		System.out.println("请输入要修改的学生年龄:");
		int newAge =sc.nextInt();
		stu.setAge(newAge);
		
		System.out.println("请输入要修改的学生家庭住址:");
		String newAddress =sc.next();
		stu.setAddress(newAddress);
		
		System.out.println("学生信息修改成功");
		
	}
wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 运行结果:

  • 7
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hgngy.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值