Java-GUI编程实战之管理系统 Day3【学生管理系统GUI设计、学生管理系统增删改查、项目MVC结构介绍、Java技能图谱】
- 視頻、課件、源碼【鏈接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q?提取碼:zjxs】
Java-GUI編程實戰之管理系統 Day2【Swing(組件介紹、布局管理器、事件類及監聽器類)、基礎組件按鈕和輸入框的用法】
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技能图谱】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java-GUI编程实战之管理系统 Da
- 下一篇: 《美国数学建模竞赛》统计数据下载网址【微