数组是Java中比较基础的内容,但是却是在java体系中一个非常重要的内容,它和集合都是容器,不同点是数组的长度不可变,而集合的长度却可以任意变化,所以在增删改查这个练习中,使用数组来练习比起用集合来做就更加复杂。接下来我用代码来说明使用数组的用法。首先,做这个练习,要做的是把对象封装,我做的是学生的的增删改查,所以我先创建一个学生的类,把学生需要的属性都放在这个类当中,
public class Student {
	 int id;
	 String name;
	 String email;
	 double score;
	 LocalDate brith;

并且写出他无参和有参构造方法,以及它的get,set方法,

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 getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public double getScore() {
		return score;
	}
	public void setScore(double score) {
		this.score = score;
	}
	public LocalDate getBrith() {
		return brith;
	}
	public void setBrith(LocalDate brith) {
		this.brith = brith;
	}
	public Student(int id, String name, String email, double score,
			LocalDate brith) {
		super();
		this.id = id;
		this.name = name;
		this.email = email;
		this.score = score;
		this.brith = brith;
	}
	public Student() {
		super();
	}

这样方便在之后获取学生的信息,统计学生的信息的信息。

      然后需要做的是把主方法的结构写出来,这里面写的控制台界面应该给人看的东西,所以应该清晰明了,容易操作才对。所以我的写法是这样的。

public class StudentRun {
public static void main(String[] args) {
		 Scanner sc = new Scanner(System.in);
		StudentSeivce t = new StudentSeivce();
		while (true) {
			System.out.println("=====学生管理系统=====");
			System.out.println("1.查询所有学生信息");
			System.out.println("2.增加学生信息");
			System.out.println("3.删除学生信息");
			System.out.println("4.修改学生信息");
			int input = sc.nextInt();
			switch (input) {
			case 1:
				t.find(sc);
				break;
			case 2:
				t.add(sc);
				break;
			case 3:
				t.delete(sc);
				break;
			case 4:
				t.update(sc);
				break;
			case 5:
				System.exit(0);
				break;
			default:
				break;

			}
		}

	}
}    

 在这里我觉得需要注意的是记得把Scanner参数传到这4个方法中,方便这4个方法可以运行。

接下来需要写一个类来包含增删改查这4个分别独立的方法,设法在main方法里调用。这样才能互不干扰的在这个程序中运行,这样写出来也代码也更加清晰,让人一目了然。增加学生的时候需要注意的是数组的长度不可变,所以在这个基础上就要重新创建一个新的数组来替换这个原来的数组,并且这个创建的新数组的长度应该大于之前的数组,这样才可以把数据加到这个数组当中。删除和增加类似,都需要重新创建数组来替换就数组,只是在这里,新创建的数组应该小于原数组。在改这个方面,我认为应该注意的是记得如何运用学生类里面的set方法,而且在字符串转化为你设置的属性的类型这里也需要注意。最后在查询这里应该注意的是充分了解数组的方法,如何获取长度,如何获取里面的信息。

public  void find(Scanner sc) {
		System.out.println("共有" + stus.length + "个学生信息");
		Student max = new Student();
		Student min = new Student();
		double sum = 0;
		double average = 0;
		max.setScore(0);
		min.setScore(100);
		for (int i = 0; i < stus.length; i++) {
			System.out.println("学号:" + stus[i].getId() + ",姓名:"
					+ stus[i].getName() + ",邮箱:" + stus[i].getEmail() + ",成绩"
					+ stus[i].getScore() + ",生日:" + stus[i].getBrith());
			sum += stus[i].getScore();
			average = sum / stus.length;
			if (stus[i].getScore() < min.getScore()) {
				min = stus[i];
			}
			if (stus[i].getScore() > max.getScore()) {
				max = stus[i];
			}
		}
		System.out.println("总成绩:" + sum);
		System.out.println("平均分:" + average);
		System.out.println("最高分:" + max.getScore() + "他的名字是:" + max.getName());
		System.out.println("最低分:" + min.getScore() + "他的名字是:" + min.getName());
	}

	public  void add(Scanner sc) {
		System.out.println("請按格式輸入學生信息,如:1-張三-zs@lanqiao.org-85.5-1995-2-12");
		String information = sc.next();
		String[] infors = information.split("-");
		// 创建用户输入的对象
		Student st = new Student(Integer.parseInt(infors[0]), infors[1],
				infors[2], Double.parseDouble(infors[3]), LocalDate.of(
						Integer.parseInt(infors[4]),
						Integer.parseInt(infors[5]),
						Integer.parseInt(infors[6])));
		// 创建一个新的容器(数组)
		Student[] newstus = new Student[stus.length + 1];
		// 把原有的数组数据放入新容器(数组)中
		for (int i = 0; i < stus.length; i++) {
			newstus[i] = stus[i];
		}
		// 将新数据放入新数组中
		newstus[stus.length] = st;
		// 新容器替换旧容器
		stus = newstus;
		System.out.println("添加成功");
	}

	public void delete(Scanner sc) {
		System.out.println("输入删除学生的学号");
		int id = sc.nextInt();
		// 找到要删除的那个学生

		int index = -1;
		for (int i = 0; i < stus.length; i++) {
			if (id == stus[i].getId()) {
				// 将下标赋给输入要删除的学生的下标
				index = i;
				break;
			}
		}
		// 构造一个新容器
		Student[] newstus = new Student[stus.length - 1];
		if (index == -1) {
			System.out.println("查无此人");
			return;
		}
		// 把未标记删除的学生放入新容器之中
		for (int i = 0; i < newstus.length; i++) {
			if (i < index) {
				//把旧数组中删除学生的下标前面的元素赋值给新数组
				newstus[i] = stus[i];
			} else {
				//把旧数组中删除学生的下标后面的元素赋值给新数组
				newstus[i] = stus[i + 1];
			}
		}

		stus = newstus;
	}

	public void update(Scanner sc) {
		System.out.println("输入修改学生的学号");
		int id = sc.nextInt();
		Student update =null;
		for(int i=0;i<stus.length;i++){
			if(stus[i].getId()==id){
				update=stus[i];
				
				
			}
			
		}
		if(update==null){
			System.out.println("查无此人");
			return;
		}
		//获取新的学生信息
		System.out.println("输入的学生信息如下");
		String info = sc.next();
		String [] infos= info.split("-");
		update.setName(infos[0]);
		update.setEmail(infos[1]);
		update.setScore(Double.parseDouble(infos[2]));
		update.setBrith(LocalDate.of(Integer.parseInt(infos[3]), Integer.parseInt(infos[4]), Integer.parseInt(infos[5])));
		System.out.println("修改成功");
	}
}
好了,这样一个简单的增删改查就完成了,可能在叙述过程中还有很多不足,望大家来批评指正。最后谢谢大家的观看。
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐