Java_Day17:一个小项目

package homework;

/**
 * 自定义一个学生类
 * 
 * @author xiabaobei
 *
 */
public class Student {
	// 定义成员变量,id、姓名、年纪、性别、成绩
	private String id;
	private String name;
	private int age;
	private char gender;
	private float grade;
	
	//无参数构造方法
	public Student() {
		super();
	}
	
	//全参数构造方法
	public Student(String id, String name, int age, char gender, float grade) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.gender = gender;
		this.grade = grade;
	}
	
	// setter 和  getter 方法
	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = 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 getGender() {
		return gender;
	}

	public void setGender(char gender) {
		this.gender = gender;
	}

	public float getGrade() {
		return grade;
	}

	public void setGrade(float grade) {
		this.grade = grade;
	}	
}
package homework;
/**
 * 自定义一个管理学生类
 * @author xiabaobei
 *
 */
import java.util.Scanner;
public class ManageStudents {
	private Student[] allStu;
	private int numOfStu;
	private Scanner sc;
	
	//无参数构造方法
	public ManageStudents() {
		super();
	}
	
	//全参数构造方法
	public ManageStudents(Student[] allStu, int numOfStu, Scanner sc) {
		super();
		this.allStu = allStu;
		this.numOfStu = numOfStu;
		this.sc = sc;
	}
	
	/**
	 * 从键盘录入学生信息
	 * 
	 * @param stu Student 类对象
	 * @return 返回的是一个所有属性都赋值好的 Student 类对象
	 */
	public Student typeInStuInfor(Student stu) {
		System.out.print("请输入学生姓名:");
		stu.setName(sc.nextLine());
		System.out.print("请输入" + stu.getName() + "的ID:");
		stu.setId(sc.nextLine());
		System.out.print("请输入" + stu.getName() + "的年龄:");
		stu.setAge(sc.nextInt());
		System.out.print("请输入" + stu.getName() + "的性别:");
		stu.setGender(sc.next().charAt(0));
		System.out.print("请输入" + stu.getName() + "的成绩:");
		stu.setGrade(sc.nextFloat());
		/*
		 * nextInt()、nextFloat()、nextDouble()不会接收 '\n' 
		 * 所以在在这里添加一个 nextLine(),来接收上面 nextFloat()
		 * 遗留下来的 '\n'
		 */
		sc.nextLine();

		return stu;
	}
	/**
	 * 向数组类型成员变量 allStu 类添加新成员
	 * 
	 * @param stu Student 类对象
	 */
	public void addNewStu(Student stu) {
			allStu[numOfStu] = stu;
			numOfStu += 1;
	}
	
	/**
	 * 根据 ID,找到对应的学生
	 * 
	 * @return 若找到 id 属性符合的 Student 类对象,返回此对象,否则返回 null
	 */
	public Student findStu( ) {
		System.out.println("请输入需要查找的学生的ID:");
		String id = sc.nextLine();
		int index = -1;
		for (int i  = 0; i < allStu.length && allStu[i] != null ; i++) {
			if (id.equals(allStu[i].getId())) {
				index = i;
				break;
			}
		}
		//判断输入的ID是否有误
		if (-1 == index) {
			System.out.println("输入的ID有误,未找到此ID的学生");
			return null;
		} else {
			return allStu[index];
		}

	}
	
	/**
	 * 删除指定 ID 的学生
	 */
	public void deleteStu(){
		System.out.println("请输入需要删除学生的ID:");
		String id = sc.nextLine();
		int index = -1;
		for (int i = 0; i < allStu.length && allStu[i] != null; i++) {
			if (id.equals(allStu[i].getId())) {
				index = i;
			} 
		}
		//判断输入的ID是否有误
		if (-1 == index) {
			System.out.println("输入的ID有误,没有此ID的学生");
		} else {
			int j;
			for (j = index; j < allStu.length - 1 && allStu[j] != null; j++) {
				allStu[j] = allStu[j + 1]; 
			}
			allStu[j] = null;
		}
		
	}
	
	/**
	 * 展示所有学生的信息
	 */
	public void showAllStuInfor() {
		for (int i = 0; i < allStu.length && allStu[i] != null; i++) {
			System.out.println(allStu[i].getName() + "的信息:");
			System.out.print("id:" + allStu[i].getId() + "\t");
			System.out.print("年龄:" + allStu[i].getAge() + "\t");
			System.out.print("性别::" + allStu[i].getGender() + "\t");
			System.out.println("成绩::" + allStu[i].getGrade() + "\t");
		}
	}
	/**
	 * 将学生的成绩从高到底排列
	 */
	public void gradeSort() {
		//存放下标
		int index = 0;
		//临时存放对象
		Student temp = null;
		//选择排序法
		for (int i = 0; i < allStu.length - 1 && allStu[i] != null; i++) {
			index = i;
			temp = null;
			//找到数组 allStu 中从第 i 个元素开始的最大元素的下标
			for (int j = i + 1; j < allStu.length && allStu[j] != null; j++) {
				if (allStu[index].getGrade() < allStu[j].getGrade()) {
					index = j;
				}
				if (i != index) {
					//将从 第 i 个元素开始的最大元素第 i 个元素互换位置
					temp = allStu[index];
					allStu[index] = allStu[i];
					allStu[i] = temp;
				}
			}
		}
	}
	
	// getter 和 setter 方法
	public Student[] getAllStu() {
		return allStu;
	}
	public void setAllStu(Student[] allStu) {
		this.allStu = allStu;
	}
	public int getNumOfStu() {
		return numOfStu;
	}
	public void setNumOfStu(int numOfStu) {
		this.numOfStu = numOfStu;
	}
	public Scanner getSc() {
		return sc;
	}
	public void setSc(Scanner sc) {
		this.sc = sc;
	}
	
	
}

package homework;

import java.util.Scanner;
public class HomeWork {
	public static void main(String[] args) {
		//创建一个 Scanner 类对象
		Scanner sc = new Scanner(System.in);

		//存放添加的学生数量
		int addStuNum = 0;
		
		//创建一个 Student 类的数组,用于存放 Student 类的对象
		Student[] allStu = new Student[100];
		
		//给数组5个初始数据
		allStu[0] = new Student("001","张三",11,'男',93.0F);
		allStu[1] = new Student("002","李四",11,'女',95.0F);
		allStu[2] = new Student("003","王五",11,'男',97.0F);
		allStu[3] = new Student("004","刘某",11,'女',90.0F);
		allStu[4] = new Student("005","唐六",11,'男',83.0F);
		
		//创建一个 ManageStudents 类的对象用于操作学生
		ManageStudents manage = new ManageStudents(allStu,5,sc);
		
		//获取需要录入的学生个数
		System.out.print("请输入需要录入的学生个人:" );
		addStuNum = sc.nextInt();
		sc.nextLine();
		
		for (int i = 0; i < addStuNum; i++) {
			//调用录入学生类对象信息和将学生类对象加到数组中的方法
			System.out.println("第" + (i+1) + "个录入的同学");
			manage.addNewStu(manage.typeInStuInfor(new Student()));
			System.out.println();
		}
		
		System.out.println("-------------------------------------------");
		
		//调用方法展示所有学生的信息
		System.out.println("展示学生信息:");
		manage.showAllStuInfor();
		
		System.out.println("-------------------------------------------");
		
		//调用通过ID找到学生的方法
		System.out.println("查找某一ID的同学");
		Student stu = manage.findStu();
		if (null != stu) {
			System.out.println("通过ID查到的同学是:" + stu.getName());
		}
		
		System.out.println("-------------------------------------------");
		
		//调用方法给所有同学的成绩排序
		System.out.println("成绩排序");
		manage.gradeSort();
		System.out.println("成绩排序后");
		for (int i = 0; i < manage.getNumOfStu(); i++) {
			System.out.println(manage.getAllStu()[i].getName() + "的成绩为:" + manage.getAllStu()[i].getGrade());
		}
		
		System.out.println("-------------------------------------------");
		
		//调用方法删除某ID的同学
		System.out.println("删除某一ID的同学");
		manage.deleteStu();
		
		System.out.println("-------------------------------------------");
		
		//调用方法展示删除某一学生后的所有学生信息
		System.out.println("展示学生信息:");
		manage.showAllStuInfor();
		
		System.out.println("-------------------------------------------");
		
		//调用通过ID找到学生的方法
		System.out.println("查找某一ID的同学");
		Student stu1 = manage.findStu();
		if (null != stu1) {
			System.out.println("通过ID查到的同学是:" + stu1.getName());
		}
		
		System.out.println("-------------------------------------------");
		
		//调用方法删除某ID的同学
		System.out.println("删除某一ID的同学");
		manage.deleteStu();

	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值