简易学生管理系统(HashMap)

一、需求

1,用户端采集或者录入或者生成业务数据
2,将业务数据放入集合,按照业务需求,进行数据管理操作
3,将集合的数据放入数据库

难点:怎么遍历HashMap得到键和值

		// 获取 所有的 entry对象  entrySet
        Set<Map.Entry<String,String>> entrySet = map.entrySet();

        // 遍历得到每一个entry对象
        for (Map.Entry<String, String> entry : entrySet) {
           	// 解析 
            String key = entry.getKey();
            String value = entry.getValue();  
            System.out.println(key+"的CP是:"+value);

实现删除功能出现的异常问题

在迭代器进行迭代的时候不能对集合的长度进行改变,否则
会报错:java.util.ConcurrentModificationException
如果单纯的是使用for循环,就没有问题,这个问题只是出现在了迭代器中
演示:
		for (Map.Entry<Integer,Student> entry: entrySet) {
            if(id == entry.getKey()){
                stuMap.remove(id);
                flag = true;
                break; //跳出迭代器循环,防止出现异常
            }
        }

实现修改功能出现的学号问题

				//保存原id
                int temp = id;            
                //还原id
                stuMap.get(entry.getKey()).setStu_id(temp);
                //ID计数器减一
                student.count--;

二、代码

1.学生类

package test0728.demo1;

/**
 * 学生类
 */
public class Student {

    public static int count = 0; //学号计数器
    private int stu_id; //学号
    private String stu_name; //姓名
    private Integer stu_age; //年龄
    private String stu_place; //籍贯
    private Long stu_tel; //电话号码
    private Integer stu_score; //分数

    public Student() {

    }

    public Student(String stu_name, Integer stu_age, String stu_place, Long stu_tel, Integer stu_score) {
        //每产生一个学生对象,学号加一
        count ++;
        stu_id = count;
        this.stu_name = stu_name;
        this.stu_age = stu_age;
        this.stu_place = stu_place;
        this.stu_tel = stu_tel;
        this.stu_score = stu_score;
    }

    public static int getCount() {
        return count;
    }

    public static void setCount(int count) {
        Student.count = count;
    }

    public int getStu_id() {
        return stu_id;
    }

    public void setStu_id(int stu_id) {
        this.stu_id = stu_id;
    }

    public String getStu_name() {
        return stu_name;
    }

    public void setStu_name(String stu_name) {
        this.stu_name = stu_name;
    }

    public Integer getStu_age() {
        return stu_age;
    }

    public void setStu_age(Integer stu_age) {
        this.stu_age = stu_age;
    }

    public String getStu_place() {
        return stu_place;
    }

    public void setStu_place(String stu_place) {
        this.stu_place = stu_place;
    }

    public Long getStu_tel() {
        return stu_tel;
    }

    public void setStu_tel(Long stu_tel) {
        this.stu_tel = stu_tel;
    }

    public Integer getStu_score() {
        return stu_score;
    }

    public void setStu_score(Integer stu_score) {
        this.stu_score = stu_score;
    }

    @Override
    public String toString() {
        return "学号:" + stu_id + " 姓名:" + stu_name + " 年龄:" + stu_age + " 籍贯:" + stu_place + " 电话:" + stu_tel + " 分数:" + stu_score;
    }

    @Override
    public boolean equals(Object obj) {
        if(obj != null && obj instanceof Student) {
            Student stu = (Student)obj;
            if(this.stu_name == stu.getStu_name()) {
                return true;
            }
        }
        return false;
    }

}

2.学生业务类

package test0728.demo1;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

/**
 * 学生业务类
 */
public class StudentService {

    private Map<Integer,Student> stuMap = new HashMap(); //学生集合
    private Set<Map.Entry<Integer,Student>> entrySet = stuMap.entrySet(); //获取所有entry对象(难点)
    private Student student; //学生
    private Scanner sc = new Scanner(System.in); //键盘扫描器
    private boolean flag; //标记

    //录入学员
    public void insert() {
        System.out.println("请输入新增学员姓名:");
        String name = sc.next();
        System.out.println("请输入新增学员年龄:");
        Integer age = sc.nextInt();
        System.out.println("请输入新增学员籍贯:");
        String place = sc.next();
        System.out.println("请输入新增学员电话:");
        Long tel = sc.nextLong();
        System.out.println("请输入新增学员分数:");
        Integer score = sc.nextInt();
        student = new Student(name,age,place,tel,score);
        stuMap.put(student.getStu_id(),student);
        System.out.println("恭喜你,录入学员成功!");
    }

    //删除指定学员(容易出异常)
    public void delete() {
        flag = false;
        System.out.println("请输入要删除的学员的学号:");
        int id = sc.nextInt();
        for (Map.Entry<Integer,Student> entry: entrySet) {
            if(id == entry.getKey()){
                stuMap.remove(id);
                flag = true;
                break; //跳出迭代器循环,防止出现异常
            }
        }
        if(flag) {
            System.out.println("恭喜你,删除学员成功!");
        } else {
            System.out.println("对不起,没有找到要删除的学员!");
        }
    }

    //修改学员信息(按照学号,注意学号问题)
    public void update() {
        flag = false;
        System.out.println("请输入要修改的学员的学号:");
        int id = sc.nextInt();
        for (Map.Entry<Integer,Student> entry: entrySet) {
            if(id == entry.getKey()){
                //保存原id
                int temp = id;
                System.out.println("请输入新增学员姓名:");
                String name = sc.next();
                System.out.println("请输入新增学员年龄:");
                Integer age = sc.nextInt();
                System.out.println("请输入新增学员籍贯:");
                String place = sc.next();
                System.out.println("请输入新增学员电话:");
                Long tel = sc.nextLong();
                System.out.println("请输入新增学员分数:");
                Integer score = sc.nextInt();
                student = new Student(name,age,place,tel,score);
                stuMap.replace(entry.getKey(),student);
                //还原id
                stuMap.get(entry.getKey()).setStu_id(temp);
                //ID计数器减一
                student.count--;
                flag = true;
                break;
            }
        }
        if(flag) {
            System.out.println("恭喜你,修改学员成功!");
        } else {
            System.out.println("对不起,没有找到要修改的学员!");
        }
    }

    //查询学员信息(按照学号)
    public void select() {
        flag = false;
        System.out.println("请输入需要查询的学员学号:");
        int id = sc.nextInt();
        for (Map.Entry<Integer,Student> entry: entrySet) {
            if(id == entry.getKey()){
                System.out.println("恭喜你,查询学员成功!");
                System.out.println(stuMap.get(entry.getKey()));
                flag = true;
                break;
            }
        }
        if(!flag) {
            System.out.println("对不起,没有找到要查询的学员!");
        }

    }

    //打印所有学员信息
    public void printStudent() {
        System.out.println("恭喜你,打印所有学员成功!");
        for (Map.Entry<Integer,Student> entry: entrySet) {
                System.out.println(stuMap.get(entry.getKey()));
        }
    }

    //学生管理系统菜单
    public void menu() {
        StudentService stuService = new StudentService();
        System.out.println("欢迎来到学生管理系统!");

        while (true) {
            System.out.println();
            System.out.println("1.增 2.删 3.改 4.查 5.打印 (其他指令.退出系统)");
            System.out.println("请输入你的指令:");

            String order = sc.next(); //指令
            switch(order) {
                case "1":
                    stuService.insert();
                    break;
                case "2":
                    stuService.delete();
                    break;
                case "3":
                    stuService.update();
                    break;
                case "4":
                    stuService.select();
                    break;
                case "5":
                    stuService.printStudent();
                    break;
                default:
                    System.out.println("退出系统成功,期待你下次使用!");
                    return;
            }
        }
    }
}

3.测试类

package test0728.demo1;

/*
 * 测试类
 * 作业:
 * 1,用户端采集或者录入或者生成业务数据
 * 2,将业务数据放入集合,按照业务需求,进行数据管理操作
 * 3,将集合的数据放入数据库
 *
 * 学院管理系统完成 .
 */
public class Test {

    public static void main(String[] args) {

        StudentService stuService = new StudentService();
        stuService.menu();
    }

}

三、运行结果

欢迎来到学生管理系统!

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
1
请输入新增学员姓名:
qy
请输入新增学员年龄:
19
请输入新增学员籍贯:
长沙
请输入新增学员电话:
152
请输入新增学员分数:
99
恭喜你,录入学员成功!

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
1
请输入新增学员姓名:
qy
请输入新增学员年龄:
19
请输入新增学员籍贯:
长沙
请输入新增学员电话:
152
请输入新增学员分数:
99
恭喜你,录入学员成功!

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
1
请输入新增学员姓名:
QY
请输入新增学员年龄:
20
请输入新增学员籍贯:
邵阳
请输入新增学员电话:
188
请输入新增学员分数:
90
恭喜你,录入学员成功!

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
5
恭喜你,打印所有学员成功!
学号:1 姓名:qy 年龄:19 籍贯:长沙 电话:152 分数:99
学号:2 姓名:qy 年龄:19 籍贯:长沙 电话:152 分数:99
学号:3 姓名:QY 年龄:20 籍贯:邵阳 电话:188 分数:90

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
2
请输入要删除的学员的学号:
2
恭喜你,删除学员成功!

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
5
恭喜你,打印所有学员成功!
学号:1 姓名:qy 年龄:19 籍贯:长沙 电话:152 分数:99
学号:3 姓名:QY 年龄:20 籍贯:邵阳 电话:188 分数:90

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
3
请输入要修改的学员的学号:
3
请输入新增学员姓名:
QY
请输入新增学员年龄:
19
请输入新增学员籍贯:
长沙
请输入新增学员电话:
188
请输入新增学员分数:
100
恭喜你,修改学员成功!

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
5
恭喜你,打印所有学员成功!
学号:1 姓名:qy 年龄:19 籍贯:长沙 电话:152 分数:99
学号:3 姓名:QY 年龄:19 籍贯:长沙 电话:188 分数:100

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
4
请输入需要查询的学员学号:
3
恭喜你,查询学员成功!
学号:3 姓名:QY 年龄:19 籍贯:长沙 电话:188 分数:100

1.2.3.4.5.打印 (其他指令.退出系统)
请输入你的指令:
exit
退出系统成功,期待你下次使用!

你可能感兴趣的:(Java练习题)