【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


相关文章
|
3天前
|
Java Android开发
Eclipse 创建 Java 项目
Eclipse 创建 Java 项目
18 4
|
8天前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
21 4
|
8天前
|
SQL Java 数据库连接
从理论到实践:Hibernate与JPA在Java项目中的实际应用
本文介绍了Java持久层框架Hibernate和JPA的基本概念及其在具体项目中的应用。通过一个在线书店系统的实例,展示了如何使用@Entity注解定义实体类、通过Spring Data JPA定义仓库接口、在服务层调用方法进行数据库操作,以及使用JPQL编写自定义查询和管理事务。这些技术不仅简化了数据库操作,还显著提升了开发效率。
21 3
|
10天前
|
缓存 监控 Java
如何运用JAVA开发API接口?
本文详细介绍了如何使用Java开发API接口,涵盖创建、实现、测试和部署接口的关键步骤。同时,讨论了接口的安全性设计和设计原则,帮助开发者构建高效、安全、易于维护的API接口。
32 4
|
12天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
42 3
|
11天前
|
前端开发 Java 数据库
如何实现一个项目,小白做项目-java
本教程涵盖了从数据库到AJAX的多个知识点,并详细介绍了项目实现过程,包括静态页面分析、数据库创建、项目结构搭建、JSP转换及各层代码编写。最后,通过通用分页和优化Servlet来提升代码质量。
29 1
|
10天前
|
安全 Java 测试技术
Java开发必读,谈谈对Spring IOC与AOP的理解
Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
22 0
|
10天前
|
Java API Android开发
kotlin和java开发优缺点
kotlin和java开发优缺点
24 0
WK
|
15天前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
30 0
|
8天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。