入门实例代码展示-----学生管理系统

本文展示了一个学生管理系统的设计与实现,包括增删改查功能。系统采用面向对象设计,涉及枚举、接口、继承等概念。实体类`Student`包含属性如姓名、性别、年龄等,接口`IMangerSystem`定义了管理操作,工具类`StudentTools`用于验证学生信息。此外,还实现了`AddCode`、`DeleteCode`和`UpDateCode`枚举来表示操作结果。
摘要由CSDN通过智能技术生成

入门实例代码展示-----学生管理系统

案例:写一个学生管理系统

功能:学生信息的 增、删、改、查。

涉及:面向对象、枚举、接口、继承、实例化、重写、重载、包装类、封装、多态…

结合前面分享的所有内容。

实体类:学生

package com.Xu.ov;

import java.util.Objects;

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) {
		super();
		this.classId = classId;
		this.id = id;
	}
    
	public Student(String name, char sex, int age, String classId, String id) {
		super();
		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 String toString() {
		return name + "\t" + sex + "\t" + age + "\t" + classId + "\t" + id;
	}

	@Override
	public int hashCode() {
		return Objects.hash(age, classId, id, name, sex);
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if(obj instanceof Student) {//判断obj是否是Student类型的
			Student stu = (Student) obj;
			if(this.classId.equals(stu.classId)&&this.id.equals(stu.id))
				return true;
		}
		return false;
	}
}

学生管理系统接口

package my_interface;

import com.Xu.ov.Student;

import my_interface.Code.UpDateCode;

public interface IMangerSystem {
	int NAME = 1;
	int SEX = 2;
	int AGE = 3;
	int CLASS_ID = 4;
	int ID = 5;
	/**
	 * 增加学生信息
	 * @param stu 目标学生
	 * @return -1:学生信息不合法 -2:有重复学生 1:添加成功
	 */
	public Code.AddCode add(Student stu);
	/**
	 * 删除学生信息
	 * @param classId 班级号
	 * @param id 学号
	 * @return -1:学生信息不合法	-2:没有该学生	1:删除成功 
	 */
	public Code.DeleteCode delete(String classId,String id);
	/**
	 * 修改学生信息
	 * @param classId 班级号
	 * @param id 学号
	 * @param type 修改类型(1:姓名 2:性别 3:年龄 4:班级号 5:学号) 
	 * @param value 修改的值
	 * @return
	 */
	public UpDateCode 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);
	/**
	 * 打印所有学生信息
	 * @return
	 */
	public void printStuInfo();
	/**
	 * 扩容
	 * @return
	 */
	public void expansion();
	
}

工具类接口,涉及组织枚举

package my_interface;

public interface Code {
	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 code+"-----"+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 code+"-----"+info;
		}
		
	}
	
	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 code+"-----"+info;
		}
		
	}
	
	
}

系统类:学生管理系统

package com.Xu.System;

import java.util.Arrays;

import com.Xu.Util.StudentTools;
import com.Xu.ov.Student;

import my_interface.Code.AddCode;
import my_interface.Code.DeleteCode;
import my_interface.Code.UpDateCode;
import my_interface.IMangerSystem;

public class MyStudentMangerSystem implements IMangerSystem{
	//学生容器
	private Student[] stus;
	 //初始长度
	private final int INITIAL_LEGTH = 3;
	//指针
	private int size;//默认为0
	
	public MyStudentMangerSystem() {
		stus = new Student[INITIAL_LEGTH];
		//做假数据,方便测试功能,,可以删除
		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, "2106", "001"));
		add(new Student("李四", '男', 34, "2106", "002"));
		add(new Student("王二", '男', 26, "2106", "003"));
		add(new Student("麻子", '男', 29, "2106", "004"));
		
	}
	public MyStudentMangerSystem(int initCapacity) {
		if(initCapacity <= INITIAL_LEGTH){
			stus = new Student[INITIAL_LEGTH];
		}else{
			stus = new Student[initCapacity];
		}
	}
	
	
	

	
	
	@Override
	public AddCode add(Student stu) {
		//判断学生信息是否合法
		if(!StudentTools.isStu(stu)) {
			return AddCode.ERROR_1;
		}
		//判断学生是否重复
		if(query(stu)!=-1) {
			return AddCode.ERROR_2;
		}
		//判断是否扩容
		if(size == stus.length)
			expansion();
		
		stus[size++] = stu;
		return AddCode.OK;
	}

	@Override
	public DeleteCode delete(String classId, String id) {
		//判断学生信息是否合法
		if(!StudentTools.isClassId(classId)||!StudentTools.isId(id))
			return DeleteCode.ERROR_1;
		//判断学生是否存在
		int index = query(classId, id);
		if(index==-1)
			return DeleteCode.ERROR_2;
		for (int i = index; i < size-1; i++) {
			stus[i]=stus[i+1];
		}
		size--;
		
		return DeleteCode.OK;
	}

	@Override
	public UpDateCode update(String classId, String id, int type, Object value) {
		//判断输入的班级号、学号是否合法
		if(!StudentTools.isClassId(classId)||!StudentTools.isId(id))
			return UpDateCode.ERROR_1;
		
		//判断是否有该学生
		int index = query(classId, id);
		if(index == -1)
			return UpDateCode.ERROR_2;
		
		//判断修改类型
		switch (type) {
		case IMangerSystem.NAME: {
			if(value instanceof String) {
				String name = (String) value;
				//判断修改数据的合法性
				if(!StudentTools.isName(name)) {
					return UpDateCode.ERROR_5;//修改数据不合法
				}
				stus[index].setName(name);
			}else {
				return UpDateCode.ERROR_4;//数据修改类型错误
			}
			break;
		}
		case IMangerSystem.SEX: {
			if(value instanceof Character) {
				char sex = (char) value;
				//判断修改数据的合法性
				if(!StudentTools.isSex(sex)) {
					return UpDateCode.ERROR_5;//修改数据不合法
				}
				stus[index].setSex(sex);
			}else {
				return UpDateCode.ERROR_4;//数据修改类型错误
			}
			break;
		}
		case IMangerSystem.AGE: {
			if(value instanceof String) {
				int age = (Integer) value;
				//判断修改数据的合法性
				if(!StudentTools.isAge(age)) {
					return UpDateCode.ERROR_5;//修改数据不合法
				}
				stus[index].setAge(age);
			}else {
				return UpDateCode.ERROR_4;//数据修改类型错误
			}
			break;
		}
		case IMangerSystem.CLASS_ID: {
			if(value instanceof String){

				String targetClassId = (String) value;
				//判断修改数据的合法性
				if(!StudentTools.isClassId(targetClassId)){
					return UpDateCode.ERROR_5;//修改数据不合法
				}
				//判断修改过后的数据是否有该学生
				if(query(new Student(targetClassId, id)) != -1){
					return UpDateCode.ERROR_6;//目标班级上有该学生
				}
				stus[index].setClassId(targetClassId);
			}else{
				return UpDateCode.ERROR_4;//修改数据类型错误
			}
			break;
		}
		case IMangerSystem.ID: {
			if(value instanceof String){
				
				String targetId = (String) value;
				//判断修改数据的合法性
				if(!StudentTools.isId(targetId)){
					return UpDateCode.ERROR_5;//修改数据不合法
				}
				//判断修改过后的数据是否有该学生
				if(query(new Student(classId, targetId)) != -1){
					return UpDateCode.ERROR_7;//目标学号上有该学生
				}
				stus[index].setId(targetId);
			}else{
				return UpDateCode.ERROR_4;//修改数据类型错误
			}
			break;
		}
		default:
			return UpDateCode.ERROR_3;//修改类型错误
		}
		return 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 length = stus.length;
		int newlength = length + (length>>1);
		stus = Arrays.copyOf(stus, newlength);
	}

}

工具类:用于判断学生信息是否合法

package com.Xu.Util;

import com.Xu.ov.Student;

public class StudentTools {
	
	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<15||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;
	}
}

主函数:运行入口

package com.Xu.Main;

import java.util.Scanner;

import com.Xu.System.MyStudentMangerSystem;
import com.Xu.ov.Student;

import my_interface.Code.AddCode;
import my_interface.Code.DeleteCode;
import my_interface.Code.UpDateCode;
import my_interface.IMangerSystem;

public class Main {
	private static MyStudentMangerSystem sms = new MyStudentMangerSystem();
	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);
		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();
		DeleteCode delete = sms.delete(classId, id);
		System.out.println(delete);
		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 IMangerSystem.NAME:case IMangerSystem.CLASS_ID:case IMangerSystem.ID:
			value = scan.next();//String -> Object
		break;
		case IMangerSystem.SEX:
			value = scan.next().toCharArray()[0];//char -> Character -> Object
		break;	
		case IMangerSystem.AGE:
			value = scan.nextInt();//int -> Integer -> Object
		break;
		}
		
		UpDateCode updateCode = sms.update(classId, id, type, value);
		System.out.println(updateCode);
	}
	public static void printMenu() {
		sms.printStuInfo();
		System.out.println("---------------------------");
	}
}

运行展示

打印数据
在这里插入图片描述>添加数据
在这里插入图片描述
打印
在这里插入图片描述
删除数据
在这里插入图片描述
修改数据
在这里插入图片描述>打印
在这里插入图片描述

退出系统
在这里插入图片描述

创作不易,各位路过给个点赞、关注谢谢

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值