Java学生信息管理系统(增、删、改、查)

这是一个关于学生信息管理系统的Java程序实现,包括添加、删除、修改和查询学生信息的功能。程序分为Student类和TestMain类,其中TestMain类实现了各项操作。在编程过程中遇到了循环使用、信息重复提示、退出功能、信息修改无效等问题,并逐一给出了解决方法。通过这些解决方案,实现了稳定的学生信息管理系统。
摘要由CSDN通过智能技术生成

1.学生信息系统功能:

(1.)添加学生信息

(2.)删除学生信息

(3.)修改学生信息

(4.)查询学生信息

2.程序运行结果图

在这里插入图片描述

3.该程序分为两个类:

(1.)Student类

package studentmanagement;

public class Student {
	//定义变量学号、姓名、住址
	private String no;
	private String name;
	private String add;
	private String sex;
	private int tel;
	private int age;
	
	public Student() {
		
	}
	
	public Student(String no, String name, String sex,int age,String add,int tel) {
		this.no = no;
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.add = add;
		this.tel = tel;
		
		}
	
		//学号
	 	public void setSNo(String no) {
			this.no = no;
		}
	 
		public String getNo() {
			return no;
		}
		//姓名
		public void setName(String name) {
			this.name = name;
		}
	 
		public String getName() {
			return name;
		}
		
		//性别
		public void setSex(String sex) {
			this.sex = sex;
		}
		
		public String getSex() {
			return sex;
		}
		//年龄
		public void setAge(int age) {
			this.age = age;
		}
		
		public int getAge() {
			return age;
		}
		
		
		//住址
		public void setAdd(String add) {
			this.add = add;
		}
	 
		public String getAdd() {
			return add;
		}	
		//电话
		public void setTel(int tel) {
			this.tel = tel;
		}
	 
		public int getTel() {
			return tel;
		}	
		
}

(2.)TestMain类(增、删、改、查功能都写在了测试类TestMain类中)

package studentmanagement;

import java.util.ArrayList;
import java.util.Scanner;

public class TestMain {

	public static void main(String[] args) {
		// ArrayList<参数化类型> list = new ArrayList<参数化类型>();
		// 使用泛型ArrayList<Student>之后,表示ArrayList集合中只允许存储Student类型的数据
		// 用泛型指定集合中存储的数据类型
		// 创建ArrayList集合存储student对象
		ArrayList<Student> array = new ArrayList<Student>();
		// 当前可查学生信息
		Student s1 = new Student("01", "蒋丞", "男", 20,"辽宁",135256);
		Student s2 = new Student("02", "顾飞", "男", 21,"辽宁",155234);
		Student s3 = new Student("03", "顾淼", "女", 18,"辽宁",167235);
		array.add(s1);
		array.add(s2);
		array.add(s3);

		// while(true)无限循环语句,语句块中有break语句才都能跳出循环。
		while (true) {
			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 choice = sc.nextLine();

			switch (choice) {
			case "1":
				addStudent(array); // 增
				break;
			case "2":
				removeStudent(array); // 删
				break;
			case "3":
				updateStudent(array); // 改
				break;
			case "4":
				findAllStudent(array); // 查
				break;
			case "5": // 退出

			default:
				System.out.println("谢谢您的使用");
				System.exit(0);// java虚拟机退出
				// break;
				
			}
		}
	}

	// 1.添加学生信息
	// public static void main(String[] args) {
	// ArrayList<Student> array = new ArrayList<Student>();
	public static void addStudent(ArrayList<Student> array) {
		Scanner sc = new Scanner(System.in);

		String No;
		System.out.println("请输入学生学号:");
		// String No=sc.nextLine();
		No = sc.nextLine(); // 输入学号No nextLine返回string类型

		// 定义标记,判断学生学号是否被占用
		boolean flag = true;

		for (int i = 0; i < array.size(); i++) {
			// 遍历学生信息返回给学生对象
			Student s = array.get(i);
			// 获取该学生的学号,和键盘录入的学号进行比较
			if (s.getNo().equals(No)) {
				flag = false;// 说明学号被占用
				System.out.println("该学生已存在,请重新输入!");
				break;
			}

		}

		if (flag) {
			System.out.println("请输入学生姓名:");
			String Name = sc.nextLine();
			System.out.println("请输入学生住址:");
			String Add = sc.nextLine();
			System.out.println("请输入学生性别:");
			String Sex = sc.nextLine();
			System.out.println("请输入学生年龄:");
			int Age = sc.nextInt();
			System.out.println("请输入学生电话:");
			int Tel = sc.nextInt();
			//nextInt必须在nextLine后面

			// 创建学生对象
			Student s = new Student();
			s.setSNo(No);
			s.setName(Name);
			s.setAdd(Add);
			s.setSex(Sex);
			s.setAge(Age);
			s.setTel(Tel);
			// 把学生对象作为元素添加到集合
			array.add(s);
			System.out.println("添加成功!");
		}
	}

	// 2.删除学生信息
	public static void removeStudent(ArrayList<Student> array) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要删除的学生的学号: ");
		String No = sc.nextLine(); // 键盘录入的学号返回给No

		// 作为索引
		int index = -1;
		// 遍历学生信息
		for (int i = 0; i < array.size(); i++) {
			Student s = array.get(i);
			// 获取该学生的学号,和键盘录入的学号进行比较
			if (s.getNo().equals(No)) {
				index = i; // 124行 array.remove(index);
				break;
			}
			
		}

		if (index == -1) {
			System.out.println("您要删除的学生信息不存在,请重新选择: ");
		} else {
			array.remove(index); // 删除获取的学生信息
			System.out.println("删除学生信息成功");
			
		}
	}

	// 3.修改学生信息
	public static void updateStudent(ArrayList<Student> array) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你要修改的学生的学号: ");
		String No = sc.nextLine();

		// 作为索引
		int index = -1;
		// 遍历学生信息
		for (int i = 0; i < array.size(); i++) {
			Student s = array.get(i);
			// 获取该学生的学号,和键盘录入的学号进行比较
			if (s.getNo().equals(No)) {
				index = i;
				break;
			}
		}
		if (index == -1) {
			System.out.println("您要修改的学生信息不存在,请您重新选择: ");
		} else { // index = i;的时候
			System.out.println("请输入学生新姓名:");
			String Name = sc.nextLine();
			
			System.out.println("请输入学生性别:");
			String Sex = sc.nextLine();
			
			System.out.println("请输入学生新住址:");
			String Add = sc.nextLine();
			
			System.out.println("请输入学生年龄:");
			int Age = sc.nextInt();
			
			System.out.println("请输入学生电话:");
			int Tel = sc.nextInt();
			// 创建学生对象
			Student s = new Student();
			// 学生对象s不调用set方法,则修改后的值为null
			s.setSNo(No);
			s.setName(Name);
			s.setSex(Sex);
			s.setAge(Age);
			s.setTel(Tel);
			s.setAdd(Add);
			// 修改学生中的集合对象
			// Arraylist集合中set方法,set(int index,Object o)覆盖元素。
			array.set(index, s);

			System.out.println("修改学生信息成功!!");
		}
	}

	// 4.查询学生信息
	public static void findAllStudent(ArrayList<Student> array) {
		// 判断学生信息集合的长度,如果等于0,学生信息为空,程序结束
		if (array.size() == 0) {
			System.out.println("对不起,当前学生信息为空,请您重新选择: ");
			return;// 不让程序往下执行
		}
		// 学生信息列表
		System.out.println("学号:\t姓名:\t性别:\t年龄:\t住址:\t电话:");// \t是一个tab键的位置
		// 遍历集合
		for (int i = 0; i < array.size(); i++) {
			Student student = array.get(i);//
			System.out.println(
					student.getNo() + "\t" + student.getName() + "\t" + student.getSex() + "\t" +student.getAge() + "\t" + student.getAdd()+ "\t" + student.getTel());
		}
	}
}

4.编程中遇到的问题和解决方法

①管理系统使用完其中一个功能后不能继续选择使用其他功能,需要重新运行才能再次使用其他功能。
解决方法:加入while(true)无限循环语句,语句块中有break语句才都能跳出循环。
②在添加学生信息功能中,添加信息相同的学生时,没有信息重复的提示。
解决方法:定义标记boolean flag = true;然后根据判断学生学号是否被占用。先遍历学生信息,获取添加学生的学号,再和键盘输入的学号进行比较,如果输入的学号和获取的学生学号一样,则标记flag=false;,表示学生信息已经存在。如果添加不重复,代码后加上if(flag),里面写要添加学生的相关信息。
③在解决问题①无法循环利用管理系统后,发现退出管理系统功能无法使用,选择退出后还是会弹出学生信息管理系统界面。
解决方法:添加System.exit(0); System是一个Java类,调用exit(0)方法终止虚拟机也就是退出你的Java程序,括号里面的是参数,进程结束的返回值。
④在查询学生信息是否存在中,如果没有查找到要修改或者删除的学生信息该怎么返回给程序
解决方法:添加变量名为index(int index = -1;)作为索引,在数组遍历时,如果没有查到键盘输入信息,返回-1,结束程序,进行下一次循环。
⑤修改学生信息后,再次查询学生信息,发现信息没有改变,修改无效。
解决方法:array.set(index, s);
⑥查询学生信息为空的时候,程序依然向下执行,弹出学号: 姓名: 住址:为空的内容。
解决方法:提示学生信息为空代码后一行加上ruturn;不让程序继续向下执行。
⑦在提供输入管理系统选项的代码中,用到switch方法,返回类型为String,但后面的case语句一直写的是case 1;case 2;…导致代码一直出错
解决方法:switch 使用字符串 String 类型时,同时 case 标签必须为字符串常量或字面 量,将case 1;等改为case “1”;等。
⑧在修改学生信息时,在输入学号、姓名、性别、年龄四项后,直接连续弹出要修改的地址、电话两条信息,先输入要修改的地址,抛出Exception in thread “main” java.util.InputMismatchException的异常。
解决方法:在修改学生信息代码块中自己nextLine()写在了nextInt后,抛出异常。
System.out.println(“请输入学生年龄:”); int Age = sc.nextInt();
System.out.println(“请输入学生新住址:”); String Add = sc.nextLine();
原因:nextLine()不能用在nextInt后面。因为nextLine()方法是返回的是Enter键之前的所有字符,在使用了nextInt() 方法之后在其后输入的空格键、Tab键或Enter键等视为分隔符或结束符,其仍在缓冲区内;若紧接着使用nextLine() ,则nextLine() 自动读取Enter等作为其结束符,则无法从键盘输入值,强行输入会报出InputMismatchException异常。

  • 164
    点赞
  • 1639
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值