2021-08-20

史迪奇的java之旅 | day 05 项目:学生管理系统

我这次设计的学生管理系统,主要的设想是可以完成对学生的基本信息的增、删、改、查,从控制台输入相应的内容来选择相应的功能。
首先先定义2个类,一个学生类,一个学生管理类。其中学生类定义学生的基本信息,如学生的学号,姓名,年龄,居住地。然后通过设置构造函数,来完成实例化对象,并为对象属性赋值。代码如下:

package com.str1;
/*
 * 学生类
 */

public class Student {
	//学号;
	private String sid;
	//姓名;
	private String name;
	//年龄;
	private String age;
	//居住地;
	private String address;
	
	public Student() {
		//super();
		// TODO Auto-generated constructor stub
		
	}
	public Student(String sid, String name, String age, String address) {
		//super();
		this.sid = sid;
		this.name = name;
		this.age = age;
		this.address = address;
	}
	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 String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	

}

这里的年龄age,我也是用string来定义的主要是为了方便后面使用。因为我要实例化对象并为属性赋值,我们可以直接访问对象的属性或者调setXxx()方法。
注:构造方法时类的一个特殊方法,他在实例化的时候会被自动调用。
然后,我在另一个包com.str2中设置了学生管理类,它是主要的功能类。类中实现了main方法,添加方法,删除方法,修改方法,查看方法。为了实现学号是否重复特地设置的一个是否重名方法。
在这里插入图片描述main方法主要实现主菜单的选择,让用户选择相应的方法来使用,首先先完成主菜单的设置,使用输出语句来展示出来。效果为:
在这里插入图片描述
然后再用scanner语句完成数据的录入。

//2、用Scanner完成数据的录入
		@SuppressWarnings("resource")
		Scanner sc=new Scanner(System.in);
	    String line=sc.nextLine();

接下来再选择用switch语句,进行方法的选择,switch后面的取值可以跟字符串。

    switch(line) {
	    case "1":
	    	System.out.println("添加学生:");
	    	addStudent(array);
	    	break;
	    case "2":
	    	System.out.println("删除学生:");
	    	deleteStudent(array);
	    	break;
	    case "3":
	    	System.out.println("修改学生:");
	    	updataStudent(array);
	    	break;
	    case "4":
	    	System.out.println("查看学生:");
	    	findAllStudent(array);
	    	break;
	    case "5":
	    	System.out.println("谢谢使用!");
	    	//break;
	    	System.exit(0);//JVM虚拟机
	     }

一、添加方法addStudent()

我设计的添加方法时想通过集合储存学生的学号,姓名,年龄,居住地,创建学生对象,把录入的数据赋给类的成员变量,然后再将学生对象添加到集合中,从而实现数据的添加。

public static void addStudent(ArrayList<Student> array){
}

具体代码如下:

	public static void addStudent(ArrayList<Student> array) {

		// TODO Auto-generated method stub
		Scanner s=new Scanner(System.in);
		//为了能让sid可以在while循环中使用,因此在外部循环
    	String sid;
    	while(true) {
    	System.out.println("请输入学生学号:");
    	 sid=s.nextLine();
    	 boolean flag=isUsed(array,sid);
    	 if(flag) {
    		 System.out.println("您输入的学号已重复,请重新输入!");
    	 }else {
    		 break;
    	 }
    	}
    	System.out.println("请输入学生姓名:");
    	String name=s.nextLine();
    	System.out.println("请输入学生年龄:");
    	String age=s.nextLine();
    	System.out.println("请输入学生居住地:");
    	String address=s.nextLine();
    	
    	//创建学生对象,把录入的数据赋给类的成员变量;
    	Student s1=new Student();
    	s1.setSid(sid);
    	s1.setName(name);
    	s1.setAge(age);
    	s1.setAddress(address);
    	//将学生对象添加到集合中;
    	array.add(s1);
    	
    	System.out.println("添加学生成功!");
	}

首先我们先设置一个while循环来检验输入的学号,判断是否已经存入了相同的学号,如果存入相同的学号就会提示你学号已重复请重新输入,循环会再执行一次,通过设置一个boolean类型的标记flag来判断是否重复,实现代码在下一个方法。如果不重复,则break退出循环。然后再用nextline()接受相关的信息,然后创建学生对象,把录入的成绩赋给成员变量,再把学生对象添加到集合中。检验重名的方法:

public static boolean isUsed(ArrayList<Student> array,String sid) {
		boolean flag=false;
		for(int i=0;i<array.size();i++) {
			Student s1=array.get(i);
			if(s1.getSid().equals(sid)) {
				flag=true;
				break;
			}
		}
		return flag;
	}

二、查看方法

查看方法主要就是为了把集合中的信息遍历一遍然后再打印出来。先用一个if判断是否为空,如果为空就提示信息并返回,需要加一个return。然后再用for循环打印出数据。具体代码如下:

public static void findAllStudent(ArrayList<Student> array) {
		//判断如果没有信息,输出提示信息。
		if(array.size()==0) {
			System.out.println("无信息,请输入信息!");
			//为了程序不再往下执行,给出return
			return;
		}
	
		//显示表头信息
		System.out.println("学号\t\t姓名\t\t年龄\t\t居住地");
		//从集合中数据取出对应格式显示学生信息,年龄显示补充“岁”
		for(int i=0;i<array.size();i++) {
			Student s1=array.get(i);
			System.out.println(s1.getSid()+"\t"+s1.getName()+"\t\t"+s1.getAge()+"岁\t\t"+s1.getAddress());
		}
	}

三、删除方法

我们首先还是用到for循环,遍历集合把数据删去,用到的是remove()方法,需要注意的是需要判断是否有对应的学号在集合里,定义一个索引,然后用equals判断是否相同,如果相同给索引赋值,继续执行删除功能。如果不相同,则索引值不变,那么提示无此信息返回重新选择,具体代码如下:

public static void deleteStudent(ArrayList<Student> array) {
		//键盘录入学生信息;
		Scanner sc=new Scanner(System.in);
		System.out.println("请输入删除学生的学号:");
		String sid=sc.nextLine();
		//定义一个索引
		int index=-1;
		//遍历集合把学生对象从集合中删去
		for(int i=0;i<array.size();i++) {
			Student s=array.get(i);
			if(s.getSid().equals(sid)) {
				index=i;
				break;
			}
		}
		if(index==-1) {
			System.out.println("无此信息,请重新输入!");
		}else {
			array.remove(index);
			System.out.println("删除成功!");
		}
	}

四、修改方法

修改功能跟删除功能类似,开始都要设置一个索引,来判断是否具有相同的学号,来保证功能的进行。也是用一个while循环来保证又一个正确的学号输入。然后就是常规的接受信息,接下来创建一个新的学生对象,然后使用一个for循环来进行数据的更新,使用set()方法进行。
具体代码:

public static void updataStudent(ArrayList<Student> array) {
		
		Scanner sc=new Scanner(System.in);
		String sid;
		while(true) {
		System.out.println("请输入要修改的学生学号:");
		 sid=sc.nextLine();
		int index1=-1;
		for(int i=0;i<array.size();i++) {
			 Student s1 = array.get(i);
			 if(s1.getSid().equals(sid)) {
				index1=i;
				break;
			}
		}
		if(index1==-1) {
			System.out.println("无此信息,请重新输入学号!");  			
		  }else {
			  break;
		  }
		}
		System.out.println("请输入学生新姓名:");
		String name=sc.nextLine();
		System.out.println("请输入学生新年龄:");
		String age=sc.nextLine();
		System.out.println("请输入学生新居住地:");
		String address=sc.nextLine();
		//创建一个新的学生对象;
		
		Student s=new Student();
		s.setSid(sid);
		s.setName(name);
		s.setAge(age);
		s.setAddress(address);
		//定义一个索引
		for(int i=0;i<array.size();i++) {
			Student s1=array.get(i);
			if(s.getSid().equals(sid)) {
				array.set(i, s);
				break;
			}
		}
			System.out.println("修改成功!");	
	}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值