学生管理系统
1.创建一个Student类
package com.dream.vo;
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;
}
}
2.创建接口IManagerSystem
package com.dream.my_interface;
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();
}
3.创建判断类StuInfoUtil
package com.dream.util;
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;
}
}
4.创建学生管理系统类StudentManagerSystem
package com.dream.sms;
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];
}
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) {
//判断学生的信息是否合法
if(!StuInfoUtil.isStu(stu)) {
return -1;
}
//判断是否又该学生
if(query(stu) !=-1) {
return -2;
}
//判断是否扩容
if(size == stus.length) {
expansion();
}
//添加成功
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 0;
}
@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.isClassId(targetId)) {
return -5;
}
//判断修改过后的数据是否有该学生
if(query(new Student(classId,targetId))!=-1) {
return -7;//目标学号上有该学生
}
stus[index].setClassId(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;
}
}
//没有该学生返回-1
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);//1.5倍stus.lentgh
stus = Arrays.copyOf(stus, newCapacity);
}
}
5.创建主类Main
package com.dream.main;
import java.util.Scanner;
import com.dream.vo.Student;
import com.dream.my_interface.IManagerSystem;
import com.dream.sms.StudentManagerSystem;
public class Main {
private static Scanner scan = new Scanner(System.in);
private static StudentManagerSystem sms=new StudentManagerSystem();
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;
}
}
}
public static void addMenu() {
System.out.println("请输入姓名、性别、年龄、班级号、学号");
String name = scan.next();
char sex =scan.next().toCharArray()[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("------------------");
}
}