千锋逆战班,JavaSE结束项目学生信息管理系统

学习java第36天
Se阶段结束了,最后一个小项目。更新完成

这里写自定义目录标题

程序启动

package com.qf.project.menu;

import java.util.Scanner;

import com.qf.project.entity.Student;
import com.qf.project.service.StudentService;
import com.qf.project.manager.*;
public class SystemMain {
	private static Scanner sc = new Scanner(System.in);
	public static void main(String[] args) {
		
		StudentService ss = new StudentService();

		for(int i = 0;i<10;i++) {
			String name = "吴彦祖"+i;
			int age = (int)(Math.random() *50);
			char sex = '男';
			String className = "NZ2002";
			double javaScore = (double)(Math.random() *100);
			double htmlScore = (double)(Math.random() *100);
			double springScore = (double)(Math.random() *100);
			ss.addStudent(new Student(name,age,sex,className,javaScore,htmlScore,springScore));
		}
		while(true){
			System.out.println("欢迎来到千锋学员管理系统");
			System.out.println("1.查看所有学员");
			System.out.println("2.新增学员");
			System.out.println("3.查询指定ID的学生信息");
			System.out.println("4.根据ID删除学员");
			System.out.println("5.根据ID修改学员信息");
			System.out.println("6.根据班级名称查询学员");
			System.out.println("7.根据姓名(姓、名)查询学员");
			System.out.println("8.根据需求排序学员信息");
			System.out.println("9.根据需求展示符合条件的学员信息");
			System.out.println("0.退出!");
			System.out.println("请选择:");
			
			int choice = sc.nextInt();
			
			switch(choice){
			case 1:
				ss.show();
				break;
			case 2:
				ss.addStudent();
				break;
			case 3:
				ss.getStuById();
				break;
			case 4:
				ss.delStuById();
				break;
			case 5:
				ss.setStuInId();
				break;
			case 6:
				ss.getStuByClassName();
				break;
			case 7:
				ss.getStuBySurName();
				break;
			case 8:
				ss.sortStu();
				break;
			case 9:
				ss.showFilter();
				break;
			case 0:
				ss.aa();
				return;
				default:
					break;
			
			
			
			
			}
			
			
		}
		
		
	}

}

StudentService

package com.qf.project.util.impl;

import java.util.Arrays;

import com.qf.project.util.MyList;

public class MyArrayList<E> implements MyList<E> {
	//1.保存任意类型数据的数组,集合的底层
	private Object[] elmentData = null;
	//2.集合初始容量
	private static final int DEFAULT_CAPACITY=10;
	//3.保存数组中有效元素个数 (下一个元素插入的下标)
	private int size = 0;
	
	
	
	
	public MyArrayList() {
		//调用无参的构造方法会直接床架一个容量为10的数组
		this(DEFAULT_CAPACITY);
	}
	
	public MyArrayList(int in) {
		if(in < 0 || in > Integer.MAX_VALUE-8){
			throw new IllegalArgumentException("传递了一个不符合规范的初始容量!:"+in);
		}else{
			elmentData = new Object[in];
		}
	}
	/**
	 * 为底层数组elementData做扩容!
	 * @param minCapacity 扩容需要得最小容量!
	 */
	public void grow(){
		int oldCapacity = elmentData.length;
		int newCapacity = oldCapacity + (oldCapacity>>1);
		if(newCapacity > Integer.MAX_VALUE-8){
			throw new OutOfMemoryError("集合溢出了!");
		}
		if(newCapacity == 0){
			newCapacity = size+1;
		}
		/*
		 * 1、创建新数组
		 * 2.拷贝元数据到新数组
		 * 3.返回新数组的首地址
		 * 4,替换
		 */
		elmentData = Arrays.copyOf(elmentData, newCapacity);
	}

	@Override
	public boolean add(E e) {
		if(size == elmentData.length){
			grow();
		}
		elmentData[size] = e;
		size++;
		return true;
	}
	
	
	
	@Override
	public boolean add(int index, E e) {
		checkIndex(index);//判断下标是否合法
		if(size == elmentData.length){
			grow();
		}
		for(int i = size;i > index;i--){
			elmentData[i] = elmentData[i-1];
		}
		elmentData[index] = e;
		size++;
		return true;
	}
	/**
	 * 指定下标的安全检查!如果下标值不符合要求,抛异常
	 * @param index  下标
	 */
	private void checkIndex(int index) {
		if(index<0 ||index >=size) {
			throw new ArrayIndexOutOfBoundsException(index);
		}
	}
	@Override
	public E remove(Object o) {
		if(o == null){
			throw new NullPointerException("元素为空");
		}
		for(int i = 0; i< size;i++){
//			E e1 = (E)elmentData[i];
//			E e2 = (E)o;
//			if(e1.equals(e2)){
			if(elmentData[i].equals(o)){
//				System.out.println(elmentData[i]);
				for(int j = i;j<size-1;j++){
					elmentData[j] = elmentData[j+1];//往前覆盖,但是最后一个没有被覆盖(考虑数组长度和有效元素个数会相同)
				}
				elmentData[size-1] = null;//循环完事单独吧最后一个有效元素覆盖null
				size--;
				return (E)o;
			}
		}
		
		return null;
	}

	@Override
	public E remove(int index) {
		checkIndex(index);
		Object o1 = elmentData[index];
		for(int i=index;i< size-1;i++){
			elmentData[i] = elmentData[i+1];//往前覆盖,但是最后一个没有被覆盖(考虑数组长度和有效元素个数会相同,最后一个会出现下标越界错误)
		}
		elmentData[size-1] = null;//循环完事单独吧最后一个有效元素覆盖null
		size--;
		return (E)o1;
	}

	@Override
	public E set(int index, E e) {
		checkIndex(index);
		
		
		return (E)(elmentData[index] = e);
	}

	@Override
	public int size() {
		return size;
	}

	@Override
	public Object[] toArray() {
		Object[] o = new Object[size];
		for(int i = 0;i<size;i++){
			o[i]=elmentData[i];
		}
		return o;
	}

	@Override
	public boolean isEmpty() {
		if(elmentData == null){
			return true;
		}
		if(size ==0){
			return true;
		}
		return false;
	}

	@Override
	public boolean contains(Object o) {
		for(int i =0;i < size ;i++){
			if(elmentData[i].equals(o)){
				return true;
			}
		}
		return false;
	}

	@Override
	public MyList<E> subList(int start, int end) {
		checkIndex(start);
		checkIndex(end);
		if(start < end){
			MyList<E> m = new MyArrayList<E>();
			for(int i = start ; i <=end ;i++){
				m.add((E)elmentData[i]);
			}
			return m;
		}
		if(start >= end){
			throw new ArrayIndexOutOfBoundsException("开始大于了终止的下标");
		}
		return null;
	}

	@Override
	public int indexOf(Object o) {
		for(int i = 0;i<size;i++){
			if(elmentData[i].equals(o)){
				return i;
			}
		}
		return -1;
	}

	@Override
	public int lastIndexOf(Object o) {
		for(int i =size-1;i >= 0;i--){
			if(elmentData[i].equals(o)){
				return i;
			}
		}
		return -1;
	}

	@Override
	public E get(int index) {
		checkIndex(index);//检查下标是否合法范围
		return (E)elmentData[index];
	}

}

Student

package com.qf.project.entity;

import java.io.Serializable;

public class Student implements Serializable {
	private int id;//学号
	private String name;//姓名
	private int age;//年龄
	private char sex;//性别
	private String className;//班级
	private double javaScore;//Java成绩
	private double htmlScore;//html成绩
	private double springScore;//spring成绩
	private double totalScore;//总分
	
	public static int count =0;
	//无参
	public Student() {
	
	}
	//无成绩有参   基本信息
	public Student(String name,int age,char sex,String className){
		count++;
		this.id = count;
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.className = className;
		
	}
	//有成绩有参构造 
	public Student(String name, int age, char sex, String className, double javaScore, double htmlScore,
			double springScore) {
		this(name,age,sex,className);
		this.javaScore = javaScore;
		this.htmlScore = htmlScore;
		this.springScore = springScore;
		this.totalScore = javaScore + htmlScore + springScore;
	}
	public int getId() {
		return id;
	}
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public char getSex() {
		return sex;
	}
	public void setSex(char sex) {
		this.sex = sex;
	}
	public String getClassName() {
		return className;
	}
	public void setClassName(String className) {
		this.className = className;
	}
	public double getJavaScore() {
		return javaScore;
	}
	public void setJavaScore(double javaScore) {
		this.totalScore -= this.javaScore;//先把原来的java成绩减掉。
		
		this.javaScore = javaScore;//正常赋值
		
		this.totalScore += javaScore;//将更新好的成绩重新加到总分中
	}
	public double getHtmlScore() {
		return htmlScore;
	}
	public void setHtmlScore(double htmlScore) {
		this.totalScore -= this.htmlScore;//将原来的html成绩从总分去除
		
		this.htmlScore = htmlScore;//将最新的成绩更新
		
		this.totalScore += htmlScore;//将更新好的成绩重新加到总分中
	}
	public double getSpringScore() {
		return springScore;
	}
	public void setSpringScore(double springScore) {
		this.totalScore -= this.springScore;//将原来的spring成绩从总分去除
		
		this.springScore = springScore;//将最新的成绩更新
		
		this.totalScore += springScore;//将更新好的成绩重新加到总分中
	}
	//总分不能自己修改
	public double getTotalScore() {
		return totalScore;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + ", className=" + className
				+ ", javaScore=" + javaScore + ", htmlScore=" + htmlScore + ", springScore=" + springScore
				+ ", totalScore=" + totalScore + "]";
	}
	@Override
	public int hashCode() {
		
		return id;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (this.getClass() != obj.getClass())
			return false;
		Student other = (Student) obj;
		if(this.id == other.id && this.name.equals(other.name)&&this.age == other.age && this.sex == other.sex
				&& this.className.equals(other.className)&&this.javaScore==other.javaScore&&this.htmlScore==other.htmlScore
				&&this.springScore == other.springScore){
			return true;
			
		}
				
		return false;
	}
	
	
	
	
}


StudentManager

package com.qf.project.util.impl;

import java.util.Arrays;

import com.qf.project.util.MyList;

public class MyArrayList<E> implements MyList<E> {
	//1.保存任意类型数据的数组,集合的底层
	private Object[] elmentData = null;
	//2.集合初始容量
	private static final int DEFAULT_CAPACITY=10;
	//3.保存数组中有效元素个数 (下一个元素插入的下标)
	private int size = 0;
	
	
	
	
	public MyArrayList() {
		//调用无参的构造方法会直接床架一个容量为10的数组
		this(DEFAULT_CAPACITY);
	}
	
	public MyArrayList(int in) {
		if(in < 0 || in > Integer.MAX_VALUE-8){
			throw new IllegalArgumentException("传递了一个不符合规范的初始容量!:"+in);
		}else{
			elmentData = new Object[in];
		}
	}
	/**
	 * 为底层数组elementData做扩容!
	 * @param minCapacity 扩容需要得最小容量!
	 */
	public void grow(){
		int oldCapacity = elmentData.length;
		int newCapacity = oldCapacity + (oldCapacity>>1);
		if(newCapacity > Integer.MAX_VALUE-8){
			throw new OutOfMemoryError("集合溢出了!");
		}
		if(newCapacity == 0){
			newCapacity = size+1;
		}
		/*
		 * 1、创建新数组
		 * 2.拷贝元数据到新数组
		 * 3.返回新数组的首地址
		 * 4,替换
		 */
		elmentData = Arrays.copyOf(elmentData, newCapacity);
	}

	@Override
	public boolean add(E e) {
		if(size == elmentData.length){
			grow();
		}
		elmentData[size] = e;
		size++;
		return true;
	}
	
	
	
	@Override
	public boolean add(int index, E e) {
		checkIndex(index);//判断下标是否合法
		if(size == elmentData.length){
			grow();
		}
		for(int i = size;i > index;i--){
			elmentData[i] = elmentData[i-1];
		}
		elmentData[index] = e;
		size++;
		return true;
	}
	/**
	 * 指定下标的安全检查!如果下标值不符合要求,抛异常
	 * @param index  下标
	 */
	private void checkIndex(int index) {
		if(index<0 ||index >=size) {
			throw new ArrayIndexOutOfBoundsException(index);
		}
	}
	@Override
	public E remove(Object o) {
		if(o == null){
			throw new NullPointerException("元素为空");
		}
		for(int i = 0; i< size;i++){
//			E e1 = (E)elmentData[i];
//			E e2 = (E)o;
//			if(e1.equals(e2)){
			if(elmentData[i].equals(o)){
//				System.out.println(elmentData[i]);
				for(int j = i;j<size-1;j++){
					elmentData[j] = elmentData[j+1];//往前覆盖,但是最后一个没有被覆盖(考虑数组长度和有效元素个数会相同)
				}
				elmentData[size-1] = null;//循环完事单独吧最后一个有效元素覆盖null
				size--;
				return (E)o;
			}
		}
		
		return null;
	}

	@Override
	public E remove(int index) {
		checkIndex(index);
		Object o1 = elmentData[index];
		for(int i=index;i< size-1;i++){
			elmentData[i] = elmentData[i+1];//往前覆盖,但是最后一个没有被覆盖(考虑数组长度和有效元素个数会相同,最后一个会出现下标越界错误)
		}
		elmentData[size-1] = null;//循环完事单独吧最后一个有效元素覆盖null
		size--;
		return (E)o1;
	}

	@Override
	public E set(int index, E e) {
		checkIndex(index);
		
		
		return (E)(elmentData[index] = e);
	}

	@Override
	public int size() {
		return size;
	}

	@Override
	public Object[] toArray() {
		Object[] o = new Object[size];
		for(int i = 0;i<size;i++){
			o[i]=elmentData[i];
		}
		return o;
	}

	@Override
	public boolean isEmpty() {
		if(elmentData == null){
			return true;
		}
		if(size ==0){
			return true;
		}
		return false;
	}

	@Override
	public boolean contains(Object o) {
		for(int i =0;i < size ;i++){
			if(elmentData[i].equals(o)){
				return true;
			}
		}
		return false;
	}

	@Override
	public MyList<E> subList(int start, int end) {
		checkIndex(start);
		checkIndex(end);
		if(start < end){
			MyList<E> m = new MyArrayList<E>();
			for(int i = start ; i <=end ;i++){
				m.add((E)elmentData[i]);
			}
			return m;
		}
		if(start >= end){
			throw new ArrayIndexOutOfBoundsException("开始大于了终止的下标");
		}
		return null;
	}

	@Override
	public int indexOf(Object o) {
		for(int i = 0;i<size;i++){
			if(elmentData[i].equals(o)){
				return i;
			}
		}
		return -1;
	}

	@Override
	public int lastIndexOf(Object o) {
		for(int i =size-1;i >= 0;i--){
			if(elmentData[i].equals(o)){
				return i;
			}
		}
		return -1;
	}

	@Override
	public E get(int index) {
		checkIndex(index);//检查下标是否合法范围
		return (E)elmentData[index];
	}

}

	
}

MyArrayList

package com.qf.project.util.impl;

import java.util.Arrays;

import com.qf.project.util.MyList;

public class MyArrayList<E> implements MyList<E> {
	//1.保存任意类型数据的数组,集合的底层
	private Object[] elmentData = null;
	//2.集合初始容量
	private static final int DEFAULT_CAPACITY=10;
	//3.保存数组中有效元素个数 (下一个元素插入的下标)
	private int size = 0;
	
	
	
	
	public MyArrayList() {
		//调用无参的构造方法会直接床架一个容量为10的数组
		this(DEFAULT_CAPACITY);
	}
	
	public MyArrayList(int in) {
		if(in < 0 || in > Integer.MAX_VALUE-8){
			throw new IllegalArgumentException("传递了一个不符合规范的初始容量!:"+in);
		}else{
			elmentData = new Object[in];
		}
	}
	/**
	 * 为底层数组elementData做扩容!
	 * @param minCapacity 扩容需要得最小容量!
	 */
	public void grow(){
		int oldCapacity = elmentData.length;
		int newCapacity = oldCapacity + (oldCapacity>>1);
		if(newCapacity > Integer.MAX_VALUE-8){
			throw new OutOfMemoryError("集合溢出了!");
		}
		if(newCapacity == 0){
			newCapacity = size+1;
		}
		/*
		 * 1、创建新数组
		 * 2.拷贝元数据到新数组
		 * 3.返回新数组的首地址
		 * 4,替换
		 */
		elmentData = Arrays.copyOf(elmentData, newCapacity);
	}

	@Override
	public boolean add(E e) {
		if(size == elmentData.length){
			grow();
		}
		elmentData[size] = e;
		size++;
		return true;
	}
	
	
	
	@Override
	public boolean add(int index, E e) {
		checkIndex(index);//判断下标是否合法
		if(size == elmentData.length){
			grow();
		}
		for(int i = size;i > index;i--){
			elmentData[i] = elmentData[i-1];
		}
		elmentData[index] = e;
		size++;
		return true;
	}
	/**
	 * 指定下标的安全检查!如果下标值不符合要求,抛异常
	 * @param index  下标
	 */
	private void checkIndex(int index) {
		if(index<0 ||index >=size) {
			throw new ArrayIndexOutOfBoundsException(index);
		}
	}
	@Override
	public E remove(Object o) {
		if(o == null){
			throw new NullPointerException("元素为空");
		}
		for(int i = 0; i< size;i++){
//			E e1 = (E)elmentData[i];
//			E e2 = (E)o;
//			if(e1.equals(e2)){
			if(elmentData[i].equals(o)){
//				System.out.println(elmentData[i]);
				for(int j = i;j<size-1;j++){
					elmentData[j] = elmentData[j+1];//往前覆盖,但是最后一个没有被覆盖(考虑数组长度和有效元素个数会相同)
				}
				elmentData[size-1] = null;//循环完事单独吧最后一个有效元素覆盖null
				size--;
				return (E)o;
			}
		}
		
		return null;
	}

	@Override
	public E remove(int index) {
		checkIndex(index);
		Object o1 = elmentData[index];
		for(int i=index;i< size-1;i++){
			elmentData[i] = elmentData[i+1];//往前覆盖,但是最后一个没有被覆盖(考虑数组长度和有效元素个数会相同,最后一个会出现下标越界错误)
		}
		elmentData[size-1] = null;//循环完事单独吧最后一个有效元素覆盖null
		size--;
		return (E)o1;
	}

	@Override
	public E set(int index, E e) {
		checkIndex(index);
		
		
		return (E)(elmentData[index] = e);
	}

	@Override
	public int size() {
		return size;
	}

	@Override
	public Object[] toArray() {
		Object[] o = new Object[size];
		for(int i = 0;i<size;i++){
			o[i]=elmentData[i];
		}
		return o;
	}

	@Override
	public boolean isEmpty() {
		if(elmentData == null){
			return true;
		}
		if(size ==0){
			return true;
		}
		return false;
	}

	@Override
	public boolean contains(Object o) {
		for(int i =0;i < size ;i++){
			if(elmentData[i].equals(o)){
				return true;
			}
		}
		return false;
	}

	@Override
	public MyList<E> subList(int start, int end) {
		checkIndex(start);
		checkIndex(end);
		if(start < end){
			MyList<E> m = new MyArrayList<E>();
			for(int i = start ; i <=end ;i++){
				m.add((E)elmentData[i]);
			}
			return m;
		}
		if(start >= end){
			throw new ArrayIndexOutOfBoundsException("开始大于了终止的下标");
		}
		return null;
	}

	@Override
	public int indexOf(Object o) {
		for(int i = 0;i<size;i++){
			if(elmentData[i].equals(o)){
				return i;
			}
		}
		return -1;
	}

	@Override
	public int lastIndexOf(Object o) {
		for(int i =size-1;i >= 0;i--){
			if(elmentData[i].equals(o)){
				return i;
			}
		}
		return -1;
	}

	@Override
	public E get(int index) {
		checkIndex(index);//检查下标是否合法范围
		return (E)elmentData[index];
	}

}

接口:
MyFilter

package com.qf.project.util;

public interface MyFilter<E> {
	boolean accept(E e);
}

MyComparator

package com.qf.project.util;

public interface MyComparator<E> {
	/**
	 * 自定义排序的方法,方法的返回值是int类型
	 * @param stu1 student类型
	 * @param stu2 student类型
	 * @return >0 前者大于后者   <0 前者小于后者  ==0 两者相同
	 */
	int compare(E e1,E e2);
}

MyList

package com.qf.project.util;
/**
 * 
 *  增加:
 * add(E e);
 * add(int index,E e);
 * 删除:
 * remove(E e);
 * remove(int index);
 * 改:
 * set(int index,E e);
 * 获取:
 * int size();
 * Object[] toArray();
 * boolean isEmpty();
 * boolean contains(Object o);
 * MyArrayList<E> subList(int start,int end);
 * int indexOf(Object o);
 * int lastIndexOf(Object o);
 * E get(int index);
 * @author Dell
 *
 * @param <E> 泛型,应用在不同类型下,作为集合中元素的类型(传入什么类型就为什么类型)
 */


public interface MyList<E> {
	/**
	 * 添加方法
	 * 添加元素到集合末尾
	 * @param e 元素
	 * @return 添加成功返回true否则false
	 */
	boolean add(E e);
	
	/**
	 * 添加方法
	 * 将元素添加到指定的下标中
	 * @param index 集合元素的下标
	 * @param e 集合中元素
	 * @return  添加成功返回true否则false
	 */
	boolean add(int index ,E e);
	/**
	 * 
	 * 移除方法
	 * 移除指定元素
	 * @param o 要移除的元素
	 * @return 返回移除的元素
	 */
	E remove(Object o);
	/**
	 *移除方法
	 * 根据指定的下标移除下标上的元素
	 * @param index 将要移除元素的下标
	 * @return 返回移除的元素
	 */
	E remove(int index);
	
	/**
	 * 覆盖方法,替换制定下标上的元素
	 * 
	 * @param index 下标
	 * @param e 替换的元素
	 * @return 被替换的元素
	 */
	E set(int index,E e);
	
	/**
	 *获取集合中有效的元素个数
	 * 
	 * @return 有效元素个数
	 */
	int size();
	/**
	 * 获取集合中,算有元素的Object类型数组
	 * 
	 * @return Object[] 集合元素数组
	 */
	Object[] toArray();
	
	/**
	 * 
	 * 判断集合是否为空
	 * @return 如果一个元素都没有,返回true,有元素返回false
	 */
	boolean isEmpty();
	
	/**
	 * 判断集合中是否有何传入元素相同的元素
	 * @param o 需要查找的对象
	 * @return 有返回true,没有返回false
	 */
	boolean contains(Object o);
	/**
	 * 根据需求,返回start到end之间的MyList集合的子集合
	 * @param start 要求有效下标的范围,不能超过end
	 * @param end要求有效下标的范围,不能小于等于start
	 * @return 数据符合要求,返回一个当前集合的子集合。若数据不符合要求,返回NULL
	 */
	MyList<E> subList(int start,int end);
	/**
	 * 获得指定元素在集合中第一次出现的位置
	 * @param o 指定的元素
	 * @return 找到返回值 返回下标,没找到返回-1
	 */
	int indexOf(Object o);
	/**
	 * 获取指定元素在集合中最后一次出现的位置
	 * @param o指定的元素
	 * @return 找到返回值 返回下标,没找到返回-1
	 */
	int lastIndexOf(Object o);
	/**
	 * 根据指定的下标位置,获得元素
	 * @param index 下标
	 * @return 元素对象
	 */
	E get(int index);
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值