当前位置: 首页 > news >正文

『Java课设』JavaSwing+MySQL实现学生成绩管理系统

👨‍🎓作者简介:一位喜欢写作,计科专业大三菜鸟

🏡个人主页:starry陆离

如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦

『Java课设』JavaSwing+MySQL实现学生成绩管理系统

  • 前言
  • 1.开发工具
  • 2.项目包结构
  • 3.数据库表
  • 4.JDBC数据库连接类
  • 5.管理员登录界面(部分)
  • 6.管理员增删改查页面(部分)
  • 8.项目演示
    • 8.1登录
    • 8.2查询学生
    • 8.3增加数据
    • 8.4修改数据
    • 8.5删除数据

前言

不久前整理资料,看到了自己大二刚学完Java为了写的课设项目敲的一个课设雏形(后来课设没有用这个),因为是个半成品一共就一个界面而且很烂,但不舍得删,发出来留作纪念吧。

1.开发工具

Eclipse

Java JDK1.8

MySQL精简版

SQLyog

mysql-connector-java-5.1.41 MySQL :: Download Connector/J

sqljdbc

image-20220708104107581

2.项目包结构

image-20220708111948227

3.数据库表

数据库名:studentgrade

数据库表:manager、student

image-20220708104234777

image-20220708104259940

4.JDBC数据库连接类

连接mysql和sqlserver的方法有一点点不一样,这里笔者的机器没有sqlserver就不维护sqlserver的了,读者有需要可自行解决

//连接mysql5.7
	private static final String USER = "***";//数据库用户名,一般是root
	private static final String PWD = "******";//数据库密码
//	private static final String URL="jdbc:mysql://localhost:3306/studentgrade";
//	private static final String DRIVER="com.mysql.jdbc.Driver"; //mysql5.7
	//如果用的是mysql8.0,
	private static final String DRIVER="com.mysql.cj.jdbc.Driver";
	private static final String URL= "jdbc:mysql://localhost:3306/studentgrade?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true"; 
	

5.管理员登录界面(部分)

image-20220708111525699

package view;

import handler.LoginHandler;

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;
/**
 * 管理员登录界面
 * 也是项目运行的起始界面
 * @author starry
 * 测试用户名:lx
 * 密码:lx0411
 */
public class LoginView extends JFrame {

    JLabel titleNameLabel=new JLabel("学生成绩管理系统",JLabel.CENTER);
    
    SpringLayout spLayout=new SpringLayout();
    JPanel centerPanel=new JPanel(spLayout);
    
    JLabel userNameLabel=new JLabel("用户名:");
    JLabel userPwdLabel=new JLabel("登录密码:");

    JTextField nameTxd=new JTextField();
    JPasswordField pwdFiled=new  JPasswordField();

    JButton loginBtn=new JButton("登录");
    JButton resetBtn=new JButton("重置");

    //声明桌面系统托盘SystemTray
    SystemTray systemTray;
    TrayIcon trayIcon;
    LoginHandler loginHandler;

    public LoginView(){

        super("学生成绩管理系统");

        loginHandler=new LoginHandler(this);
        //获取内容面板
        Container contentPane =getContentPane();
        //设置标题的字体,格式,大小
        titleNameLabel.setFont(new Font("华文行楷",Font.PLAIN,40));
        titleNameLabel.setPreferredSize(new Dimension(0,80));
        //设置中间各个组件的字体,大小,格式
        Font centerFont=new Font("华文行楷",Font.PLAIN,20);
        userNameLabel.setFont(centerFont);
        nameTxd.setPreferredSize(new Dimension(200,30));
        userPwdLabel.setFont(centerFont);
        pwdFiled.setPreferredSize(new Dimension(200,30));
        loginBtn.setFont(centerFont);
        resetBtn.setFont(centerFont);

        contentPane.setBackground(Color.pink);

        //把组件加入到面板上
        centerPanel.add(userNameLabel);
        centerPanel.add(userPwdLabel);
        centerPanel.add(nameTxd);
        centerPanel.add(pwdFiled);
        centerPanel.add(loginBtn);
        centerPanel.add(resetBtn);

        loginBtn.addActionListener(loginHandler);//增加登录按键的事件监听
        loginBtn.addKeyListener(loginHandler);//增加键盘按键监听事件
        resetBtn.addActionListener(loginHandler);//增加重置按键的事件监听

        contentPane.add(titleNameLabel,BorderLayout.NORTH);
        contentPane.add(centerPanel,BorderLayout.CENTER);

        //设置中间组件的位置,弹簧布局
        layoutCenter();

        //判断当前系统是否支持系统托盘
        if(SystemTray.isSupported()){
            systemTray=SystemTray.getSystemTray();//初始化系统托盘
            URL imgUrl = LoginView.class.getClassLoader().getResource("LoginView.jpg");
            trayIcon=new TrayIcon(new ImageIcon(imgUrl).getImage());//初始化托盘图标
            trayIcon.setImageAutoSize(true);//托盘图标可以自动缩放大小
            try {
                systemTray.add(trayIcon);//将托盘图标加入到系统托盘组件中,并抛出异常
            } catch (AWTException e) {
                e.printStackTrace();
            }
            //创建一个事件响应,最小化时销毁资源
            this.addWindowListener(new WindowAdapter() {
                @Override
                public void windowIconified(WindowEvent e) {
                    LoginView.this.dispose();
                }
            });

            //托盘事件监听(鼠标单击一次托盘,窗口将会正常显示)
            trayIcon.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    int clickCont=e.getClickCount();
                    if(clickCont==1){
                        LoginView.this.setExtendedState(JFrame.NORMAL);
                    }
                    LoginView.this.setVisible(true);
                }
            });
        }
        //设置loginBtn为默认按钮,按下回车键时默认响应loginBtn的键盘响应
        getRootPane().setDefaultButton(loginBtn);

        //设置窗口图片
        URL imgUrl=LoginView.class.getClassLoader().getResource("LoginView.jpg");
        setIconImage(new ImageIcon(imgUrl).getImage());
        //设置窗口基本参数
        setSize(600,400);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(false);
        setVisible(true);
    }

    private void layoutCenter() {
        //获取组件的宽度Spring.width(组件名)用户名和用户名文本框组件
        Spring titleLabelWidth=Spring.width(userNameLabel);
        Spring titleTextWidth=Spring.width(nameTxd);
        Spring spaceWidth=Spring.constant(20);//userNameLabel和nameTxd的间距
        Spring totalWidth=Spring.sum(Spring.sum(titleLabelWidth,titleTextWidth),spaceWidth);
        int offSetX=totalWidth.getValue()/2;

         /*
        SpringLayout:布局管理器
        SpringLayout.Constraints:使用弹簧布局的容器里面的组件的布局约束,每个组件对应一个
        Spring:能够进行四则运算的整数
         */
        /*
        窗口相当于一个左顶角为原点的第四象限的坐标轴

         */
        //1.设置好用户名标签的位置(约束)
        SpringLayout.Constraints titleLabelCon=spLayout.getConstraints(userNameLabel);
        //用户名标签userNameLabel的西边参考centerPanel组件水平中心点方向左偏移offSetX的距离
        spLayout.putConstraint(SpringLayout.WEST,userNameLabel,-offSetX,SpringLayout.HORIZONTAL_CENTER,centerPanel);
        //设置用户名标签的垂直标签
        spLayout.putConstraint(SpringLayout.NORTH,userNameLabel,20,SpringLayout.NORTH,centerPanel);
        //or使用setY()设置垂直偏移量
        // titleLabelCon.setY(Spring.constant(50));//垂直偏移量

        //2.设置用户名文本框nameTxd的位置(约束)
        spLayout.putConstraint(SpringLayout.WEST,nameTxd,20,SpringLayout.EAST,userNameLabel);
        spLayout.putConstraint(SpringLayout.NORTH,nameTxd,0,SpringLayout.NORTH,userNameLabel);

        //3.设置密码标签userPwdLabel的位置
        spLayout.putConstraint(SpringLayout.NORTH,userPwdLabel,20,SpringLayout.SOUTH,userNameLabel);
        spLayout.putConstraint(SpringLayout.EAST,userPwdLabel,0,SpringLayout.EAST,userNameLabel);

        //4.设置密码文本框pwdFiled的位置(约束)
        spLayout.putConstraint(SpringLayout.WEST,pwdFiled,20,SpringLayout.EAST,userPwdLabel);
        spLayout.putConstraint(SpringLayout.NORTH,pwdFiled,0,SpringLayout.NORTH,userPwdLabel);

        //5.设置登录按钮loginBtn的位置
        spLayout.putConstraint(SpringLayout.EAST,loginBtn,-20,SpringLayout.HORIZONTAL_CENTER,centerPanel);
        spLayout.putConstraint(SpringLayout.NORTH,loginBtn,50,SpringLayout.SOUTH,pwdFiled);

        //6.设置重置按钮resetBtn的位置
        spLayout.putConstraint(SpringLayout.WEST,resetBtn,20,SpringLayout.HORIZONTAL_CENTER,centerPanel);
        spLayout.putConstraint(SpringLayout.NORTH,resetBtn,50,SpringLayout.SOUTH,pwdFiled);
    }

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


    public JTextField getNameTxd() {
        return nameTxd;
    }

    public JPasswordField getPwdFiled() {
        return pwdFiled;
    }
}

6.管理员增删改查页面(部分)

image-20220708111607388

package view;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.net.URL;
import java.util.Vector;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;

import ext.MainViewTable;
import ext.MainViewTableModel;
import handler.AdminMainHandler;
import req.StudentRequest;
import res.TableDTO;
import service.StudentService;
import service.StudentServiceImpl;
import util.DimensionUtil;
/**
 * 管理员管理学生的主界面
 * 可在此实现增删改查
 * @author starry
 *
 */
public class MainView extends JFrame{
	
	
	public String lastPressKey;
	
	JPanel northPanel=new JPanel(new FlowLayout(FlowLayout.LEFT));//JPanel默认流布局,组件居左
	public JButton btnAdd=new JButton("增加");
	public JButton updataBtn=new JButton("修改");
	public JButton delBtn=new JButton("删除");
	public JButton btnSave = new JButton("保存");
	JTextField searchTxt=new JTextField(15);
	JButton searchBtn=new JButton("查询");
	
	//搜索框与搜索按钮
    public JTextField searchField = new JTextField();
	
	JPanel southPanel=new JPanel(new FlowLayout(FlowLayout.RIGHT));//组件居右
	JButton preBtn=new JButton("上一页");
	JButton nextBtn =new JButton("下一页");
	
	
	//创建一个MainViewTable对象
  	public MainViewTable mianViewTable=new MainViewTable();
  	public MainViewTableModel mainViewTableModel;
	//声明一个MainHandler对象
	AdminMainHandler adminMainHandler;
	
	//
	private int pageNow=1;//默认显示第一页
	private int pageSize=10;//默认每页显示十条记录
	//构造方法
	public MainView() {
		
		super("主界面-学生成绩管理系统");
		Container contentPane=getContentPane();
		
		//创建一个MainHandler对象
		adminMainHandler = new AdminMainHandler(this);
		
		//放置北边的组件
		layoutNorth(contentPane);
		//放置中间的组件
		layoutCenter(contentPane);
		//放置南边的组件
		layoutSouth(contentPane);
		//基础设置
	    init();
	}

	private void layoutCenter(Container contentPane) {
		
		//调用数据库数据,创建一个StudentService和StudentRequest实例
		//获取从数据库中查询到的data与totalCount
		StudentService studentService=new StudentServiceImpl();
		StudentRequest request=new StudentRequest();
		request.setPageNow(pageNow);
		request.setPageSize(pageSize);
		request.setSearchKey(searchTxt.getText().trim());
		TableDTO tableDTO = studentService.retrieveStudents(request);
		Vector<Vector<Object>> data = tableDTO.getData();
		showPreNext(tableDTO.getTotalCount());
		
		
        //自定义的MainViewTableModel
		mainViewTableModel=MainViewTableModel.assembleModel(data);
		//将Table与TableModel关联
		mianViewTable.setModel(mainViewTableModel);
		//设置渲染方式
		mianViewTable.renderRule();
		
		
		
		 JScrollPane jScrollPane = new JScrollPane(mianViewTable);
		 contentPane.add(jScrollPane,BorderLayout.CENTER);
	}



	private void layoutSouth(Container contentPane) {
		
		//增加按钮事件监听
		preBtn.addActionListener(adminMainHandler);
		nextBtn.addActionListener(adminMainHandler);
		
		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(pageCount==pageNow) {
			nextBtn.setVisible(false);
		}else {
			nextBtn.setVisible(true);
		}
	}

	private void layoutNorth(Container contentPane) {
		
		//增加按钮事件监听
		btnAdd.addActionListener(adminMainHandler);
		btnSave.addActionListener(adminMainHandler);
		updataBtn.addActionListener(adminMainHandler);
		delBtn.addActionListener(adminMainHandler);
		searchBtn.addActionListener(adminMainHandler);

		
		northPanel.add(btnAdd);
		northPanel.add(btnSave);
		northPanel.add(updataBtn);
		northPanel.add(delBtn);
		northPanel.add(searchTxt);
		northPanel.add(searchBtn);
		btnAdd.setVisible(true);
		btnSave.setVisible(false);
		contentPane.add(northPanel,BorderLayout.NORTH);
	}
	
	private void init() {
		//设置窗口图片
        URL imgUrl=LoginView.class.getClassLoader().getResource("LoginView.jpg");
        setIconImage(new ImageIcon(imgUrl).getImage());
        //设置窗口基本参数
        setBounds(DimensionUtil.getBounds());
        //设置窗体完全充满整个屏幕
        setExtendedState(JFrame.MAXIMIZED_BOTH);
        
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        setResizable(true);
        setVisible(true);
	}


	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
	}
	
	public void setPageNow(int pageNow) {
		this.pageNow = pageNow;
	}

	public int getPageSize() {
		return pageSize;
	}

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

	public int getPageNow() {
		return pageNow;
	}

	
	public void reloadTable() {
		
		/*
		 *调用数据库数据,创建一个StudentService和StudentRequest实例
		 *获取从数据库中查询到的data与totalCount
		 *查询完后要更新Model的数据
		 */
		StudentService studentService=new StudentServiceImpl();
		StudentRequest request=new StudentRequest();
		request.setPageNow(pageNow);
		request.setPageSize(pageSize);
		request.setSearchKey(searchTxt.getText().trim());
		TableDTO tableDTO = studentService.retrieveStudents(request);
		Vector<Vector<Object>> data = tableDTO.getData();
		
		
		// 更新调用updataModel实现更新Model
		MainViewTableModel.uptadaModel(data);
		// 设置渲染方式
		mianViewTable.renderRule();
		// 调用上一页与下一页按钮是否可见
		showPreNext(tableDTO.getTotalCount());
	}
	

}

8.项目演示

8.1登录

grade1

8.2查询学生

grade2

8.3增加数据

grade3

8.4修改数据

grade4

8.5删除数据

grade5

相关文章:

  • Functional Programming in Java venkat(16) Being Lazy part3
  • SpringCloud 组件Gateway服务网关【全局过滤器】
  • 专业硕士招生占比将达到三分之二,那么跟学术硕士有哪些区别?
  • 计算机毕业设计Java毕业生离校管理系统(源码+系统+mysql数据库+lw文档)
  • STM32学习之Keil5软件配置
  • 如何在Linux系统中安装MySQL数据库
  • 实变函数与泛函分析基础
  • 图的初识·存储结构
  • 环境温湿度在线监测如何实现?有何应用场景?
  • Mysql视图和触发器
  • 计算机毕业设计springboot酒店管理系统uah43源码+系统+程序+lw文档+部署
  • UG NX二次开发(C#)-CAM-获取所有的加工刀具表单
  • 2022-11-30 mysql-innodb-ibd文件读取工具
  • LCHub低代码社区:旧的低代码,腾讯怎么讲出新故事
  • 游戏测试是一个怎样的行业?
  • Vector源码分析
  • 23软考备考已开始,网络工程师知识点速记~(1)
  • [附源码]计算机毕业设计springboot酒店物联网平台系统
  • Linux C中对json格式数组数据的生成与解析
  • [剑指 Offer 62]圆圈中最后剩下的数字(约瑟夫环问题:动态规划)
  • NAT以及MAP详解
  • sql_server用户名和登录名学习笔记
  • Dekker's algorithm
  • 验证码识别技术
  • STP(生成树协议) 笔记一
  • 部分选中文件的快捷键
  • Eclipse连接SQL Server 2008数据库
  • 硬盘修复
  • 关于fflush
  • 关于Flash Player10 RTMFP的FAQ