学生管理系统
Main.java
import java.util.Scanner;
import com.dream.my_interface.IManagerSystem;
import com.dream.sms.StudentManagerSystem;
import com.dream.vo.Student;
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:
updateMenu();
break;
case 4:
printMenu();
break;
case 886:
flag = false;
System.out.println("正在退出**学生管理系统,欢迎下次再来...");
break;
default:
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);
int add = sms.add(stu);
if(add == -1){
System.out.println("添加失败 - 学生信息不合法");
}else if(add == -2){
System.out.println("添加失败 - 有重复学生");
}else if(add == 1){
System.out.println("添加成功");
}
System.out.println("----------------------");
}
public static void deleteMenu(){
System.out.println("请输入班级号、学号:");
String classId = scan.next();
String id = scan.next();
int delete = sms.delete(classId, id);
if(delete == -1){
System.out.println("删除失败 - 学生信息不合法");
}else if(delete == -2){
System.out.println("删除失败 - 没有该学生");
}else if(delete == 1){
System.out.println("删除成功");
}
System.out.println("----------------------");
}
public static void updateMenu(){
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();//String -> Object
break;
case IManagerSystem.SEX:
value = scan.next().toCharArray()[0];//char -> Character -> Object
break;
case IManagerSystem.AGE:
value = scan.nextInt();//int -> Integer -> Object
break;
}
int update = sms.update(classId, id, type, value);
if(update == -1){
System.out.println("修改失败 -- 学生信息不合法");
}else if(update == -2){
System.out.println("修改失败 -- 没有该学生");
}else if(update == -3){
System.out.println("修改失败 -- 修改类型错误");
}else if(update == -4){
System.out.println("修改失败 -- 修改数据类型错误");
}else if(update == -5){
System.out.println("修改失败 -- 修改数据不合法");
}else if(update == -6){
System.out.println("修改失败 -- 目标班级上有该学生");
}else if(update == -7){
System.out.println("修改失败 -- 目标学号上有该学生");
}else if(update == 1){
System.out.println("修改成功");
}
}
public static void printMenu(){
sms.printStuInfo();
System.out.println("----------------------");
}
}
接口IManagerSystem.java
import com.dream.vo.Student;
public interface IManagerSystem {
int NAME = 1;
int SEX = 2;
int AGE = 3;
int CLASS_ID = 4;
int ID = 5;
/**
* 添加学生
* @param stu 目标学生
* @return -1:学生信息不合法 -2:有重复学生 1:添加成功
*/
public int add(Student stu);
/**
* 删除学生
* @param classId 班级号
* @param id 学号
* @return -1:学生信息不合法 -2:没有该学生 1:删除成功
*/
public int delete(String classId,String id);
/**
* 修改学生
* @param classId 班级号
* @param id 学号
* @param type 修改类型(1:姓名 2:性别 3:年龄 4:班级号 5:学号)
* @param value 修改的值
* @return
*/
public int update(String classId,String id,int type,Object value);
/**
* 查询学生在数组中的下标
* @param stu 目标学生
* @return 下标,如果学生没有在数组中返回-1
*/
public int query(Student stu);
/**
* 查询学生在数组中的下标
* @param classId 班级号
* @param id 学号
* @return 下标,如果学生没有在数组中返回-1
*/
public int query(String classId,String id);
/**
* 打印所有学生信息
*/
public void printStuInfo();
/**
* 数组扩容
*/
public void expansion();
}
操作StudentManagerSystem.java
import java.util.Arrays;
import com.dream.my_interface.IManagerSystem;
import com.dream.util.StuInfoUtil;
import com.dream.vo.Student;
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("麻生希", '女', 26, "2107", "001"));
add(new Student("北岛玲", '女', 31, "2107", "002"));
add(new Student("水菜类", '女', 29, "2107", "003"));
add(new Student("樱井步", '女', 26, "2107", "004"));
add(new Student("朝桐光", '女', 33, "2107", "005"));
add(new Student("椎名空", '女', 29, "2107", "006"));
add(new Student("爱田奈奈", '女', 34, "2107", "007"));
add(new Student("水野朝阳", '女', 26, "2107", "008"));
add(new Student("小峰由衣", '女', 29, "2107", "009"));
add(new Student("古川伊织", '女', 25, "2108", "001"));
add(new Student("吉泽明步", '女', 27, "2108", "002"));
add(new Student("三上悠亚", '女', 24, "2108", "003"));
add(new Student("深田咏美", '女', 24, "2108", "004"));
add(new Student("泷泽萝拉", '女', 29, "2108", "005"));
add(new Student("濑亚美莉", '女', 29, "2108", "006"));
add(new Student("桃谷绘里香", '女', 27, "2108", "007"));
add(new Student("波多野结衣", '女', 33, "2108", "008"));
add(new Student("小泽玛利亚", '女', 33, "2108", "009"));
add(new Student("明日花绮罗", '女', 26, "2109", "001"));
add(new Student("小西满里惠", '女', 30, "2109", "002"));
add(new Student("铃原爱蜜莉", '女', 27, "2109", "003"));
add(new Student("京香Julia", '女', 32, "2109", "004"));
add(new Student("天海翼", '女', 31, "2109", "005"));
add(new Student("泽村丽子", '女', 35, "2109", "006"));
add(new Student("北条麻衣", '女', 35, "2109", "007"));
add(new Student("林成", '男', 21, "2109", "008"));
}
public StudentManagerSystem(int initCapacity) {
if(initCapacity <= DEFAULT_INIT_CAPACITY){
stus = new Student[DEFAULT_INIT_CAPACITY];
}else{
stus = new Student[initCapacity];
}
}
@Override
public int add(Student stu) {
//1.判断学生信息是否合法
if(!StuInfoUtil.isStu(stu)){
return -1;
}
//2.判断是否有该学生
if(query(stu) != -1){
return -2;
}
//3.判断是否扩容
if(size == stus.length){
expansion();
}
//4.添加学生
stus[size++] = stu;
return 1;
}
@Override
public int delete(String classId, String id) {
//1.判断学生信息合法性
if(!StuInfoUtil.isClassId(classId) || !StuInfoUtil.isId(id)){
return -1;
}
//2.判断是否有该学生
int index = query(classId, id);
if(index == -1){
return -2;
}
//3.删除
for (int i = index; i < size-1; i++) {
stus[i] = stus[i+1];
}
size--;
return 1;
}
@Override
public int update(String classId, String id, int type, Object value) {
//1.判断学生合法性
if(!StuInfoUtil.isClassId(classId) || !StuInfoUtil.isId(id)){
return -1;//学生信息不合法
}
//2.判断是否有该学生
int index = query(classId, id);
if(index == -1){
return -2;//没有该学生
}
//3.判断修改类型
switch (type) {
case IManagerSystem.NAME:
if(value instanceof String){
String name = (String) value;
//判断修改数据的合法性
if(!StuInfoUtil.isName(name)){
return -5;//修改数据不合法
}
stus[index].setName(name);
}else{
return -4;//修改数据类型错误
}
break;
case IManagerSystem.SEX:
if(value instanceof Character){
char sex = (Character) value;
//判断修改数据的合法性
if(!StuInfoUtil.isSex(sex)){
return -5;//修改数据不合法
}
stus[index].setSex(sex);
}else{
return -4;//修改数据类型错误
}
break;
case IManagerSystem.AGE:
if(value instanceof Integer){
int age = (Integer) value;
//判断修改数据的合法性
if(!StuInfoUtil.isAge(age)){
return -5;//修改数据不合法
}
stus[index].setAge(age);
}else{
return -4;//修改数据类型错误
}
break;
case IManagerSystem.CLASS_ID:
if(value instanceof String){
String targetClassId = (String) value;
//判断修改数据的合法性
if(!StuInfoUtil.isClassId(targetClassId)){
return -5;//修改数据不合法
}
//判断修改过后的数据是否有该学生
if(query(new Student(targetClassId, id)) != -1){
return -6;//目标班级上有该学生
}
stus[index].setClassId(targetClassId);
}else{
return -4;//修改数据类型错误
}
break;
case IManagerSystem.ID:
if(value instanceof String){
String targetId = (String) value;
//判断修改数据的合法性
if(!StuInfoUtil.isId(targetId)){
return -5;//修改数据不合法
}
//判断修改过后的数据是否有该学生
if(query(new Student(classId, targetId)) != -1){
return -7;//目标学号上有该学生
}
stus[index].setId(targetId);
}else{
return -4;//修改数据类型错误
}
break;
default:
return -3;//修改类型错误
}
return 1;
}
@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);
}
}
工具类StuInfoUtil.java
import com.dream.vo.Student;
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 < 2 || 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;
}
}
学生类Student.java
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;
}
}