一个主方法,两个接口,一个实现接口类,一个用户类,一个方法类
用户类
public class Student{ //定义属性 String name; char sex; int age; String classId; String id; //定义Student类方法 public Student(){} //重写Student类全员方法 public Student(name,sex,age,classId,id){ this.name=name; this.sex=sex; this.age=age; this.classId=classId; this.id=id; } //设置get/set方法 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;} //equals方法 @Override public boolean equals(Object obj){ if(this==obj) return true; if(obj instanceof Student){ Student stu=(Student) obj; if(this.classId.equals(stu.class)&&this.id.equals(stu.id)){ return true; } } return flase; } //toString方法 @Override public String toString(){ return name+"\t"+sex+"\t"+age+"\t" +classId+"\t"+id; } }
接口
public interface IManagerSystem{ int NAME=1; int SEX=2; int AGE=3; int CLASSID=4; int ID=5; //添加学生 public int add(Student stu); //删除学生 public int delete(String classID,String id); //修改学生 public int update(String classId,String id,int type,Object value); //查找学生在数组中的下标 目标学生 public int query(Student stu); //查询学生在数组中的下标 目标班级号学号 public int query(String classId,String id); //打印所有学生信息 public void printStuInfo(); //数组扩容 public void expansion(); }
public interface Code { //默认修改static enum UpdateCode{ ERROR_1(-1,"修改失败---学生信息不合法"), ERROR_2(-2,"修改失败---有重复学生"), ERROR_3(-3,"修改失败---修改类型错误"), ERROR_4(-4,"修改失败---修改数据类型错误"), ERROR_5(-5,"修改失败---修改数据不合法"), ERROR_6(-6,"修改失败---目标班级上有该学生"), ERROR_7(-7,"修改失败---目标学号上有该学生"), OK(1,"修改成功"); private int code; private String info; private UpdateCode(){} private UpdateCode(int code, String info) { this.code = code; this.info = info; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @Override public String toString() { return info ; } } enum DeleteCode{ ERROR_1(-1,"删除失败---学生信息不合法"), ERROR_2(-2,"删除失败---没有学生"), OK(1,"删除成功"); private int code; private String info; private DeleteCode(){} private DeleteCode(int code, String info) { this.code = code; this.info = info; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @Override public String toString() { return info ; } } enum AddCode{ ERROR_1(-1,"添加失败---学生信息不合法"), ERROR_2(-2,"添加失败---有重复学生"), OK(1,"添加成功"); private int code; private String info; private AddCode(){} private AddCode(int code, String info) { this.code = code; this.info = info; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } @Override public String toString() { return info ; } } }
实现接口类
public class StudentManagerSystem implements IManagerSystem { //学生容器 private Student[] stus; //默认初始化容量 private static final int DEFAULT_INIT_CAPACITY = 3; //指针 private int size; public StudentManagerSystem() { stus = new Student[DEFAULT_INIT_CAPACITY]; //假数据 add(new Student("榮十一",'男',22,"2107","001")); add(new Student("沝\t",'女',21,"2107","002")); add(new Student("沝心\t",'女',21,"2107","003")); add(new Student("桜\t",'女',22,"2107","004")); add(new Student("张王京桜",'女',22,"2107","005")); add(new Student("张王1京桜",'女',22,"2107","006")); } public StudentManagerSystem(int initCapacity) { if (initCapacity <= DEFAULT_INIT_CAPACITY) { stus = new Student[DEFAULT_INIT_CAPACITY]; } else { stus = new Student[initCapacity]; } } @Override public Code.AddCode add(Student stu) { //判断学生信息是否合法 if (!StuInfoUtil.isStu(stu)) { return Code.AddCode.ERROR_1; } //判断是否有该学生 if (query(stu) != -1) { return Code.AddCode.ERROR_2; } //判断是否扩容 if (size == stus.length) { expansion(); } //添加学生 stus[size++] = stu; return Code.AddCode.OK; } @Override public Code.DeleteCode delete(String classId, String id) { //1判断学生信息合法性 if (!StuInfoUtil.isClassId(classId)||!StuInfoUtil.isId(id)){ return Code.DeleteCode.ERROR_1; } //判断是否有该学生 int index=query(classId,id); if (index==-1){ return Code.DeleteCode.ERROR_2; } //删除 for (int i=index;i<size-1;i++){ stus[i]=stus[i+1]; }size--; return Code.DeleteCode.OK; } @Override public Code.UpdateCode update(String classID, String id, int type, Object value) { //判断学生合法性 if (!StuInfoUtil.isClassId(classID)||!StuInfoUtil.isId(id)){ return Code.UpdateCode.ERROR_1;//学生信息不合法 } //判断是否有该学生 int index=query(classID,id); if (index==-1){ return Code.UpdateCode.ERROR_2;//没有该学生 } //判断修改类型 switch (type){ case IManagerSystem.NAME: if (value instanceof String){ String name=(String) value; //判断修改数据的合法性 if (!StuInfoUtil.isName(name)){ return Code.UpdateCode.ERROR_5;//修改数据不合法 } stus[index].setName(name); }else { return Code.UpdateCode.ERROR_4;//修改数据类型错误 } break; case IManagerSystem.SEX: if (value instanceof Character){ char sex=(Character) value; //判断修改数据的合法性 if (!StuInfoUtil.isSex(sex)){ return Code.UpdateCode.ERROR_5; } stus[index].setSex(sex); }else { return Code.UpdateCode.ERROR_4;//修改数据类型错误 }break; case IManagerSystem.AGE: if (value instanceof Integer){ Integer age=(Integer) value; //判断修改数据的合法性 if (!StuInfoUtil.isAge(age)){ return Code.UpdateCode.ERROR_5; } stus[index].setAge(age); }else{ return Code.UpdateCode.ERROR_4;//修改数据类型错误 }break; case IManagerSystem.CLASS_ID: if (value instanceof String){ String targetClassId=(String) value; //判断数据的合法型 if ((!StuInfoUtil.isClassId(targetClassId))){ return Code.UpdateCode.ERROR_5;//修改数据不合法 } //判断修改过后的数据是否有该学生 if (query(new Student(targetClassId,id))!=-1){ return Code.UpdateCode.ERROR_6;//目标班级有该学生 } stus[index].setClassId(targetClassId); }else { return Code.UpdateCode.ERROR_4; } break; case IManagerSystem.ID: if (value instanceof String){ String targetId=(String) value; //判断修改的数据合法性 if (!StuInfoUtil.isId(targetId)){ return Code.UpdateCode.ERROR_5; } //判断修改过后的数据是否有该学生 if (query(new Student(classID,targetId))!=-1){ return Code.UpdateCode.ERROR_7;//目标学号有该学生 }stus[index].setId(targetId); }else { return Code.UpdateCode.ERROR_4; }break; default: return Code.UpdateCode.ERROR_3;//修改类型错误 } return Code.UpdateCode.OK; } @Override public int query(Student stu) { for (int i = 0; i < size; i++) { if (stus[i].equals(stu)) { return i; } } return -1; } @Override public int query(String classID, String id) { Student stu =new Student(classID,id); return query(stu); } @Override public void printStuInfo() { for (int i = 0; i < size; i++) { System.out.println(stus[i]); } } @Override public void expansion() { int capacity = stus.length; int newCapacity = capacity + (capacity >> 1); stus = Arrays.copyOf(stus, newCapacity); } }
方法类
public class StuInfoUtil { 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 false; } return true; } public static boolean isName(String name) { int length = name.length(); if (length < 1 || length > 8) { return false; } return true; } public static boolean isSex(char sex) { if (sex != '男' && sex != '女') { return false; } return true; } public static boolean isAge(int age) { if (age < 16 || age > 60) { return false; } return true; } public static boolean isClassId(String classId) { int length = classId.length(); if (length != 4) { return false; } return true; } public static boolean isId(String id) { int length = id.length(); if (length != 3) { return false; } return true; } }
主方法类
public class Main { private static StudentManagerSystem sms=new StudentManagerSystem(); private static Scanner scan =new Scanner(System.in); public static void main(String[] args) { System.out.println("欢迎进入**学生管理系统"); boolean flag=true; while (flag){ System.out.println("请输入功能:"); System.out.println("1-添加学生 2-删除学生 3-修改学生 4-打印所有学生信息 886-退出系统"); int num=scan.nextInt(); switch (num){ case 1: addMenu(); break; case 2: deleteMenu(); break; case 3: upadateMenu(); break; case 4: printMenu(); break; case 886: flag =false; System.out.println("正在退出**学生管理系统"); break; } } scan.close();//关闭Scanner资源 } public static void addMenu(){ System.out.println("请输入姓名、性别、年龄、班级号、学号"); String name= scan.next(); char sex=scan.next().toCharArray()[0];//将字符串转换为数组,再获取第0个下标位置上的元素 int age=scan.nextInt(); String classId=scan.next(); String id=scan.next(); Student stu=new Student(name,sex,age,classId,id); Code.AddCode add=sms.add(stu); System.out.println(add); System.out.println("--------------------"); } public static void deleteMenu(){ System.out.println("请输入班级号、学号"); String classId=scan.next(); String id=scan.next(); Code.DeleteCode delete= sms.delete(classId,id); System.out.println(delete); System.out.println("-------------------------"); } public static void upadateMenu(){ System.out.println("请输入班级号、学号"); String classId=scan.next(); String id= scan.next(); System.out.println("请输入要修改的类型:1-姓名 2-性别 3-年龄 4-班级号 5-学号"); int type= scan.nextInt(); System.out.println("请输入要修改的值:"); Object value=null; switch (type){ case IManagerSystem.NAME: case IManagerSystem.CLASS_ID:case IManagerSystem.ID: value= scan.next(); break; case IManagerSystem.SEX: value= scan.next().toCharArray()[0]; break; case IManagerSystem.AGE: value = scan.nextInt(); break; } Code.UpdateCode update= sms.update(classId,id,type,value); System.out.println(update); System.out.println("----------------------"); } public static void printMenu(){ sms.printStuInfo(); System.out.println("----------------------"); } }