巨简单的学生管理系统用于上课作业(数组,面向对象)

下面是学生管理系统的细节

学生信息管理系统
	1, 定义一个Student学生类,拥有以下属性
			编号id(随机生成0-1a-zA-Z,必须唯一,5位)
			姓名name
			性别sex
			年龄age
	2, 定义一个学生StudentDao操作类.有以下方法:
			页面方法  	  ui()
			添加学生信息  add()
			删除学生信息  delete()
			修改学生信息  update()
			根据编号查询学生信息  selectById()
			根据姓名查询学生信息  selectByName()
			根据年龄范围查询学生信息  selectByAge()
			查询学生信息  selectAll()
			
		定义全局的学生信息集合:
			Student[] students = new Student[10];
			
	3,  效果 [ 无限循环进行 ]
		*******************
		 学生信息管理系统
		*******************
		  1- 添加学生信息
		  2- 修改学生信息
		  3- 删除学生信息
		  4- 根据编号查询学生信息
		  5- 根据姓名模糊查询学生信息
		  6- 根据年龄范围查询学生信息
		  7- 查询所有学生信息
		  8- 退出系统
		*******************
		请输入你的选择:
		  1 ---> add()--->控制台收集学生信息,把信息组成对象,放入到集合中 【学号要唯一】
		  2 ---> update() --> 根据编号来来重新从控制台中输入新的姓名,性别,年龄,进行修改
		  3 ---> delete() --> 从控制台输入你要删除的学生的编号,遍历集合把该编号的对应的学生信息从集合中删除
		  4 ---> selectById() --> 从控制台输入你要查询的学生编号,根据学号查询,存在则打印,反之则查无此人
		  5 ---> selectByName()() -->从控制台输入你要查询的学生姓名的关键字,根据姓名查询,存在则打印,反之则查无此人【contains()6 ---> selectByAge() -->从控制台输入你要查询的年龄的最小值和最大值,根据年龄范围查询,存在则打印,反之则查无此人
		  7 ---> select() -->遍历学生信息集合,打印信息
		  8 ---> 提示是否退出系统
		  ...........
		  
		  注意: 
			删除和修改前必须先根据编号查询进行数据的预览    
			删除前要提示信息【确定删除吗(Y/N)?】
			退出前要提示信息【确定退出系统吗(Y/N)?】

Student类


import java.util.Random;

public class Student {
    private String Id;
    private String name;
    private String sex;
    private int age;
    private static  Random r=new Random();

    public Student() {
    }

    public Student(String name, String sex, int age) {
        this.Id=setId();
        this.name = name;
        this.sex = sex;
        this.age = age;
    }


    public String getId() {
        return Id;
    }

    private String setId() {
        Id="";
        int a=r.nextInt(3);
        char b;
        for (int i = 0; i < 5; i++) {
            switch (a){
                case 0:
                    b=(char)(r.nextInt(10)+48);
                    Id+=b;
                    break;
                case 1:
                    b=(char)(r.nextInt(26)+65);
                    Id+=b;
                    break;
                case 2:
                    b=(char)(r.nextInt(26)+97);
                    Id+=b;
                    break;
            }
        }
        return Id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String toString() {
        return "Student{Id = " + Id + ", name = " + name + ", sex = " + sex + ", age = " + age + "}";
    }
}

StudentDao操作类

import java.util.Scanner;

public class StudentDao {
    private static int emptyIndex;
    private static int indexs;
    private StudentDao(){
    }
    private static Scanner sc=new Scanner(System.in);

    //页面方法  	  ui()
    public static void  ui(){
        System.out.println("*******************");
        System.out.println("学生信息管理系统");
        System.out.println("*******************");
        System.out.println("1- 添加学生信息\n" +
                "2- 修改学生信息\n" +
                "3- 删除学生信息\n" +
                "4- 根据编号查询学生信息\n" +
                "5- 根据姓名模糊查询学生信息\n" +
                "6- 根据年龄范围查询学生信息\n" +
                "7- 查询所有学生信息\n" +
                "8- 退出系统\n");
        System.out.println("*******************");
        System.out.print("请输入你的选择:");
    }

    //添加学生信息
    //控制台收集学生信息,把信息组成对象,放入到集合中 【学号要唯一】
    public static void  add(Student[] students){
        // 检查数组是否已满
        emptyIndex=selectNull(students);
        if (emptyIndex == -1) {
            System.out.println("学生数组已满,无法添加新学生。");
            return;
        }
        Student student=reStudent(students);
        students[emptyIndex]=student;
    }

    //删除学生信息
    //从控制台输入你要删除的学生的编号,遍历集合把该编号的对应的学生信息从集合中删除
    public static void  delete(Student[] students){

        System.out.println("请输入要删除学生的编号ID");
        String Id=sc.next();
        //查找并返回下标
        int index = judgeID(students, Id);
        if(index==-1){
            System.out.println("删除失败");
            return;
        }
        System.out.println(students[index]);
        while (true){
            System.out.println("确定删除吗(Y/N)?");
            String s=sc.next();
            if(s.equals("Y")){
                break;
            } else if (s.equals("N")) {
                return;
            }else{
                System.out.println("无效输入,请输入 Y 或 N");
            }
        }
       //遍历到空字符串
        indexs=selectIndex(students);
        for (int i = index; i < indexs-1; i++) {
            students[i]=students[i+1];
        }
        students[indexs-1]=null;
    }

    //修改学生信息
    //根据编号来来重新从控制台中输入新的姓名,性别,年龄,进行修改
    public static void  update(Student[] students){
        System.out.println("请输入要修改学生的编号ID");
        String Id=sc.next();
        int index = judgeID(students, Id);
        if(index==-1){
            System.out.println("修改失败");
            return;
        }
        System.out.println(students[index]);
        Student s=reStudent(students);
        students[index].setName(s.getName());
        students[index].setAge(s.getAge());
        students[index].setSex(s.getSex());
    }

    //根据编号查询学生信息
    //从控制台输入你要查询的学生编号,根据学号查询,存在则打印,反之则查无此人
    public static void  selectById(Student[] students){
        System.out.println("请输入要查询学生的编号ID");
        String Id=sc.next();
        int index=judgeID(students,Id);
        if(index==-1){
            System.out.println("查询失败");
        }else{
            System.out.println(students[index]);
        }
    }

    //根据姓名查询学生信息
    //从控制台输入你要查询的学生姓名的关键字,根据姓名查询,存在则打印,反之则查无此人【contains()】
    public static void  selectByName(Student[] students){
        System.out.println("请输入要查询学生姓名的关键字");
        String name=sc.next();
        indexs=selectIndex(students);
        for (int i = 0; i < indexs; i++) {
            if(students[i].getName().contains(name)){
                System.out.println(students[i]);
            }
        }
    }

    //根据年龄范围查询学生信息
    //从控制台输入你要查询的年龄的最小值和最大值,根据年龄范围查询,存在则打印,反之则查无此人
    public static void  selectByAge(Student[] students){
        int min=ReturnInt("小");
        int max= 0;
        while (true) {
            max = ReturnInt("大");
            if(max>=min){
                break;
            }else {
                System.out.println("请保证最大年龄大于等于最小年龄");
            }
        }
        indexs=selectIndex(students);
        for (int i = 0; i < indexs; i++) {
           if(students[i].getAge()>=min&&students[i].getAge()<=max){
               System.out.println(students[i]);
           }
        }
    }


    //查询学生信息
    //遍历学生信息集合,打印信息
    public static void  selectAll(Student[] students) {
        indexs=selectIndex(students);
        if (indexs==0){
            System.out.println("暂无学生信息,请录入学生信息");
            return;
        }
        for (int i = 0; i < indexs; i++) {
            System.out.println(students[i]);
        }
    }

    //遍历数组找到空指针地址,如果找不到则为-1
    private static int selectNull(Student[] students){
        emptyIndex = -1;
        for (int i = 0; i < students.length; i++) {
            if (students[i] == null) {
                emptyIndex = i;
                break;
            }
        }
        return emptyIndex;
    }

    //查询专用长度
    private static int selectIndex(Student[] students){
        indexs=selectNull(students);
        if(indexs==-1){
            indexs=students.length;
        }
        return indexs;
    }

    //判断UUid是否一样,同时也可以查询uuid的学生下标
    //返回-1意味着找不到
    private static int judgeID(Student[] students,String Id){
        indexs=selectIndex(students);
        for (int i = 0; i < indexs; i++) {
           if(students[i].getId().equals(Id)){
               return i;
           }
        }
        return -1;
    }

    //输入判断条件
    private static Student reStudent(Student[] students){
        System.out.print("请输入姓名");
        String name=sc.next();
        String sex;
        int age;
        while (true) {
            System.out.print("请输入性别:(男/女)");
            sex=sc.next();
            if(sex.equals("男")||sex.equals("女")){
                break;
            }else{
                System.out.println("请输入合法的性别:(男/女)");
            }
        }
        while (true) {
            try {
                System.out.print("请输入年龄");
                age=sc.nextInt();
                if(age>0&&age<150){
                    break;
                }else{
                    System.out.println("请输入合法的年龄:");
                }
            } catch (Exception e) {
                System.out.println("输入无效字符");
                sc.nextLine();
            }
        }
        Student student=new Student(name,sex,age);
        int i = judgeID(students, student.getId());
        while(i!=-1){
            student=new Student(name,sex,age);
            i = judgeID(students, student.getId());
        }
        return student;
    }

    //判断年龄合法并防止键盘录入字符
    private static int ReturnInt(String s){
        int x;
        while (true) {
            try {
                System.out.print("请输入要查询学生年龄的最"+s+"值:");
                x=sc.nextInt();
                if(x>=0&&x<=150){
                    break;
                }else {
                    System.out.println("请输入合法年龄");
                }
            } catch (Exception e) {
                System.out.println("输入无效字符");
                sc.nextLine();
            }
        }
        return x;
    }
}

Test类

package Day0821;

import java.util.Scanner;

public class Test {

    public static void main(String[] args) {
        Student[] students = new Student[10];
        students[0]=new Student("小白","女",46);
        students[1]=new Student("小率","女",11);
        students[2]=new Student("红花白","女",15);
        students[3]=new Student("版本白","女",16);
        repeat(students);
    }
    //键盘录入对象
    static Scanner sc=new Scanner(System.in);

    //选择方法
    private static boolean elect(int choice,Student[] students) {
        switch (choice){
            case 1:
                StudentDao.add(students);
                break;
            case 2:
                StudentDao.update(students);
                break;
            case 3:
                StudentDao.delete(students);
                break;
            case 4:
                StudentDao.selectById(students);
                break;
            case 5:
                StudentDao.selectByName(students);
                break;
            case 6:
                StudentDao.selectByAge(students);
                break;
            case 7:
                StudentDao.selectAll(students);
                break;
            case 8:
               while (true){
                   System.out.println("确定退出系统吗(Y/N)?");
                   String s=sc.next();
                   if(s.equals("Y")){
                       return false;
                   } else if (s.equals("N")) {
                       break;
                   }else{
                       System.out.println("无效输入,请输入 Y 或 N");
                   }
               }
                break;
            default:
                System.out.println("请输入正确的选择");
        }
        return true;
    }

    //循环整个结构
    private static void repeat(Student[] students) {
        boolean a=true;
        int choice;
        while(a){
            StudentDao.ui();
            try {
                choice=sc.nextInt();
                a=elect(choice,students);
            } catch (Exception e) {
                System.out.println("输入无效字符");
                // 清除输入缓冲
                sc.nextLine();
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值