Java期末作业-各种系统设计

目录


前言

临近期末,很多同学私信博主问Java项目,在这里给大家分享几个博主手写的java带图形化界面的小demo,供大家参考。

一、学生成绩管理系统

1.界面展示

登陆界面:

 主页面

 

修改学生 

2.主要代码

登录:

package code.student.view;

import code.handler.LoginViewHandler;

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.URL;

public class LoginView extends JFrame{

    JLabel nameLabel = new JLabel("学生成绩管理项目", JLabel.CENTER); // 设置标题为水平居中

    SpringLayout springLayout = new SpringLayout();
    JPanel centerPanel = new JPanel(springLayout); // 设置面板的布局为弹簧布局
    JLabel userNameLabel = new JLabel("用户名:");
    JTextField userTxt = new JTextField();
    JLabel pwdLabel = new JLabel("密  码:");
    JPasswordField pwdField = new JPasswordField();
    JButton loginBtn = new JButton("登录");
    JButton resetBtn = new JButton("重置");
    JLabel register = new JLabel("立即注册");

    // 定义系统托盘
    SystemTray systemTray; // SystemTray类表示桌面的系统托盘
    // 定义托盘对象
    TrayIcon trayIcon; // TrayIcon对象表示可以添加到系统托盘的托盘图标
    LoginViewHandler loginHandler;

    public LoginView() {
        super("学生成绩管理项目"); // 设置项目标题

        loginHandler = new LoginViewHandler(this);
        // 获取内容面板
        // 父类有一个获取ContentPane对象的方法,将获取到的东西赋给contentPane
        Container contentPane = getContentPane();

        // 设置标题字体
        nameLabel.setFont(new Font("华文行楷", Font.PLAIN, 40));
        // 设置宽高
        nameLabel.setPreferredSize(new Dimension(0, 80));

        // 设置中间区域的字体
        Font centerFont = new Font("楷体", Font.PLAIN, 20);
        userNameLabel.setFont(centerFont);
        userTxt.setPreferredSize(new Dimension(200, 30));
        pwdLabel.setFont(centerFont);
        pwdField.setPreferredSize(new Dimension(200, 30));
        loginBtn.setFont(centerFont);
        resetBtn.setFont(centerFont);
        register.setFont(centerFont);
        // 把组件加入面板
        /*
        this.centerPanel.add();
        可以理解成:
        A a = new A();  --> 即JFrame
        ContentPane contentPane = new ContentPane();
        contentPane = a.getContentPane();
        contentPane.add();
         */
        this.centerPanel.add(userNameLabel);
        this.centerPanel.add(userTxt);
        this.centerPanel.add(pwdLabel);
        this.centerPanel.add(pwdField);
        loginBtn.addActionListener(loginHandler);
        this.centerPanel.add(register);
        register.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                int clickCount = e.getClickCount();
                if (clickCount == 1) {
                    // 匿名内部类访问外边的setExtendedState(int state)方法,设置此窗体的状态为普通(即原本的大小)
                    new RegisterView();
                    setVisible(false);
                }
            }
        });
        // 增加按键事件
        loginBtn.addKeyListener(loginHandler);
        this.centerPanel.add(loginBtn);
        resetBtn.addActionListener(loginHandler);
        this.centerPanel.add(resetBtn);

        userTxt.setToolTipText("请输入正确的用户名");
        pwdField.setToolTipText("请输入正确的密码");
        // 弹簧布局
        layoutCenter();

        // 把标题和中间面板添加到内容面板
        contentPane.add(nameLabel, BorderLayout.NORTH);
        contentPane.add(this.centerPanel, BorderLayout.CENTER);
//        contentPane.add(register, BorderLayout.SOUTH);

        // 判断当前系统是否支持系统托盘
        if (SystemTray.isSupported()) {
            // 初始化系统托盘
            systemTray = SystemTray.getSystemTray();
            URL imgUrl = LoginView.class.getClassLoader().getResource("tray.jpg");
            // 初始化托盘对象
            trayIcon = new TrayIcon(new ImageIcon(imgUrl).getImage());
            // 设置托盘图片大小自动缩放
            trayIcon.setImageAutoSize(true);
            // 添加事件,增加最小化时销毁资源
            /*
            void windowIconified(WindowEvent e)窗口从正常状态变为最小化状态时调用
             */
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowIconified(WindowEvent e) {
                    try {
                        // 把自定义的Icon托盘加入到系统托盘中(会抛出异常)
                        systemTray.add(trayIcon);
                    } catch (AWTException e1) {
                        e1.printStackTrace();
                    }
                    // 因为它是匿名内部类,就要LoginView.this.dispose()
                    LoginView.this.dispose();
                }
            });
            // 托盘事件监听(鼠标监听)
            trayIcon.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    // 先获取鼠标点击的次数存入变量中
                    int clickCount = e.getClickCount();
                    if (clickCount == 1) {
                        // 匿名内部类访问外边的setExtendedState(int state)方法,设置此窗体的状态为普通(即原本的大小)
                        LoginView.this.setExtendedState(JFrame.NORMAL);
                    }
                    systemTray.remove(trayIcon);
                    // 因为前面已经销毁这个界面,所以需要重新设置显示界面为true
                    LoginView.this.setVisible(true);
                }
            });
        }
        // 设置loginBtn为默认按钮
        getRootPane().setDefaultButton(loginBtn);
        // 自定义图标
        // getClassLoader()返回该类的类加载器
        // getResource(String name)查找带有给定名称的资源
        // 此处应该有用到注解反射知识
        /* 实际上java的每个类被编译成.class文件的时候,java虚拟机(叫jvm)会自动为这个类生成一个类对象,
           这个对象保存了这个类的所有信息(成员变量,方法,构造器等),
           以后这个类要想实例化(也就是创建类的实例或创建类的对象)那么都要以这个class对象为蓝图(或模版)来创建这个类的实例。
        */
        URL imgUrl = LoginView.class.getClassLoader().getResource("image1.jpg");
        setIconImage(new ImageIcon(imgUrl).getImage());
        /*
         new ImageIcon(imgUrl).getImage()意思:
         先new上一个ImageIcon,在根据指定的 URL 创建一个 ImageIcon
         再由getImage()方法,返回此图标的 Image
         最后由JFrame容器里的setIconImage(Image image)方法,设置要作为此窗口图标显示的图像
         */
        setSize(600, 400);
        setLocationRelativeTo(null); // 设置窗口居中显示
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(false);
        setVisible(true);
    }

    private void layoutCenter() {
        // 布局userNameLabel
        // 尽管 SpringLayout 简单易用,但它还要仿效其他多数布局管理器的行为。
        // 对于某些功能(如 FlowLayout 提供的行断开),需要创建一个 Spring 类的专用子类。
        Spring childWidth = Spring.sum(Spring.sum(Spring.width(userNameLabel),
                Spring.width(userTxt)), Spring.constant(20));
        int offsetX = childWidth.getValue() / 2; // 设置用户名水平方向居中
        springLayout.putConstraint(SpringLayout.WEST, userNameLabel, -offsetX,
                SpringLayout.HORIZONTAL_CENTER, centerPanel);
        // 设置用户名垂直方向居中
        springLayout.putConstraint(SpringLayout.NORTH, userNameLabel, 20, SpringLayout.NORTH, centerPanel);
        /*
        putConstraint(String e1, Component c1, int pad, String e2, Component c2)
        将组件 c1 的边 e1 连接到组件 c2 的边 e2,边与边之间的距离固定。
         */
        // userTxt
        // userTxt的西边与userNameLabel的东边的距离为20
        springLayout.putConstraint(SpringLayout.WEST, userTxt, 20, SpringLayout.EAST, userNameLabel);
        // userTxt的北边与userNameLabel的北边的距离为0
        springLayout.putConstraint(SpringLayout.NORTH, userTxt, 0, SpringLayout.NORTH, userNameLabel);
        // pwdLabel
        // pwdLabel的东边与userNameLabel的东边的距离为0
        springLayout.putConstraint(SpringLayout.EAST, pwdLabel, 0, SpringLayout.EAST, userNameLabel);
        // pwdLabel的北边与userNameLabel的南边的距离为20
        springLayout.putConstraint(SpringLayout.NORTH, pwdLabel, 20, SpringLayout.SOUTH, userNameLabel);
        // pwdField
        // pwdField的西边与pwdLabel的东边的距离为20
        springLayout.putConstraint(SpringLayout.WEST, pwdField, 20, SpringLayout.EAST, pwdLabel);
        // pwdField的北边与pwdLabel的北边的距离为0
        springLayout.putConstraint(SpringLayout.NORTH, pwdField, 0, SpringLayout.NORTH, pwdLabel);
        // loginBtn
        // loginBtn的西边与pwdLabel的西边的距离为50
        springLayout.putConstraint(SpringLayout.WEST, loginBtn, 50, SpringLayout.WEST, pwdLabel);
        // loginBtn的北边与pwdLabel的南边的距离为20
        springLayout.putConstraint(SpringLayout.NORTH, loginBtn, 20, SpringLayout.SOUTH, pwdLabel);
        // resetBtn
        // resetBtn的西边与loginBtn的东边的距离为50
        springLayout.putConstraint(SpringLayout.WEST, resetBtn, 50, SpringLayout.EAST, loginBtn);
        // resetBtn的北边与loginBtn的北边的距离为0
        springLayout.putConstraint(SpringLayout.NORTH, resetBtn, 0, SpringLayout.NORTH, loginBtn);

        // register的西边与resetBtn的东边的距离为50
        springLayout.putConstraint(SpringLayout.WEST, register, 100, SpringLayout.EAST, resetBtn);
        // register的北边与resetBtn的北边的距离为0
        springLayout.putConstraint(SpringLayout.NORTH, register, 100, SpringLayout.SOUTH, resetBtn);
    }

    public static void main(String[] args) {
        new LoginView();
    }

    public JTextField getUserTxt() {
        return userTxt;
    }

    public void setUserTxt(JTextField userTxt) {
        this.userTxt = userTxt;
    }

    public JPasswordField getPwdField() {
        return pwdField;
    }

    public void setPwdField(JPasswordField pwdField) {
        this.pwdField = pwdField;
    }
}

主页面:

package code.student.view;

import code.service.impl.StudentServiceImpl;
import code.student.view.ext.MainViewTableModel;
import code.util.DimensionUtil;
import code.handler.MainViewHandler;
import code.req.StudentRequest;
import code.res.TableDTO;
import code.service.StudentService;
import code.student.view.ext.MainViewTable;

import javax.swing.*;
import java.awt.*;
import java.net.URL;


public class MainView extends JFrame {

    JPanel northPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
    JButton addBtn =  new JButton("增加");
    JButton updateBtn = new JButton("修改");
    JButton delBtn = new JButton("删除");
    JTextField searchTxt = new JTextField(15);
    JButton searchBtn = new JButton("查询");
    JPanel southPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
    JButton exitBtn =  new JButton("安全退出");
    JButton preBtn = new JButton("上一页");
    JButton nextBtn = new JButton("下一页");

    MainViewTable mainViewTable = new MainViewTable();
    private int pageNow = 1; // 当前是第几页
    private int pageSize = 10; // 一页显示多少条记录
    MainViewHandler mainViewHandler;
    public MainView() {
        super("主界面-学生成绩管理项目");
        Container contentPane = getContentPane();
        Rectangle bounds = DimensionUtil.getBounds();
        // java.lang.Math.floorDiv() 第一个参数除以第二参数,然后针对结果执行floor操作,返回小于或等于商的整数(最接近正无穷大)
        pageSize = Math.floorDiv(bounds.height, 35);
        mainViewHandler = new MainViewHandler(this);
        searchTxt.setToolTipText("请输入要查询的姓名");
        // 放置北边的组件
        layoutNorth(contentPane);

        // 放置中间的jtable
        layoutCenter(contentPane);

        // 放置南边的组件
        layoutSouth(contentPane);

        // 自定义图标
        URL imgUrl = LoginView.class.getClassLoader().getResource("image1.jpg");
        setIconImage(new ImageIcon(imgUrl).getImage());
        // 根据屏幕大小设置主界面大小
        setBounds(bounds);
        // 设置窗体完全充满整个屏幕的可见大小
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setResizable(true);
        setVisible(true);

    }

    private void layoutCenter(Container contentPane) {
        TableDTO dto = getTableDTO();
        MainViewTableModel mainViewTableModel = MainViewTableModel.assembleModel(dto.getData());
        // 把jtable和model关联
        mainViewTable.setModel(mainViewTableModel);
        // 调用渲染规则
        mainViewTable.renderRule();
        JScrollPane jScrollPane = new JScrollPane(mainViewTable);
        contentPane.add(jScrollPane, BorderLayout.CENTER);
        showPreNext(dto.getTotalCount());

    }

    private TableDTO getTableDTO() {
        StudentService studentService = new StudentServiceImpl();
        StudentRequest request = new StudentRequest();
        request.setPageNow(pageNow);
        request.setPageSize(pageSize);
        request.setSearchKey(searchTxt.getText().trim());
        TableDTO tableDTO = studentService.retrieveStudents(request);
        return tableDTO;
    }

    private void layoutSouth(Container contentPane){
        preBtn.addActionListener(mainViewHandler);
        nextBtn.addActionListener(mainViewHandler);
        southPanel.add(preBtn);
        southPanel.add(nextBtn);
        contentPane.add(southPanel, BorderLayout.SOUTH);
    }

    /*
    设置上一页下一页是否可见
     */
    private void showPreNext(int totalCount) {
        if (pageNow == 1) {
            preBtn.setVisible(false);
        } else {
            preBtn.setVisible(true);
        }
        int pageCount = 0;  // 总共有多少页
        if (totalCount % pageSize == 0) {
            pageCount = totalCount / pageSize;
        } else {
            pageCount = totalCount / pageSize + 1;
        }
        if (pageNow == pageCount) {
            nextBtn.setVisible(false);
        } else {
            nextBtn.setVisible(true);
        }

    }

    private void layoutNorth(Container contentPane) {
        // 增加事件监听
        addBtn.addActionListener(mainViewHandler);
        updateBtn.addActionListener(mainViewHandler);
        delBtn.addActionListener(mainViewHandler);
        searchBtn.addActionListener(mainViewHandler);
        exitBtn.addActionListener(mainViewHandler);
        northPanel.add(addBtn);
//        addBtn.setPreferredSize(new Dimension(80, 30));
        northPanel.add(updateBtn);
//        updateBtn.setPreferredSize(new Dimension(80, 30));
        northPanel.add(delBtn);
//        delBtn.setPreferredSize(new Dimension(80, 30));
        northPanel.add(searchTxt);
        searchTxt.setPreferredSize(new Dimension(200, 27));
        northPanel.add(searchBtn);
//        searchBtn.setPreferredSize(new Dimension(80, 30));
        northPanel.add(exitBtn);
        contentPane.add(northPanel, BorderLayout.NORTH);
    }


    public static void main(String[] args) {
        new MainView();
    }

    public int getPageNow() {
        return pageNow;
    }

    public void setPageNow(int pageNow) {
        this.pageNow = pageNow;
    }

    public int getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        this.pageSize = pageSize;
    }

    public void reloadTable() {
        TableDTO dto = getTableDTO();
        MainViewTableModel.updateModel(dto.getData());
        mainViewTable.renderRule();
        showPreNext(dto.getTotalCount());
    }

    public int[] getSelectedStudentIds() {
        int[] selectedRows = mainViewTable.getSelectedRows();
        int[] ids = new int[selectedRows.length];
            for (int i = 0; i < selectedRows.length; i++) {
                int rowIndex = selectedRows[i];
                Object idObj = mainViewTable.getValueAt(rowIndex, 0);
                ids[i] = Integer.valueOf(idObj.toString());
            }
        return ids;
    }
}

二、销售管理系统

 

 

三、汽车租赁系统 

 四、设计文档模板

 

 

五、其他版本

文中展示的是Java Swing版本

Java控制台版本及JavaWeb版或框架集成版请参考博主的其他文章哦

Java课程设计控制台版

JavaWeb课程设计SSM整合版

线上地址:

http://119.91.205.91

账号:Admin 密码:123456

五、小Tips

        期末将至,大家都想拥有一个满意的成绩。需要定制化功能需求的小伙伴可以私信我,源码、调试、文档、答辩一站式服务,一对一coding,尽可能的满足大家的需求,没有全栈博主解决不了的,有任何问题可以在评论区提,我会一一回复。如果大家觉得有用,就点赞、收藏、转发吧,创作不易,点赞是最好的鼓励。

版权声明:本文为博主作者:顾汐辰原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/weixin_45344924/article/details/128191485

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2024年1月6日
下一篇 2024年1月6日

相关推荐