1. 程式人生 > >我的第一個專案----Java圖書管理系統

我的第一個專案----Java圖書管理系統

一,功能

(1),使用者登入
(2),圖書類別管理
(3),圖書管理
(4),退出

二,工具

(1),JAVA程式設計:eclipes(1.8 soon版本)
(2),SQL:mysql
(3),Jdbc: jar(mysql-connector-java-5.1.40-bin.jar)

三,效果展示

(1),登入

這裡寫圖片描述

(2),主介面

這裡寫圖片描述

(3),圖書類別新增

這裡寫圖片描述

(4),圖書類別管理

這裡寫圖片描述

(5),圖書新增

這裡寫圖片描述

(6),圖書管理

這裡寫圖片描述

(7),關於作者

這裡寫圖片描述

四,資料庫設計

這裡寫圖片描述

(1),t_user表

這裡寫圖片描述

(2),t_bookType表

這裡寫圖片描述

(3),t_book表

這裡寫圖片描述

(四),Java層次分析:

(1),邏輯圖

這裡寫圖片描述

(2),包結構

這裡寫圖片描述

(五),資料庫層級分析:

1, ER分析

這裡寫圖片描述

2, 資料

使用者: 使用者編號,使用者名稱,密碼
圖書類別:圖書類別編號,圖書類別名稱
圖書:圖書編號,圖書名稱,圖書作者,圖書價格,圖書描述,圖書類別(外來鍵)

圖書類別與圖書之間根據圖書類別相互關聯

3,資料庫表的建立
(1),t_use 使用者資訊表
(2),t_bookType 圖書類別管理表
(3),t_book 圖書資訊管理表

4,資料庫表的關聯(外來鍵的關聯)

這裡寫圖片描述

(六),主要Java程式碼分析:

(1),Dao 類(以BookDao為例)

package com.java1234.dao;

import java.sql.ResultSet;
import java.sql.SQLException;

import com.java1234.model.Book;
import com.java1234.model.BookType;
import com.java1234.util.StringUtil;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

/**
 * 圖書Dao類
 * @author H_Pioneer
 *
 */
public class BookDao { /** * 圖書新增 * @param con * @param book * @return * @throws Exception */ public int add(Connection con,Book book)throws Exception{ String sql="insert into t_book values(null,?,?,?,?,?,?)"; PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sql); pstmt.setString(1, book.getBookName()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getSex()); pstmt.setFloat(4, book.getPrice()); pstmt.setInt(5, book.getBookTypeId()); pstmt.setString(6, book.getBookDesc()); return pstmt.executeUpdate(); } /** * 圖書資訊查詢 * @param con * @param book * @return * @throws Exception */ public ResultSet list(Connection con,Book book)throws Exception{ StringBuffer sb=new StringBuffer("select * from t_book b,t_bookType bt where b.bookTypeId=bt.id"); if(StringUtil.isNotEmpty(book.getBookName())){ sb.append(" and b.bookName like '%"+book.getBookName()+"%'"); } if(StringUtil.isNotEmpty(book.getAuthor())){ sb.append(" and b.author like '%"+book.getAuthor()+"%'"); } if(book.getBookTypeId()!=null && book.getBookTypeId()!=-1){ sb.append(" and b.bookTypeId="+book.getBookTypeId()); } PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sb.toString()); return pstmt.executeQuery(); } /** * 圖書資訊刪除 * @param con * @param id * @return * @throws SQLException */ public int delete(Connection con,String id)throws Exception{ String sql="delete from t_book where id=?"; PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sql); pstmt.setString(1, id); return pstmt.executeUpdate(); } /** * 圖書資訊修改 * @param con * @param book * @return * @throws Exception */ public int update(Connection con,Book book)throws Exception{ String sql="update t_book set bookName=?,author=?,sex=?,price=?,bookDesc=?,bookTypeId=? where id=?"; PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sql); pstmt.setString(1, book.getBookName()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getSex()); pstmt.setFloat(4, book.getPrice()); pstmt.setString(5, book.getBookDesc()); pstmt.setInt(6, book.getBookTypeId()); pstmt.setInt(7, book.getId()); return pstmt.executeUpdate(); } /** * * @param con * @param bookTypeId * @return * @throws Exception */ public boolean existBookByBookTypeId(Connection con,String bookTypeId)throws Exception{ String sql="select * from t_book where bookTypeId=?"; PreparedStatement pstmt=(PreparedStatement) con.prepareStatement(sql); pstmt.setString(1, bookTypeId); ResultSet rs = pstmt.executeQuery(); String string = new String(); return rs.next(); } }

*重點內容::

JDBC進行簡單的資料庫增刪改查

(2),Model類(以BookModel為例)

package com.java1234.model;


/**
 * 圖書實體類
 * @author H_Pioneer
 *
 */
public class Book {

    private int id; //編號
    private String bookName;  //圖書名稱
    private String author;  //作者
    private String sex;  //性別
    private float price;  //價格
    private Integer bookTypeId;  //圖書類別
    private String bookTypeName;  //圖書類別名稱
    private String bookDesc;  //備註



    public Book(int id2, String bookName, String author, String sex, float price, Integer bookTypeId, String bookDesc) {
        super();
        this.id = id2;
        this.bookName = bookName;
        this.author = author;
        this.sex = sex;
        this.price = price;
        this.bookTypeId = bookTypeId;
        this.bookDesc = bookDesc;
    }

    public Book(String bookName, String author, Integer bookTypeId) {
        super();
        this.bookName = bookName;
        this.author = author;
        this.bookTypeId = bookTypeId;
    }

    public Book(String bookName, String author, String sex, float price, Integer bookTypeId, String bookDesc) {
        super();
        this.bookName = bookName;
        this.author = author;
        this.sex = sex;
        this.price = price;
        this.bookTypeId = bookTypeId;
        this.bookDesc = bookDesc;
    }

    public Book() {
        super();
        // TODO Auto-generated constructor stub
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getBookName() {
        return bookName;
    }
    public void setBookName(String bookName) {
        this.bookName = bookName;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }
    public Integer getBookTypeId() {
        return bookTypeId;
    }
    public void setBookTypeId(Integer bookTypeId) {
        this.bookTypeId = bookTypeId;
    }
    public String getBookTypeName() {
        return bookTypeName;
    }
    public void setBookTypeName(String bookTypeName) {
        this.bookTypeName = bookTypeName;
    }
    public String getBookDesc() {
        return bookDesc;
    }
    public void setBookDesc(String bookDesc) {
        this.bookDesc = bookDesc;
    }


}

**重點內容::

(1),介面類的構造方法

(2),get,set方法

快捷鍵:
Shift+Alt+S –> Generate Getters and Setters –>選擇你需要的get,set引數

(3),建構函式的使用
快捷鍵:
(1),Shift+Alt+S –>generate constructor using fields–>使用欄位生成
(2),Shift+Alt+S –>generate constructors from…..–>不使用欄位從父類獲取

(三),Util類

package com.java1234.util;

import java.sql.DriverManager;

import com.mysql.jdbc.Connection;

/**
 * 資料庫工具類
 * @author H_Pioneer
 *
 */

public class DbUtil {
    private String dbUrl = "jdbc:mysql://localhost:3306/db_book";
    //也可以寫成private String dbUrl = "jdbc:mysql:///db_book";
    private String dbUserName = "root";
    private String dbPassword = "123456";
    private String jdbcName = "com.mysql.jdbc.Driver";

    /**
     * 獲取資料庫連線
     * @return
     * @throws Exception
     */
    public Connection getCon()throws Exception{
        Class.forName(jdbcName);
        Connection con = (Connection) DriverManager.getConnection(dbUrl,dbUserName,dbPassword);//連結資料庫
        return con;

    }

    /**
     * 關閉資料庫連線
     * @param con
     * @throws Exception
     */
    public void closeCon (java.sql.Connection con)throws Exception {
        if(con!=null){
            con.close();
        }
    }

    /**
     * 
     * @param args
     */
    public static void main(String[] args) {
        DbUtil dbUtil = new DbUtil();
        try {
            dbUtil.getCon();
            System.out.println("資料庫連線成功");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();    //在命令列列印異常資訊在程式中出錯的位置及原因。
            System.out.println("資料庫連線");
        }

    }


}

資料庫工具類

package com.java1234.util;

import org.junit.Test;

import com.mysql.jdbc.StringUtils;

/**
 * 字串工具類
 * @author H_Pioneer
 *
 */
public class StringUtil {
    /**
     * 判斷是否為空
     * @param str
     * @return
     */

    public static boolean isEmpty(String str){
        if(str==null||"".equals(str.trim())){
            return true;
    }else{
        return false;
    }
    }

    /**
     * 判斷不為空
     * @param str
     * @return
     */
    public static boolean isNotEmpty(String str){
        if(str!=null&&!"".equals(str.trim())){
            return true;
        }else{
        return false;
        }
    }
}

(四),Frm類(以登入和圖書類別新增為例)

package com.java1234.view;

import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.border.EmptyBorder;

import com.java1234.dao.UserDao;
import com.java1234.model.User;
import com.java1234.util.DbUtil;
import com.java1234.util.StringUtil;
import com.mysql.jdbc.Connection;


public class LogOnFrm extends JFrame {

    private JPanel contentPane;
    private final JTextField textField = new JTextField();
    private JPasswordField passwordTxt;

    private DbUtil dbUtil = new DbUtil();
    private UserDao userDao = new UserDao();
    private JTextField userNameTxt;


    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    LogOnFrm frame = new LogOnFrm();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public LogOnFrm() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setAlwaysOnTop(true);
        setTitle("管理員登入");
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);

        JLabel label = new JLabel("圖書管理系統");
        label.setFont(new Font("黑體", Font.BOLD, 25));
        label.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/logo.png")));

        JLabel lblNewLabel = new JLabel("使用者名稱:");
        lblNewLabel.setFont(new Font("宋體", Font.PLAIN, 13));
        lblNewLabel.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/userName.png")));

        JLabel lblNewLabel_1 = new JLabel("密  碼:");
        lblNewLabel_1.setFont(new Font("宋體", Font.PLAIN, 13));
        lblNewLabel_1.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/password.png")));
        textField.setColumns(10);

        passwordTxt = new JPasswordField();

        JButton btnNewButton = new JButton("登入");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                loginActionPerformed(e);    
            }
        });
        btnNewButton.setFont(new Font("宋體", Font.PLAIN, 13));

        btnNewButton.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/login.png")));

        JButton btnNewButton_1 = new JButton("重置");
        btnNewButton_1.setFont(new Font("宋體", Font.PLAIN, 13));
        btnNewButton_1.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/reset.png")));
        btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                resetValueActionPerformed(e);
            }
        });

        userNameTxt = new JTextField();
        userNameTxt.setColumns(10);
        GroupLayout gl_contentPane = new GroupLayout(contentPane);
        gl_contentPane.setHorizontalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addContainerGap()
                    .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
                        .addGroup(gl_contentPane.createSequentialGroup()
                            .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
                                .addGroup(gl_contentPane.createSequentialGroup()
                                    .addComponent(textField, GroupLayout.PREFERRED_SIZE, 0, GroupLayout.PREFERRED_SIZE)
                                    .addGap(223))
                                .addGroup(gl_contentPane.createSequentialGroup()
                                    .addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING, false)
                                        .addComponent(lblNewLabel_1, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                        .addComponent(btnNewButton, Alignment.TRAILING, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                                    .addGap(50))
                                .addGroup(gl_contentPane.createSequentialGroup()
                                    .addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 93, GroupLayout.PREFERRED_SIZE)
                                    .addGap(36)))
                            .addGroup(gl_contentPane.createParallelGroup(Alignment.TRAILING)
                                .addComponent(btnNewButton_1)
                                .addGroup(Alignment.LEADING, gl_contentPane.createParallelGroup(Alignment.TRAILING, false)
                                    .addComponent(passwordTxt, Alignment.LEADING)
                                    .addComponent(userNameTxt, Alignment.LEADING, GroupLayout.DEFAULT_SIZE, 114, Short.MAX_VALUE)))
                            .addGap(63))
                        .addGroup(gl_contentPane.createSequentialGroup()
                            .addComponent(label, GroupLayout.PREFERRED_SIZE, 320, GroupLayout.PREFERRED_SIZE)
                            .addContainerGap())))
        );
        gl_contentPane.setVerticalGroup(
            gl_contentPane.createParallelGroup(Alignment.LEADING)
                .addGroup(gl_contentPane.createSequentialGroup()
                    .addGap(18)
                    .addComponent(label)
                    .addPreferredGap(ComponentPlacement.UNRELATED)
                    .addComponent(textField, GroupLayout.PREFERRED_SIZE, 0, GroupLayout.PREFERRED_SIZE)
                    .addGap(14)
                    .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                        .addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 24, GroupLayout.PREFERRED_SIZE)
                        .addComponent(userNameTxt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
                    .addGap(45)
                    .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                        .addComponent(passwordTxt, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE))
                    .addGap(27)
                    .addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
                        .addComponent(btnNewButton_1, GroupLayout.PREFERRED_SIZE, 25, GroupLayout.PREFERRED_SIZE)
                        .addComponent(btnNewButton))
                    .addContainerGap(13, Short.MAX_VALUE))
        );
        contentPane.setLayout(gl_contentPane);

        //設定居中顯示
        this.setLocationRelativeTo(null);
    }

    /**
     * 登入事件處理
     * @param e
     */
    protected void loginActionPerformed(ActionEvent e) {
        // TODO Auto-generated method stub
        String userName = this.userNameTxt.getText();
        String password = new String(this.passwordTxt.getPassword());
        if(StringUtil.isEmpty(userName)){
            JOptionPane.showMessageDialog(null,"使用者名稱不能為空");
            return;
        }
        if(StringUtil.isEmpty(password)){
            JOptionPane.showMessageDialog(null,"密碼不能為空");
            return;
        }
        User user = new User(userName,password);
        Connection con = null;
        try{
            con = dbUtil.getCon();
            User currentUser=userDao.login(con, user);
            if(currentUser!=null){
                //JOptionPane.showMessageDialog(null,"登入成功");   
                dispose();
                new MainFrm().setVisible(true);
            }else{
                JOptionPane.showMessageDialog(null,"使用者名稱密碼錯誤");
            }

        }catch(Exception e1){
            e1.printStackTrace();

        }

    }

    /**
     * 重置事件處理
     * @param evt
     */

    private void resetValueActionPerformed(ActionEvent evt) {
        // TODO Auto-generated method stub
        this.userNameTxt.setText("");
        this.passwordTxt.setText("");
    }
}

**重點::

(1),Java視覺化程式設計

  1. windowbuilder外掛的安裝
  2. Window Builder→SWT Designer→SWT→Application Window→Next→視窗名→預設→Finish→s自動生成程式碼→Design

這裡寫圖片描述

(2),對於按鈕等新增事件如何與資料介面聯絡

對於JFrame,JLable,JTable等,右擊可以選擇重新命名或者新增事件即可返回程式碼之中,一般我們會把操作進行封裝,對事件進行相應的處理

(七),整個專案的分析與不足

1.MVC3層架構有問題(這個只有dao層)

正常的應該是dao層就介面不是實現類,現在的dao是正常的daoImpl,dao的實現類

2.實體類(com.java1234.model包下的)可以是entity,domain

應該儘量用entity或model,少用domain

3 DbUtil和StringUtil的實現方法不好而且很多並沒有實際用處

相關推薦

第一專案----Java圖書管理系統

一,功能 (1),使用者登入 (2),圖書類別管理 (3),圖書管理 (4),退出 二,工具 (1),JAVA程式設計:eclipes(1.8 soon版本) (2),SQL:mysql (3),Jdbc: jar(mysql-connect

Java圖書管理系統專案編寫

主目錄 ---------------------- 系統功能 資料庫設計 在Eclips中建立專案 編寫公共類 主窗體設計 管理員登入模組設計 圖書資訊管理模組設計 圖書借閱、歸還模組設計 圖

java圖書管理系統實現

題目:編寫java程式碼,實現對圖書的管理,包括增刪改查、借閱及歸還。 實現程式碼如下: import java.util.Scanner; public class BookTest { public static void main(String[] args) { Sca

java --圖書管理系統 增刪改查

import java.util.Scanner; public class Task1 { public static void main(String[] args) { int id=0;//初始化id。 String[][] books = new String[3][5

Java 圖書管理系統

剛開始接觸Java,寫一個圖書管理系統熟悉熟悉介面和資料庫的操作。剛開始寫介面的時候感覺介面這塊比較雜,好多都不會。比如給容器新增背景圖片,新增到容器中,再將容器加入面板後老是變成很小的一個圖片,在網上找了好多部落格都沒能解決,後來無意中才解決了這個問題。資料庫也遇到過問題,最後用exe

Java圖書管理系統

Java圖書管理系統 設計人:wangyunpeng_bio 專案需求 隨著計算機的普及和應用水平的提高,經過考察比較,決定利用自己的Java知識開發小型的圖書管理系統,方便圖書的管理。 圖書管理系統是典型的資訊管理系統。本次作業利用JAVA開發工具Eclipse和MySQ

Java圖書管理系統練習程式(六)

本部分內容,主要實現對資料庫的基本操作,並更換資料訪問部分,將原來的使用檔案儲存更換為資料庫進行資料的儲存 在專案中,要引入mysql的驅動程式 在專案根目錄下,建立lib資料夾,將mysql的驅動程式複製到lib目錄下,然後在專案中引用 一、建立資料庫與資料表 資料庫名稱:d

Java圖書管理系統練習程式(五)

Java圖書管理系統練習程式(五) 本部分內容,主要實現對檔案讀寫操作的修改,使用泛型類的方式,實現對不同檔案進行相同的讀寫操作。 一.建立書籍資訊類 1.首先在bean包中,建立Book類,描述書籍的相關資訊,程式碼如下: package sky.book.bean; imp

Java圖書管理系統練習程式(四)

Java圖書管理系統練習程式(四) 本部分主要介紹List的基本操作與Java中泛型的使用。 一、Java中泛型的使用 泛型,即“引數化型別”。一提到引數,最熟悉的就是定義方法時有形參,然後呼叫此方法時傳遞實參。那麼引數化型別怎麼理解呢?顧名思義,就是將型別由原來的具體的型別引數化,類似

Java圖書管理系統練習程式(三)

Java圖書管理系統練習程式(三) 本部分內容主要實現將使用者資訊寫入檔案中,並在程式執行時,將檔案中的使用者資訊讀入到記憶體中,實現使用者資訊的儲存。 將Java物件序列化後,可以將物件儲存在檔案中,或者在網路中直接進行傳輸。 如果要實現序列化,只需讓該類實現Serializable介

Java圖書管理系統練習程式(二)

Java圖書管理系統練習程式(二) 第二部分 本部分主要實現系統使用者這部分的功能,實現使用者的註冊、登入、修改密碼等功能 程式各類及呼叫關係如下圖所示 一、建立user實體類 User實體類:id、username、password、email package sky.bo

Java圖書管理系統練習程式(一)

Java圖書管理系統練習程式 第一部分 該部分主要實現命令列方式的介面與無資料庫訪問的練習,通過本練習、主要掌握Java的基礎知識與面向物件程式設計思想、面向介面程式設計技術的知識與運用。 一、練習程式功能分析 該練習程式主要用於學習Java的基礎程式設計知識與面向

貼出第一手機Java程式

{    private Display display =null;        public Mobile() ...{        // TODO 自動生成建構函式存根    }    protectedvoid destroyApp(boolean arg0) throws MIDletState

用SSM框架實現簡單的專案-《圖書管理系統

$(function () { /*三條件動態查詢*/ $("#queryBooks").click(function () { $("#pageNum").val(1); $("

【WPF on .NET Core 3.0】 Stylet演示專案 - 簡易圖書管理系統(1)

.NET Core 3.0已經發布了,除了一大堆令人激動的功能以外,也增加了對WPF的正式支援, 那麼WPF在.NET Core 3.0下的開發體驗如何呢? 本文利用了Stylet框架開發.NET Core 3.0上的WPF應用程式.關於Stylet框架, 可能大家比較陌生, 它是一個輕量級(但是非常優秀!)

【WPF on .NET Core 3.0】 Stylet演示專案 - 簡易圖書管理系統(3) - 使用Conductor切換頁面

前兩章中, 我們已經實現了這個圖書管理系統的登入視窗, 並實施了完善的單元測試. 該是時候回過頭來關注我們的主視窗了. 一個功能豐富的系統一般會有多個頁面, 我們圖書管理系統雖然是"簡易"的, 但是同樣也有多個頁面. 所以這一章中, 我們來學習如何使用Stylet的Conductor來管理頁面的切換. 事實

【WPF on .NET Core 3.0】 Stylet演示專案 - 簡易圖書管理系統(4) - 圖書列表介面

在前三章中我們完成了登入視窗, 並掌握了使用Conductor來切換視窗, 但這些其實都是在為我們的系統打基礎. 而本章中我們就要開始開發系統的核心功能, 即圖書管理功能了. 通過本章, 我們會接觸到以下知識點: 使用Stylet內建IoC 使用ViewModel First解耦UI 讓我們開始吧! 關於

JAVA小白學習的第一程式碼—圖書管理系統

小白在實訓的學習實訓的第二週開始寫圖書管理系統程式碼,接下來是記錄學習的過程。 建立了一個Library 類和Booktest類 建立Library類對圖書管理系統 建立方法,然後在寫構造方法 package com.lenovo.w

第一專案--學生管理系統的一點收穫

        就在上週末,我們的第一個小專案(學生管理系統)終於結束了,回憶起這將就3周的經歷,突然有了一種成就感,感覺在不知不覺中就學到了好多的東西。現在就把我在這次實踐中的一些小小的心得寫出來跟大家一起分享。 首先學到的是關於Servlet的學習,關

Java web專案 圖書管理系統借書部分程式碼

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %> <%@ page import="com.dao.Bor