编写一个学生类,表示学生有什么属性(姓名,性别,年龄,班级号,学号等),重写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("添加成功");
}
}
}
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)]