【JAVASE开发】JAVA项目(学生管理系统)

简介: 这里很明显存放的是我们的数据,那就 new 一个StudentDataBase,声明学号(stuNo)、姓名(stuName)、班级(stuClass)、性别(stuSex)、年龄(stuSex)、分数(stuScore),有参与无参的构造方法,getter 与 setter 方法、add 方法、print(输出)方法。......

  哈喽~大家好呀,首先感谢大家的支持,从本专栏开始,我们就开始了从零基础到就业实战的篇章了,首先是我们的第一阶段【JAVASE开发】,先来个小项目,练练手。


一、前言

我们先来看看需求

image.png

image.png

再来看看效果

image.png

image.png

image.png

image.pngimage.gif

image.png

我这里采用了 MVC 模式 M(Model 存放数据)、V(Veiw 存放可见视图)、C(Control),

先在 Veiw 层,创建四个界面类——FirstInterface、、SecondInterface、ThirdInterface、FourthInterface,将页面敲上去。

public void FirstInterface() {
        System.out.println("------------------------------------------------------主界面------------------------------------------------------");
        System.out.println("1、查询学生信息");
        System.out.println("2、信息统计");
        System.out.println("3、信息管理");
    }
    public void SecondInterface() {
        System.out.println("------------------查询学生信息界面------------------");
        System.out.println("1、查询全部学生信息");
        System.out.println("2、按学号查询学生信息");
        System.out.println("3、按班级查询学生信息");
        System.out.println("4、按名字模糊查询学生信息");
        System.out.println("5、返回上一界面");
    }
    public void ThirdInterface() {
        System.out.println("------------------信息统计界面------------------");
        System.out.println("1、按班级低到高,成绩高到底排序");
        System.out.println("2、统计每个班的平均分,高到低排序");
        System.out.println("3、统计每个班的最高分,最低分");
        System.out.println("4、返回上一个界面");
    }
    public void FourthInterface() {
        System.out.println("------------------信息管理界面------------------");
        System.out.println("1、添加学生");
        System.out.println("2、修改学生");
        System.out.println("3、删除学生");
        System.out.println("4、返回上一个界面");
    }

image.gif

二、Model 层界面

这里很明显存放的是我们的数据,那就 new 一个StudentDataBase,声明学号(stuNo)、姓名(stuName)、班级(stuClass)、性别(stuSex)、年龄(stuSex)、分数(stuScore),有参与无参的构造方法,getter 与 setter 方法、add 方法、print(输出)方法。

public class StudentDataBase {
    private int stuNo;
    private String stuName;
    private int stuClass;
    private String stuSex;
    private int stuAge;
    private int stuScore;
    public StudentDataBase() {
    }
    public StudentDataBase(int stuNo, String stuName, int stuClass, String stuSex, int stuAge, int stuScore) {
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.stuClass = stuClass;
        this.stuSex = stuSex;
        this.stuAge = stuAge;
        this.stuScore = stuScore;
    }
    public int getStuNo() {
        return stuNo;
    }
    public void setStuNo(int stuNo) {
        this.stuNo = stuNo;
    }
    public String getStuName() {
        return stuName;
    }
    public void setStuName(String stuName) {
        this.stuName = stuName;
    }
    public int getStuClass() {
        return stuClass;
    }
    public void setStuClass(int stuClass) {
        this.stuClass = stuClass;
    }
    public String getStuSex() {
        return stuSex;
    }
    public void setStuSex(String stuSex) {
        this.stuSex = stuSex;
    }
    public int getStuAge() {
        return stuAge;
    }
    public void setStuAge(int stuAge) {
        this.stuAge = stuAge;
    }
    public int getStuScore() {
        return stuScore;
    }
    public void setStuScore(int stuScore) {
        this.stuScore = stuScore;
    }
    public void add(int stuNo, String stuName, int stuClass, String stuSex, int stuAge, int stuScore) {
        this.stuNo = stuNo;
        this.stuName = stuName;
        this.stuClass = stuClass;
        this.stuSex = stuSex;
        this.stuAge = stuAge;
        this.stuScore = stuScore;
    }
    public void print() {
        System.out.println("StudentDataBase{" + "stuNo=" + stuNo + ", stuName='" + stuName + '\'' + ", stuClass='" + stuClass + "班" + '\'' + ", stuSex='" + stuSex + '\'' + ", stuAge=" + stuAge + ", stuScore=" + stuScore + '}');
    }
}

image.gif

三、Control 层界面

首先我们模拟数据库肯定要添加,要添加就要有添加方法,在 Veiw 层建一个 Operate 类,里面存放我们的操作方法,一个 AddStudentInformation ,在上面的需求看到的是学号要是唯一的,那么就要在新建这里加上去重了,性别那里只能是两种情况(男或女),成功之后就遍历输出,失败就重新再来。

// 添加学生信息
    int flag = 0; // 去重的开关
    int[] deduplication = new int[100]; // 去重数组,存放学号,只能出现一次
    public void AddStudentInformation(int stuNo, String stuName, int stuClass, String stuSex, int stuAge, int stuScore, ArrayList<StudentDataBase> arrayList) {
        StudentDataBase studentDataBase = new StudentDataBase();
        studentDataBase.setStuNo(stuNo);
        studentDataBase.setStuName(stuName);
        studentDataBase.setStuClass(stuClass);
        studentDataBase.setStuSex(stuSex);
        studentDataBase.setStuAge(stuAge);
        studentDataBase.setStuScore(stuScore);
        if (Objects.equals(studentDataBase.getStuSex(), "男") || Objects.equals(studentDataBase.getStuSex(), "女")){
            deduplication[arrayList.size()] = studentDataBase.getStuNo();
            for (int i = 0; i < arrayList.size(); i++) {
                if (deduplication[i] == stuNo){
                    flag ++;
                }
            }
            if (flag <= 0){
                arrayList.add(studentDataBase);
                System.out.println("添加成功,现在的信息是:");
                PrintStudentInformation(arrayList);
            }else {
                System.out.println("添加失败,学号重复,请重新输入:");
                flag --;
            }
        }else {
            System.out.println("性别有误,请重新输入!");
        }
    }

image.gif

这里说到遍历输出了,那么我们看到有个需求查询所有学生信息,这里就要来一个方法了——PrintStudentInformation。

public static void PrintStudentInformation(ArrayList<StudentDataBase> arrayList) {
        if (arrayList.size() == 0) {
            System.out.println("目前数据库为空,暂时没有数据呢,请添加数据!");
        }
        for (int i = 0; i < arrayList.size(); i++) {
            StudentDataBase s = arrayList.get(i);
            System.out.println("学生信息{" + "学号:" + s.getStuNo() + ", 姓名:'" + s.getStuName() +
                    '\'' + ", 班级:'" + s.getStuClass() + '班' + '\'' + ", 性别:'" + s.getStuSex() + '\'' + ", 年龄:"
                    + s.getStuAge() + ", 分数:" + s.getStuScore() + '}');
        }
    }

image.gif

按学号查询,for 循环在里面来判断下输入的学号是否与模拟的数据库里面的学号是否相等,相等就输出。

public static void QueryStuNo(ArrayList<StudentDataBase> arrayList, int stuNo) {
        if (arrayList.size() == 0) {
            System.out.println("目前数据库为空,暂时没有数据呢,请添加数据!");
        }
        for (int i = 0; i < arrayList.size(); i++) {
            StudentDataBase s = arrayList.get(i);
            if (s.getStuNo() == stuNo) {
                System.out.println("学生信息{" + "学号:" + s.getStuNo() + ", 姓名:'" + s.getStuName() +
                        '\'' + ", 班级:'" + s.getStuClass() + '\'' + ", 性别:'" + s.getStuSex() + '\'' + ", 年龄:"
                        + s.getStuAge() + ", 分数:" + s.getStuScore() + '}');
            }
        }
    }

image.gif

这里先讲删除,删除也一样,找到学号了(因为学号是唯一的),就删掉去(调用remove)

public static void DeleteStudentInformation(int stuNo, ArrayList<StudentDataBase> arrayList) {
        if (arrayList.size() == 0) {
            System.out.println("目前数据库为空,暂时没有数据呢,请添加数据!");
        }
        for (int i = 0; i < arrayList.size(); i++) {
            StudentDataBase s = arrayList.get(i);
            if (arrayList.get(i).getStuNo() == stuNo){
                arrayList.remove(s);
            }
        }
    }

image.gif

然后是修改功能,思路:先查询学号,根据学号来修改信息,查到学号之后先删除这条信息,然后在调用添加,就能实现修改效果。

public static void ReviseStudentInformation(int stuNo, String stuName, int stuClass, String stuSex, int stuAge, int stuScore, ArrayList<StudentDataBase> arrayList) {
        if (arrayList.size() == 0) {
            System.out.println("目前数据库为空,暂时没有数据呢,请添加数据!");
        }
        StudentDataBase studentDataBase = new StudentDataBase();
        studentDataBase.setStuNo(stuNo);
        studentDataBase.setStuName(stuName);
        studentDataBase.setStuClass(stuClass);
        studentDataBase.setStuSex(stuSex);
        studentDataBase.setStuAge(stuAge);
        studentDataBase.setStuScore(stuScore);
        DeleteStudentInformation(stuNo,arrayList);
        arrayList.add(studentDataBase);
//        QueryStuNo(arrayList,stuNo);
        System.out.println("修改之后的数据:");
        PrintStudentInformation(arrayList);
    }

image.gif

后面的各个功能原理是一样的,像查询班级学生信息,就是当输入的信息与模拟数据库的信息相等时,就输出,模糊查询判断输入的是否被包含在模拟数据库的信息,包含就输出。这里就不一一显示了。

四、Main 总控制台

像输入的数据要不停的输进去那么就要使用到死循环了,while 里面加上 true,想退出加上个 break。

image.png


相关文章
|
1天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
19 5
|
1天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
18 4
|
1天前
|
SQL Java API
|
1天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
10 2
|
15天前
|
监控 Java
java异步判断线程池所有任务是否执行完
通过上述步骤,您可以在Java中实现异步判断线程池所有任务是否执行完毕。这种方法使用了 `CompletionService`来监控任务的完成情况,并通过一个独立线程异步检查所有任务的执行状态。这种设计不仅简洁高效,还能确保在大量任务处理时程序的稳定性和可维护性。希望本文能为您的开发工作提供实用的指导和帮助。
72 17
|
26天前
|
Java
Java—多线程实现生产消费者
本文介绍了多线程实现生产消费者模式的三个版本。Version1包含四个类:`Producer`(生产者)、`Consumer`(消费者)、`Resource`(公共资源)和`TestMain`(测试类)。通过`synchronized`和`wait/notify`机制控制线程同步,但存在多个生产者或消费者时可能出现多次生产和消费的问题。 Version2将`if`改为`while`,解决了多次生产和消费的问题,但仍可能因`notify()`随机唤醒线程而导致死锁。因此,引入了`notifyAll()`来唤醒所有等待线程,但这会带来性能问题。
Java—多线程实现生产消费者
|
11天前
|
缓存 安全 算法
Java 多线程 面试题
Java 多线程 相关基础面试题
|
28天前
|
安全 Java Kotlin
Java多线程——synchronized、volatile 保障可见性
Java多线程中,`synchronized` 和 `volatile` 关键字用于保障可见性。`synchronized` 保证原子性、可见性和有序性,通过锁机制确保线程安全;`volatile` 仅保证可见性和有序性,不保证原子性。代码示例展示了如何使用 `synchronized` 和 `volatile` 解决主线程无法感知子线程修改共享变量的问题。总结:`volatile` 确保不同线程对共享变量操作的可见性,使一个线程修改后,其他线程能立即看到最新值。
|
28天前
|
消息中间件 缓存 安全
Java多线程是什么
Java多线程简介:本文介绍了Java中常见的线程池类型,包括`newCachedThreadPool`(适用于短期异步任务)、`newFixedThreadPool`(适用于固定数量的长期任务)、`newScheduledThreadPool`(支持定时和周期性任务)以及`newSingleThreadExecutor`(保证任务顺序执行)。同时,文章还讲解了Java中的锁机制,如`synchronized`关键字、CAS操作及其实现方式,并详细描述了可重入锁`ReentrantLock`和读写锁`ReadWriteLock`的工作原理与应用场景。
|
28天前
|
安全 Java 编译器
深入理解Java中synchronized三种使用方式:助您写出线程安全的代码
`synchronized` 是 Java 中的关键字,用于实现线程同步,确保多个线程互斥访问共享资源。它通过内置的监视器锁机制,防止多个线程同时执行被 `synchronized` 修饰的方法或代码块。`synchronized` 可以修饰非静态方法、静态方法和代码块,分别锁定实例对象、类对象或指定的对象。其底层原理基于 JVM 的指令和对象的监视器,JDK 1.6 后引入了偏向锁、轻量级锁等优化措施,提高了性能。
55 3