JavaSE学生管理系统

一、详细需求

学生管理系统的实案例需求
    针对目前我们的所学内容,完成一个综合案例:学生管理系统。该系统主要功能如下:
    添加学生:通过键盘录入学生信息,添加到集合中
    删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
    修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
    查看学生:将集合中的学生对象信息进行展示
    退出系统:结束程序

- 实现步骤

1. 定义学生类,包含以下成员变量
    private String sid; // 学生id
    private String name; // 学生姓名
    private String age; // 学生年龄
    private String address; // 学生所在地

2. 学生管理系统主界面的搭建步骤
    2.1 用输出语句完成主界面的编写
        ============欢迎来到黑马程序员学生管理系统===============
        1 添加学生
        2 删除学生
        3 修改学生
        4 查询学生
        5 退出系统
    2.2 用Scanner实现键盘输入
    2.3 用switch语句完成选择的功能
    2.4 用循环完成功能结束后再次回到主界面

3. 学生管理系统的添加学生功能实现步骤
    3.1 定义一个集合,用于保存学生信息
    3.2 定义一个add方法, 方法内完成添加学生的功能
        ①创建学生对象
        ②键盘录入学生信息,给学生对象赋值
        ③将学生对象添加到集合中
        ④提示添加成功信息
    3.3 在添加学生的选项里调用添加学生的方法

4. 学生管理系统的查看学生功能实现步骤
    4.1 定义一个show方法
    4.2 方法内遍历集合,将学生信息进行输出
    4.3 在查看所有学生选项里调用查看学生方法

5. 学生管理系统的删除学生功能实现步骤
    5.1 定义一个delete方法
    5.2 方法中从键盘上接收要删除学生的学号
    5.3 遍历集合,获取每个学生对象
    5.4 使用学生对象的学号和录入的要删除的学号进行比较,如果相同,则将当前学生对象从集合中删除
    5.5 在删除学生选项里调用删除学生的方法

6. 学生管理系统的修改学生功能实现步骤
    6.1 定义一个update方法
    6.2 方法中从键盘上接收要修改学生的学号,并根据学号查询到要修改的学生
    6.3 通过键盘录入学生对象所需的信息,赋值到对象中
    6.4 在修改学生选项里调用修改学生的方法

7. 退出系统
    使用System.exit(0);退出JVM

二、管理员登录注册的需求

升级版需求
    为学生管理系统书写一个注册和登陆的功能
    用户只有注册之后才能称为管理员进行登录
    只有用户登录成功之后,才能进入到学生管理系统中进行增删改查操作

登录界面分析:
    System.out.println("欢迎来到学生管理系统");
    System.out.println("请选择操作:1登录 2注册");

- 实现步骤
1. 定义用户类,包含以下成员变量
    private String username;//用户名
    private String password;//密码

2. 用户注册和登录界面
    2.1 用输出语句完成主界面的编写
        ============欢迎来到学生管理系统===============
        ===========请选择操作:1登录 2注册==============
    2.2 用Scanner实现键盘输入
    2.3 用switch语句完成选择的功能
    2.4 用循环完成功能结束后再次回到登录

3. 注册功能:
     3.1 定义一个register方法
     3.2 在方法中使用键盘接收用户输入的用户名和密码
     3.3 如果用户名已经被注册了,需要提示用户重新输入
     3.4 如果用户名和密码都没问题,添加到用户列表
     3.5 注册成功后给出提示,然后退到注册登录界面


4. 登录功能:
     4.1 定义一个login方法
     4.2 在方法中使用键盘接收用户输入的用户名和密码
     4.3 如果用户名未注册,直接结束方法,并提示:用户名未注册,请先注册
     4.4 如果用户名没问题,再判断用户名和密码是否正确,有3次机会
     4.5 如果都没问题,进入学生管理主界面



三、分包


把所有东西放在同一个包中,分包就没有意义了,所以需要继续细分。

分包的逻辑:
实体类
业务类(其实就是操作类)

有多种分包规则,可以按照模块来分,比如把所有的学生相关的类放在一起,把所有管理员相关的类放在一起。

在这里插入图片描述
但是这种分法存在问题,当模块很多的时候,会出现很多包。

所以更倾向于横向划分,把实体类,业务类(操作类)分别放一起。
在这里插入图片描述
如此划分的好处:
之后若再有比如Teacher实体类和Teacher的业务类(操作类),只需要在实体类包下和业务类包下分别新建即可。

实体类包名一般叫domain,业务类包名一般叫service。

四、具体实现

1.domain包下

1.1Student实体类

package com.timi.domain;

public class Student {
    private String id;//学号
    private String name;//姓名
    private String age;//年龄
    private String address;//地址

    public Student() {}

    public Student(String id, String name, String age, String address) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    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 String getAge() {
        return age;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}

1.2Admin实体类

package com.timi.domain;

public class Admin {
    private String username;
    private String password;

    public Admin() {
    }

    public Admin(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

2.service包下

2.1StudentManage业务类(操作类)

package com.timi.service;

import com.timi.domain.Student;

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class StudentManage {
    ArrayList<Student> stuList = new ArrayList<>();

    Scanner scanner = new Scanner(System.in);

    public void start() {
        stuList.add(new Student("666666","林允儿","20","首尔"));
        stuList.add(new Student("888888","曾婉之","6","中国"));
        System.out.println("****欢迎进入学生管理系统****");
        while (true) {
            System.out.println("1.添加学生");
            System.out.println("2.删除学生");
            System.out.println("3.修改学生");
            System.out.println("4.查询学生");
            System.out.println("5.退出系统");
            System.out.println("请输入您要进行的操作:");
            String command = scanner.next();
            switch (command) {
                case "1":
                    addStudent();
                    break;
                case "2":
                    deleteStudent();
                    break;
                case "3":
                    updateStudent();
                    break;
                case "4":
                    queryStudent();
                    break;
                case "5":
                    System.err.println("感谢使用,即将退出系统,请稍后...");
                    System.exit(0);
                default:
                    System.out.println("您输入的指令有误,请重新键入");
                    break;
            }
        }

    }

    private void addStudent() {
        Student student = new Student();
        student.setId(genId());
        System.out.println("请输入学生姓名:");
        String name = scanner.next();
        System.out.println("请输入学生年龄:");
        String age = scanner.next();
        System.out.println("请输入学生住址:");
        String address = scanner.next();
        student.setName(name);
        student.setAge(age);
        student.setAddress(address);

        stuList.add(student);
        System.out.println("添加"+student.getName()+"同学的信息成功");
    }

    private String genId() {
        Random random = new Random();
        while (true) {
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < 6; i++) {
                sb.append(random.nextInt(10));
            }
            String id = sb.toString();
            if (findById(id) == null) {
                return id;
            }
        }

    }

    private Student findById(String id) {
        for (int i = 0; i < stuList.size(); i++) {
            Student student = stuList.get(i);
            if (student.getId().equals(id)) {
                return student;
            }
        }
        return null;
    }

    private void deleteStudent() {
        while (true) {
            System.out.println("键入要删除学生的学号:");
            String id = scanner.next();
            Student student = findById(id);
            if (student != null) {
                stuList.remove(student);
                System.out.println("删除"+student.getName()+"同学信息成功");
                return;
            }
            System.out.println("输入的学号在系统中不存在,请重新输入");
        }

    }

    private void updateStudent() {
        while (true) {
            System.out.println("键入要修改学生的学号:");
            String id = scanner.next();
            Student student = findById(id);
            if (student != null) {
                System.out.println("请输入修改后的学生姓名:");
                String name = scanner.next();
                System.out.println("请输入修改后的学生年龄:");
                String age = scanner.next();
                System.out.println("请输入修改后的学生住址:");
                String address = scanner.next();
                student.setName(name);
                student.setAge(age);
                student.setAddress(address);
                System.out.println("修改"+student.getName()+"同学的信息成功");
                return;
            }
            System.out.println("输入的学号在系统中不存在,请重新输入");
        }
    }

    private void queryStudent() {
        for (int i = 0; i < stuList.size(); i++) {
            System.err.println("学号:" + stuList.get(i).getId()
                    + ",姓名:" + stuList.get(i).getName()
                    + ",年龄:" + stuList.get(i).getAge()
                    + ",住址:" + stuList.get(i).getAddress());
        }
    }

}

2.2AdminOperator业务类

package com.timi.service;

import com.timi.domain.Admin;

import java.util.ArrayList;
import java.util.Scanner;

public class AdminOperator {
    ArrayList<Admin> adminList = new ArrayList<>();

    Scanner scanner = new Scanner(System.in);

    public void start() {
        System.out.println("****欢迎进入学生管理系统****");
        while (true) {
            System.out.println("1.登录");
            System.out.println("2.注册");
            System.out.println("请键入您要进行的操作:");
            String command = scanner.next();
            switch (command) {
                case "1":
                    login();
                    break;
                case "2":
                    register();
                    break;
                default:
                    System.out.println("输入指令有误,请重新输入");
                    break;
            }
        }

    }

    private void login() {

        System.out.println("请输入用户名:");
        String username = scanner.next();
        Admin admin = findByUserName(username);
        if (admin == null) {
            System.out.println("当前用户在系统中未注册,请先注册!");
            return;
        }
        int count = 3;
        while (count > 0) {
            System.out.println("请输入密码:");
            String password = scanner.next();
            if (!admin.getPassword().equals(password)) {
                count--;
                System.out.println("密码输入错误,当前您还有"+count+"次机会");
            }else{
                new StudentManage().start();
            }
        }


    }


    private void register() {
        Admin admin = new Admin();
        while (true) {
            System.out.println("请输入用户名:");
            String username = scanner.next();
            Admin adminFromList = findByUserName(username);
            if (adminFromList != null) {
                System.out.println("当前用户名已被占用,请重新输入");
            } else {
                admin.setUsername(username);
                break;
            }
        }

        System.out.println("请输入密码:");
        String password = scanner.next();
        admin.setPassword(password);
        adminList.add(admin);
        System.out.println("恭喜,管理员用户"+admin.getUsername()+"注册成功");
    }

    private Admin findByUserName(String username) {
        for (int i = 0; i < adminList.size(); i++) {
            Admin admin = adminList.get(i);
            if (admin.getUsername().equals(username)) {
                return admin;
            }
        }
        return null;
    }

}

3.test包下

SystemTest测试类

package com.timi.test;

import com.timi.service.AdminOperator;

public class SystemTest {
    public static void main(String[] args) {
        AdminOperator adminOperator = new AdminOperator();
        adminOperator.start();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你小汁完了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值