Day14.

Day14–学生信息管理系统

编写一个学生类,表示学生有什么属性(姓名,性别,年龄,班级号,学号等),重写equals方法.

package com.qf.pojo;

public class Student {

	private String name;
	private char sex;
	private int age;
	private String classId;
	private String id;
	
	public Student() {
	}
	
	public Student(String classId, String id) {
		this.classId = classId;
		this.id = id;
	}

	public Student(String name, char sex, int age, String classId, String id) {
		this.name = name;
		this.sex = sex;
		this.age = age;
		this.classId = classId;
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public char getSex() {
		return sex;
	}

	public void setSex(char sex) {
		this.sex = sex;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getClassId() {
		return classId;
	}

	public void setClassId(String classId) {
		this.classId = classId;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}
	
	@Override
	public boolean equals(Object obj) {
		if(this == obj){
			return true;
		}
		
		if(obj instanceof Student){
			Student stu = (Student) obj;
			if(this.classId.equals(stu.classId) && this.id.equals(stu.id)){
				return true;
			}
		}
		return false;
	}

	@Override
	public String toString() {
		return name + "\t" + sex + "\t" + age + "\t" + classId + "\t" + id;
	}
}

定义一个类里面有你要用的静态常量

//学生修改类型的常量类
public class StuUpdateType {

	public static final int NAME = 1;
	public static final int SEX = 2;
	public static final int AGE = 3;
	public static final int CLASS_ID = 4;
	public static final int ID = 5;
}

定义一个工具类用于你输入的信息合法性

import com.qf.pojo.Student;

//学生信息合法性的工具类
public class StuUtils {

	public static boolean isStu(Student stu){
		
		String name = stu.getName();
		char sex = stu.getSex();
		int age = stu.getAge();
		String classId = stu.getClassId();
		String id = stu.getId();
		
		if(isName(name) && isSex(sex) && isAge(age) && isClassId(classId) && isId(id)){
			return true;
		}
		return false;
	}
	
	public static boolean isName(String name){
		
		int len = name.length();
		if(len >= 2 && len <= 16){
			return true;
		}
		return false;
	}
	
	public static boolean isSex(char sex){
		if(sex == '男' || sex == '女'){
			return true;
		}
		return false;
	}
	
	public static boolean isAge(int age){
		if(age >= 16 && age <= 50){
			return true;
		}
		return false;
	}
	
	public static boolean isClassId(String classId){
		int len = classId.length();
		if(len == 4){
			return true;
		}
		return false;
	}
	
	public static boolean isId(String id){
		int len = id.length();
		if(len == 3){
			return true;
		}
		return false;
	}
}

定义一个接口类(定大纲),用于表示学生系统可以有的功能

import com.qf.pojo.Student;

public interface IStudentManagerSystem {
	
	/**
	 * 添加学生
	 * @param stu 目标学生
	 * @return 添加状态码
	 */
	public int add(Student stu);
	
	/**
	 * 扩容
	 */
	public void expansion();
	
	/**
	 * 删除学生
	 * @param classId 班级号
	 * @param id 学号
	 * @return 删除状态码
	 */
	public int delete(String classId,String id);
	
	/**
	 * 修改学生
	 * @param classId 班级号
	 * @param id 学号
	 * @param type 修改类型(1-姓名 2-性别 3-年龄 4-班级号 5-学号)
	 * @param val 修改的值
	 * @return 修改状态码
	 */
	public int update(String classId,String id,int type,Object val);
	
	/**
	 * 查询学生在容器中的下标
	 * @param classId 班级号
	 * @param id 学号
	 * @return 如果有学生返回下标,否则返回-1
	 */
	public int queryIndex(String classId,String id);
	
	/**
	 * 查询学生对象
	 * @param classId 班级号
	 * @param id 学号
	 * @return 如果有学生返回学生对象,否则返回null
	 */
	public Student query(String classId,String id);
	
	/**
	 * 根据姓名查询学生数组
	 * @param name 姓名
	 * @return 如果有学生返回学生数组,否则返回null
	 */
	public Student[] queryByName(String name);
	
	/**
	 * 根据性别查询学生数组
	 * @param sex 性别
	 * @return 如果有学生返回学生数组,否则返回null
	 */
	public Student[] queryBySex(char sex);
	
	/**
	 * 根据年龄段查询学生数组
	 * @param start 开始年龄(包含)
	 * @param end 结束年龄(排他)
	 * @return 如果有学生返回学生数组,否则返回null
	 */
	public Student[] queryByAge(int start,int end);
	
	/**
	 * 根据班级号查询学生数组
	 * @param classId 班级号
	 * @return 如果有学生返回学生数组,否则返回null
	 */
	public Student[] queryByClassId(String classId);
	
	/**
	 * 打印所有学生信息
	 */
	public void printAllStu();
	
	/**
	 * 打印学生数组
	 * @param stus 学生数组
	 */
	default void printStu(Student[] stus){
		for (Student stu : stus) {
			System.out.println(stu);
		}
	}	
}

定义一个类去实现接口

import java.util.Arrays;

import com.qf.container.StuUpdateType;
import com.qf.pojo.Student;
import com.qf.sms.IStudentManagerSystem;
import com.qf.utils.StuUtils;

public class StudentManagerSystemImpl implements IStudentManagerSystem{

	//学生个数
	private int size;
	//学生容器
	private Student[] stus;
	//默认容量
	private static final int DEFAULT_INIT_CAPACITY = 3;

	public StudentManagerSystemImpl() {
		stus = new Student[DEFAULT_INIT_CAPACITY];

		//做假数据
		add(new Student("麻生希", '女', 26, "2308", "001"));
		add(new Student("椎名空", '女', 23, "2308", "002"));
		add(new Student("水菜丽", '女', 29, "2308", "003"));
		add(new Student("朝桐光", '女', 32, "2308", "004"));
		add(new Student("北岛玲", '女', 42, "2308", "005"));
		add(new Student("三上悠亚", '女', 31, "2308", "006"));
		add(new Student("古川伊织", '女', 24, "2308", "007"));
		add(new Student("濑亚美莉", '女', 21, "2308", "008"));
		add(new Student("深田咏美", '女', 23, "2308", "009"));
		add(new Student("北条麻衣", '女', 35, "2308", "010"));
		add(new Student("水野朝阳", '女', 32, "2308", "011"));
		add(new Student("徐灿", '男', 23, "2308", "012"));
		add(new Student("波多野结衣", '女', 29, "2309", "001"));
		add(new Student("小西满里惠", '女', 31, "2309", "002"));
		add(new Student("铃原爱蜜莉", '女', 23, "2309", "003"));
		add(new Student("桃谷绘里香", '女', 24, "2309", "004"));
		add(new Student("京香Julia", '女', 32, "2309", "005"));
		add(new Student("徐灿", '男', 25, "2309", "006"));
		add(new Student("彭鹏", '男', 26, "2309", "007"));
		add(new Student("周隽乐", '男', 27, "2309", "008"));
	}

	public StudentManagerSystemImpl(int capaty) {
		if(capaty < 0){
			capaty = DEFAULT_INIT_CAPACITY;
		}
		stus = new Student[capaty];
	}

	@Override
	public int add(Student stu) {

		//1.判断学生信息合法性
		if(!StuUtils.isStu(stu)){
			return -1;//添加失败 - 学生信息不合法
		}

		//2.是否有重复学生
		if(queryIndex(stu.getClassId(), stu.getId()) != -1){
			return -2;//添加失败 - 有重复学生
		}

		//3.判断是否扩容
		if(size == stus.length){
			expansion();
		}

		//4.添加学生
		stus[size++] = stu;
		return 1;
	}

	@Override
	public void expansion() {
		int oldCapacity = stus.length;
		int newCapacity = oldCapacity + (oldCapacity>>1);
		stus = Arrays.copyOf(stus, newCapacity);
	}

	@Override
	public int delete(String classId, String id) {
		//1.判断学生信息合法性
		if(!StuUtils.isClassId(classId) || !StuUtils.isId(id)){
			return -1;//删除失败 -- 学生信息不合法
		}

		//2.判断是否有学生
		int index = queryIndex(classId, id);
		if(index == -1){
			return -2;//删除失败 -- 没有该学生
		}

		//3.删除学生
		for (int i = index; i < size-1; i++) {
			stus[i] = stus[i+1];
		}
		stus[--size] = null;
		return 1;
	}

	@Override
	public int update(String classId, String id, int type, Object val) {

		//验证学生信息合法性
		if(!StuUtils.isClassId(classId) || !StuUtils.isId(id)){
			return -1;//修改失败 -- 学生信息不合法
		}

		//获取到学生的对象
		Student stu = query(classId, id);
		if(stu == null){
			return -2;//修改失败 -- 没有该学生
		}

		//判断修改类型
		switch (type) {
		case StuUpdateType.NAME:
			String nameValue = (String) val;
			//判断修改数据的合法性
			if(!StuUtils.isName(nameValue)){
				return -4;//修改失败 -- 修改数据不合法
			}
			//修改数据
			stu.setName(nameValue);
			break;
		case StuUpdateType.SEX:
			char sexValue = (Character) val;
			//判断修改数据的合法性
			if(!StuUtils.isSex(sexValue)){
				return -4;//修改失败 -- 修改数据不合法
			}
			//修改数据
			stu.setSex(sexValue);
			break;
		case StuUpdateType.AGE:
			int ageValue = (Integer) val;
			//判断修改数据的合法性
			if(!StuUtils.isAge(ageValue)){
				return -4;//修改失败 -- 修改数据不合法
			}
			//修改数据
			stu.setAge(ageValue);
			break;
		case StuUpdateType.CLASS_ID:
			String classIdValue = (String) val;
			//判断修改数据的合法性
			if(!StuUtils.isClassId(classIdValue)){
				return -4;//修改失败 -- 修改数据不合法
			}

			//判断目标班级上是否有重复学生
			if(query(classIdValue, stu.getId()) != null){
				return -5;//修改失败 -- 目标班级上已有学生
			}

			//修改数据
			stu.setClassId(classIdValue);
			break;
		case StuUpdateType.ID:
			String idValue = (String) val;
			//判断修改数据的合法性
			if(!StuUtils.isId(idValue)){
				return -4;//修改失败 -- 修改数据不合法
			}

			//判断目标学号上是否有重复学生
			if(query(stu.getClassId(), idValue) != null){
				return -6;//修改失败 -- 目标学号上已有学生
			}

			//修改数据
			stu.setId(idValue);
			break;
		default:
			return -3;//修改失败 -- 修改类型异常
		}

		return 1;//修改成功
	}

	@Override
	public int queryIndex(String classId, String id) {

		//创建临时学生对象(该对象中只有班级号和学生)
		Student stu = new Student(classId, id);

		for (int i = 0; i < size; i++) {
			if(stus[i].equals(stu)){
				return i;
			}
		}
		return -1;
	}

	@Override
	public Student query(String classId, String id) {
		int index = queryIndex(classId, id);
		if(index == -1){
			return null;
		}
		return stus[index];
	}

	@Override
	public Student[] queryByName(String name) {
		//1.验证学生信息合法性
		if(!StuUtils.isName(name)){
			return null;
		}

		//2.确定符合条件的学生个数
		int count = 0;
		for (int i = 0; i < size; i++) {
			if(stus[i].getName().equals(name)){
				count++;
			}
		}
		if(count == 0){
			return null;
		}

		//3.创建新数组
		Student[] newStus = new Student[count];

		//4.将符合条件的数据添加到新数组中
		int index = 0;
		for (int i = 0; i < size; i++) {
			Student stu = stus[i];
			if(stu.getName().equals(name)){
				newStus[index++] = stu;
			}
		}
		return newStus;
	}

	@Override
	public Student[] queryBySex(char sex) {
		//1.验证学生信息合法性
		if(!StuUtils.isSex(sex)){
			return null;
		}

		//2.确定符合条件的学生个数
		int count = 0;
		for (int i = 0; i < size; i++) {
			if(stus[i].getSex() == sex){
				count++;
			}
		}
		if(count == 0){
			return null;
		}

		//3.创建新数组
		Student[] newStus = new Student[count];

		//4.将符合条件的数据添加到新数组中
		int index = 0;
		for (int i = 0; i < size; i++) {
			Student stu = stus[i];
			if(stus[i].getSex() == sex){
				newStus[index++] = stu;
			}
		}
		return newStus;
	}

	@Override
	public Student[] queryByAge(int start, int end) {
		//1.验证学生信息合法性
		if(!StuUtils.isAge(start) || !StuUtils.isAge(end)){
			return null;
		}

		//2.确定符合条件的学生个数
		int count = 0;
		for (int i = 0; i < size; i++) {
			int age = stus[i].getAge();
			if(age >= start && age < end){
				count++;
			}
		}
		if(count == 0){
			return null;
		}

		//3.创建新数组
		Student[] newStus = new Student[count];

		//4.将符合条件的数据添加到新数组中
		int index = 0;
		for (int i = 0; i < size; i++) {
			Student stu = stus[i];
			int age = stus[i].getAge();
			if(age >= start && age < end){
				newStus[index++] = stu;
			}
		}
		return newStus;
	}

	@Override
	public Student[] queryByClassId(String classId) {
		//1.验证学生信息合法性
		if(!StuUtils.isClassId(classId)){
			return null;
		}

		//2.确定符合条件的学生个数
		int count = 0;
		for (int i = 0; i < size; i++) {
			if(stus[i].getClassId().equals(classId)){
				count++;
			}
		}
		if(count == 0){
			return null;
		}

		//3.创建新数组
		Student[] newStus = new Student[count];

		//4.将符合条件的数据添加到新数组中
		int index = 0;
		for (int i = 0; i < size; i++) {
			Student stu = stus[i];
			if(stus[i].getClassId().equals(classId)){
				newStus[index++] = stu;
			}
		}
		return newStus;
	}

	@Override
	public void printAllStu() {
		for (int i = 0; i < size; i++) {
			System.out.println(stus[i]);
		}
	}
}

测试类

import java.util.Scanner;

import com.qf.pojo.Student;
import com.qf.sms.impl.StudentManagerSystemImpl;

public class Main {

	public static void main(String[] args) {

		Scanner scan = new Scanner(System.in);
		
		StudentManagerSystemImpl sms = new StudentManagerSystemImpl();

		System.out.println("欢迎进入到**学生管理系统");
		boolean flag = true;
		while(flag){
			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("886 - 添加学生");
			int num = scan.nextInt();

			switch (num) {
			case 1:
				addMenu(scan, sms);
				break;
			case 2:
				deleteMenu(scan, sms);

				break;
			case 3:

				break;
			case 4:

				break;
			case 5:
				sms.printAllStu();
				break;
			case 886:
				System.out.println("正在退出**学生管理系统,欢迎下次再来...");
				flag = false;
				break;
			default:
				System.out.println("输入异常,请重新输入...");
				break;
			}
			System.out.println("--------------------------");
		}
		
		scan.close();
	}

	private static void deleteMenu(Scanner scan, StudentManagerSystemImpl sms) {
		System.out.println("请输入班级号:");
		String classId = scan.next();
		System.out.println("请输入学号:");
		String id = scan.next();
		
		int deleteCode = sms.delete(classId, id);
		if(deleteCode == -1){
			System.out.println("删除失败 -- 学生信息不合法");
		}else if(deleteCode == -2){
			System.out.println("删除失败 -- 没有该学生");
		}else if(deleteCode == 1){
			System.out.println("删除成功");
		}
	}

	private static void addMenu(Scanner scan, StudentManagerSystemImpl sms) {
		System.out.println("请输入姓名:");
		String name = scan.next();
		System.out.println("请输入性别:");
		char sex = scan.next().charAt(0);//charAt(0)获取字符串中下标为0的字符
		System.out.println("请输入年龄:");
		int age = scan.nextInt();
		System.out.println("请输入班级号:");
		String classId = scan.next();
		System.out.println("请输入学号:");
		String id = scan.next();
		
		Student stu = new Student(name, sex, age, classId, id);
		int addCode = sms.add(stu);
		if(addCode == -1){
			System.out.println("添加失败 -- 学生信息不合法");
		}else if(addCode == -2){
			System.out.println("添加失败 -- 有重复学生");
		}else if(addCode == 1){
			System.out.println("添加成功");
		}
	}
}

Day14._第1张图片

rSystemImpl sms) {
System.out.println(“请输入姓名:”);
String name = scan.next();
System.out.println(“请输入性别:”);
char sex = scan.next().charAt(0);//charAt(0)获取字符串中下标为0的字符
System.out.println(“请输入年龄:”);
int age = scan.nextInt();
System.out.println(“请输入班级号:”);
String classId = scan.next();
System.out.println(“请输入学号:”);
String id = scan.next();

	Student stu = new Student(name, sex, age, classId, id);
	int addCode = sms.add(stu);
	if(addCode == -1){
		System.out.println("添加失败 -- 学生信息不合法");
	}else if(addCode == -2){
		System.out.println("添加失败 -- 有重复学生");
	}else if(addCode == 1){
		System.out.println("添加成功");
	}
}

}


[外链图片转存中...(img-iTWltFB3-1702556178578)]

你可能感兴趣的:(java,开发语言)