• 视频、课件、源码【链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs】
  1. Java-GUI编程实战之管理系统 Day1【项目开发流程、软件三层架构、项目需求、项目结构分析】
  2. Java-GUI编程实战之管理系统 Day2【Swing(组件介绍、布局管理器、事件类及监听器类)、基础组件按钮和输入框的用法】

  3. Java-GUI编程实战之管理系统 Day3【学生管理系统GUI设计、学生管理系统增删改查、项目MVC结构介绍、Java技能图谱】

目   录

学生管理系统 GUI设计

学生管理系统 增删改查

学生管理系统 源码

1、package cn.itcast.student.app;

MainApp.java

2、package cn.itcast.student.controller;

AdminDialogController.java

MainFrameController.java

3、package cn.itcast.student.dao;

StudentDao.java

4、package cn.itcast.student.data;

DataBase.java

5、package cn.itcast.student.domain;

Student.java

6、package cn.itcast.student.service;

StudentService.java

7、package cn.itcast.student.tools;

GUITools.java

8、package cn.itcast.student.view;

AbstractAdminDialog.java

AbstractMainFrame.java

项目MVC结构介绍

项目主窗口介绍

项目弹窗窗口介绍

项目表格加载查询介绍

项目表格添加介绍

项目表格修改和删除介绍

Java 技能图谱


学生管理系统 GUI设计

  • 几个界面
  • 哪些组件
  • 坐标要求

学生管理系统 增删改查

  • 组件优化
  • mvc代码解读
  • 数据存储思路
  • 运行细节分析

学生管理系统 源码

1、package cn.itcast.student.app;

MainApp.java

package cn.itcast.student.app;import cn.itcast.student.controller.MainFrameController;/*** 项目运行*/
public class MainApp {public static void main(String[] args) {new MainFrameController().setVisible(true);}
}

2、package cn.itcast.student.controller;

AdminDialogController.java

package cn.itcast.student.controller;import cn.itcast.student.domain.Student;
import cn.itcast.student.service.StudentService;
import cn.itcast.student.view.AbstractAdminDialog;import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import java.awt.*;
import java.util.ArrayList;/*** 管理员界面操作类*/
@SuppressWarnings("serial")
public class AdminDialogController extends AbstractAdminDialog {//定义服务类,提供完整功能服务private StudentService studentService = new StudentService();//构造方法public AdminDialogController() {super();}public AdminDialogController(Frame owner, boolean modal) {super(owner, modal);//创建对象时展示数据queryStudent();}//查询方法@Overridepublic void queryStudent() {//定义表格头String[] thead = {"学生编号", "学生姓名", "学生年龄", "学生住址"};//调用adminService的查询服务ArrayList<Student> dataList = studentService.queryStudent();//调用list2Array方法,将查询到的集合转为数组,方便为JTable赋值String[][] tbody = list2Array(dataList);//将查询到的结果为table赋值TableModel dataModel = new DefaultTableModel(tbody, thead);table.setModel(dataModel);}//集合数据转为二维数组方法public String[][] list2Array(ArrayList<Student> list) {//根据Student的model与集合数据定义JTable的数据二维数组String[][] tbody = new String[list.size()][4];for (int i = 0; i < list.size(); i++) {Student student = list.get(i);tbody[i][0] = student.getId();tbody[i][1] = student.getName();tbody[i][2] = student.getAge() + "";tbody[i][3] = student.getAddress();}return tbody;}//添加方法@Overridepublic void addStudent() {//获取数据String addId = addNumberText.getText();String addName = addNameText.getText();String addAge = addAgeText.getText();String addAddress = addAddressText.getText();//调用adminService的添加服务boolean addSuccess = studentService.addStudent(addId, addName,Integer.parseInt(addAge), addAddress);//如果添加成功if (addSuccess) {//添加后刷新表格queryStudent();} else {//没有添加成功弹窗错误提示JOptionPane.showMessageDialog(this, "学生学号不能重复,请检查数据!");}}//修改方法@Overridepublic void updateStudent() {//获取数据String updateId = updateNumberText.getText();String updateName = updateNameText.getText();String updateAge = updateAgeText.getText();String updateAddress = updateAddressText.getText();//调用adminService的修改服务boolean updateSuccess = studentService.updateStudent(updateId,updateName, Integer.parseInt(updateAge), updateAddress);//如果修改成功if (updateSuccess) {//修改后刷新表格queryStudent();} else {//没有修改成功弹窗错误提示JOptionPane.showMessageDialog(this, "没有这个学号的学生,请检查数据!");}}//删除方法@Overridepublic void delStudent() {//获取数据String delId = delNumberText.getText();//调用adminService的删除服务boolean delSuccess = studentService.delStudent(delId);//如果删除成功if (delSuccess) {//删除后刷新表格queryStudent();} else {//没有删除成功弹窗错误提示JOptionPane.showMessageDialog(this, "没有这个学号的学生,请检查数据!");}}
}

MainFrameController.java

package cn.itcast.student.controller;import cn.itcast.student.view.AbstractMainFrame;/*** 主界面操作类*/
@SuppressWarnings("serial")
public class MainFrameController extends AbstractMainFrame {@Overridepublic void showAdminDialog() {//在该方法中创建管理员界面并显示//this为父窗口(主界面)  true:设置为模态窗口展示new AdminDialogController(this, true).setVisible(true);}
}

3、package cn.itcast.student.dao;

StudentDao.java

package cn.itcast.student.dao;import cn.itcast.student.data.DataBase;
import cn.itcast.student.domain.Student;import java.util.ArrayList;/*** 学生信息  数据访问层*/
public class StudentDao {//获取所有数据public ArrayList<Student> queryAllData() {return DataBase.data;}//添加数据public void addStudent(Student student) {DataBase.data.add(student);}//删除数据public void delStudent(String delNumber) {//查询集合中数据for (int i = 0; i < DataBase.data.size(); i++) {Student thisStudent = DataBase.data.get(i);//如果有学生项的编号与传入编号相同,则从集合中删除if (thisStudent.getId().equals(delNumber)) {DataBase.data.remove(i);}}}
}

4、package cn.itcast.student.data;

DataBase.java

package cn.itcast.student.data;import cn.itcast.student.domain.Student;import java.util.ArrayList;/*** 存储数据*/
public class DataBase {public static ArrayList<Student> data = new ArrayList<Student>();//初始数据static {data.add(new Student("s001", "明日花", 31, "s1团"));}
}

5、package cn.itcast.student.domain;

Student.java

package cn.itcast.student.domain;public class Student {private String id;private String name;private int age;private String address;public Student() {}public Student(String id, String name, int 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 int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}
}

6、package cn.itcast.student.service;

StudentService.java

package cn.itcast.student.service;import cn.itcast.student.dao.StudentDao;
import cn.itcast.student.domain.Student;import java.util.ArrayList;public class StudentService {private StudentDao studentDao = new StudentDao();//查询服务public ArrayList<Student> queryStudent() {//调用Dao层的获取所有数据方法获取所有数据ArrayList<Student> data = studentDao.queryAllData();//返回数据return data;}//添加服务public boolean addStudent(String id, String name, int age, String address) {//调用Dao层的获取所有数据方法获取所有数据ArrayList<Student> data = queryStudent();//使用输入的编号与所有数据对比for (int i = 0; i < data.size(); i++) {Student student = data.get(i);//如果存在重复编号数据,则添加不成功if (id.equals(student.getId())) {return false;}}//如果没有重复编号,将数据封装为Student对象Student thisStudent = new Student(id, name,age, address);//调用Dao层的添加数据方法studentDao.addStudent(thisStudent);//在添加数据后,返回添加成功return true;}//修改服务public boolean updateStudent(String id, String name, int age, String address) {//调用Dao层的获取所有数据方法获取所有数据ArrayList<Student> data = queryStudent();//使用输入的编号与所有数据对比for (int i = 0; i < data.size(); i++) {Student student = data.get(i);//如果存在相同编号数据,则可以更新if (id.equals(student.getId())) {//调用Dao层的删除指定编号数据方法studentDao.delStudent(id);//如果没有重复编号,将数据封装为Student对象Student thisStudent = new Student(id, name,age, address);//调用Dao层的添加数据方法studentDao.addStudent(thisStudent);//在修改数据后,返回添加成功return true;}}//如果不存在相同编号数据,则不可以更新return false;}//删除服务public boolean delStudent(String delId) {//调用Dao层的获取所有数据方法获取所有数据ArrayList<Student> data = queryStudent();//使用输入的编号与所有数据对比for (int i = 0; i < data.size(); i++) {Student student = data.get(i);//如果存在相同编号数据,则可以删除if (delId.equals(student.getId())) {//调用Dao层的删除指定编号数据方法studentDao.delStudent(delId);//在删除数据后,返回添加成功return true;}}//如果不存在相同编号数据,则不可以删除return false;}
}

7、package cn.itcast.student.tools;

GUITools.java

package cn.itcast.student.tools;import javax.swing.*;
import java.awt.*;/** 工具类*/
public class GUITools {//JAVA提供的GUI默认工具类对象static Toolkit kit = Toolkit.getDefaultToolkit();//将指定组件屏幕居中public static void center(Component c) {int x = (kit.getScreenSize().width - c.getWidth()) / 2;int y = (kit.getScreenSize().height - c.getHeight()) / 2;c.setLocation(x, y);}//为指定窗口设置图标标题public static void setTitleImage(JFrame frame, String titleIconPath) {frame.setIconImage(kit.createImage(titleIconPath));}
}

8、package cn.itcast.student.view;

AbstractAdminDialog.java

package cn.itcast.student.view;import cn.itcast.student.tools.GUITools;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;/*** 管理窗口类*/
@SuppressWarnings("serial")
public abstract class AbstractAdminDialog extends JDialog {//定义界面使用到的组件作为成员变量private JLabel tableLabel = new JLabel("学生列表");//学生列表标题private JScrollPane tablePane = new JScrollPane();//滚动视口protected JTable table = new JTable(); //学生列表private JLabel numberLabel = new JLabel("学生学号");//编号标题private JLabel nameLabel = new JLabel("学生名字");//名称标题private JLabel ageLabel = new JLabel("学生年龄");//学生年龄private JLabel addressLabel = new JLabel("学生地址");//学生地址//添加功能组件protected JTextField addNumberText = new JTextField(6);//添加编号文本框protected JTextField addNameText = new JTextField(6);//添加名称文本框protected JTextField addAgeText = new JTextField(6);//添加单价文本框protected JTextField addAddressText = new JTextField(6);//添加计价单位文本框private JButton addBtn = new JButton("添加学生");//添加按钮//修改功能组件protected JTextField updateNumberText = new JTextField(6);//修改编号文本框protected JTextField updateNameText = new JTextField(6);//修改名称文本框protected JTextField updateAgeText = new JTextField(6);//修改单价文本框protected JTextField updateAddressText = new JTextField(6);//修改计价单位文本框private JButton updateBtn = new JButton("修改学生");//修改按钮//删除功能组件protected JTextField delNumberText = new JTextField(6);//添加编号文本private JButton delBtn = new JButton("删除学生");//删除按钮//构造方法public AbstractAdminDialog() {this(null, true);}public AbstractAdminDialog(Frame owner, boolean modal) {super(owner, modal);this.init();// 初始化操作this.addComponent();// 添加组件this.addListener();// 添加监听器}// 初始化操作private void init() {this.setTitle("学生管理系统!");// 标题this.setSize(600, 400);// 窗体大小与位置GUITools.center(this);//设置窗口在屏幕上的位置this.setResizable(false);// 窗体大小固定}// 添加组件private void addComponent() {//取消布局this.setLayout(null);//表格标题tableLabel.setBounds(265, 20, 70, 25);this.add(tableLabel);//表格table.getTableHeader().setReorderingAllowed(false);    //列不能移动table.getTableHeader().setResizingAllowed(false);    //不可拉动表格table.setEnabled(false);                            //不可更改数据tablePane.setBounds(50, 50, 500, 200);tablePane.setViewportView(table);                    //视口装入表格this.add(tablePane);//字段标题numberLabel.setBounds(50, 250, 70, 25);nameLabel.setBounds(150, 250, 70, 25);ageLabel.setBounds(250, 250, 70, 25);addressLabel.setBounds(350, 250, 70, 25);this.add(numberLabel);this.add(nameLabel);this.add(ageLabel);this.add(addressLabel);//增加组件addNumberText.setBounds(50, 280, 80, 25);addNameText.setBounds(150, 280, 80, 25);addAgeText.setBounds(250, 280, 80, 25);addAddressText.setBounds(350, 280, 80, 25);this.add(addNumberText);this.add(addNameText);this.add(addAgeText);this.add(addAddressText);addBtn.setBounds(460, 280, 90, 25);this.add(addBtn);//修改组件updateNumberText.setBounds(50, 310, 80, 25);updateNameText.setBounds(150, 310, 80, 25);updateAgeText.setBounds(250, 310, 80, 25);updateAddressText.setBounds(350, 310, 80, 25);this.add(updateNumberText);this.add(updateNameText);this.add(updateAgeText);this.add(updateAddressText);updateBtn.setBounds(460, 310, 90, 25);this.add(updateBtn);//删除组件delNumberText.setBounds(50, 340, 80, 25);this.add(delNumberText);delBtn.setBounds(460, 340, 90, 25);this.add(delBtn);}// 添加监听器private void addListener() {//添加按钮监听addBtn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//调用添加方法addStudent();}});//修改按钮监听updateBtn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//调用修改方法updateStudent();}});//删除按钮监听delBtn.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//调用删除方法delStudent();}});}//查询方法public abstract void queryStudent();//添加方法public abstract void addStudent();//修改方法public abstract void updateStudent();//删除方法public abstract void delStudent();
}

AbstractMainFrame.java

package cn.itcast.student.view;import cn.itcast.student.tools.GUITools;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;/*** 主窗口类*/
@SuppressWarnings("serial")
public abstract class AbstractMainFrame extends JFrame { // 抽象类一般会有子类,子类实现其方法//组件private JLabel titleLabel = new JLabel(new ImageIcon("..\\store\\logo.png"));//标题图片private JButton btn = new JButton("进入系统");//进入系统的按钮//构造函数public AbstractMainFrame() {this.init();// 初始化操作this.addComponent();// 添加组件this.addListener();// 添加监听器}//初始化操作private void init() {this.setTitle("学生管理系统欢迎您!");// 标题this.setSize(600, 400);// 窗体大小与位置GUITools.center(this);//设置窗口在屏幕上的位置GUITools.setTitleImage(this, "..\\store\\title.png");this.setResizable(false);// 窗体大小固定this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 关闭窗口默认操作}//添加组件private void addComponent() {//窗体使用默认的边界布局,北区放入图片this.add(this.titleLabel, BorderLayout.NORTH); // 基础组件直接添加进Frame中//创建JPanel对象JPanel btnPanel = new JPanel();//清除布局,使JPanel中的组件可以自定义位置btnPanel.setLayout(null);//将JPanel对象添加到窗体中this.add(btnPanel);//定义边界位置btn.setBounds(240, 20, 120, 50);//将按钮添加到JPanel对象中btnPanel.add(btn);}//添加监听器private void addListener() {btn.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {showAdminDialog();}});}//展示管理员界面方法public abstract void showAdminDialog();
}

项目MVC结构介绍

  

  • m:数据处理层、业务逻辑层(dao层、service层);
  • v:界面层(view层);
  • c:(controller 层)承上(界面view)启下(model(dao、service))的作用。

service层:业务逻辑处理层,调用数据层,只负责业务逻辑处理。

controller :接收请求(承上启下)承接用户界面发起的请求,请求给service。

view页面发起的请求优先到达controller,controller作为控制器 启下,调用service;service需要数据,service 调用dao。

调用过程:view -> controller -> service -> dao(业务逻辑三层结构:controller、service、dao)。

项目主窗口介绍

项目弹窗窗口介绍

  

IDEA插件系列(11):JFormDesigner插件——先进的Swing GUI设计器

  

事件类型只有1种(点击事件),事件源有3个(三个点击按钮)。

项目表格加载查询介绍

项目表格添加介绍

  

项目表格修改和删除介绍

  

Java 技能图谱

Java-GUI编程实战之管理系统 Day3【学生管理系统GUI设计、学生管理系统增删改查、项目MVC结构介绍、Java技能图谱】相关推荐

  1. java简单的增删改查项目 ATM机

    java简单的增删改查项目 login: package atm;import java.util.ArrayList; import java.util.List; import java.util ...

  2. mybatis实现增删改查xml配置和后端Java编程完整教程

    mybatis实现增删改查xml配置和后端编程教程 SqlMapConfig.xml <?xml version="1.0" encoding="UTF-8&quo ...

  3. 恒大ems时间插件java0_ems 员工管理系统。包括 ,部门,职位的增删改查;考勤记录,薪资结算,日志和意见箱等 Java Develop 249万源代码下载- www.pudn.com...

    文件名称: ems下载  收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 6480 KB 上传时间: 2016-01-05 下载次数: 0 详细说明:员工管理系统.包括 ...

  4. python django mysql web页面多级联动_Python Web实战:Python+Django+MySQL实现基于Web版的增删改查...

    前言 本篇使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能,旨在快速入门Python Web,少走弯路.效果演示在项目实战最 ...

  5. Python Web实战:Python+Django+MySQL实现基于Web版的增删改查

    本文使用Python Web框架Django连接和操作MySQL数据库学生信息管理系统(SMS),主要包含对学生信息增删改查功能. 1.创建项目(sms) 创建Django项目 django-admi ...

  6. mybatis实战教程(mybatis in action)之三:实现数据的增删改查

    前面已经讲到用接口的方式编程.这种方式,要注意的一个地方就是.在User.xml  的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.I ...

  7. java部门管理_系统管理模块_部门管理_实现基本的增删改查功能

    系统管理模块_部门管理1_实现基本的增删改查功能 先不考虑上级部门 设计实体.表 1.设计实体 Department.java public classDepartment {privateLong ...

  8. mysql如何修改学生表_MySQL 详细单表增删改查crud语句

    MySQL 增删改查语句 1.创建练习表 这里练习表没有满足三范式 第一范式(又称 1NF):保证每列的原子性 数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性.满足第一范 ...

  9. 增删改查--项目基于JavaWeb+Servlet+MySQL的【学生管理系统】

    目录 需求: MySQL数据库: ​编辑 底层代码 工具类 DBHelper: 实体类 班级实体类 爱好实体类 教员实体类 学生实体类 数据库访问层 班级数据库访问层接口: 班级数据库访问层: 爱好数 ...

最新文章

  1. python简史_命令行简史
  2. Delphi format的用法
  3. 学界 | 马里兰大学研究:人脑神经网络的动态变化和声音感知
  4. 选择Java加密算法第3部分–公钥/私钥非对称加密
  5. Sharepoint学习笔记 –架构系列—09 Sharepoint的服务器端对象模型(Server Object Model) 1.物理对象层次结构
  6. 矩阵论思维导图_《实变函数论》 江泽坚 3rd 思维导图与笔记整理
  7. android通讯录备份恢复代码逻辑
  8. 帆软报表登录-某些用户需要用自定义的登陆界面,有些用户用默认登录界面
  9. 中国甲真菌病药物行业市场供需与战略研究报告
  10. 国内Linux认证类型详解
  11. java镜像_012 制作Java基础镜像
  12. Tapestry5杂谈
  13. java-pdf转word
  14. 人工智能——支持向量机(SVM)思维导图
  15. python自动排版公众号_GitHub - qfwc258/maxpress: MaxPress:MarkDown+Python实现微信公众号一键排版...
  16. html什么布局可以兼容多平台,腾讯游戏:浅谈游戏官网现状及设计趋势
  17. 评估分形指数和HURST指数预测金融时间序列的能力
  18. 画计算机乐谱,邓紫棋《画》简谱
  19. 微信小程序踩坑指南--回填再造
  20. Android 13小米首批支持机型曝光 这4款机型在内

热门文章

  1. android闹钟的需求分析,手机小闹钟需求分析
  2. mysql order by newid_order by newid() 随机查询
  3. 一、为了OFFER系列 | 阿里云天池赛在线编程:移动的圆
  4. 四十一、深入Java中的 File类
  5. 开源内容管理系统 php mysql_「分享」7 个精致的 PHP 开源内容管理系统(CMS)
  6. 直播预告 | AAAI 2022论文解读:基于对比学习的预训练语言模型剪枝压缩
  7. ​最新综述!基于图神经网络的关系抽取技术进展
  8. 今日arXiv精选 | 18篇近期值得关注的Transformer工作
  9. 复杂知识库问答最新综述:方法、挑战与解决方案
  10. 2021斯坦福图机器学习课程CS224W开课了,Jure Leskovec主讲