zoukankan      html  css  js  c++  java
  • javaFx 图书管理系统,采用 jfoenix-8.0.4 开源框架,使用 MaterialDesighn 风格

    javaFx 图书管理系统,采用 jfoenix-8.0.4 开源框架,使用 MaterialDesighn 风格

    前一阵子使用javafx开发了医院管理系统,整体感觉还不错,主要是能用css样式文件进行美化。

    我的GitHub ,欢迎大家start,项目地址:

    https://github.com/alimjan02/javaFx-jfoenix-8.0.4-MaterialDesighn

    这次发现了一个好东西  jfoenix-8.0.4 开源框架 ,是基于javafx改变的一个框架,是使用了Android设计的 MaterialDesighn 风格,控件很漂亮。最近上的数据库课程需要写一个数据库应用系统,就用它试了一下,整体感觉很棒,下面看看效果吧

    1. 登录界面

        首先是登录界面,使用JFXTextField作为输入框,点击得到focus以后的效果很不错,登录使用了多线程,因为按钮有自己的动画效果,当用户身份查询查询匹配数据库信息时要等待,这样导致有些动画效果不流畅,因此多线程完美解决了这一点。

        记住密码功能使用了文件存储。

        登录过程中还有进度条。

        

     

      2.读者界面

        

                 

        3.管理员界面

          

     

     

     

     

     

     

     

     

     

     

     

    源代码:

    1.主类

     

      1 package sample;
      2 
      3 import com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader;
      4 import javafx.application.Application;
      5 import javafx.fxml.FXMLLoader;
      6 import javafx.fxml.LoadException;
      7 import javafx.scene.Parent;
      8 import javafx.scene.Scene;
      9 import javafx.scene.control.Label;
     10 import javafx.scene.image.Image;
     11 import javafx.scene.layout.StackPane;
     12 import javafx.stage.Stage;
     13 import javafx.stage.StageStyle;
     14 
     15 public class Main extends Application {
     16 
     17     private Stage mainStage;
     18 
     19     @Override
     20     public void start(Stage primaryStage) throws Exception{
     21         mainStage = primaryStage;
     22         mainStage.setResizable(false);
     23         //设置窗口的图标.
     24         mainStage.getIcons().add(new Image(
     25                 Main.class.getResourceAsStream("logo.png")));
     26         FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
     27         Parent root = loader.load();
     28         primaryStage.setTitle("图书管理系统");
     29         Controller controller = loader.getController();
     30         controller.setApp(this);
     31         Scene scene = new Scene(root, 700, 460);
     32         scene.getStylesheets().add(Main.class.getResource("main.css").toExternalForm());
     33         primaryStage.setScene(scene);
     34         primaryStage.show();
     35     }
     36 
     37     public void gotoMainUi(String userId) {
     38         try {
     39             FXMLLoader loader = new FXMLLoader(getClass().getResource("main_ui.fxml"));
     40             Parent root = loader.load();
     41             mainStage.setTitle("图书管理系统");
     42             MainUiController controller = loader.getController();
     43             controller.setApp(this);
     44             controller.setMyName(userId);
     45             Scene scene = new Scene(root, 700, 500);
     46             scene.getStylesheets().add(Main.class.getResource("main.css").toExternalForm());
     47             mainStage.setScene(scene);
     48             mainStage.show();
     49         } catch (Exception e) {
     50             System.out.println(e.getMessage());
     51         }
     52 
     53     }
     54 
     55     public void gotoReaderUi(String id) {
     56         try {
     57             FXMLLoader loader = new FXMLLoader(getClass().getResource("reader_ui.fxml"));
     58             Parent root = loader.load();
     59             mainStage.setTitle("图书管理系统");
     60             ReaderUi controller = loader.getController();
     61             controller.setApp(this);
     62             controller.setUserInfo(id);
     63             Scene scene = new Scene(root, 700, 460);
     64             scene.getStylesheets().add(Main.class.getResource("main.css").toExternalForm());
     65             mainStage.setScene(scene);
     66             mainStage.show();
     67         } catch (Exception e) {
     68             System.out.println(e.getMessage()+e.toString());
     69         }
     70 
     71     }
     72 
     73     public void closeWindow() {
     74         mainStage.close();
     75     }
     76 
     77     public void hideWindow(){ mainStage.hide();}
     78 
     79     public void showWindow(){ mainStage.show();}
     80 
     81 
     82     public static void main(String[] args) {
     83         launch(args);
     84     }
     85 
     86     public void gotoLoginUi() {
     87         try {
     88             FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml"));
     89             Parent root = loader.load();
     90             mainStage.setTitle("图书管理系统");
     91             Controller controller = loader.getController();
     92             controller.setApp(this);
     93             Scene scene = new Scene(root, 700, 460);
     94             scene.getStylesheets().add(Main.class.getResource("main.css").toExternalForm());
     95             mainStage.setScene(scene);
     96             mainStage.show();
     97         } catch (Exception e) {
     98             System.out.println(e.toString());
     99         }
    100 
    101     }
    102 }

     2.登陆界面controller

      1 package sample;
      2 
      3 import Util.DataBaseUtil;
      4 import Util.FileUtil;
      5 import com.jfoenix.controls.*;
      6 import com.jfoenix.validation.RequiredFieldValidator;
      7 import javafx.application.Platform;
      8 import javafx.concurrent.Task;
      9 import javafx.fxml.FXML;
     10 import javafx.fxml.FXMLLoader;
     11 import javafx.fxml.Initializable;
     12 import javafx.scene.Parent;
     13 import javafx.scene.Scene;
     14 import javafx.scene.control.Alert;
     15 import javafx.scene.control.ToggleGroup;
     16 import javafx.stage.Stage;
     17 
     18 import java.awt.*;
     19 import java.io.IOException;
     20 import java.net.URL;
     21 import java.util.Arrays;
     22 import java.util.ResourceBundle;
     23 import java.util.concurrent.TimeUnit;
     24 import java.util.logging.Handler;
     25 import java.util.regex.Pattern;
     26 
     27 import static java.lang.Thread.sleep;
     28 
     29 public class Controller implements Initializable {
     30 
     31     @FXML
     32     public ToggleGroup identity;
     33 
     34     private Main myApp;
     35 
     36     @FXML
     37     private JFXCheckBox rememberInfo;
     38 
     39     @FXML
     40     private JFXProgressBar prgs_login;
     41 
     42     @FXML
     43     private JFXButton btn_start;
     44 
     45     @FXML
     46     private JFXTextField tf_user;
     47 
     48     @FXML
     49     private JFXPasswordField tf_passWord;
     50 
     51     @FXML
     52     private JFXRadioButton rb_duzhe;
     53 
     54     @FXML
     55     private JFXRadioButton rb_gzry;
     56 
     57     JFXDialog dialog = new JFXDialog();
     58 
     59     private Thread thread;
     60 
     61     public void setApp(Main myApp) {
     62         this.myApp = myApp;
     63     }
     64 
     65     @Override
     66     public void initialize(URL location, ResourceBundle resources) {
     67 
     68         rememberInfo.setSelected(true);
     69 
     70         RequiredFieldValidator validator = new RequiredFieldValidator();
     71         validator.setMessage("请输入用户名...");
     72         tf_user.getValidators().add(validator);
     73         tf_user.focusedProperty().addListener((o,oldVal,newVal)->{
     74             if(!newVal) tf_user.validate();
     75         });
     76 
     77         RequiredFieldValidator validator2 = new RequiredFieldValidator();
     78         validator2.setMessage("请输入密码...");
     79         tf_passWord.getValidators().add(validator2);
     80         tf_passWord.focusedProperty().addListener((o,oldVal,newVal)->{
     81             if(!newVal) tf_passWord.validate();
     82         });
     83 
     84         rb_duzhe.setSelected(true);
     85 //        lb_Title.setIcon(new ImageIcon(LogOnFrm.class.getResource("/images/logo.png")));
     86 //        dialog.setContent(new Label("Content"));
     87 //        btn_start.setOnAction((action)->dialog.show());
     88         prgs_login.setVisible(false);
     89         String str = FileUtil.getUserAndPass();
     90         Pattern p = Pattern.compile("[#]+");
     91         String[] result = p.split(str);
     92         if (result.length >= 1) {
     93             tf_user.setText(result[0]);
     94         }
     95         if (result.length >= 2) {
     96             tf_passWord.setText(result[1]);
     97         }
     98 
     99     }
    100 
    101     /**
    102      * 登录按钮点击事件
    103      */
    104     @FXML
    105     public void onStart() {
    106         System.out.println("ok");
    107         prgs_login.setVisible(true);
    108         //创建线程登录
    109         myProgress myProgress = new myProgress(prgs_login);
    110         thread = new Thread(myProgress);
    111         thread.setPriority(Thread.MAX_PRIORITY);
    112         thread.start();
    113 
    114         if (rememberInfo.isSelected()) {
    115             FileUtil.setUserAndPass(tf_user.getText(), tf_passWord.getText());
    116         }else{
    117             FileUtil.setUserAndPass(tf_user.getText(), "");
    118         }
    119 
    120         //登录界面控件不可见
    121         setDisable(true);
    122 
    123 
    124 //        prgs_login.setVisible(false);
    125     }
    126 
    127     /**
    128      * 登录期间------组件的控制-----登录界面控件不可见
    129      */
    130     public void setDisable(Boolean bool) {
    131         btn_start.setDisable(bool);
    132         tf_user.setDisable(bool);
    133         tf_passWord.setDisable(bool);
    134         rememberInfo.setDisable(bool);
    135     }
    136 
    137 
    138     /**
    139      * 检查并登录
    140      */
    141     private void doCheckUser() {
    142         if (identity.getSelectedToggle() == rb_duzhe) {
    143             if (DataBaseUtil.checkReader(tf_user.getText().trim(),tf_passWord.getText())) {
    144                 myApp.gotoReaderUi(tf_user.getText());
    145             } else {
    146                 setDisable(false);
    147                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    148                 alert.setAlertType(Alert.AlertType.ERROR);
    149                 alert.setTitle("登录失败!");
    150                 alert.show();
    151             }
    152         } else if (identity.getSelectedToggle() == rb_gzry) {
    153             if (DataBaseUtil.checkUser(tf_user.getText().trim(),tf_passWord.getText())) {
    154                 myApp.gotoMainUi(tf_user.getText());
    155             } else {
    156                 setDisable(false);
    157                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    158                 alert.setAlertType(Alert.AlertType.ERROR);
    159                 alert.setTitle("登录失败!");
    160                 alert.show();
    161             }
    162         }
    163     }
    164 
    165     /**
    166      * 忘记密码
    167      */
    168     @FXML
    169     public void forgotPass() {
    170         myApp.hideWindow();
    171         Stage myStage=new Stage();
    172         myStage.setResizable(false);
    173         FXMLLoader loader = new FXMLLoader(getClass().getResource("forgotPass.fxml"));
    174         Parent root = null;
    175         try {
    176             root = loader.load();
    177         } catch (IOException e) {
    178             e.printStackTrace();
    179         }
    180         ForgotPass con = loader.getController();
    181         con.setMyApp(myApp);
    182         con.setController(myStage);
    183         myStage.setTitle("忘记密码");
    184         Scene scene = new Scene(root, 500, 400);
    185         scene.getStylesheets().add(Main.class.getResource("main.css").toExternalForm());
    186         myStage.setScene(scene);
    187         myStage.show();
    188 
    189     }
    190 
    191 
    192     /**
    193      * 登录界面--点击登录按钮后---启用新的线程检查用户身份是否正确
    194      */
    195    class myProgress implements Runnable {
    196 
    197         private JFXProgressBar prgs_login;
    198 
    199         myProgress(JFXProgressBar prgs_login) {
    200             this.prgs_login = prgs_login;
    201         }
    202 
    203         @Override
    204         public void run() {
    205             try {
    206 
    207                 for (int i = 0; i <= 100; i++) {
    208                     prgs_login.setProgress(i);
    209 
    210                 }
    211                 sleep(100);
    212                 //更新JavaFX的主线程的代码放在此处
    213                 Platform.runLater(Controller.this::doCheckUser);
    214 
    215             } catch (Exception ignored) {
    216 
    217             }
    218         }
    219     }
    220 
    221 
    222 }

    3.登陆界面fxml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 
     3 <?import com.jfoenix.controls.JFXButton?>
     4 <?import com.jfoenix.controls.JFXCheckBox?>
     5 <?import com.jfoenix.controls.JFXPasswordField?>
     6 <?import com.jfoenix.controls.JFXProgressBar?>
     7 <?import com.jfoenix.controls.JFXRadioButton?>
     8 <?import com.jfoenix.controls.JFXTextField?>
     9 <?import javafx.scene.control.Hyperlink?>
    10 <?import javafx.scene.control.Label?>
    11 <?import javafx.scene.control.Separator?>
    12 <?import javafx.scene.control.ToggleGroup?>
    13 <?import javafx.scene.layout.AnchorPane?>
    14 <?import javafx.scene.text.Font?>
    15 
    16 <AnchorPane id="AnchorPane" fx:id="anchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="485.0" prefWidth="722.0" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
    17     <children>
    18       <Label layoutX="296.0" layoutY="175.0" text="登录界面" textFill="GOLD">
    19          <font>
    20             <Font name="System Bold Italic" size="29.0" />
    21          </font>
    22       </Label>
    23       <JFXButton fx:id="btn_start" buttonType="RAISED" layoutX="561.0" layoutY="317.0" mnemonicParsing="false" onAction="#onStart" prefHeight="23.0" prefWidth="73.0" text="登录" />
    24       <JFXTextField fx:id="tf_user" focusColor="DEEPSKYBLUE" layoutX="383.0" layoutY="267.0" promptText="请输入用户名..." style="-fx-background-color: #808080;" />
    25       <Label layoutX="329.0" layoutY="271.0" text="用户名" textFill="DARKORANGE">
    26          <font>
    27             <Font name="System Bold" size="15.0" />
    28          </font></Label>
    29       <Label layoutX="330.0" layoutY="318.0" text="密  码" textFill="DARKORANGE">
    30          <font>
    31             <Font name="System Bold" size="15.0" />
    32          </font></Label>
    33       <JFXPasswordField fx:id="tf_passWord" focusColor="DEEPSKYBLUE" layoutX="383.0" layoutY="317.0" promptText="请输入密码..." style="-fx-background-color: #808080;" />
    34       <JFXProgressBar fx:id="prgs_login" layoutY="460.0" prefHeight="10.0" prefWidth="722.0" progress="0.0" />
    35       <Label layoutX="77.0" layoutY="120.0" prefHeight="55.0" prefWidth="219.0" text="图书管理系统" textFill="DEEPSKYBLUE">
    36          <font>
    37             <Font name="System Bold Italic" size="33.0" />
    38          </font>
    39       </Label>
    40       <JFXCheckBox fx:id="rememberInfo" layoutX="561.0" layoutY="272.0" mnemonicParsing="false" selected="true" text="记住密码" textFill="WHITE" />
    41       <Separator layoutX="322.0" layoutY="363.0" prefHeight="4.0" prefWidth="344.0" />
    42       <Hyperlink layoutX="564.0" layoutY="374.0" onAction="#forgotPass" prefHeight="21.0" prefWidth="80.0" text=" 忘记密码 ?" textFill="WHITE" />
    43       <JFXRadioButton fx:id="rb_duzhe" layoutX="383.0" layoutY="239.0" mnemonicParsing="false" prefHeight="15.0" prefWidth="66.0" text="读者" textFill="#00e5ff">
    44          <toggleGroup>
    45             <ToggleGroup fx:id="identity" />
    46          </toggleGroup>
    47       </JFXRadioButton>
    48       <JFXRadioButton fx:id="rb_gzry" layoutX="457.0" layoutY="239.0" mnemonicParsing="false" prefHeight="15.0" prefWidth="66.0" text="工作人员" textFill="#00e5ff" toggleGroup="$identity" />
    49     </children>
    50 </AnchorPane>
    View Code

    效果如下:

    4.读者界面controller

      1 package sample;
      2 
      3 import Util.DataBaseUtil;
      4 import Util.DateUtils;
      5 import com.jfoenix.controls.JFXButton;
      6 import com.jfoenix.controls.JFXTextField;
      7 import com.jfoenix.validation.RequiredFieldValidator;
      8 import javafx.beans.property.DoubleProperty;
      9 import javafx.beans.property.SimpleBooleanProperty;
     10 import javafx.beans.property.SimpleDoubleProperty;
     11 import javafx.beans.value.ObservableValue;
     12 import javafx.collections.ObservableList;
     13 import javafx.event.ActionEvent;
     14 import javafx.event.EventHandler;
     15 import javafx.fxml.FXML;
     16 import javafx.fxml.Initializable;
     17 import javafx.geometry.Insets;
     18 import javafx.scene.control.*;
     19 import javafx.scene.control.cell.PropertyValueFactory;
     20 import javafx.scene.input.KeyCode;
     21 import javafx.scene.input.KeyEvent;
     22 import javafx.scene.input.MouseEvent;
     23 import javafx.scene.layout.StackPane;
     24 import javafx.stage.Stage;
     25 import javafx.util.Callback;
     26 import sample.entity.Book;
     27 import sample.entity.Borrow;
     28 import sample.entity.Reader;
     29 import sample.entity.borrow_record;
     30 
     31 import java.math.BigDecimal;
     32 import java.net.URL;
     33 import java.text.SimpleDateFormat;
     34 import java.util.Date;
     35 import java.util.ResourceBundle;
     36 
     37 public class ReaderUi implements Initializable {
     38 
     39     private Reader user;
     40 
     41     @FXML
     42     private JFXTextField tf_reader_search;//搜索框
     43     @FXML
     44     private JFXButton btn_search;//搜索按钮
     45     @FXML
     46     private JFXTextField tf_search_bookId;//要借图书id
     47     @FXML
     48     private JFXTextField tf_search_bookName;//要借图书名称
     49     @FXML
     50     private JFXButton btn_search_confirmBook;//确认借书
     51     @FXML
     52     private JFXButton btn_search_confirmBorrow;//确认借书
     53 
     54     @FXML
     55     private TableView tbv_search_Result;//
     56     @FXML
     57     private TableColumn tb_column_book_id;
     58     @FXML
     59     private TableColumn tb_column_book_name;
     60     @FXML
     61     private TableColumn tb_column_book_type;
     62     @FXML
     63     private TableColumn tb_column_book_author;
     64     @FXML
     65     private TableColumn tb_column_book_translator;
     66     @FXML
     67     private TableColumn tb_column_book_publisher;
     68     @FXML
     69     private TableColumn tb_column_book_publishTime;
     70     @FXML
     71     private TableColumn tb_column_book_price;
     72 
     73 
     74     //用户信息
     75     @FXML
     76     private JFXTextField tf_userInfo_readerId;
     77     @FXML
     78     private JFXTextField tf_userInfo_readerName;
     79     @FXML
     80     private JFXTextField tf_userInfo_readerType;
     81     @FXML
     82     private JFXTextField tf_userInfo_readerSex;
     83     @FXML
     84     private JFXTextField tf_userInfo_readerMaxNumbers;
     85     @FXML
     86     private JFXTextField tf_userInfo_readerMaxDays;
     87     @FXML
     88     private JFXTextField tf_userInfo_readerForfeit;
     89 
     90     @FXML
     91     private TableView tbv_userInfo_borrowRecord;
     92     @FXML
     93     private TableColumn tb_column_userInfo_bookId;
     94     @FXML
     95     private TableColumn tb_column_userInfo_bookName;
     96     @FXML
     97     private TableColumn tb_column_userInfo_backDate;
     98     @FXML
     99     private TableColumn tb_column_userInfo_reBorrow;
    100 
    101     @FXML
    102     private Label lb_search_resultNumber;
    103     @FXML
    104     private Label lb_welcome;
    105     @FXML
    106     private Label lb_js_reader_jieshu_date;
    107     @FXML
    108     private Label lb_js_reader_huanshu_date;
    109 
    110     @FXML
    111     private JFXTextField tf_userInfo_jiaoKuan;
    112 
    113     private Main myApp;
    114 
    115     public void setApp(Main myApp) {
    116         this.myApp = myApp;
    117     }
    118 
    119     @Override
    120     public void initialize(URL location, ResourceBundle resources) {
    121 
    122         tf_reader_search.setOnKeyPressed(this::tf_reader_search_keyEvent);
    123         tf_search_bookId.setOnKeyPressed(this::tf_search_book_keyEvent);
    124 
    125         //所有书目列表初始化
    126         tb_column_book_id.setCellValueFactory(new PropertyValueFactory("Id"));
    127         tb_column_book_name.setCellValueFactory(new PropertyValueFactory("name"));
    128         tb_column_book_type.setCellValueFactory(new PropertyValueFactory("type"));
    129         tb_column_book_author.setCellValueFactory(new PropertyValueFactory("author"));
    130         tb_column_book_translator.setCellValueFactory(new PropertyValueFactory("translator"));
    131         tb_column_book_publisher.setCellValueFactory(new PropertyValueFactory("publisher"));
    132         tb_column_book_publishTime.setCellValueFactory(new PropertyValueFactory("publishTime"));
    133         tb_column_book_price.setCellValueFactory(new PropertyValueFactory("price"));
    134 
    135         RequiredFieldValidator validator = new RequiredFieldValidator();
    136         validator.setMessage("请输入...");
    137         tf_search_bookId.getValidators().add(validator);
    138         tf_search_bookId.getValidators().add(validator);
    139         tf_search_bookId.focusedProperty().addListener((o,oldVal,newVal)->{
    140             if(!newVal) tf_search_bookId.validate();
    141         });
    142 
    143     }
    144 
    145 
    146     //Define the button cell
    147     private class ButtonCell extends TableCell<borrow_record, Boolean> {
    148         final Button cellButton = new Button("续借");
    149 
    150         ButtonCell(){
    151             cellButton.setOnAction(t -> {
    152                 // do something when button clicked
    153                 tbv_userInfo_borrowRecord.getSelectionModel().select(getTableRow().getIndex());
    154                 ObservableList<borrow_record> userbb = tbv_userInfo_borrowRecord.getItems();
    155                 System.out.println("图书ID-->"+userbb.get(getTableRow().getIndex()).getBookId()+userbb.get(getTableRow().getIndex()).getBookName());
    156                 String bookId = userbb.get(getTableRow().getIndex()).getBookId();
    157                 String backDate = userbb.get(getTableRow().getIndex()).getBackDate();
    158                 userBorrowBookXuJie(bookId,backDate);
    159             });
    160         }
    161 
    162         //Display button if the row is not empty
    163         @Override
    164         protected void updateItem(Boolean t, boolean empty) {
    165             super.updateItem(t, empty);
    166             if(!empty){
    167                 setGraphic(cellButton);
    168             }
    169         }
    170     }
    171 
    172     private void userBorrowBookXuJie(String bookId, String backDate) {
    173         String bDate = DateUtils.getAfterDay(backDate, user.getDays_num());
    174         if (user.getForfeit() > 0) {
    175             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    176             alert.setAlertType(Alert.AlertType.INFORMATION);
    177             alert.setContentText("有超期数目欠款,续借失败!");
    178             alert.setTitle("续借失败!");
    179             alert.show();
    180         } else {
    181             boolean isok = DataBaseUtil.reBorrow(user.getId(),bookId,bDate);
    182             if (isok) {
    183                 getBorrowedRecordings(user.getId());
    184                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    185                 alert.setAlertType(Alert.AlertType.INFORMATION);
    186                 alert.setContentText("续借成功,应还日期为:" + bDate);
    187                 alert.setTitle("续借成功!");
    188                 alert.show();
    189             }
    190         }
    191 
    192     }
    193 
    194     /**
    195      * 退出登录
    196      */
    197     @FXML
    198     public void hbrlink_goto_login() {
    199         myApp.gotoLoginUi();
    200     }
    201 
    202     /**
    203      * 确认图书
    204      * @param keyEvent
    205      */
    206     private void tf_search_book_keyEvent(KeyEvent keyEvent) {
    207         if (keyEvent.getCode().equals(KeyCode.ENTER)) {
    208             Book book = DataBaseUtil.getBook(tf_search_bookId.getText());
    209             if (book != null) {
    210                 tf_search_bookName.setText(book.getName());
    211             }
    212         }
    213     }
    214 
    215     @FXML
    216     public void tf_search_book() {
    217         if (!tf_search_bookId.getText().equals("")) {
    218             Book book = DataBaseUtil.getBook(tf_search_bookId.getText());
    219             if (book != null) {
    220                 tf_search_bookName.setText(book.getName());
    221             }
    222         } else {
    223             tf_search_bookId.validate();
    224         }
    225     }
    226 
    227     /**
    228      * 搜索图书---监听回车
    229      * @param keyEvent
    230      */
    231     private void tf_reader_search_keyEvent(KeyEvent keyEvent) {
    232         if (keyEvent.getCode().equals(KeyCode.ENTER)) {
    233             ObservableList<Book> books = DataBaseUtil.getAllLikesBooks(tf_reader_search.getText());
    234             if (books != null) {
    235                 tbv_search_Result.setItems(books);
    236                 lb_search_resultNumber.setText(tbv_search_Result.getItems().size()+" 条记录");
    237             }
    238         }
    239     }
    240 
    241     /**
    242      * 搜索图书
    243      */
    244     @FXML
    245     private void tf_reader_search() {
    246         ObservableList<Book> books = DataBaseUtil.getAllLikesBooks(tf_reader_search.getText());
    247         if (books != null) {
    248             tbv_search_Result.setItems(books);
    249             lb_search_resultNumber.setText(tbv_search_Result.getItems().size()+" 条记录");
    250         }
    251     }
    252 
    253     /**
    254      * 设置用户信息
    255      * @param id
    256      */
    257     public void setUserInfo(String id) {
    258         Reader reader = DataBaseUtil.getReader(id);
    259         if (reader != null) {
    260             user = reader;
    261             tf_userInfo_readerId.setText(reader.getId());
    262             tf_userInfo_readerName.setText(reader.getName());
    263             tf_userInfo_readerType.setText(reader.getType());
    264             tf_userInfo_readerSex.setText(reader.getSex());
    265             tf_userInfo_readerMaxNumbers.setText(reader.getMax_num()+"");
    266             tf_userInfo_readerMaxDays.setText(reader.getDays_num()+"");
    267             tf_userInfo_readerForfeit.setText(reader.getForfeit() + "");
    268 
    269             lb_welcome.setText(reader.getName()+" ,您好!");
    270 
    271             SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
    272             //初始化当前时间
    273             lb_js_reader_jieshu_date.setText(df.format(new Date()));
    274             lb_js_reader_huanshu_date.setText(DateUtils.getAfterDay(lb_js_reader_jieshu_date.getText(), user.getDays_num()));
    275 
    276             getBorrowedRecordings(id);
    277         }
    278     }
    279 
    280     /**
    281      * 获取全部借阅记录
    282      */
    283     public void getBorrowedRecordings(String id) {
    284         tb_column_userInfo_bookId.setCellValueFactory(new PropertyValueFactory("bookId"));
    285         tb_column_userInfo_bookName.setCellValueFactory(new PropertyValueFactory("bookName"));
    286         tb_column_userInfo_backDate.setCellValueFactory(new PropertyValueFactory("backDate"));
    287 //        tb_column_userInfo_reBorrow.setCellValueFactory(new PropertyValueFactory("isBack"));
    288 
    289         tb_column_userInfo_reBorrow.setCellValueFactory((Callback<TableColumn.CellDataFeatures<borrow_record, Boolean>, ObservableValue<Boolean>>) p -> new SimpleBooleanProperty(p.getValue() != null));
    290         tb_column_userInfo_reBorrow.setCellFactory((Callback<TableColumn<borrow_record, Boolean>, TableCell<borrow_record, Boolean>>) p -> new ButtonCell());
    291         //tbv_userInfo_borrowRecord.getColumns().add(tb_column_userInfo_reBorrow);
    292 
    293         ObservableList<borrow_record> borrows = DataBaseUtil.getBorrowRecord(id);
    294         if (borrows != null) {
    295             tbv_userInfo_borrowRecord.setItems(borrows);
    296         }
    297     }
    298 
    299     public void borrow_book() {
    300         if (!tf_search_bookId.getText().trim().equals("")) {
    301             boolean isBorrow = DataBaseUtil.addNewBorrow(tf_search_bookId.getText(), user.getId(), lb_js_reader_jieshu_date.getText(), lb_js_reader_huanshu_date.getText(), 0);
    302             if (isBorrow) {
    303                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    304                 alert.setAlertType(Alert.AlertType.INFORMATION);
    305                 alert.setContentText("借书成功!");
    306                 alert.setTitle("借书成功!");
    307                 alert.show();
    308                 getBorrowedRecordings(user.getId());
    309                 tf_search_bookId.setText("");
    310                 tf_search_bookName.setText("");
    311             } else {
    312                 Alert alert = new Alert(Alert.AlertType.ERROR);
    313                 alert.setAlertType(Alert.AlertType.ERROR);
    314                 alert.setContentText("借书失败!");
    315                 alert.setTitle("借书失败!");
    316                 alert.show();
    317             }
    318         } else {
    319             tf_search_bookId.validate();
    320         }
    321     }
    322 
    323     public void jiaokuan() {
    324         if (user.getForfeit() > 0) {
    325             if (!tf_userInfo_jiaoKuan.getText().trim().equals("")) {
    326                 double jiaokuanFirst = user.getForfeit() - Double.parseDouble(tf_userInfo_jiaoKuan.getText().trim());
    327                 BigDecimal bg = new BigDecimal(jiaokuanFirst);
    328                 double jiaokuan = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
    329                 boolean isok;
    330                 if (jiaokuan < 0) {
    331                     isok = DataBaseUtil.jiaokuan(user.getId(), 0);
    332                     if (isok) {
    333                         Alert alert = new Alert(Alert.AlertType.ERROR);
    334                         alert.setAlertType(Alert.AlertType.ERROR);
    335                         alert.setContentText("支付成功!找零为 " + Math.abs(jiaokuan) + "¥");
    336                         alert.setTitle("提示!");
    337                         alert.show();
    338                     } else {
    339                         Alert alert = new Alert(Alert.AlertType.ERROR);
    340                         alert.setAlertType(Alert.AlertType.ERROR);
    341                         alert.setContentText("系统错误,支付失败!");
    342                         alert.setTitle("提示!");
    343                         alert.show();
    344                     }
    345                 }else{
    346                     isok = DataBaseUtil.jiaokuan(user.getId(), Math.abs(jiaokuan));
    347                     if (isok) {
    348                         Alert alert = new Alert(Alert.AlertType.ERROR);
    349                         alert.setAlertType(Alert.AlertType.ERROR);
    350                         alert.setContentText("支付成功!还需交款: " + Math.abs(jiaokuan) + "¥");
    351                         alert.setTitle("提示!");
    352                         alert.show();
    353                     } else {
    354                         Alert alert = new Alert(Alert.AlertType.ERROR);
    355                         alert.setAlertType(Alert.AlertType.ERROR);
    356                         alert.setContentText("系统错误,支付失败!");
    357                         alert.setTitle("提示!");
    358                         alert.show();
    359                     }
    360                 }
    361                 setUserInfo(user.getId());
    362                 tf_userInfo_jiaoKuan.setText("");
    363             } else {
    364                 Alert alert = new Alert(Alert.AlertType.ERROR);
    365                 alert.setAlertType(Alert.AlertType.ERROR);
    366                 alert.setContentText("请输入交款金额!");
    367                 alert.setTitle("提示!");
    368                 alert.show();
    369             }
    370         } else {
    371             Alert alert = new Alert(Alert.AlertType.ERROR);
    372             alert.setAlertType(Alert.AlertType.ERROR);
    373             alert.setContentText("无超期欠款,无需支付!");
    374             alert.setTitle("提示!");
    375             alert.show();
    376             tf_userInfo_jiaoKuan.setText("");
    377         }
    378     }
    379 
    380 
    381 }

    5.读者界面fxml

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 
      3 <?import com.jfoenix.controls.JFXButton?>
      4 <?import com.jfoenix.controls.JFXTabPane?>
      5 <?import com.jfoenix.controls.JFXTextField?>
      6 <?import javafx.scene.control.Hyperlink?>
      7 <?import javafx.scene.control.Label?>
      8 <?import javafx.scene.control.Separator?>
      9 <?import javafx.scene.control.Tab?>
     10 <?import javafx.scene.control.TableColumn?>
     11 <?import javafx.scene.control.TableView?>
     12 <?import javafx.scene.layout.AnchorPane?>
     13 <?import javafx.scene.text.Font?>
     14 
     15 <AnchorPane prefHeight="498.0" prefWidth="700.0" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.ReaderUi">
     16    <Label layoutX="314.0" layoutY="36.0" text="读者界面" textFill="GOLD">
     17       <font>
     18          <Font name="System Bold Italic" size="18.0" />
     19       </font>
     20    </Label>
     21 
     22    <JFXTabPane layoutX="14.0" layoutY="88.0" prefHeight="385.0" prefWidth="669.0" tabClosingPolicy="UNAVAILABLE">
     23       <Tab text="查询">
     24          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="577.0">
     25             <JFXButton fx:id="btn_search_confirmBook" layoutX="553.0" layoutY="235.0" mnemonicParsing="false" onAction="#tf_search_book" text="确认图书" />
     26             <JFXTextField fx:id="tf_reader_search" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="58.0" layoutY="39.0" prefHeight="23.0" prefWidth="481.0" promptText="搜索书名/作者/出版社/类别" style="-fx-background-color: #808080;" />
     27             <JFXButton fx:id="btn_search" layoutX="549.0" layoutY="39.0" mnemonicParsing="false" onAction="#tf_reader_search" prefHeight="23.0" prefWidth="72.0" text="搜索" />
     28             <TableView fx:id="tbv_search_Result" layoutX="23.0" layoutY="93.0" prefHeight="124.0" prefWidth="624.0">
     29                <columns>
     30                   <TableColumn fx:id="tb_column_book_id" prefWidth="63.99998474121094" text="图书ID" />
     31                   <TableColumn fx:id="tb_column_book_name" prefWidth="100.0" text="图书名称" />
     32                   <TableColumn fx:id="tb_column_book_type" prefWidth="78.0" text="图书类别" />
     33                   <TableColumn fx:id="tb_column_book_author" prefWidth="55.0" text="作者" />
     34                   <TableColumn fx:id="tb_column_book_translator" prefWidth="62.0" text="译者" />
     35                   <TableColumn fx:id="tb_column_book_publisher" prefWidth="98.0" text="出版社" />
     36                   <TableColumn fx:id="tb_column_book_publishTime" prefWidth="95.0" text="出版时间" />
     37                   <TableColumn fx:id="tb_column_book_price" prefWidth="69.0" text="价格" />
     38                </columns>
     39             </TableView>
     40             <Label layoutX="77.0" layoutY="237.0" text="图书ID" textFill="#2196f3">
     41                <font>
     42                   <Font name="System Bold Italic" size="15.0" />
     43                </font>
     44             </Label>
     45             <JFXTextField fx:id="tf_search_bookId" focusColor="DEEPSKYBLUE" layoutX="134.0" layoutY="235.0" prefHeight="23.0" prefWidth="185.0" style="-fx-background-color: #F5F5F5;" />
     46             <JFXTextField fx:id="tf_search_bookName" editable="false" focusColor="DEEPSKYBLUE" layoutX="391.0" layoutY="235.0" style="-fx-background-color: #F5F5F5;" />
     47             <Label layoutX="335.0" layoutY="239.0" text="图书名称" textFill="WHITE" />
     48             <JFXButton fx:id="btn_search_confirmBorrow" layoutX="549.0" layoutY="292.0" mnemonicParsing="false" onAction="#borrow_book" prefHeight="23.0" prefWidth="72.0" text="确认借书" />
     49             <Label layoutX="62.0" layoutY="76.0" text="总共:" textFill="#f8f8f8" />
     50             <Label fx:id="lb_search_resultNumber" layoutX="101.0" layoutY="76.0" text="0 条记录" textFill="WHITE" />
     51             <Label layoutX="84.0" layoutY="294.0" text="借书日期" textFill="#d84315" />
     52             <Label layoutX="342.0" layoutY="294.0" text="应还日期" textFill="#d84315" />
     53             <Label fx:id="lb_js_reader_jieshu_date" alignment="CENTER" layoutX="155.0" layoutY="294.0" prefHeight="15.0" prefWidth="95.0">
     54                <font>
     55                   <Font name="System Bold" size="13.0" />
     56                </font></Label>
     57             <Label fx:id="lb_js_reader_huanshu_date" alignment="CENTER" layoutX="421.0" layoutY="294.0" prefHeight="15.0" prefWidth="92.0">
     58                <font>
     59                   <Font name="System Bold" size="13.0" />
     60                </font></Label>
     61          </AnchorPane>
     62       </Tab>
     63       <Tab text="个人信息">
     64          <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="577.0">
     65             <children>
     66                <Label layoutX="60.0" layoutY="53.0" text="用户ID" textFill="#2196f3">
     67                   <font>
     68                      <Font name="System Bold Italic" size="15.0" />
     69                   </font>
     70                </Label>
     71                <Label layoutX="71.0" layoutY="98.0" text="姓名" textFill="#03a9f4">
     72                   <font>
     73                      <Font name="System Bold Italic" size="12.0" />
     74                   </font></Label>
     75                <Label layoutX="71.0" layoutY="127.0" text="身份" textFill="#03a9f4">
     76                   <font>
     77                      <Font name="System Bold" size="12.0" />
     78                   </font></Label>
     79                <Label layoutX="71.0" layoutY="159.0" text="性别" textFill="#03a9f4">
     80                   <font>
     81                      <Font name="System Bold" size="12.0" />
     82                   </font></Label>
     83                <Label layoutX="59.0" layoutY="208.0" text="可借数量" />
     84                <Label layoutX="59.0" layoutY="238.0" text="可借天数" />
     85                <JFXTextField fx:id="tf_userInfo_readerId" alignment="CENTER" editable="false" focusColor="DEEPSKYBLUE" layoutX="118.0" layoutY="51.0" style="-fx-background-color: #808080;" unFocusColor="#bfbbbb" />
     86                <JFXTextField fx:id="tf_userInfo_readerName" alignment="CENTER" editable="false" focusColor="DEEPSKYBLUE" layoutX="118.0" layoutY="94.0" style="-fx-background-color: #F5F5F5;" unFocusColor="#bfbbbb" />
     87                <JFXTextField fx:id="tf_userInfo_readerType" alignment="CENTER" editable="false" focusColor="DEEPSKYBLUE" layoutX="118.0" layoutY="123.0" style="-fx-background-color: #F5F5F5;" unFocusColor="#bfbbbb" />
     88                <JFXTextField fx:id="tf_userInfo_readerSex" alignment="CENTER" editable="false" focusColor="DEEPSKYBLUE" layoutX="118.0" layoutY="155.0" style="-fx-background-color: #F5F5F5;" unFocusColor="#bfbbbb" />
     89                <JFXTextField fx:id="tf_userInfo_readerMaxNumbers" alignment="CENTER" editable="false" focusColor="DEEPSKYBLUE" layoutX="118.0" layoutY="204.0" />
     90                <JFXTextField fx:id="tf_userInfo_readerMaxDays" alignment="CENTER" editable="false" focusColor="DEEPSKYBLUE" layoutX="118.0" layoutY="234.0" />
     91                <Separator layoutX="294.0" layoutY="51.0" prefHeight="3.0" prefWidth="360.0" />
     92                <Label layoutX="449.0" layoutY="27.0" text="借阅记录" textFill="WHITE" />
     93                <TableView fx:id="tbv_userInfo_borrowRecord" layoutX="307.0" layoutY="70.0" prefHeight="200.0" prefWidth="332.0">
     94                  <columns>
     95                    <TableColumn fx:id="tb_column_userInfo_bookId" prefWidth="57.0" text="图书ID" />
     96                    <TableColumn fx:id="tb_column_userInfo_bookName" prefWidth="136.0" text="图书名称" />
     97                     <TableColumn fx:id="tb_column_userInfo_backDate" prefWidth="75.0" text="到期时间" />
     98                     <TableColumn fx:id="tb_column_userInfo_reBorrow" minWidth="0.0" prefWidth="63.0" text="续借" />
     99                  </columns>
    100                </TableView>
    101                <Label layoutX="59.0" layoutY="277.0" text="罚款金额" textFill="#eb0f0f" />
    102                <JFXTextField fx:id="tf_userInfo_readerForfeit" alignment="CENTER" editable="false" focusColor="#eb0707" layoutX="118.0" layoutY="273.0" />
    103                <JFXButton layoutX="224.0" layoutY="308.0" mnemonicParsing="false" onAction="#jiaokuan" text="提交" />
    104                <JFXTextField fx:id="tf_userInfo_jiaoKuan" focusColor="DEEPSKYBLUE" layoutX="118.0" layoutY="308.0" prefHeight="23.0" prefWidth="102.0" />
    105             </children></AnchorPane>
    106       </Tab>
    107    </JFXTabPane>
    108    <Label fx:id="lb_welcome" layoutX="39.0" layoutY="72.0" text="xxx ,您好!" textFill="DARKORANGE" />
    109    <Hyperlink alignment="CENTER" contentDisplay="CENTER" layoutX="630.0" layoutY="61.0" onAction="#hbrlink_goto_login" prefHeight="21.0" prefWidth="53.0" text="  退出  " textAlignment="CENTER" underline="true" />
    110 </AnchorPane>
    View Code

    效果如下:

    6.工作人员controller

       1 package sample;
       2 
       3 import Util.Constant;
       4 import Util.DataBaseUtil;
       5 import Util.DateUtils;
       6 import com.jfoenix.controls.*;
       7 
       8 import com.jfoenix.controls.cells.editors.TextFieldEditorBuilder;
       9 import com.jfoenix.controls.cells.editors.base.GenericEditableTreeTableCell;
      10 import com.jfoenix.controls.datamodels.treetable.RecursiveTreeObject;
      11 import com.jfoenix.validation.RequiredFieldValidator;
      12 
      13 import javafx.beans.binding.Bindings;
      14 import javafx.beans.property.SimpleStringProperty;
      15 import javafx.beans.property.StringProperty;
      16 import javafx.collections.FXCollections;
      17 import javafx.collections.ObservableList;
      18 import javafx.fxml.FXML;
      19 import javafx.fxml.Initializable;
      20 import javafx.scene.control.*;
      21 
      22 import javafx.scene.control.cell.PropertyValueFactory;
      23 import javafx.scene.image.Image;
      24 import javafx.scene.image.ImageView;
      25 import javafx.scene.input.KeyCode;
      26 import javafx.scene.input.KeyEvent;
      27 import javafx.scene.layout.AnchorPane;
      28 import sample.entity.*;
      29 
      30 import java.net.URL;
      31 import java.text.SimpleDateFormat;
      32 import java.util.ArrayList;
      33 import java.util.Date;
      34 import java.util.ResourceBundle;
      35 
      36 public class MainUiController implements Initializable {
      37 
      38 
      39     private Main myApp;
      40 
      41     private String myName="";
      42 
      43     @FXML
      44     private AnchorPane treeview_test;
      45 
      46     //所有书目显示列表信息
      47     @FXML
      48     private TableView tbv_book;//数目列表
      49     @FXML
      50     private TableColumn tb_column_book_id;
      51     @FXML
      52     private TableColumn tb_column_book_name;
      53     @FXML
      54     private TableColumn tb_column_book_type;
      55     @FXML
      56     private TableColumn tb_column_book_author;
      57     @FXML
      58     private TableColumn tb_column_book_translator;
      59     @FXML
      60     private TableColumn tb_column_book_publisher;
      61     @FXML
      62     private TableColumn tb_column_book_publishTime;
      63     @FXML
      64     private TableColumn tb_column_book_price;
      65 
      66     //所有读者显示列表信息
      67     @FXML
      68     private TableView tbv_reader;//读者列表
      69     @FXML
      70     private TableColumn tb_column_reader_id;
      71     @FXML
      72     private TableColumn tb_column_reader_name;
      73     @FXML
      74     private TableColumn tb_column_reader_type;
      75     @FXML
      76     private TableColumn tb_column_reader_sex;
      77     @FXML
      78     private TableColumn tb_column_reader_numbers;
      79     @FXML
      80     private TableColumn tb_column_reader_days;
      81     @FXML
      82     private TableColumn tb_column_reader_forfeit;
      83     @FXML
      84     private TableColumn tb_column_reader_borrowed_books;
      85 
      86 
      87     //所有借阅记录显示列表
      88     @FXML
      89     private TableView tbv_borrow;//借阅列表
      90     @FXML
      91     private TableColumn tb_column_borrow_id;
      92     @FXML
      93     private TableColumn tb_column_borrow_bookId;
      94     @FXML
      95     private TableColumn tb_column_borrow_readerId;
      96     @FXML
      97     private TableColumn tb_column_borrow_borrowDate;
      98     @FXML
      99     private TableColumn tb_column_borrow_backDate;
     100     @FXML
     101     private TableColumn tb_column_borrow_isBack;
     102 
     103 
     104     //借书---图书信息
     105     @FXML
     106     private JFXTextField tf_js_book_id;//图书编号
     107     @FXML
     108     private JFXTextField tf_js_book_name;//图书名称
     109     @FXML
     110     private JFXTextField tf_js_book_publisher;//出版社
     111     @FXML
     112     private JFXTextField tf_js_book_publish_time;//出版时间
     113 
     114     //借书---读者信息
     115     @FXML
     116     private JFXTextField tf_js_reader_id;//读者编号
     117     @FXML
     118     private JFXTextField tf_js_reader_name;//读者名称
     119     @FXML
     120     private JFXTextField tf_js_reader_type;//读者类别
     121     @FXML
     122     private JFXTextField tf_js_reader_sex;//性别
     123 
     124     //借书---button
     125     @FXML
     126     private JFXButton btn_jieshu_confirm;//确认按钮
     127     @FXML
     128     private JFXButton btn_jieshu_clear;//清楚按钮
     129 
     130     //借书---label---日期
     131     @FXML
     132     private Label lb_js_reader_jieshu_date;//借书时间
     133     @FXML
     134     private Label lb_js_reader_huanshu_date;//还书时间
     135 
     136 
     137     //还书---表格信息
     138     @FXML
     139     private TableView tbv_huanshu_record;
     140     @FXML
     141     private TableColumn tb_column_huanshu_bookId;
     142     @FXML
     143     private TableColumn tb_column_huanshu_bookName;
     144     @FXML
     145     private TableColumn tb_column_huanshu_borrowDate;
     146     @FXML
     147     private TableColumn tb_column_huanshu_backDate;
     148 
     149     //还书----读者信息
     150     @FXML
     151     private JFXTextField tf_hs_reader_id;
     152     @FXML
     153     private JFXTextField tf_hs_reader_name;
     154     @FXML
     155     private JFXTextField tf_hs_reader_type;
     156     @FXML
     157     private JFXTextField tf_hs_reader_sex;
     158 
     159     //还书----图书信息
     160     @FXML
     161     private JFXTextField tf_hs_book_id;
     162     @FXML
     163     private JFXTextField tf_hs_book_name;
     164 
     165 
     166     //图书维护---添加
     167     @FXML
     168     private JFXTextField tf_ts_add_book_id;//图书编号
     169     @FXML
     170     private JFXTextField tf_ts_add_book_name;//图书名称
     171     @FXML
     172     private JFXComboBox cb_ts_add_book_type;//图书类别
     173     @FXML
     174     private JFXTextField tf_ts_add_book_author;//作者
     175     @FXML
     176     private JFXTextField tf_ts_add_book_translator;//译者
     177     @FXML
     178     private JFXTextField tf_ts_add_book_publisher;//出版社
     179     @FXML
     180     private JFXDatePicker dp_ts_add_book_publish_time;//出版时间
     181     @FXML
     182     private JFXTextField tf_ts_add_book_price;//图书价格
     183     @FXML
     184     private JFXTextField tf_ts_add_book_stock;//库存容量
     185 
     186     @FXML
     187     private JFXButton btn_ts_add_book_add;//确认添加按钮
     188     @FXML
     189     private JFXButton btn_ts_add_book_clear;//清楚按钮
     190 
     191 
     192     //图书维护----修改
     193     @FXML
     194     private JFXTextField tf_ts_alter_book_search_id;//搜索图书编号
     195     @FXML
     196     private JFXTextField tf_ts_alter_book_id;//图书编号
     197     @FXML
     198     private JFXTextField tf_ts_alter_book_name;//图书名称
     199     @FXML
     200     private JFXComboBox cb_ts_alter_book_type;//图书类别
     201     @FXML
     202     private JFXTextField tf_ts_alter_book_author;//作者
     203     @FXML
     204     private JFXTextField tf_ts_alter_book_translator;//译者
     205     @FXML
     206     private JFXTextField tf_ts_alter_book_publisher;//出版社
     207     @FXML
     208     private JFXDatePicker tp_ts_alter_book_publish_time;//出版时间
     209     @FXML
     210     private JFXTextField tf_ts_alter_book_price;//图书价格
     211     @FXML
     212     private JFXTextField tf_ts_alter_book_stock;//库存容量
     213 
     214     @FXML
     215     private JFXButton btn_ts_alter_book_alterBtn;//确认修改按钮
     216     @FXML
     217     private JFXButton btn_ts_alter_book_clearBtn;//清楚按钮
     218     @FXML
     219     private JFXButton btn_ts_alter_book_searchBtn;//查询按钮
     220 
     221 
     222     //图书维护----删除
     223     @FXML
     224     private JFXTextField tf_ts_delete_book_search_id;//搜索图书编号
     225     @FXML
     226     private JFXTextField tf_ts_delete_book_id;//图书编号
     227     @FXML
     228     private JFXTextField tf_ts_delete_book_name;//图书名称
     229     @FXML
     230     private JFXComboBox cb_ts_delete_book_type;//图书类别
     231     @FXML
     232     private JFXTextField tf_ts_delete_book_author;//作者
     233     @FXML
     234     private JFXTextField tf_ts_delete_book_translator;//译者
     235     @FXML
     236     private JFXTextField tf_ts_delete_book_publisher;//出版社
     237     @FXML
     238     private JFXTextField tf_ts_delete_book_publish_time;//出版时间
     239     @FXML
     240     private JFXTextField tf_ts_delete_book_price;//图书价格
     241     @FXML
     242     private JFXTextField tf_ts_delete_book_stock;//库存容量
     243 
     244     @FXML
     245     private JFXButton btn_ts_delete_book_deleteBtn;//确认修改按钮
     246     @FXML
     247     private JFXButton btn_ts_delete_book_clearBtn;//清楚按钮
     248     @FXML
     249     private JFXButton btn_ts_delete_book_searchBtn;//查询按钮
     250 
     251 
     252 
     253     //读者维护---添加
     254     @FXML
     255     private JFXTextField tf_rd_add_reader_id;//读者编号
     256     @FXML
     257     private JFXTextField tf_rd_add_reader_name;//读者名称
     258     @FXML
     259     private JFXComboBox cb_rd_add_reader_type;//读者类别
     260     @FXML
     261     private JFXComboBox cb_rd_add_reader_sex;//性别
     262     @FXML
     263     private JFXTextField tf_rd_add_reader_numbers;//可借数量
     264     @FXML
     265     private JFXTextField tf_rd_add_reader_days;//可借天数
     266 
     267     @FXML
     268     private JFXButton btn_rd_add_reader_addBtn;//确认添加按钮
     269     @FXML
     270     private JFXButton btn_rd_add_reader_clearBtn;//清楚按钮
     271 
     272 
     273     //读者维护----修改
     274     @FXML
     275     private JFXTextField tf_rd_alter_reader_search_id;//搜索读者编号
     276     @FXML
     277     private JFXTextField tf_rd_alter_reader_id;//读者编号
     278     @FXML
     279     private JFXTextField tf_rd_alter_reader_name;//读者名称
     280     @FXML
     281     private JFXComboBox cb_rd_alter_reader_type;//读者类别
     282     @FXML
     283     private JFXComboBox cb_rd_alter_reader_sex;//性别
     284     @FXML
     285     private JFXTextField tf_rd_alter_reader_numbers;//可借数量
     286     @FXML
     287     private JFXTextField tf_rd_alter_reader_days;//可借天数
     288     @FXML
     289     private JFXToggleButton tgBtn_rd_alter_reader_password_reset;//初始化密码
     290 
     291     @FXML
     292     private JFXButton btn_rd_alter_reader_alterBtn;//确认修改按钮
     293     @FXML
     294     private JFXButton btn_rd_alter_reader_clearBtn;//清楚按钮
     295 
     296 
     297     //读者维护----删除
     298     @FXML
     299     private JFXTextField tf_rd_delete_reader_search_id;//搜索读者编号
     300     @FXML
     301     private JFXTextField tf_rd_delete_reader_id;//读者编号
     302     @FXML
     303     private JFXTextField tf_rd_delete_reader_name;//读者名称
     304     @FXML
     305     private JFXComboBox cb_rd_delete_reader_type;//读者类别
     306     @FXML
     307     private JFXComboBox cb_rd_delete_reader_sex;//性别
     308     @FXML
     309     private JFXTextField tf_rd_delete_reader_numbers;//可借数量
     310     @FXML
     311     private JFXTextField tf_rd_delete_reader_days;//可借天数
     312 
     313     @FXML
     314     private JFXButton btn_rd_delete_reader_deleteBtn;//确认删除按钮
     315     @FXML
     316     private JFXButton btn_rd_delete_reader_clearBtn;//清楚按钮
     317     @FXML
     318     private JFXButton btn_rd_delete_reader_searchBtn;//查询按钮
     319 
     320     @FXML
     321     private Label lb_welcome;//工作人员欢迎
     322 
     323     @FXML
     324     private ImageView imageview;
     325 
     326 
     327     /**
     328      * 主类传递进来,方便界面管理
     329      * @param myApp
     330      */
     331     public void setApp(Main myApp) {
     332         this.myApp = myApp;
     333     }
     334 
     335     /**
     336      * 设置欢迎语句
     337      * @param myName
     338      */
     339     public void setMyName(String myName) {
     340         this.myName = myName;
     341         User user = DataBaseUtil.getUser(myName);
     342         if (user != null) {
     343             lb_welcome.setText(user.getName()+" ,老师您好!");
     344         }
     345     }
     346 
     347     @Override
     348     public void initialize(URL location, ResourceBundle resources) {
     349 
     350 //        Image img=new Image(this.getClass().getResourceAsStream("logo.png"));
     351 //        imageview.setImage(img);
     352 
     353         SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
     354         //初始化当前时间
     355         lb_js_reader_jieshu_date.setText(df.format(new Date()));
     356 
     357         RequiredFieldValidator validator_tf_js_book_id = new RequiredFieldValidator();
     358         validator_tf_js_book_id.setMessage("请输入图书编号...");
     359         tf_js_book_id.getValidators().add(validator_tf_js_book_id);
     360         tf_js_book_id.focusedProperty().addListener((o,oldVal,newVal)->{
     361             if(!newVal) tf_js_book_id.validate();
     362         });
     363 
     364 
     365         RequiredFieldValidator validator_tf_js_reader_id = new RequiredFieldValidator();
     366         validator_tf_js_reader_id.setMessage("请输入读者编号...");
     367         tf_js_reader_id.getValidators().add(validator_tf_js_reader_id);
     368         tf_js_reader_id.focusedProperty().addListener((o,oldVal,newVal)->{
     369             if(!newVal) tf_js_reader_id.validate();
     370         });
     371 
     372         RequiredFieldValidator validator_tf_reqireInput = new RequiredFieldValidator();
     373         validator_tf_reqireInput.setMessage("请输入...");
     374 
     375         tf_hs_reader_id.getValidators().add(validator_tf_reqireInput);
     376         tf_hs_reader_id.focusedProperty().addListener((o,oldVal,newVal)->{
     377             if(!newVal) tf_hs_reader_id.validate();
     378         });
     379 
     380         tf_hs_book_id.getValidators().add(validator_tf_reqireInput);
     381         tf_hs_book_id.focusedProperty().addListener((o,oldVal,newVal)->{
     382             if(!newVal) tf_hs_book_id.validate();
     383         });
     384 
     385         //添加键盘监听
     386         tf_js_book_id.setOnKeyPressed(this::tf_js_book_id_keyEvent);
     387         tf_js_reader_id.setOnKeyPressed(this::tf_js_reader_id_keyEvent);
     388         tf_hs_reader_id.setOnKeyPressed(this::tf_hs_reader_id_keyEvent);
     389         tf_hs_book_id.setOnKeyPressed(this::tf_hs_book_id_keyEvent);
     390 
     391         //图书维护---初始化
     392         initBookAddUi();
     393 
     394         //读者维护---初始化
     395         initReaderAddUi();
     396 
     397 //        initBooksUi();
     398 
     399         //所有书目列表初始化
     400         tb_column_book_id.setCellValueFactory(new PropertyValueFactory("Id"));
     401         tb_column_book_name.setCellValueFactory(new PropertyValueFactory("name"));
     402         tb_column_book_type.setCellValueFactory(new PropertyValueFactory("type"));
     403         tb_column_book_author.setCellValueFactory(new PropertyValueFactory("author"));
     404         tb_column_book_translator.setCellValueFactory(new PropertyValueFactory("translator"));
     405         tb_column_book_publisher.setCellValueFactory(new PropertyValueFactory("publisher"));
     406         tb_column_book_publishTime.setCellValueFactory(new PropertyValueFactory("publishTime"));
     407         tb_column_book_price.setCellValueFactory(new PropertyValueFactory("price"));
     408 
     409         tb_column_reader_id.setCellValueFactory(new PropertyValueFactory("id"));
     410         tb_column_reader_name.setCellValueFactory(new PropertyValueFactory("name"));
     411         tb_column_reader_type.setCellValueFactory(new PropertyValueFactory("type"));
     412         tb_column_reader_sex.setCellValueFactory(new PropertyValueFactory("sex"));
     413         tb_column_reader_numbers.setCellValueFactory(new PropertyValueFactory("max_num"));
     414         tb_column_reader_days.setCellValueFactory(new PropertyValueFactory("days_num"));
     415         tb_column_reader_forfeit.setCellValueFactory(new PropertyValueFactory("forfeit"));
     416 //        tb_column_reader_borrowed_books.setCellValueFactory(new PropertyValueFactory("borrowed_books"));
     417 
     418         tb_column_borrow_id.setCellValueFactory(new PropertyValueFactory("id"));
     419         tb_column_borrow_bookId.setCellValueFactory(new PropertyValueFactory("bookId"));
     420         tb_column_borrow_readerId.setCellValueFactory(new PropertyValueFactory("readerId"));
     421         tb_column_borrow_borrowDate.setCellValueFactory(new PropertyValueFactory("borrowDate"));
     422         tb_column_borrow_backDate.setCellValueFactory(new PropertyValueFactory("backDate"));
     423         tb_column_borrow_isBack.setCellValueFactory(new PropertyValueFactory("isBack"));
     424 
     425         tb_column_huanshu_bookId.setCellValueFactory(new PropertyValueFactory("bookId"));
     426         tb_column_huanshu_bookName.setCellValueFactory(new PropertyValueFactory("bookName"));
     427         tb_column_huanshu_borrowDate.setCellValueFactory(new PropertyValueFactory("borrowDate"));
     428         tb_column_huanshu_backDate.setCellValueFactory(new PropertyValueFactory("backDate"));
     429 
     430     }
     431 
     432 
     433     /**
     434      * 退出登录
     435      */
     436     @FXML
     437     public void hbrlink_goto_login() {
     438         myApp.gotoLoginUi();
     439     }
     440 
     441 
     442     /**
     443      * *********************************************借书模块-------开始************************************************
     444      */
     445 
     446     /**
     447      * 监听----借书--button--确认
     448      */
     449     @FXML
     450     public void js_confirm_start() {
     451         if (!tf_js_book_name.getText().equals("") && !tf_js_reader_name.getText().equals("")) {
     452             boolean isBorrow = DataBaseUtil.addNewBorrow(tf_js_book_id.getText(), tf_js_reader_id.getText(), lb_js_reader_jieshu_date.getText(), lb_js_reader_huanshu_date.getText(), 0);
     453             if (isBorrow) {
     454                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     455                 alert.setAlertType(Alert.AlertType.INFORMATION);
     456                 alert.setContentText("借书成功!");
     457                 alert.setTitle("借书成功!");
     458                 alert.show();
     459                 tf_js_book_id.setText("");
     460                 tf_js_reader_id.setText("");
     461                 clear_js_book();
     462                 clear_js_reader();
     463             }
     464         } else {
     465             tf_js_book_id.setText("");
     466             tf_js_reader_id.setText("");
     467             clear_js_book();
     468             clear_js_reader();
     469             tf_js_book_id.validate();
     470             tf_js_reader_id.validate();
     471         }
     472     }
     473 
     474     /**
     475      * 监听----借书--书--id--输入回车
     476      * @param keyEvent
     477      */
     478     public void tf_js_book_id_keyEvent(KeyEvent keyEvent) {
     479         if (keyEvent.getCode().equals(KeyCode.ENTER)) {
     480             Book book = DataBaseUtil.getBook(tf_js_book_id.getText());
     481             if (book != null) {
     482 //                tf_js_book_id.setText(book.getId());
     483                 tf_js_book_name.setText(book.getName());
     484                 tf_js_book_publisher.setText(book.getPublisher());
     485                 tf_js_book_publish_time.setText(book.getPublishTime().toString());
     486             } else {
     487                 clear_js_book();
     488             }
     489 
     490         }
     491     }
     492 
     493     /**
     494      * 监听----借书--读者--id--输入回车
     495      * @param keyEvent
     496      */
     497     public void tf_js_reader_id_keyEvent(KeyEvent keyEvent) {
     498         if (keyEvent.getCode().equals(KeyCode.ENTER)) {
     499             Reader reader = DataBaseUtil.getReader(tf_js_reader_id.getText());
     500             if (reader != null) {
     501 //                tf_js_reader_id.setText(reader.getId());
     502                 tf_js_reader_name.setText(reader.getName());
     503                 tf_js_reader_type.setText(reader.getType());
     504                 tf_js_reader_sex.setText(reader.getSex());
     505                 lb_js_reader_huanshu_date.setText(DateUtils.getAfterDay(lb_js_reader_jieshu_date.getText(), reader.getDays_num()));
     506             } else {
     507                 clear_js_reader();
     508             }
     509 
     510         }
     511     }
     512 
     513     /**
     514      * 监听----借书--button--清楚
     515      */
     516     @FXML
     517     public void js_clear_start() {
     518         tf_js_book_id.setText("");
     519         tf_js_reader_id.setText("");
     520         clear_js_book();
     521         clear_js_reader();
     522     }
     523 
     524     /**
     525      * 清楚---借书
     526      */
     527     public void clear_js_book() {
     528 //        tf_js_book_id.setText(null);
     529         tf_js_book_name.setText("");
     530         tf_js_book_publisher.setText("");
     531         tf_js_book_publish_time.setText("");
     532     }
     533 
     534     /**
     535      * 清楚---借书
     536      */
     537     public void clear_js_reader() {
     538 //        tf_js_reader_id.setText(null);
     539         tf_js_reader_name.setText("");
     540         tf_js_reader_type.setText("");
     541         tf_js_reader_sex.setText("");
     542         lb_js_reader_huanshu_date.setText("");
     543     }
     544 
     545     /**
     546      * *********************************************还书模块-------开始************************************************
     547      */
     548 
     549     /**
     550      * 还书模块---监听---读者id
     551      * @param keyEvent
     552      */
     553     private void tf_hs_reader_id_keyEvent(KeyEvent keyEvent) {
     554         if (keyEvent.getCode().equals(KeyCode.ENTER)) {
     555             Reader reader = DataBaseUtil.getReader(tf_hs_reader_id.getText());
     556             //如果不为空,则进行
     557             if (reader != null) {
     558                 tf_hs_reader_name.setText(reader.getName());
     559                 tf_hs_reader_type.setText(reader.getType());
     560                 tf_hs_reader_sex.setText(reader.getSex());
     561                 getReaderBorrowRecord(reader.getId());
     562             } else {
     563                 clear_hs_reader();
     564             }
     565         }
     566     }
     567 
     568     /**
     569      * 还书模块---用于还书成功后刷新
     570      */
     571     private void tf_hs_reader_id_keyEvent() {
     572         Reader reader = DataBaseUtil.getReader(tf_hs_reader_id.getText());
     573         //如果不为空,则进行
     574         if (reader != null) {
     575             tf_hs_reader_name.setText(reader.getName());
     576             tf_hs_reader_type.setText(reader.getType());
     577             tf_hs_reader_sex.setText(reader.getSex());
     578             getReaderBorrowRecord(reader.getId());
     579         } else {
     580             clear_hs_reader();
     581         }
     582     }
     583 
     584     /**
     585      * 清楚---还书
     586      */
     587     @FXML
     588     public void clear_hs_reader() {
     589         tf_hs_reader_id.setText(null);
     590         tf_hs_reader_name.setText("");
     591         tf_hs_reader_type.setText("");
     592         tf_hs_reader_sex.setText("");
     593         tf_hs_book_id.setText("");
     594         tf_hs_book_name.setText("");
     595         //先清理原来表格记录
     596         int size = tbv_huanshu_record.getItems().size();
     597         for (int i = 0; i < size; i++) {
     598             tbv_huanshu_record.getItems().remove(0);
     599         }
     600     }
     601 
     602     public void getReaderBorrowRecord(String id) {
     603         ObservableList<borrow_record> borrows = DataBaseUtil.getBorrowRecord(id);
     604         if (borrows != null) {
     605             tbv_huanshu_record.setItems(borrows);
     606         }else {
     607 
     608         }
     609     }
     610 
     611     /**
     612      * 还书模块---监听---读者id
     613      * @param keyEvent
     614      */
     615     private void tf_hs_book_id_keyEvent(KeyEvent keyEvent) {
     616         if (keyEvent.getCode().equals(KeyCode.ENTER)) {
     617             Book book = DataBaseUtil.getBook(tf_hs_book_id.getText());
     618             //如果不为空,则进行
     619             if (book != null) {
     620                 tf_hs_book_name.setText(book.getName());
     621             } else {
     622                 tf_hs_book_name.setText("");
     623             }
     624         }
     625     }
     626 
     627     /**
     628      * 点击还书按钮----进行还书
     629      */
     630     @FXML
     631     private void huanshu_start() {
     632         if (!tf_hs_reader_name.getText().trim().equals("")) {
     633             if (!tf_hs_book_id.getText().trim().equals("")) {
     634                 double isok = DataBaseUtil.backBook(tf_hs_reader_id.getText().trim(),tf_hs_book_id.getText().trim());
     635                 if (isok != -1) {
     636                     tf_hs_reader_id_keyEvent();
     637                     tf_hs_book_id.setText("");
     638                     tf_hs_book_name.setText("");
     639                     System.out.println("huanshu ok");
     640                     Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     641                     alert.setAlertType(Alert.AlertType.INFORMATION);
     642                     alert.setContentText("还书成功!  超期罚款为 : " + isok);
     643                     alert.setTitle("还书成功!");
     644                     alert.show();
     645                 } else {
     646                     Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     647                     alert.setAlertType(Alert.AlertType.ERROR);
     648                     alert.setContentText("还书失败!");
     649                     alert.setTitle("还书失败!");
     650                     alert.show();
     651                 }
     652             } else {
     653                 tf_hs_book_id.validate();
     654             }
     655         } else {
     656             tf_hs_reader_id.validate();
     657         }
     658     }
     659 
     660 
     661     /**
     662      * *********************************************图书维护模块-------开始************************************************
     663      */
     664 
     665     /**
     666      * 初始化--图书维护模块
     667      */
     668     public void initBookAddUi() {
     669         for (int i = 0; i < Constant.BOOK_TYPES.length; i++) {
     670             cb_ts_add_book_type.getItems().addAll(Constant.BOOK_TYPES[i]);
     671         }
     672 
     673         RequiredFieldValidator validator_ts_book_add = new RequiredFieldValidator();
     674         validator_ts_book_add.setMessage("请输入...");
     675         tf_ts_add_book_id.getValidators().add(validator_ts_book_add);
     676         tf_ts_add_book_id.focusedProperty().addListener((o,oldVal,newVal)->{
     677             if(!newVal) tf_ts_add_book_id.validate();
     678         });
     679 
     680         tf_ts_add_book_name.getValidators().add(validator_ts_book_add);
     681         tf_ts_add_book_name.focusedProperty().addListener((o,oldVal,newVal)->{
     682             if(!newVal) tf_ts_add_book_name.validate();
     683         });
     684 
     685         tf_ts_add_book_author.getValidators().add(validator_ts_book_add);
     686         tf_ts_add_book_author.focusedProperty().addListener((o,oldVal,newVal)->{
     687             if(!newVal) tf_ts_add_book_author.validate();
     688         });
     689 
     690         tf_ts_add_book_translator.getValidators().add(validator_ts_book_add);
     691         tf_ts_add_book_translator.focusedProperty().addListener((o,oldVal,newVal)->{
     692             if(!newVal) tf_ts_add_book_translator.validate();
     693         });
     694 
     695         tf_ts_add_book_publisher.getValidators().add(validator_ts_book_add);
     696         tf_ts_add_book_publisher.focusedProperty().addListener((o,oldVal,newVal)->{
     697             if(!newVal) tf_ts_add_book_publisher.validate();
     698         });
     699 
     700         tf_ts_add_book_price.getValidators().add(validator_ts_book_add);
     701         tf_ts_add_book_price.focusedProperty().addListener((o,oldVal,newVal)->{
     702             if(!newVal) tf_ts_add_book_price.validate();
     703         });
     704 
     705         tf_ts_add_book_stock.getValidators().add(validator_ts_book_add);
     706         tf_ts_add_book_stock.focusedProperty().addListener((o,oldVal,newVal)->{
     707             if(!newVal) tf_ts_add_book_stock.validate();
     708         });
     709 
     710         cb_ts_add_book_type.getSelectionModel().selectFirst();
     711 
     712         //////*****//////
     713         tf_ts_alter_book_search_id.getValidators().add(validator_ts_book_add);
     714         tf_ts_alter_book_search_id.focusedProperty().addListener((o,oldVal,newVal)->{
     715             if(!newVal) tf_ts_alter_book_search_id.validate();
     716         });
     717 
     718         tf_ts_delete_book_search_id.getValidators().add(validator_ts_book_add);
     719         tf_ts_delete_book_search_id.focusedProperty().addListener((o,oldVal,newVal)->{
     720             if(!newVal) tf_ts_delete_book_search_id.validate();
     721         });
     722 
     723     }
     724 
     725     /**
     726      * 图书信息维护界面-----添加
     727      * 添加按钮点击事件
     728      */
     729     @FXML
     730     public void ts_book_add() {
     731         System.out.println("info====>  "+tf_ts_add_book_id.getText() + tf_ts_add_book_name.getText()+tf_ts_add_book_author.getText()+tf_ts_add_book_translator.getText()+tf_ts_add_book_publisher.getText()+
     732                 tf_ts_add_book_price.getText()+tf_ts_add_book_stock.getText()+cb_ts_add_book_type.getSelectionModel().getSelectedItem().toString()+dp_ts_add_book_publish_time.getEditor().getText());
     733         if (!tf_ts_add_book_id.getText().equals("") && !tf_ts_add_book_name.getText().equals("") && !tf_ts_add_book_author.getText().equals("") && !tf_ts_add_book_translator.getText().equals("") && !tf_ts_add_book_publisher.getText().equals("") &&
     734                 !tf_ts_add_book_price.getText().equals("") && !tf_ts_add_book_stock.getText().equals("") && !cb_ts_add_book_type.getSelectionModel().getSelectedItem().toString().equals("") && !dp_ts_add_book_publish_time.getEditor().getText().equals("")) {
     735             Book book = new Book();
     736             book.setId(tf_ts_add_book_id.getText());
     737             book.setName(tf_ts_add_book_name.getText());
     738             book.setType(cb_ts_add_book_type.getSelectionModel().getSelectedItem().toString());
     739             book.setAuthor(tf_ts_add_book_author.getText());
     740             book.setTranslator(tf_ts_add_book_translator.getText());
     741             book.setPublisher(tf_ts_add_book_publisher.getText());
     742             book.setPublishTime(dp_ts_add_book_publish_time.getEditor().getText());
     743             book.setStock(Integer.parseInt(tf_ts_add_book_stock.getText()));
     744             book.setPrice(Double.parseDouble(tf_ts_add_book_price.getText()));
     745             Boolean isok = DataBaseUtil.addNewBook(book);
     746             if (isok) {
     747                 System.out.println("add ok");
     748                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     749                 alert.setAlertType(Alert.AlertType.INFORMATION);
     750                 alert.setContentText("添加成功!");
     751                 alert.setTitle("添加成功!");
     752                 alert.show();
     753                 ts_book_add_clear();
     754             } else {
     755                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     756                 alert.setAlertType(Alert.AlertType.ERROR);
     757                 alert.setContentText("添加失败!");
     758                 alert.setTitle("添加失败!");
     759                 alert.show();
     760             }
     761         } else {
     762             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     763             alert.setAlertType(Alert.AlertType.ERROR);
     764             alert.setContentText("信息不完整!");
     765             alert.setTitle("添加错误!");
     766             alert.show();
     767         }
     768     }
     769 
     770     /**
     771      * 图书信息维护界面-----添加
     772      * 清楚按钮点击事件
     773      */
     774     @FXML
     775     private void ts_book_add_clear() {
     776         tf_ts_add_book_id.setText("");
     777         tf_ts_add_book_name.setText("");
     778 //        cb_ts_add_book_type.getSelectionModel().clearSelection();
     779         tf_ts_add_book_author.setText("");
     780         tf_ts_add_book_translator.setText("");
     781         tf_ts_add_book_publisher.setText("");
     782         dp_ts_add_book_publish_time.getEditor().setText("");
     783         tf_ts_add_book_stock.setText("");
     784         tf_ts_add_book_price.setText("");
     785     }
     786 
     787     /**
     788      * 图书维护---修改---查询图书
     789      */
     790     @FXML
     791     public void ts_book_alter_search() {
     792         if (!tf_ts_alter_book_search_id.getText().equals("")) {
     793             Book book = DataBaseUtil.getBook(tf_ts_alter_book_search_id.getText().trim());
     794             if (book != null) {
     795                 tf_ts_alter_book_id.setText(book.getId());
     796                 tf_ts_alter_book_name.setText(book.getName());
     797                 cb_ts_alter_book_type.getEditor().setText(book.getType());
     798                 tf_ts_alter_book_author.setText(book.getAuthor());
     799                 tf_ts_alter_book_translator.setText(book.getTranslator());
     800                 tf_ts_alter_book_publisher.setText(book.getPublisher());
     801                 tp_ts_alter_book_publish_time.getEditor().setText(book.getPublishTime());
     802                 tf_ts_alter_book_price.setText("" + book.getPrice());
     803                 tf_ts_alter_book_stock.setText("" + book.getStock());
     804             } else {
     805                 tf_ts_alter_book_search_id.setText("");
     806                 tf_ts_alter_book_search_id.validate();
     807             }
     808         }
     809     }
     810 
     811     /**
     812      * 图书维护---修改
     813      */
     814     @FXML
     815     public void ts_book_alter_start() {
     816         if (!tf_ts_alter_book_id.getText().equals("") && !tf_ts_alter_book_name.getText().equals("") && !tf_ts_alter_book_author.getText().equals("") && !tf_ts_alter_book_translator.getText().equals("") && !tf_ts_alter_book_publisher.getText().equals("") &&
     817                 !tf_ts_alter_book_price.getText().equals("") && !tf_ts_alter_book_stock.getText().equals("") && !cb_ts_alter_book_type.getSelectionModel().getSelectedItem().toString().equals("") && !tp_ts_alter_book_publish_time.getEditor().getText().equals("")) {
     818             Book book = new Book();
     819             book.setId(tf_ts_alter_book_id.getText());
     820             book.setName(tf_ts_alter_book_name.getText());
     821             book.setType(cb_ts_alter_book_type.getEditor().getText());
     822             book.setAuthor(tf_ts_alter_book_author.getText());
     823             book.setTranslator(tf_ts_alter_book_translator.getText());
     824             book.setPublisher(tf_ts_alter_book_publisher.getText());
     825             book.setPublishTime(tp_ts_alter_book_publish_time.getEditor().getText());
     826             book.setStock(Integer.parseInt(tf_ts_alter_book_stock.getText()));
     827             book.setPrice(Double.parseDouble(tf_ts_alter_book_price.getText()));
     828             Boolean isok = DataBaseUtil.alterBook(book);
     829             if (isok) {
     830                 System.out.println("alter ok");
     831                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     832                 alert.setAlertType(Alert.AlertType.INFORMATION);
     833                 alert.setContentText("修改成功!");
     834                 alert.setTitle("修改成功!");
     835                 alert.show();
     836                 ts_book_alter_clear();
     837             } else {
     838                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     839                 alert.setAlertType(Alert.AlertType.ERROR);
     840                 alert.setContentText("修改失败!");
     841                 alert.setTitle("修改失败!");
     842                 alert.show();
     843             }
     844         } else {
     845             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     846             alert.setAlertType(Alert.AlertType.ERROR);
     847             alert.setContentText("信息不完整!");
     848             alert.setTitle("修改错误!");
     849             alert.show();
     850         }
     851     }
     852 
     853     /**
     854      * 图书信息维护界面-----修改
     855      * 清楚按钮点击事件
     856      */
     857     @FXML
     858     private void ts_book_alter_clear() {
     859         tf_ts_alter_book_id.setText("");
     860         tf_ts_alter_book_name.setText("");
     861 //        cb_ts_alter_book_type.getSelectionModel().clearSelection();
     862         tf_ts_alter_book_author.setText("");
     863         tf_ts_alter_book_translator.setText("");
     864         tf_ts_alter_book_publisher.setText("");
     865         tp_ts_alter_book_publish_time.getEditor().setText("");
     866         tf_ts_alter_book_stock.setText("");
     867         tf_ts_alter_book_price.setText("");
     868     }
     869 
     870 
     871     /**
     872      * 图书维护---删除---查询图书
     873      */
     874     @FXML
     875     public void ts_book_delete_search() {
     876         if (!tf_ts_delete_book_search_id.getText().equals("")) {
     877             Book book = DataBaseUtil.getBook(tf_ts_delete_book_search_id.getText().trim());
     878             if (book != null) {
     879                 tf_ts_delete_book_id.setText(book.getId());
     880                 tf_ts_delete_book_name.setText(book.getName());
     881                 cb_ts_delete_book_type.getEditor().setText(book.getType());
     882                 tf_ts_delete_book_author.setText(book.getAuthor());
     883                 tf_ts_delete_book_translator.setText(book.getTranslator());
     884                 tf_ts_delete_book_publisher.setText(book.getPublisher());
     885                 tf_ts_delete_book_publish_time.setText(book.getPublishTime());
     886                 tf_ts_delete_book_price.setText("" + book.getPrice());
     887                 tf_ts_delete_book_stock.setText("" + book.getStock());
     888             } else {
     889                 tf_ts_delete_book_search_id.setText("");
     890                 tf_ts_delete_book_search_id.validate();
     891             }
     892         }
     893 
     894     }
     895 
     896     /**
     897      * 图书维护---删除--按钮
     898      */
     899     @FXML
     900     public void ts_book_delete() {
     901         if (!tf_ts_delete_book_id.getText().equals("")) {
     902             Book book = new Book();
     903             book.setId(tf_ts_delete_book_id.getText());
     904             book.setName(tf_ts_delete_book_name.getText());
     905             book.setType(cb_ts_delete_book_type.getEditor().getText());
     906             book.setAuthor(tf_ts_delete_book_author.getText());
     907             book.setTranslator(tf_ts_delete_book_translator.getText());
     908             book.setPublisher(tf_ts_delete_book_publisher.getText());
     909             book.setPublishTime(tf_ts_delete_book_publish_time.getText());
     910             book.setStock(Integer.parseInt(tf_ts_delete_book_stock.getText()));
     911             book.setPrice(Double.parseDouble(tf_ts_delete_book_price.getText()));
     912 
     913             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     914             alert.setAlertType(Alert.AlertType.CONFIRMATION);
     915             alert.setContentText("确认删除?");
     916             alert.setTitle("确认删除!");
     917             alert.showAndWait();
     918             ButtonType type = alert.getResult();
     919             System.out.println("type="+type.getText());
     920             if (type == ButtonType.OK) {
     921                 Boolean isok = DataBaseUtil.deleteBook(book);
     922                 if (isok) {
     923                     System.out.println("delete ok");
     924                     Alert alert1 = new Alert(Alert.AlertType.CONFIRMATION);
     925                     alert1.setAlertType(Alert.AlertType.INFORMATION);
     926                     alert1.setContentText("删除成功!");
     927                     alert1.setTitle("删除成功!");
     928                     alert1.show();
     929                     ts_book_delete_clear();
     930                 } else {
     931                     Alert alert2 = new Alert(Alert.AlertType.CONFIRMATION);
     932                     alert2.setAlertType(Alert.AlertType.ERROR);
     933                     alert2.setContentText("删除失败!");
     934                     alert2.setTitle("删除失败!");
     935                     alert2.show();
     936                 }
     937             }
     938 
     939         } else {
     940             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
     941             alert.setAlertType(Alert.AlertType.ERROR);
     942             alert.setContentText("信息不完整!");
     943             alert.setTitle("删除错误!");
     944             alert.show();
     945         }
     946     }
     947 
     948     /**
     949      * 图书信息维护界面-----删除
     950      * 清楚按钮点击事件
     951      */
     952     @FXML
     953     private void ts_book_delete_clear() {
     954         tf_ts_delete_book_id.setText("");
     955         tf_ts_delete_book_name.setText("");
     956         cb_ts_delete_book_type.getEditor().setText("");
     957         tf_ts_delete_book_author.setText("");
     958         tf_ts_delete_book_translator.setText("");
     959         tf_ts_delete_book_publisher.setText("");
     960         tf_ts_delete_book_publish_time.setText("");
     961         tf_ts_delete_book_stock.setText("");
     962         tf_ts_delete_book_price.setText("");
     963     }
     964 
     965     /**
     966      * *********************************************图书维护模块-------结束************************************************
     967      */
     968 
     969 
     970     /**
     971      * *********************************************读者维护模块-------开始************************************************
     972      */
     973 
     974     /**
     975      * 读者维护模块初始化
     976      */
     977     private void initReaderAddUi() {
     978 
     979         for (int i = 0; i < Constant.READER_YTPES.length; i++) {
     980             cb_rd_add_reader_type.getItems().addAll(Constant.READER_YTPES[i]);
     981             cb_rd_alter_reader_type.getItems().addAll(Constant.READER_YTPES[i]);
     982             cb_rd_delete_reader_type.getItems().addAll(Constant.READER_YTPES[i]);
     983         }
     984         cb_rd_add_reader_type.getSelectionModel().selectFirst();
     985         cb_rd_alter_reader_type.getSelectionModel().selectFirst();
     986         cb_rd_delete_reader_type.getSelectionModel().selectFirst();
     987 
     988         for (int i = 0; i < Constant.SEX.length; i++) {
     989             cb_rd_add_reader_sex.getItems().addAll(Constant.SEX[i]);
     990             cb_rd_alter_reader_sex.getItems().addAll(Constant.SEX[i]);
     991             cb_rd_delete_reader_sex.getItems().addAll(Constant.SEX[i]);
     992         }
     993         cb_rd_add_reader_sex.getSelectionModel().selectFirst();
     994         cb_rd_alter_reader_sex.getSelectionModel().selectFirst();
     995         cb_rd_delete_reader_sex.getSelectionModel().selectFirst();
     996 
     997         RequiredFieldValidator validator_ts_book_add = new RequiredFieldValidator();
     998         validator_ts_book_add.setMessage("请输入...");
     999         tf_rd_alter_reader_search_id.getValidators().add(validator_ts_book_add);
    1000         tf_rd_alter_reader_search_id.focusedProperty().addListener((o,oldVal,newVal)->{
    1001             if(!newVal) tf_rd_alter_reader_search_id.validate();
    1002         });
    1003 
    1004         tf_rd_delete_reader_search_id.getValidators().add(validator_ts_book_add);
    1005         tf_rd_delete_reader_search_id.focusedProperty().addListener((o,oldVal,newVal)->{
    1006             if(!newVal) tf_rd_delete_reader_search_id.validate();
    1007         });
    1008 
    1009     }
    1010 
    1011     /**
    1012      * 添加新的读者
    1013      */
    1014     @FXML
    1015     public void add_new_reader() {
    1016         if (!tf_rd_add_reader_id.getText().equals("") && !tf_rd_add_reader_name.getText().equals("") && !tf_rd_add_reader_numbers.getText().equals("") && !tf_rd_add_reader_days.getText().equals("") &&
    1017                  !cb_rd_add_reader_type.getSelectionModel().getSelectedItem().toString().equals("") && !cb_rd_add_reader_sex.getSelectionModel().getSelectedItem().toString().equals("")) {
    1018             Reader reader = new Reader();
    1019             reader.setId(tf_rd_add_reader_id.getText());
    1020             reader.setName(tf_rd_add_reader_name.getText());
    1021             reader.setPassword("123456");//默认密码
    1022             reader.setType(cb_rd_add_reader_type.getSelectionModel().getSelectedItem().toString());
    1023             reader.setSex(cb_rd_add_reader_sex.getSelectionModel().getSelectedItem().toString());
    1024             reader.setMax_num(Integer.parseInt(tf_rd_add_reader_numbers.getText()));
    1025             reader.setDays_num(Integer.parseInt(tf_rd_add_reader_days.getText()));
    1026             reader.setForfeit(0);
    1027 
    1028             Boolean isok = DataBaseUtil.addNewReader(reader);
    1029             if (isok) {
    1030                 System.out.println("add ok");
    1031                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    1032                 alert.setAlertType(Alert.AlertType.INFORMATION);
    1033                 alert.setContentText("添加成功!");
    1034                 alert.setTitle("添加成功!");
    1035                 alert.show();
    1036                 rd_reader_add_clear();
    1037             } else {
    1038                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    1039                 alert.setAlertType(Alert.AlertType.ERROR);
    1040                 alert.setContentText("添加失败!");
    1041                 alert.setTitle("添加失败!");
    1042                 alert.show();
    1043             }
    1044         } else {
    1045             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    1046             alert.setAlertType(Alert.AlertType.ERROR);
    1047             alert.setContentText("信息不完整!");
    1048             alert.setTitle("添加错误!");
    1049             alert.show();
    1050         }
    1051     }
    1052 
    1053     /**
    1054      * 读者信息维护界面-----添加
    1055      * 清楚按钮点击事件
    1056      */
    1057     @FXML
    1058     private void rd_reader_add_clear() {
    1059         tf_rd_add_reader_id.setText("");
    1060         tf_rd_add_reader_name.setText("");
    1061         tf_rd_add_reader_numbers.setText("");
    1062         tf_rd_add_reader_days.setText("");
    1063     }
    1064 
    1065     /**
    1066      * 修改读者
    1067      */
    1068     @FXML
    1069     public void alter_rd_reader() {
    1070         if (!tf_rd_alter_reader_id.getText().equals("") && !tf_rd_alter_reader_name.getText().equals("") && !tf_rd_alter_reader_numbers.getText().equals("") && !tf_rd_alter_reader_days.getText().equals("") &&
    1071                 !cb_rd_alter_reader_type.getSelectionModel().getSelectedItem().toString().equals("") && !cb_rd_alter_reader_sex.getSelectionModel().getSelectedItem().toString().equals("")) {
    1072             Reader reader = new Reader();
    1073             reader.setId(tf_rd_alter_reader_id.getText());
    1074             reader.setName(tf_rd_alter_reader_name.getText());
    1075             if (tgBtn_rd_alter_reader_password_reset.isPressed()) {
    1076                 reader.setPassword("123456");//默认密码
    1077             } else {
    1078                 reader.setPassword(rd_reader_alter_password);//原密码
    1079             }
    1080             reader.setType(cb_rd_alter_reader_type.getSelectionModel().getSelectedItem().toString());
    1081             reader.setSex(cb_rd_alter_reader_sex.getSelectionModel().getSelectedItem().toString());
    1082             reader.setMax_num(Integer.parseInt(tf_rd_alter_reader_numbers.getText()));
    1083             reader.setDays_num(Integer.parseInt(tf_rd_alter_reader_days.getText()));
    1084             reader.setForfeit(0);
    1085 
    1086             Boolean isok = DataBaseUtil.alterReader(reader);
    1087             if (isok) {
    1088                 System.out.println("add ok");
    1089                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    1090                 alert.setAlertType(Alert.AlertType.INFORMATION);
    1091                 alert.setContentText("修改成功!");
    1092                 alert.setTitle("修改成功!");
    1093                 alert.show();
    1094                 rd_reader_alter_clear();
    1095             } else {
    1096                 Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    1097                 alert.setAlertType(Alert.AlertType.ERROR);
    1098                 alert.setContentText("修改失败!");
    1099                 alert.setTitle("修改失败!");
    1100                 alert.show();
    1101             }
    1102         } else {
    1103             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    1104             alert.setAlertType(Alert.AlertType.ERROR);
    1105             alert.setContentText("信息不完整!");
    1106             alert.setTitle("修改错误!");
    1107             alert.show();
    1108         }
    1109     }
    1110 
    1111     private String rd_reader_alter_password = "123456";
    1112 
    1113     /**
    1114      * 读者维护---修改---查询读者
    1115      */
    1116     @FXML
    1117     public void rd_reader_alter_search() {
    1118         if (!tf_rd_alter_reader_search_id.getText().equals("")) {
    1119             Reader reader = DataBaseUtil.getReader(tf_rd_alter_reader_search_id.getText().trim());
    1120             if (reader != null) {
    1121                 tf_rd_alter_reader_id.setText(reader.getId());
    1122                 tf_rd_alter_reader_name.setText(reader.getName());
    1123                 if (reader.getType().equals("教师")) {
    1124                     cb_rd_alter_reader_type.getSelectionModel().selectFirst();
    1125                 } else if (reader.getType().equals("学生")) {
    1126                     cb_rd_alter_reader_type.getSelectionModel().select(1);
    1127                 } else {
    1128                     cb_rd_alter_reader_type.getSelectionModel().select(2);
    1129                 }
    1130                 if (reader.getSex().equals("男")) {
    1131                     cb_rd_alter_reader_sex.getSelectionModel().selectFirst();
    1132                 } else {
    1133                     cb_rd_alter_reader_sex.getSelectionModel().select(1);
    1134                 }
    1135                 rd_reader_alter_password = reader.getPassword();
    1136                 tf_rd_alter_reader_numbers.setText(reader.getMax_num()+"");
    1137                 tf_rd_alter_reader_days.setText(reader.getDays_num()+"");
    1138             } else {
    1139                 tf_rd_alter_reader_search_id.setText("");
    1140                 tf_rd_alter_reader_search_id.validate();
    1141             }
    1142         }
    1143 
    1144     }
    1145 
    1146     /**
    1147      * 读者信息维护界面-----修改
    1148      * 清楚按钮点击事件
    1149      */
    1150     @FXML
    1151     private void rd_reader_alter_clear() {
    1152         tf_rd_alter_reader_id.setText("");
    1153         tf_rd_alter_reader_name.setText("");
    1154         tf_rd_alter_reader_numbers.setText("");
    1155         tf_rd_alter_reader_days.setText("");
    1156     }
    1157 
    1158 
    1159     /**
    1160      * 读者维护---删除---读者查询
    1161      */
    1162     @FXML
    1163     public void rd_reader_delete_search() {
    1164         if (!tf_rd_delete_reader_search_id.getText().equals("")) {
    1165             Reader reader = DataBaseUtil.getReader(tf_rd_delete_reader_search_id.getText().trim());
    1166             if (reader != null) {
    1167                 tf_rd_delete_reader_id.setText(reader.getId());
    1168                 tf_rd_delete_reader_name.setText(reader.getName());
    1169                 if (reader.getType().equals("教师")) {
    1170                     cb_rd_delete_reader_type.getSelectionModel().selectFirst();
    1171                 } else if (reader.getType().equals("学生")) {
    1172                     cb_rd_delete_reader_type.getSelectionModel().select(1);
    1173                 } else {
    1174                     cb_rd_delete_reader_type.getSelectionModel().select(2);
    1175                 }
    1176                 if (reader.getSex().equals("男")) {
    1177                     cb_rd_delete_reader_sex.getSelectionModel().selectFirst();
    1178                 } else {
    1179                     cb_rd_delete_reader_sex.getSelectionModel().select(1);
    1180                 }
    1181                 tf_rd_delete_reader_numbers.setText(reader.getMax_num()+"");
    1182                 tf_rd_delete_reader_days.setText(reader.getDays_num()+"");
    1183             } else {
    1184                 tf_rd_delete_reader_search_id.setText("");
    1185                 tf_rd_delete_reader_search_id.validate();
    1186             }
    1187         }
    1188 
    1189     }
    1190 
    1191     /**
    1192      * 删除读者
    1193      */
    1194     @FXML
    1195     public void delete_rd_reader() {
    1196         if (!tf_rd_delete_reader_id.getText().equals("")) {
    1197 
    1198             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    1199             alert.setAlertType(Alert.AlertType.CONFIRMATION);
    1200             alert.setContentText("确认删除?");
    1201             alert.setTitle("确认删除!");
    1202             alert.showAndWait();
    1203             ButtonType type = alert.getResult();
    1204             System.out.println("type="+type.getText());
    1205             if (type == ButtonType.OK) {
    1206                 Boolean isok = DataBaseUtil.deleteReader(tf_rd_delete_reader_id.getText());
    1207                 if (isok) {
    1208                     System.out.println("add ok");
    1209                     Alert alert1 = new Alert(Alert.AlertType.CONFIRMATION);
    1210                     alert1.setAlertType(Alert.AlertType.INFORMATION);
    1211                     alert1.setContentText("删除成功!");
    1212                     alert1.setTitle("删除成功!");
    1213                     alert1.show();
    1214                     rd_reader_delete_clear();
    1215                 } else {
    1216                     Alert alert2 = new Alert(Alert.AlertType.CONFIRMATION);
    1217                     alert2.setAlertType(Alert.AlertType.ERROR);
    1218                     alert2.setContentText("删除失败!");
    1219                     alert2.setTitle("删除失败!");
    1220                     alert2.show();
    1221                 }
    1222             }
    1223         } else {
    1224             Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
    1225             alert.setAlertType(Alert.AlertType.ERROR);
    1226             alert.setContentText("信息不完整!");
    1227             alert.setTitle("删除错误!");
    1228             alert.show();
    1229         }
    1230     }
    1231 
    1232     /**
    1233      * 读者信息维护界面-----删除
    1234      * 清楚按钮点击事件
    1235      */
    1236     @FXML
    1237     private void rd_reader_delete_clear() {
    1238         tf_rd_delete_reader_id.setText("");
    1239         tf_rd_delete_reader_name.setText("");
    1240         tf_rd_delete_reader_numbers.setText("");
    1241         tf_rd_delete_reader_days.setText("");
    1242     }
    1243 
    1244 
    1245     /**
    1246      * *********************************************读者维护模块-------结束************************************************
    1247      */
    1248 
    1249 
    1250     /**
    1251      * *********************************************所有图书、读者、借阅显示模块-------开始************************************************
    1252      */
    1253 
    1254     /**
    1255      * 获取全部书目,并显示
    1256      */
    1257     @FXML
    1258     public void getAllBooks() {
    1259         ObservableList<Book> books = DataBaseUtil.getAllBooks();
    1260         if (books != null) {
    1261             tbv_book.setItems(books);
    1262         } else {
    1263 //            tbv_book.setAccessibleText("无记录");
    1264         }
    1265 
    1266     }
    1267 
    1268     /**
    1269      * 获取全部书目,并显示
    1270      */
    1271     @FXML
    1272     public void getAllReaders() {
    1273         ObservableList<Reader> readers = DataBaseUtil.getAllReaders();
    1274         if (readers != null) {
    1275             tbv_reader.setItems(readers);
    1276         }else {
    1277 //            tbv_reader.setAccessibleText("无记录");
    1278         }
    1279     }
    1280 
    1281     /**
    1282      * 获取全部借阅记录
    1283      */
    1284     public void getAllBorrowedRecordings() {
    1285         ObservableList<Borrow> borrows = DataBaseUtil.getAllBorrowRecord();
    1286         if (borrows != null) {
    1287             tbv_borrow.setItems(borrows);
    1288         }else {
    1289 //            tbv_borrow.setAccessibleText("无记录");
    1290         }
    1291     }
    1292 
    1293     /**
    1294      * *********************************************所有图书、读者、借阅显示模块-------结束************************************************
    1295      */
    1296 
    1297 }

    7.工作人员fxml

      1 <?xml version="1.0" encoding="UTF-8"?>
      2 
      3 <?import com.jfoenix.controls.JFXButton?>
      4 <?import com.jfoenix.controls.JFXComboBox?>
      5 <?import com.jfoenix.controls.JFXDatePicker?>
      6 <?import com.jfoenix.controls.JFXTabPane?>
      7 <?import com.jfoenix.controls.JFXTextField?>
      8 <?import com.jfoenix.controls.JFXToggleButton?>
      9 <?import javafx.scene.control.Hyperlink?>
     10 <?import javafx.scene.control.Label?>
     11 <?import javafx.scene.control.ScrollPane?>
     12 <?import javafx.scene.control.Separator?>
     13 <?import javafx.scene.control.Tab?>
     14 <?import javafx.scene.control.TableColumn?>
     15 <?import javafx.scene.control.TableView?>
     16 <?import javafx.scene.image.ImageView?>
     17 <?import javafx.scene.layout.AnchorPane?>
     18 <?import javafx.scene.text.Font?>
     19 
     20 <AnchorPane prefHeight="500.0" prefWidth="700.0" xmlns="http://javafx.com/javafx/8.0.121" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.MainUiController">
     21    <children>
     22       <JFXTabPane layoutX="20.0" layoutY="60.0" prefHeight="415.0" prefWidth="660.0" tabClosingPolicy="UNAVAILABLE">
     23         <tabs>
     24           <Tab text="借书">
     25             <content>
     26                 <ScrollPane layoutX="120.0" layoutY="128.0" prefHeight="200.0" prefWidth="200.0">
     27                     <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="380.0" prefWidth="645.0">
     28                         <children>
     29                             <Label layoutX="314.0" layoutY="36.0" text="借书">
     30                                 <font>
     31                                     <Font name="System Bold Italic" size="18.0" />
     32                                 </font>
     33                             </Label>
     34                             <Label layoutX="57.0" layoutY="130.0" text="图书编号" textFill="#2196f3">
     35                               <font>
     36                                  <Font name="System Bold Italic" size="15.0" />
     37                               </font></Label>
     38                             <JFXTextField fx:id="tf_js_book_id" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="120.0" layoutY="128.0" />
     39                             <Label layoutX="375.0" layoutY="130.0" text="读者编号" textFill="#2196f3">
     40                               <font>
     41                                  <Font name="System Bold Italic" size="15.0" />
     42                               </font></Label>
     43                             <Label layoutX="381.0" layoutY="182.0" text="读者姓名" textFill="DARKORANGE" />
     44                             <JFXTextField fx:id="tf_js_reader_id" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="437.0" layoutY="128.0" />
     45                             <JFXTextField fx:id="tf_js_reader_name" alignment="CENTER" editable="false" layoutX="437.0" layoutY="174.0" />
     46                            <Separator layoutX="63.0" layoutY="112.0" prefWidth="220.0" />
     47                            <Label layoutX="158.0" layoutY="81.0" text="图书信息" />
     48                            <Label layoutX="464.0" layoutY="81.0" text="读者信息" />
     49                            <Separator layoutX="378.0" layoutY="111.0" prefWidth="220.0" />
     50                            <Label layoutX="63.0" layoutY="178.0" text="图书名称" textFill="DARKORANGE" />
     51                            <Label layoutX="69.0" layoutY="225.0" text="出版社" textFill="DARKORANGE" />
     52                            <Label layoutX="63.0" layoutY="271.0" text="出版时间" textFill="DARKORANGE" />
     53                            <Label layoutX="381.0" layoutY="225.0" text="读者类别" textFill="DARKORANGE" />
     54                            <Label layoutX="381.0" layoutY="271.0" text="读者性别" textFill="DARKORANGE" />
     55                            <JFXTextField fx:id="tf_js_book_name" alignment="CENTER" editable="false" layoutX="120.0" layoutY="174.0" />
     56                            <JFXTextField fx:id="tf_js_book_publisher" alignment="CENTER" editable="false" layoutX="120.0" layoutY="221.0" />
     57                            <JFXTextField fx:id="tf_js_reader_type" alignment="CENTER" editable="false" layoutX="437.0" layoutY="221.0" />
     58                            <JFXTextField fx:id="tf_js_book_publish_time" alignment="CENTER" editable="false" layoutX="120.0" layoutY="267.0" />
     59                            <JFXTextField fx:id="tf_js_reader_sex" alignment="CENTER" editable="false" layoutX="437.0" layoutY="267.0" />
     60                            <JFXButton fx:id="btn_jieshu_confirm" layoutX="267.0" layoutY="340.0" mnemonicParsing="false" onAction="#js_confirm_start" prefHeight="23.0" prefWidth="59.0" text="确认" />
     61                            <JFXButton fx:id="btn_jieshu_clear" layoutX="332.0" layoutY="340.0" mnemonicParsing="false" onAction="#js_clear_start" prefHeight="23.0" prefWidth="63.0" text="清楚" />
     62                            <Label layoutX="57.0" layoutY="308.0" text="借书日期" textFill="#304ffe">
     63                               <font>
     64                                  <Font name="System Bold Italic" size="15.0" />
     65                               </font>
     66                            </Label>
     67                            <Label layoutX="375.0" layoutY="308.0" text="还书日期" textFill="#304ffe">
     68                               <font>
     69                                  <Font name="System Bold Italic" size="15.0" />
     70                               </font>
     71                            </Label>
     72                            <Label fx:id="lb_js_reader_jieshu_date" alignment="CENTER" contentDisplay="CENTER" layoutX="127.0" layoutY="311.0" prefHeight="15.0" prefWidth="134.0" text="Label" />
     73                            <Label fx:id="lb_js_reader_huanshu_date" alignment="CENTER" contentDisplay="CENTER" layoutX="452.0" layoutY="311.0" prefHeight="15.0" prefWidth="125.0" />
     74                            <ImageView fx:id="imageview" fitHeight="40.0" fitWidth="47.0" layoutX="194.0" layoutY="-85.0" pickOnBounds="true" preserveRatio="true" />
     75 
     76                         </children>
     77                     </AnchorPane>
     78                 </ScrollPane>
     79             </content>
     80           </Tab>
     81           <Tab text="还书">
     82             <content>
     83                 <ScrollPane layoutX="120.0" layoutY="128.0" prefHeight="200.0" prefWidth="200.0">
     84                     <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="379.0" prefWidth="655.0">
     85                         <children>
     86                             <Label layoutX="314.0" layoutY="35.0" text="还书">
     87                                 <font>
     88                                     <Font name="System Bold Italic" size="18.0" />
     89                                 </font>
     90                             </Label>
     91                             <Label layoutX="69.0" layoutY="310.0" text="图书编号" textFill="#2196f3">
     92                               <font>
     93                                  <Font name="System Bold Italic" size="15.0" />
     94                               </font></Label>
     95                             <JFXTextField fx:id="tf_hs_book_id" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="131.0" layoutY="309.0" />
     96                             <Label layoutX="69.0" layoutY="133.0" text="读者编号" textFill="#2196f3">
     97                               <font>
     98                                  <Font name="System Bold Italic" size="15.0" />
     99                               </font></Label>
    100                             <Label layoutX="76.0" layoutY="169.0" text="读者姓名" textFill="DARKORANGE" />
    101                             <JFXTextField fx:id="tf_hs_reader_id" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="131.0" layoutY="129.0" />
    102                             <JFXTextField fx:id="tf_hs_reader_name" alignment="CENTER" editable="false" layoutX="132.0" layoutY="161.0" />
    103                             <Separator layoutX="63.0" layoutY="112.0" prefWidth="220.0" />
    104                             <Label layoutX="158.0" layoutY="81.0" text="读者信息" />
    105                             <Label layoutX="464.0" layoutY="81.0" text="借书信息" />
    106                             <Separator layoutX="335.0" layoutY="112.0" prefHeight="3.0" prefWidth="300.0" />
    107                             <Label layoutX="285.0" layoutY="312.0" text="图书名称" textFill="DARKORANGE" />
    108                             <Label layoutX="76.0" layoutY="197.0" text="读者类别" textFill="DARKORANGE" />
    109                             <Label layoutX="76.0" layoutY="228.0" text="读者性别" textFill="DARKORANGE" />
    110                             <JFXTextField fx:id="tf_hs_book_name" alignment="CENTER" editable="false" layoutX="342.0" layoutY="308.0" />
    111                             <JFXTextField fx:id="tf_hs_reader_type" alignment="CENTER" editable="false" layoutX="132.0" layoutY="193.0" />
    112                             <JFXTextField fx:id="tf_hs_reader_sex" alignment="CENTER" editable="false" layoutX="132.0" layoutY="224.0" />
    113                             <JFXButton layoutX="267.0" layoutY="352.0" mnemonicParsing="false" onAction="#huanshu_start" prefHeight="23.0" prefWidth="59.0" text="确认" />
    114                             <JFXButton layoutX="332.0" layoutY="352.0" mnemonicParsing="false" onAction="#clear_hs_reader" prefHeight="23.0" prefWidth="63.0" text="清楚" />
    115                            <TableView fx:id="tbv_huanshu_record" layoutX="345.0" layoutY="124.0" prefHeight="127.0" prefWidth="284.0">
    116                              <columns>
    117                                     <TableColumn fx:id="tb_column_huanshu_bookId" prefWidth="54.0" text="图书Id" />
    118                                     <TableColumn fx:id="tb_column_huanshu_bookName" prefWidth="81.0" text="图书名称" />
    119                                     <TableColumn fx:id="tb_column_huanshu_borrowDate" prefWidth="73.0" text="借出时间" />
    120                                     <TableColumn fx:id="tb_column_huanshu_backDate" prefWidth="74.0" text="到期时间" />
    121                              </columns>
    122                            </TableView>
    123                            <Label layoutX="158.0" layoutY="271.0" text="图书信息" />
    124                            <Separator layoutX="68.0" layoutY="296.0" prefHeight="3.0" prefWidth="567.0" />
    125                         </children>
    126                     </AnchorPane>
    127                 </ScrollPane>
    128             </content>
    129           </Tab>
    130             <Tab text="图书信息维护">
    131                 <ScrollPane layoutX="120.0" layoutY="128.0" prefHeight="200.0" prefWidth="200.0">
    132                     <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="378.0" prefWidth="656.0">
    133                         <children>
    134                             <Label layoutX="278.0" layoutY="25.0" text="图书信息维护">
    135                                 <font>
    136                                     <Font name="System Bold Italic" size="18.0" />
    137                                 </font>
    138                             </Label>
    139                         <JFXTabPane layoutX="37.0" layoutY="63.0" prefHeight="301.0" prefWidth="577.0" style="-fx-border-color: #4CAF50; -fx-background-color: #EEEEEE;" tabClosingPolicy="UNAVAILABLE">
    140                             <Tab text="添加">
    141                                 <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="656.0">
    142                                     <Label layoutX="53.0" layoutY="39.0" text="图书编号" textFill="#2196f3">
    143                                     <font>
    144                                        <Font name="System Bold Italic" size="15.0" />
    145                                     </font></Label>
    146                                     <Label layoutX="344.0" layoutY="39.0" text="图书名称" textFill="#2196f3">
    147                                     <font>
    148                                        <Font name="System Bold Italic" size="15.0" />
    149                                     </font></Label>
    150                                     <Label layoutX="53.0" layoutY="83.0" text="图书类别" />
    151                                     <Label layoutX="65.0" layoutY="125.0" text="译者" />
    152                                     <Label layoutX="53.0" layoutY="165.0" text="出版时间" />
    153                                     <Label layoutX="356.0" layoutY="83.0" text="作者" />
    154                                     <Label layoutX="350.0" layoutY="125.0" text="出版社" />
    155                                     <Label layoutX="356.0" layoutY="165.0" text="价格" />
    156                                     <Label layoutX="53.0" layoutY="209.0" text="库存容量" />
    157                                     <JFXButton fx:id="btn_ts_add_book_add" layoutX="392.0" layoutY="235.0" mnemonicParsing="false" onAction="#ts_book_add" prefHeight="23.0" prefWidth="69.0" text="添加" />
    158                                     <JFXButton fx:id="btn_ts_add_book_clear" layoutX="473.0" layoutY="235.0" mnemonicParsing="false" onAction="#ts_book_add_clear" prefHeight="23.0" prefWidth="69.0" text="清楚" />
    159                                     <JFXTextField fx:id="tf_ts_add_book_id" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="112.0" layoutY="35.0" />
    160                                     <JFXTextField fx:id="tf_ts_add_book_translator" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="112.0" layoutY="121.0" />
    161                                     <JFXTextField fx:id="tf_ts_add_book_stock" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="112.0" layoutY="207.0" />
    162                                     <JFXTextField fx:id="tf_ts_add_book_name" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="404.0" layoutY="35.0" />
    163                                     <JFXTextField fx:id="tf_ts_add_book_author" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="404.0" layoutY="79.0" />
    164                                     <JFXTextField fx:id="tf_ts_add_book_publisher" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="404.0" layoutY="121.0" />
    165                                     <JFXTextField fx:id="tf_ts_add_book_price" alignment="CENTER" focusColor="DEEPSKYBLUE" layoutX="404.0" layoutY="161.0" />
    166                                     <JFXComboBox fx:id="cb_ts_add_book_type" focusColor="DEEPSKYBLUE" layoutX="111.0" layoutY="79.0" prefWidth="150.0" promptText="请选择类别..." />
    167                                     <JFXDatePicker fx:id="dp_ts_add_book_publish_time" defaultColor="DEEPSKYBLUE" layoutX="112.0" layoutY="161.0" prefHeight="23.0" prefWidth="156.0" />
    168                                 </AnchorPane>
    169                             </Tab>
    170                             <Tab text="修改">
    171                                 <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="656.0">
    172                                     <Label layoutX="53.0" layoutY="70.0" text="图书编号" />
    173                                     <Label layoutX="344.0" layoutY="70.0" text="图书名称" />
    174                                     <Label layoutX="53.0" layoutY="112.0" text="图书类别" />
    175                                     <Label layoutX="56.0" layoutY="147.0" text="译     者" />
    176                                     <Label layoutX="53.0" layoutY="181.0" text="出版时间" />
    177                                     <Label layoutX="356.0" layoutY="112.0" text="作者" />
    178                                     <Label layoutX="350.0" layoutY="147.0" text="出版社" />
    179                                     <Label layoutX="356.0" layoutY="181.0" text="价格" />
    180                                     <Label layoutX="53.0" layoutY="216.0" text="库存容量" />
    181                                     <JFXButton fx:id="btn_ts_alter_book_alterBtn" layoutX="392.0" layoutY="235.0" mnemonicParsing="false" onAction="#ts_book_alter_start" prefHeight="23.0" prefWidth="69.0" text="修改" />
    182                                     <JFXButton fx:id="btn_ts_alter_book_clearBtn" layoutX="473.0" layoutY="235.0" mnemonicParsing="false" onAction="#ts_book_alter_clear" prefHeight="23.0" prefWidth="69.0" text="清楚" />
    183                                     <JFXTextField fx:id="tf_ts_alter_book_id" editable="false" layoutX="112.0" layoutY="66.0" />
    184                                     <JFXTextField fx:id="tf_ts_alter_book_translator" layoutX="112.0" layoutY="143.0" />
    185                                     <JFXTextField fx:id="tf_ts_alter_book_stock" layoutX="112.0" layoutY="214.0" />
    186                                     <JFXTextField fx:id="tf_ts_alter_book_name" layoutX="404.0" layoutY="66.0" />
    187                                     <JFXTextField fx:id="tf_ts_alter_book_author" layoutX="404.0" layoutY="108.0" />
    188                                     <JFXTextField fx:id="tf_ts_alter_book_publisher" layoutX="404.0" layoutY="143.0" />
    189                                     <JFXTextField fx:id="tf_ts_alter_book_price" layoutX="404.0" layoutY="177.0" />
    190                                     <JFXComboBox fx:id="cb_ts_alter_book_type" editable="true" layoutX="111.0" layoutY="108.0" prefWidth="150.0" />
    191                                     <JFXDatePicker fx:id="tp_ts_alter_book_publish_time" layoutX="113.0" layoutY="177.0" prefHeight="23.0" prefWidth="156.0" />
    192                                  <Label layoutX="43.0" layoutY="27.0" text="图书编号" textFill="#2196f3">
    193                                     <font>
    194                                        <Font name="System Bold Italic" size="17.0" />
    195                                     </font>
    196                                  </Label>
    197                                  <JFXTextField fx:id="tf_ts_alter_book_search_id" layoutX="113.0" layoutY="27.0" prefHeight="23.0" prefWidth="343.0" />
    198                                  <JFXButton fx:id="btn_ts_alter_book_searchBtn" layoutX="465.0" layoutY="27.0" mnemonicParsing="false" onAction="#ts_book_alter_search" prefHeight="23.0" prefWidth="85.0" text="查询" />
    199                                 </AnchorPane>
    200                             </Tab>
    201                             <Tab text="删除">
    202                                 <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="656.0">
    203                                     <Label layoutX="53.0" layoutY="70.0" text="图书编号" />
    204                                     <Label layoutX="344.0" layoutY="70.0" text="图书名称" />
    205                                     <Label layoutX="53.0" layoutY="112.0" text="图书类别" />
    206                                     <Label layoutX="56.0" layoutY="147.0" text="译     者" />
    207                                     <Label layoutX="53.0" layoutY="181.0" text="出版时间" />
    208                                     <Label layoutX="356.0" layoutY="112.0" text="作者" />
    209                                     <Label layoutX="350.0" layoutY="147.0" text="出版社" />
    210                                     <Label layoutX="356.0" layoutY="181.0" text="价格" />
    211                                     <Label layoutX="53.0" layoutY="216.0" text="库存容量" />
    212                                     <JFXButton fx:id="btn_ts_delete_book_deleteBtn" layoutX="392.0" layoutY="235.0" mnemonicParsing="false" onAction="#ts_book_delete" prefHeight="23.0" prefWidth="69.0" text="删除" />
    213                                     <JFXButton fx:id="btn_ts_delete_book_clearBtn" layoutX="473.0" layoutY="235.0" mnemonicParsing="false" onAction="#ts_book_delete_clear" prefHeight="23.0" prefWidth="69.0" text="清楚" />
    214                                     <JFXTextField fx:id="tf_ts_delete_book_id" editable="false" layoutX="112.0" layoutY="66.0" />
    215                                     <JFXTextField fx:id="tf_ts_delete_book_translator" editable="false" layoutX="112.0" layoutY="143.0" />
    216                                     <JFXTextField fx:id="tf_ts_delete_book_stock" editable="false" layoutX="112.0" layoutY="214.0" />
    217                                     <JFXTextField fx:id="tf_ts_delete_book_name" editable="false" layoutX="404.0" layoutY="66.0" />
    218                                     <JFXTextField fx:id="tf_ts_delete_book_author" editable="false" layoutX="404.0" layoutY="108.0" />
    219                                     <JFXTextField fx:id="tf_ts_delete_book_publisher" editable="false" layoutX="404.0" layoutY="143.0" />
    220                                     <JFXTextField fx:id="tf_ts_delete_book_price" editable="false" layoutX="404.0" layoutY="177.0" />
    221                                     <JFXComboBox fx:id="cb_ts_delete_book_type" editable="true" layoutX="111.0" layoutY="108.0" prefWidth="150.0" />
    222                                     <JFXTextField fx:id="tf_ts_delete_book_publish_time" editable="false" layoutX="112.0" layoutY="177.0" />
    223                                     <Label layoutX="43.0" layoutY="27.0" text="图书编号" textFill="#2196f3">
    224                                         <font>
    225                                             <Font name="System Bold Italic" size="17.0" />
    226                                         </font>
    227                                     </Label>
    228                                     <JFXTextField fx:id="tf_ts_delete_book_search_id" layoutX="113.0" layoutY="27.0" prefHeight="23.0" prefWidth="343.0" />
    229                                     <JFXButton fx:id="btn_ts_delete_book_searchBtn" layoutX="465.0" layoutY="27.0" mnemonicParsing="false" onAction="#ts_book_delete_search" prefHeight="23.0" prefWidth="85.0" text="查询" />
    230                                 </AnchorPane>
    231                             </Tab>
    232                             <Tab text="图书类别">
    233                                 <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="656.0">
    234                                     
    235                                 </AnchorPane>
    236                             </Tab>
    237                         </JFXTabPane>
    238                         </children>
    239                     </AnchorPane>
    240                 </ScrollPane>
    241 
    242             </Tab>
    243             <Tab text="读者信息维护">
    244                 <ScrollPane layoutX="120.0" layoutY="128.0" prefHeight="200.0" prefWidth="200.0">
    245                     <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="377.0" prefWidth="658.0">
    246                         <children>
    247                             <Label layoutX="275.0" layoutY="27.0" text="读者信息维护">
    248                                 <font>
    249                                     <Font name="System Bold Italic" size="18.0" />
    250                                 </font>
    251                             </Label>
    252                             <JFXTabPane layoutX="37.0" layoutY="63.0" prefHeight="302.0" prefWidth="577.0" style="-fx-background-color: #EEEEEE; -fx-border-color: #4CAF50;" tabClosingPolicy="UNAVAILABLE">
    253                                 <Tab text="添加">
    254                                     <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="577.0">
    255                                         <Label layoutX="53.0" layoutY="39.0" text="读者编号" />
    256                                         <Label layoutX="344.0" layoutY="39.0" text="读者姓名" />
    257                                         <Label layoutX="53.0" layoutY="83.0" text="读者类别" />
    258                                         <Label layoutX="53.0" layoutY="128.0" text="可借数量" />
    259                                         <Label layoutX="356.0" layoutY="83.0" text="性别" />
    260                                         <Label layoutX="344.0" layoutY="128.0" text="可借天数" />
    261                                         <JFXTextField fx:id="tf_rd_add_reader_id" layoutX="117.0" layoutY="35.0" />
    262                                         <JFXTextField fx:id="tf_rd_add_reader_numbers" layoutX="117.0" layoutY="124.0" />
    263                                         <JFXTextField fx:id="tf_rd_add_reader_name" layoutX="406.0" layoutY="35.0" />
    264                                         <JFXTextField fx:id="tf_rd_add_reader_days" layoutX="406.0" layoutY="124.0" />
    265                                         <JFXComboBox fx:id="cb_rd_add_reader_type" layoutX="116.0" layoutY="79.0" prefWidth="150.0" />
    266                                         <JFXComboBox fx:id="cb_rd_add_reader_sex" layoutX="405.0" layoutY="79.0" prefWidth="150.0" />
    267                                         <JFXButton fx:id="btn_rd_add_reader_addBtn" layoutX="392.0" layoutY="235.0" mnemonicParsing="false" onAction="#add_new_reader" prefHeight="23.0" prefWidth="69.0" text="添加" />
    268                                         <JFXButton fx:id="btn_rd_add_reader_clearBtn" layoutX="473.0" layoutY="235.0" mnemonicParsing="false" onAction="#rd_reader_add_clear" prefHeight="23.0" prefWidth="69.0" text="清楚" />
    269                                     </AnchorPane>
    270                                 </Tab>
    271                                 <Tab text="修改">
    272                                     <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="656.0">
    273                                         <Label layoutX="53.0" layoutY="78.0" text="读者编号" />
    274                                         <Label layoutX="344.0" layoutY="78.0" text="读者姓名" />
    275                                         <Label layoutX="53.0" layoutY="122.0" text="读者类别" />
    276                                         <Label layoutX="53.0" layoutY="167.0" text="可借数量" />
    277                                         <Label layoutX="356.0" layoutY="122.0" text="性别" />
    278                                         <Label layoutX="344.0" layoutY="167.0" text="可借天数" />
    279                                         <JFXTextField fx:id="tf_rd_alter_reader_id" editable="false" layoutX="117.0" layoutY="74.0" />
    280                                         <JFXTextField fx:id="tf_rd_alter_reader_numbers" layoutX="117.0" layoutY="163.0" />
    281                                         <JFXTextField fx:id="tf_rd_alter_reader_name" layoutX="406.0" layoutY="74.0" />
    282                                         <JFXTextField fx:id="tf_rd_alter_reader_days" layoutX="406.0" layoutY="163.0" />
    283                                         <JFXComboBox fx:id="cb_rd_alter_reader_type" layoutX="116.0" layoutY="118.0" prefWidth="150.0" />
    284                                         <JFXComboBox fx:id="cb_rd_alter_reader_sex" layoutX="405.0" layoutY="118.0" prefWidth="150.0" />
    285                                         <JFXButton fx:id="btn_rd_alter_reader_alterBtn" layoutX="392.0" layoutY="235.0" mnemonicParsing="false" onAction="#alter_rd_reader" prefHeight="23.0" prefWidth="69.0" text="修改" />
    286                                         <JFXButton fx:id="btn_rd_alter_reader_clearBtn" layoutX="473.0" layoutY="235.0" mnemonicParsing="false" onAction="#rd_reader_alter_clear" prefHeight="23.0" prefWidth="69.0" text="清楚" />
    287                                  <Label layoutX="41.0" layoutY="35.0" text="读者编号" textFill="#2196f3">
    288                                     <font>
    289                                        <Font name="System Bold Italic" size="18.0" />
    290                                     </font>
    291                                  </Label>
    292                                  <JFXTextField fx:id="tf_rd_alter_reader_search_id" layoutX="118.0" layoutY="36.0" prefHeight="23.0" prefWidth="350.0" />
    293                                  <JFXButton layoutX="474.0" layoutY="36.0" mnemonicParsing="false" onAction="#rd_reader_alter_search" prefHeight="23.0" prefWidth="79.0" text="查询" />
    294                                  <JFXToggleButton fx:id="tgBtn_rd_alter_reader_password_reset" layoutX="118.0" layoutY="196.0" mnemonicParsing="false" prefHeight="56.0" prefWidth="149.0" text="初始化密码" />
    295                                  <Label layoutX="53.0" layoutY="218.0" text="密码设置" />
    296                                     </AnchorPane>
    297                                 </Tab>
    298                                 <Tab text="删除">
    299                                     <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="200.0" prefWidth="656.0">
    300                                         <Label layoutX="53.0" layoutY="78.0" text="读者编号" />
    301                                         <Label layoutX="344.0" layoutY="78.0" text="读者姓名" />
    302                                         <Label layoutX="53.0" layoutY="122.0" text="读者类别" />
    303                                         <Label layoutX="53.0" layoutY="167.0" text="可借数量" />
    304                                         <Label layoutX="356.0" layoutY="122.0" text="性别" />
    305                                         <Label layoutX="344.0" layoutY="167.0" text="可借天数" />
    306                                         <JFXTextField fx:id="tf_rd_delete_reader_id" editable="false" layoutX="117.0" layoutY="74.0" />
    307                                         <JFXTextField fx:id="tf_rd_delete_reader_numbers" editable="false" layoutX="117.0" layoutY="163.0" />
    308                                         <JFXTextField fx:id="tf_rd_delete_reader_name" editable="false" layoutX="406.0" layoutY="74.0" />
    309                                         <JFXTextField fx:id="tf_rd_delete_reader_days" editable="false" layoutX="406.0" layoutY="163.0" />
    310                                         <JFXComboBox fx:id="cb_rd_delete_reader_type" layoutX="116.0" layoutY="118.0" prefWidth="150.0" />
    311                                         <JFXComboBox fx:id="cb_rd_delete_reader_sex" layoutX="405.0" layoutY="118.0" prefWidth="150.0" />
    312                                         <JFXButton fx:id="btn_rd_delete_reader_deleteBtn" layoutX="392.0" layoutY="235.0" mnemonicParsing="false" onAction="#delete_rd_reader" prefHeight="23.0" prefWidth="69.0" text="删除" />
    313                                         <JFXButton fx:id="btn_rd_delete_reader_clearBtn" layoutX="473.0" layoutY="235.0" mnemonicParsing="false" onAction="#rd_reader_delete_clear" prefHeight="23.0" prefWidth="69.0" text="清楚" />
    314                                         <Label layoutX="41.0" layoutY="35.0" text="读者编号" textFill="#2196f3">
    315                                             <font>
    316                                                 <Font name="System Bold Italic" size="18.0" />
    317                                             </font>
    318                                         </Label>
    319                                         <JFXTextField fx:id="tf_rd_delete_reader_search_id" layoutX="118.0" layoutY="36.0" prefHeight="23.0" prefWidth="350.0" />
    320                                         <JFXButton fx:id="btn_rd_delete_reader_searchBtn" layoutX="474.0" layoutY="36.0" mnemonicParsing="false" onAction="#rd_reader_delete_search" prefHeight="23.0" prefWidth="79.0" text="查询" />
    321                                     </AnchorPane>
    322                                 </Tab>
    323                             </JFXTabPane>
    324                         </children>
    325                     </AnchorPane>
    326                 </ScrollPane>
    327             </Tab>
    328             <Tab text="所有书目">
    329                 <AnchorPane fx:id="treeview_test" minHeight="0.0" minWidth="0.0" prefHeight="377.0" prefWidth="658.0">
    330                   <children>
    331                      <TableView fx:id="tbv_book" layoutX="14.0" layoutY="45.0" prefHeight="320.0" prefWidth="635.0">
    332                        <columns>
    333                          <TableColumn fx:id="tb_column_book_id" prefWidth="75.0" text="图书ID" />
    334                          <TableColumn fx:id="tb_column_book_name" prefWidth="89.0" text="图书名称" />
    335                            <TableColumn fx:id="tb_column_book_type" prefWidth="69.0" text="图书类别" />
    336                            <TableColumn fx:id="tb_column_book_author" prefWidth="64.0" text="作者" />
    337                            <TableColumn fx:id="tb_column_book_translator" prefWidth="69.0" text="译者" />
    338                            <TableColumn fx:id="tb_column_book_publisher" prefWidth="92.0" text="出版社" />
    339                            <TableColumn fx:id="tb_column_book_publishTime" prefWidth="84.0" text="出版时间" />
    340                            <TableColumn fx:id="tb_column_book_price" prefWidth="71.0" text="价格" />
    341                        </columns>
    342                      </TableView>
    343                      <JFXButton layoutX="581.0" layoutY="14.0" mnemonicParsing="false" onAction="#getAllBooks" prefHeight="23.0" prefWidth="65.0" text="刷新" />
    344                   </children>
    345                 </AnchorPane>
    346             </Tab>
    347             <Tab text="所有读者">
    348                 <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="377.0" prefWidth="658.0">
    349                     <children>
    350                         <TableView fx:id="tbv_reader" layoutX="14.0" layoutY="45.0" prefHeight="320.0" prefWidth="635.0">
    351                             <columns>
    352                                 <TableColumn fx:id="tb_column_reader_id" prefWidth="75.0" text="读者ID" />
    353                                 <TableColumn fx:id="tb_column_reader_name" prefWidth="75.0" text="读者名称" />
    354                                 <TableColumn fx:id="tb_column_reader_type" prefWidth="75.0" text="读者类别" />
    355                                 <TableColumn fx:id="tb_column_reader_sex" prefWidth="75.0" text="读者性别" />
    356                                 <TableColumn fx:id="tb_column_reader_numbers" prefWidth="75.0" text="可借数量" />
    357                                 <TableColumn fx:id="tb_column_reader_days" prefWidth="75.0" text="可借天数" />
    358                                 <TableColumn fx:id="tb_column_reader_forfeit" prefWidth="75.0" text="罚款金额" />
    359                                 <TableColumn fx:id="tb_column_reader_borrowed_books" prefWidth="75.0" text="已借数量" />
    360                             </columns>
    361                         </TableView>
    362                      <JFXButton layoutX="581.0" layoutY="14.0" mnemonicParsing="false" onAction="#getAllReaders" prefHeight="23.0" prefWidth="65.0" text="刷新" />
    363                     </children>
    364                 </AnchorPane>
    365             </Tab>
    366             <Tab text="所有借阅记录">
    367                 <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="377.0" prefWidth="658.0">
    368                     <children>
    369                         <TableView fx:id="tbv_borrow" layoutX="14.0" layoutY="45.0" prefHeight="320.0" prefWidth="635.0">
    370                             <columns>
    371                                 <TableColumn fx:id="tb_column_borrow_id" prefWidth="78.0" text="借阅流水号" />
    372                                 <TableColumn fx:id="tb_column_borrow_bookId" prefWidth="153.0" text="图书" />
    373                                 <TableColumn fx:id="tb_column_borrow_readerId" prefWidth="149.0" text="读者" />
    374                                 <TableColumn fx:id="tb_column_borrow_borrowDate" prefWidth="94.0" text="借出时间" />
    375                                 <TableColumn fx:id="tb_column_borrow_backDate" prefWidth="92.0" text="到期时间" />
    376                                 <TableColumn fx:id="tb_column_borrow_isBack" prefWidth="68.0" text="是否归还" />
    377                             </columns>
    378                         </TableView>
    379                         <JFXButton layoutX="581.0" layoutY="14.0" mnemonicParsing="false" onAction="#getAllBorrowedRecordings" prefHeight="23.0" prefWidth="65.0" text="刷新" />
    380                     </children>
    381                 </AnchorPane>
    382             </Tab>
    383         </tabs>
    384       </JFXTabPane>
    385       <Label layoutX="272.0" layoutY="14.0" text="图书管理系统" textFill="GOLD">
    386          <font>
    387             <Font name="System Bold Italic" size="26.0" />
    388          </font>
    389       </Label>
    390       <Label fx:id="lb_welcome" layoutX="28.0" layoutY="40.0" text="xx,老师您好!" textFill="DARKORANGE" />
    391       <Hyperlink layoutX="633.0" layoutY="37.0" onAction="#hbrlink_goto_login" text="退出" />
    392    </children>
    393 </AnchorPane>
    View Code

    效果如下:

    8.util包----工具类

    • constant常量类
      package Util;
      
      public class Constant {
      
          //图书类别
          public static final String[] BOOK_TYPES = new String[]{"科技类", "文学类", "杂志", "其他"};
      
          //读者类别
          public static final String[] READER_YTPES = new String[]{"教师", "学生", "职工"};
      
          //性别
          public static final String[] SEX = new String[]{"男", "女"};
      }
    • DataUtils 时间计算类------计算出指定日期过多少天以后的日期,适用于计算到期时间
      package Util;
      
      import java.text.ParseException;
      import java.text.SimpleDateFormat;
      import java.util.Calendar;
      import java.util.Date;
      import java.util.Locale;
      import java.util.SimpleTimeZone;
      
      public class DateUtils {
      
          public static String getAfterDay(String date, int day) {
              SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd");
              Date a = null;
              try {
                  a = parser.parse(date);
                  Calendar calendar = Calendar.getInstance();
                  calendar.setTime(a);
                  calendar.add(Calendar.DATE, day);
                  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
                  return simpleDateFormat.format(calendar.getTime());
              } catch (ParseException e) {
                  e.printStackTrace();
              }
              return null;
          }
      }
    • FileUtil-----文件类-----适用于记住密码等
      package Util;
      
      import java.io.*;
      import java.util.Arrays;
      import java.util.Scanner;
      
      public class FileUtil {
      
          public static void setUserAndPass(String User, String Pass) {
              PrintWriter outputStream = null;
      
              try {
                  outputStream = new PrintWriter(new FileOutputStream("user_pass.txt"));
                  outputStream.println(User+"#"+Pass);
                  outputStream.flush();
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              }
          }
      
          public static String getUserAndPass( ) {
              Scanner scan = null;
              try {
                  scan = new Scanner(new FileInputStream("user_pass.txt"));
              } catch (FileNotFoundException e) {
                  e.printStackTrace();
              }
              return scan.nextLine();
          }
      
      }
    • DataBaseUtil-----数据库查询类-----所有的数据库查询代码均在这个类里面,方便维护
        1 package Util;
        2 
        3 import javafx.collections.FXCollections;
        4 import javafx.collections.ObservableList;
        5 import sample.entity.*;
        6 
        7 import java.math.BigDecimal;
        8 import java.sql.*;
        9 import java.text.SimpleDateFormat;
       10 import java.util.ArrayList;
       11 import java.util.Date;
       12 import java.util.HashMap;
       13 
       14 
       15 public class DataBaseUtil {
       16 
       17 
       18     /**
       19      * 读者登陆检查
       20      * @param account
       21      * @param password
       22      * @return
       23      */
       24     public static boolean checkReader(String account, String password) {
       25         boolean checkbool = false;
       26         try {
       27             Connection con = null; //定义一个MYSQL链接对象
       28             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
       29             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
       30             Statement stmt; //创建声明
       31             stmt = con.createStatement();
       32 
       33             String password_fromDb;
       34             String selectSql = "select pass from Reader where Id='"+account+"'";
       35             ResultSet selectRes = stmt.executeQuery(selectSql);
       36             if (selectRes.next()) {
       37                 password_fromDb = selectRes.getString("pass");
       38                 if (password_fromDb.equals(password)) {
       39                     checkbool = true;
       40                 }
       41             }
       42             con.close();
       43         } catch (Exception e) {
       44             System.out.print("读者登陆检查---checkReader----MYSQL ERROR:" + e.getMessage());
       45         }
       46         return checkbool;
       47     }
       48 
       49     /**
       50      * 管理员登陆检查
       51      * @param account
       52      * @param password
       53      * @return
       54      */
       55     public static boolean checkUser(String account, String password) {
       56         boolean checkbool = false;
       57         try {
       58             Connection con = null; //定义一个MYSQL链接对象
       59             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
       60             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
       61             Statement stmt; //创建声明
       62             stmt = con.createStatement();
       63 
       64             String password_fromDb;
       65             String selectSql = "SELECT pass FROM user where Id='"+account+"'";
       66             ResultSet selectRes = stmt.executeQuery(selectSql);
       67             if (selectRes.next()) {
       68                 password_fromDb = selectRes.getString("pass");
       69                 if (password_fromDb.equals(password)) {
       70                     checkbool = true;
       71                 }
       72             }
       73             con.close();
       74         } catch (Exception e) {
       75             System.out.print("管理员登陆检查----checkUser----MYSQL ERROR:" + e.getMessage());
       76         }
       77         return checkbool;
       78     }
       79 
       80     /**
       81      * 获取book
       82      * @param id
       83      * @return
       84      */
       85     public static Book getBook(String id) {
       86         Book book = null;
       87         try {
       88             Connection con = null; //定义一个MYSQL链接对象
       89             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
       90             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
       91             Statement stmt; //创建声明
       92             stmt = con.createStatement();
       93 
       94             String selectSql = "SELECT * FROM book where Id='"+id+"'";
       95             ResultSet selectRes = stmt.executeQuery(selectSql);
       96             if (selectRes.next()) {
       97                 book = new Book();
       98                 book.setId(selectRes.getString("Id"));
       99                 book.setName(selectRes.getString("name"));
      100                 book.setType(selectRes.getString("type"));
      101                 book.setAuthor(selectRes.getString("author"));
      102                 book.setTranslator(selectRes.getString("translator"));
      103                 book.setPublisher(selectRes.getString("publisher"));
      104                 book.setPublishTime(selectRes.getDate("publish_time").toString());
      105                 book.setStock(selectRes.getInt("stock"));
      106                 book.setPrice(selectRes.getDouble("price"));
      107             }
      108             con.close();
      109             return book;
      110         } catch (Exception e) {
      111             System.out.print("book获取检查----getBook----MYSQL ERROR:" + e.getMessage());
      112         }
      113         return book;
      114     }
      115 
      116     /**
      117      * 获取单个读者信息
      118      * @param id
      119      * @return
      120      */
      121     public static Reader getReader(String id) {
      122         Reader reader = null;
      123         try {
      124             Connection con = null; //定义一个MYSQL链接对象
      125             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      126             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      127             Statement stmt; //创建声明
      128             stmt = con.createStatement();
      129 
      130             String selectSql = "SELECT * FROM reader where Id='"+id+"'";
      131             ResultSet selectRes = stmt.executeQuery(selectSql);
      132             if (selectRes.next()) {
      133                 reader = new Reader();
      134                 reader.setId(selectRes.getString("Id"));
      135                 reader.setName(selectRes.getString("name"));
      136                 reader.setPassword(selectRes.getString("pass"));
      137                 reader.setType(selectRes.getString("type"));
      138                 reader.setSex(selectRes.getString("sex"));
      139                 reader.setMax_num(selectRes.getInt("max_num"));
      140                 reader.setDays_num(selectRes.getInt("days_num"));
      141                 reader.setForfeit(selectRes.getDouble("forfeit"));
      142             }
      143             con.close();
      144             return reader;
      145         } catch (Exception e) {
      146             System.out.print("reader获取检查----getReader----MYSQL ERROR:" + e.getMessage());
      147         }
      148         return reader;
      149     }
      150 
      151     /**
      152      * 添加新的借阅记录
      153      * @param bookId
      154      * @param readerId
      155      * @param jieshu_date
      156      * @param huanshu_date
      157      * @param isBack
      158      * @return
      159      */
      160     public static boolean addNewBorrow(String bookId, String readerId, String jieshu_date, String huanshu_date, int isBack) {
      161         try {
      162             Connection con = null; //定义一个MYSQL链接对象
      163             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      164             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      165             Statement stmt; //创建声明
      166             stmt = con.createStatement();
      167 
      168             String updateSql = "insert into borrow (book_id,reader_id,borrow_date,back_date,is_back) values ('"+bookId+"','"+readerId+"','"+jieshu_date+"','"+huanshu_date+"','"+isBack+"')";
      169             int selectRes = stmt.executeUpdate(updateSql);
      170             if (selectRes != 0) {
      171                 return true;
      172             }
      173             con.close();
      174         } catch (Exception e) {
      175             System.out.print("addBorrow检查----addNewBorrow----MYSQL ERROR:" + e.getMessage());
      176         }
      177         return false;
      178 
      179     }
      180 
      181     /**
      182      *
      183      * 添加新书
      184      * @param book
      185      * @return
      186      */
      187     public static boolean addNewBook(Book book) {
      188         try {
      189             Connection con = null; //定义一个MYSQL链接对象
      190             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      191             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      192             Statement stmt; //创建声明
      193             stmt = con.createStatement();
      194 
      195             String updateSql = "insert into book (Id,name,type,author,translator,publisher,publish_time,stock,price) values ('" + book.getId() + "','" + book.getName() + "','" + book.getType() + "','" + book.getAuthor() + "','" + book.getTranslator()+ "','" + book.getPublisher()+ "','" + book.getPublishTime()+ "','" + book.getStock()+ "','" + book.getPrice() + "')";
      196             int selectRes = stmt.executeUpdate(updateSql);
      197             if (selectRes != 0) {
      198                 return true;
      199             }
      200             con.close();
      201         } catch (Exception e) {
      202             System.out.print("addBook检查----addNewBook----MYSQL ERROR:" + e.getMessage());
      203         }
      204         return false;
      205 
      206     }
      207 
      208     /**
      209      * 修改单个书
      210      * @param book
      211      * @return
      212      */
      213     public static Boolean alterBook(Book book) {
      214         try {
      215             Connection con = null; //定义一个MYSQL链接对象
      216             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      217             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      218             Statement stmt; //创建声明
      219             stmt = con.createStatement();
      220 
      221             String updateSql = "update book set name='" + book.getName() + "',type='" + book.getType() + "',author='" + book.getAuthor() + "',translator='" + book.getTranslator() + "',publisher='" + book.getPublisher() + "',publish_time='" + book.getPublishTime() + "',stock=" + book.getStock() + ",price=" + book.getPrice() + " where Id =" + book.getId() + "";
      222             System.out.println(updateSql);
      223             int selectRes = stmt.executeUpdate(updateSql);
      224             if (selectRes != 0) {
      225                 return true;
      226             }
      227             con.close();
      228         } catch (Exception e) {
      229             System.out.print("alterBook检查----alterBook----MYSQL ERROR:" + e.getMessage());
      230         }
      231         return false;
      232     }
      233 
      234     /**
      235      * 删除单个书
      236      * @param book
      237      * @return
      238      */
      239     public static Boolean deleteBook(Book book) {
      240         try {
      241             Connection con = null; //定义一个MYSQL链接对象
      242             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      243             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      244             Statement stmt; //创建声明
      245             stmt = con.createStatement();
      246 
      247             String updateSql = "delete from book where Id='"+book.getId()+"'";
      248             System.out.println(updateSql);
      249             int selectRes = stmt.executeUpdate(updateSql);
      250             if (selectRes != 0) {
      251                 return true;
      252             }
      253             con.close();
      254         } catch (Exception e) {
      255             System.out.print("deleteBook检查----deleteBook----MYSQL ERROR:" + e.getMessage());
      256         }
      257         return false;
      258     }
      259 
      260     /**
      261      * 添加新的读者
      262      * @param reader
      263      * @return
      264      */
      265     public static Boolean addNewReader(Reader reader) {
      266         try {
      267             Connection con = null; //定义一个MYSQL链接对象
      268             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      269             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      270             Statement stmt; //创建声明
      271             stmt = con.createStatement();
      272 
      273             String updateSql = "insert into reader (Id,name,pass,type,sex,max_num,days_num,forfeit) values ('" + reader.getId() + "','" + reader.getName() + "','" + reader.getPassword() + "','"+ reader.getType()+"','" + reader.getSex() + "','" + reader.getMax_num()+ "','" + reader.getDays_num()+ "','" + reader.getForfeit()+ "')";
      274             System.out.println(updateSql);
      275             int selectRes = stmt.executeUpdate(updateSql);
      276             if (selectRes != 0) {
      277                 return true;
      278             }
      279             con.close();
      280         } catch (Exception e) {
      281             System.out.print("addReader检查----addNewReader----MYSQL ERROR:" + e.getMessage());
      282         }
      283         return false;
      284     }
      285 
      286     /**
      287      * 修改单个书
      288      * @param reader
      289      * @return
      290      */
      291     public static Boolean alterReader(Reader reader) {
      292         try {
      293             Connection con = null; //定义一个MYSQL链接对象
      294             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      295             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      296             Statement stmt; //创建声明
      297             stmt = con.createStatement();
      298 
      299             String updateSql = "update reader set name='" + reader.getName() +"',pass='"+reader.getPassword()+ "',type='" + reader.getType() + "',sex='" + reader.getSex() + "',max_num=" + reader.getMax_num() + ",days_num=" + reader.getDays_num() + ",forfeit=" + reader.getForfeit() + "  where Id =" + reader.getId() + "";
      300             System.out.println(updateSql);
      301             int selectRes = stmt.executeUpdate(updateSql);
      302             if (selectRes != 0) {
      303                 return true;
      304             }
      305             con.close();
      306         } catch (Exception e) {
      307             System.out.print("alterReader检查----alterReader----MYSQL ERROR:" + e.getMessage());
      308         }
      309         return false;
      310     }
      311 
      312     /**
      313      * 删除读者
      314      * @param Id
      315      * @return
      316      */
      317     public static Boolean deleteReader(String Id) {
      318         try {
      319             Connection con = null; //定义一个MYSQL链接对象
      320             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      321             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      322             Statement stmt; //创建声明
      323             stmt = con.createStatement();
      324 
      325             String updateSql = "delete from reader where Id='"+Id+"'";
      326             System.out.println(updateSql);
      327             int selectRes = stmt.executeUpdate(updateSql);
      328             if (selectRes != 0) {
      329                 return true;
      330             }
      331             con.close();
      332         } catch (Exception e) {
      333             System.out.print("deleteReader检查----deleteReader----MYSQL ERROR:" + e.getMessage());
      334         }
      335         return false;
      336 
      337     }
      338 
      339     /**
      340      * 获取用户---管理员
      341      * @param myName
      342      * @return
      343      */
      344     public static User getUser(String myName) {
      345         User user = null;
      346         try {
      347             Connection con = null; //定义一个MYSQL链接对象
      348             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      349             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      350             Statement stmt; //创建声明
      351             stmt = con.createStatement();
      352 
      353             String selectSql = "SELECT * FROM user where Id='"+myName+"'";
      354             ResultSet selectRes = stmt.executeQuery(selectSql);
      355             if (selectRes.next()) {
      356                 user = new User();
      357                 user.setId(selectRes.getString("Id"));
      358                 user.setName(selectRes.getString("name"));
      359                 user.setEmail(selectRes.getString("email"));
      360                 user.setIsAdmin(selectRes.getInt("is_admin"));
      361             }
      362             con.close();
      363             return user;
      364         } catch (Exception e) {
      365             System.out.print("user获取检查----getUser----MYSQL ERROR:" + e.getMessage());
      366         }
      367         return user;
      368 
      369     }
      370 
      371     /**
      372      * 获取所有图书信息
      373      * @return
      374      */
      375     public static ObservableList<Book> getAllBooks() {
      376         final ObservableList<Book> books = FXCollections.observableArrayList();
      377         try {
      378             Connection con = null; //定义一个MYSQL链接对象
      379             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      380             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      381             Statement stmt; //创建声明
      382             stmt = con.createStatement();
      383 
      384             Book book = null;
      385             String selectSql = "SELECT * FROM book";
      386             ResultSet selectRes = stmt.executeQuery(selectSql);
      387             while (selectRes.next()) {
      388                 book = new Book();
      389                 book.setId(selectRes.getString("Id"));
      390                 book.setName(selectRes.getString("name"));
      391                 book.setType(selectRes.getString("type"));
      392                 book.setAuthor(selectRes.getString("author"));
      393                 book.setTranslator(selectRes.getString("translator"));
      394                 book.setPublisher(selectRes.getString("publisher"));
      395                 book.setPublishTime(selectRes.getDate("publish_time").toString());
      396                 book.setStock(selectRes.getInt("stock"));
      397                 book.setPrice(selectRes.getDouble("price"));
      398 
      399                 books.add(book);
      400             }
      401             con.close();
      402             return books;
      403         } catch (Exception e) {
      404             System.out.print("books获取检查----getAllBooks----MYSQL ERROR:" + e.getMessage());
      405         }
      406         return books;
      407     }
      408 
      409     /**
      410      * 获取所有读者信息
      411      * @return
      412      */
      413     public static ObservableList<Reader> getAllReaders() {
      414         final ObservableList<Reader> readers = FXCollections.observableArrayList();
      415         try {
      416             Connection con = null; //定义一个MYSQL链接对象
      417             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      418             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      419             Statement stmt; //创建声明
      420             stmt = con.createStatement();
      421 
      422             Reader reader = null;
      423             String selectSql = "SELECT * FROM reader";
      424             ResultSet selectRes = stmt.executeQuery(selectSql);
      425             while (selectRes.next()) {
      426                 reader = new Reader();
      427                 reader.setId(selectRes.getString("Id"));
      428                 reader.setName(selectRes.getString("name"));
      429                 reader.setPassword(selectRes.getString("pass"));
      430                 reader.setType(selectRes.getString("type"));
      431                 reader.setSex(selectRes.getString("sex"));
      432                 reader.setMax_num(selectRes.getInt("max_num"));
      433                 reader.setDays_num(selectRes.getInt("days_num"));
      434                 reader.setForfeit(selectRes.getDouble("forfeit"));
      435                 readers.add(reader);
      436             }
      437             con.close();
      438             return readers;
      439         } catch (Exception e) {
      440             System.out.print("getAllReader获取检查----getAllReader----MYSQL ERROR:" + e.getMessage());
      441         }
      442         return readers;
      443     }
      444 
      445     /**
      446      * 获取所有借阅记录
      447      * @return
      448      */
      449     public static ObservableList<Borrow> getAllBorrowRecord() {
      450         final ObservableList<Borrow> borrows = FXCollections.observableArrayList();
      451         try {
      452             Connection con = null; //定义一个MYSQL链接对象
      453             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      454             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      455             Statement stmt; //创建声明
      456             stmt = con.createStatement();
      457 
      458             Borrow borrow = null;
      459             String selectSql = "SELECT * FROM borrow";
      460             ResultSet selectRes = stmt.executeQuery(selectSql);
      461             while (selectRes.next()) {
      462                 borrow = new Borrow();
      463                 borrow.setId(selectRes.getString("Id"));
      464                 borrow.setBookId(selectRes.getString("book_id")+" ("+getBook(selectRes.getString("book_id")).getName()+")");
      465                 borrow.setReaderId(selectRes.getString("reader_id")+" ("+getReader(selectRes.getString("reader_id")).getName()+")");
      466                 borrow.setBorrowDate(selectRes.getString("borrow_date"));
      467                 borrow.setBackDate(selectRes.getString("back_date"));
      468                 borrow.setIsBack(selectRes.getInt("is_back"));
      469                 borrows.add(borrow);
      470             }
      471             con.close();
      472             return borrows;
      473         } catch (Exception e) {
      474             System.out.print("getAllBorrowRecord获取检查----getAllBorrowRecord----MYSQL ERROR:" + e.getMessage());
      475         }
      476         return borrows;
      477     }
      478 
      479     /**
      480      * 获取指定用户的借阅记录
      481      * @param id
      482      * @return
      483      */
      484     public static ObservableList<borrow_record> getBorrowRecord(String id) {
      485         final ObservableList<borrow_record> borrows = FXCollections.observableArrayList();
      486         try {
      487             Connection con = null; //定义一个MYSQL链接对象
      488             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      489             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      490             Statement stmt; //创建声明
      491             stmt = con.createStatement();
      492 
      493             borrow_record borrow = null;
      494             String selectSql = "SELECT * FROM borrow where reader_id='"+id+"' and is_back=0";
      495             ResultSet selectRes = stmt.executeQuery(selectSql);
      496             while (selectRes.next()) {
      497                 borrow = new borrow_record();
      498                 borrow.setBookId(selectRes.getString("book_id"));
      499                 borrow.setBookName(getBook(selectRes.getString("book_id")).getName());
      500                 borrow.setBorrowDate(selectRes.getString("borrow_date"));
      501                 borrow.setBackDate(selectRes.getString("back_date"));
      502                 borrows.add(borrow);
      503             }
      504             con.close();
      505             return borrows;
      506         } catch (Exception e) {
      507             System.out.print("getBorrowRecord获取检查----getBorrowRecord----MYSQL ERROR:" + e.getMessage());
      508         }
      509         return borrows;
      510     }
      511 
      512     public static double backBook(String redaerId, String bookId) {
      513         try {
      514             Connection con = null; //定义一个MYSQL链接对象
      515             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      516             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      517             Statement stmt,stmt1,stmt2; //创建声明
      518             stmt = con.createStatement();
      519             stmt1 = con.createStatement();
      520             stmt2 = con.createStatement();
      521 
      522             //先找到需要还的书籍,计算是否超出应还日期
      523             String selectSql = "select back_date from borrow where reader_id ='" + redaerId + "' and book_id='"+bookId+"' and is_back=0";
      524             ResultSet selectResult = stmt1.executeQuery(selectSql);
      525 
      526             String updateSql = "update borrow set is_back=1 where reader_id ='" + redaerId + "' and book_id='"+bookId+"' and is_back=0";
      527             System.out.println(updateSql);
      528             int updateRes = stmt.executeUpdate(updateSql);
      529             if (updateRes != 0) {
      530                 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
      531                 String todayStr = format.format(new Date());//今天
      532                 Date today = format.parse(todayStr);
      533 
      534                 double allForfeit = 0;
      535 
      536                 while (selectResult.next()) {
      537                     String back_date_str = selectResult.getString("back_date");
      538                     //计算超期天数,按照一天0.2元的方式罚款
      539                     Date back_date = format.parse(back_date_str);
      540                     int day = (int) ((today.getTime() - back_date.getTime()) / (1000*3600*24));
      541                     if (day > 0) {
      542                         double forfeit = day * 0.2;
      543                         allForfeit += forfeit;
      544                         System.out.println("超期书目:" + getBook(bookId).getName() + " 超期天数=" + day + "  罚款金额=" + forfeit);
      545                     }
      546                 }
      547                 BigDecimal bg = new BigDecimal(allForfeit);
      548                 double myAllForfeit = bg.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
      549                 System.out.println("总的罚款金额:" + myAllForfeit);
      550                 String upSql = "update reader set forfeit=forfeit+"+myAllForfeit+" where Id='"+redaerId+"'";
      551                 int rs = stmt2.executeUpdate(upSql);
      552                 if (rs != 0) {
      553                     return myAllForfeit;
      554                 } else {
      555                     return -1;
      556                 }
      557 //                return true;
      558             }
      559             con.close();
      560         } catch (Exception e) {
      561             System.out.print("backBook检查----backBook----MYSQL ERROR:" + e.getMessage());
      562         }
      563         return -1;
      564     }
      565 
      566     public static ObservableList<Book> getAllLikesBooks(String bookName) {
      567         final ObservableList<Book> books = FXCollections.observableArrayList();
      568         try {
      569             Connection con = null; //定义一个MYSQL链接对象
      570             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      571             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      572             Statement stmt; //创建声明
      573             stmt = con.createStatement();
      574 
      575             Book book = null;
      576             String selectSql = "SELECT * FROM book where name like '%"+bookName+"%' or author like'%"+bookName+"%' or publisher like '%"+bookName+"%' or type like '%"+bookName+"%'";
      577             ResultSet selectRes = stmt.executeQuery(selectSql);
      578             while (selectRes.next()) {
      579                 book = new Book();
      580                 book.setId(selectRes.getString("Id"));
      581                 book.setName(selectRes.getString("name"));
      582                 book.setType(selectRes.getString("type"));
      583                 book.setAuthor(selectRes.getString("author"));
      584                 book.setTranslator(selectRes.getString("translator"));
      585                 book.setPublisher(selectRes.getString("publisher"));
      586                 book.setPublishTime(selectRes.getDate("publish_time").toString());
      587                 book.setStock(selectRes.getInt("stock"));
      588                 book.setPrice(selectRes.getDouble("price"));
      589 
      590                 books.add(book);
      591             }
      592             con.close();
      593             return books;
      594         } catch (Exception e) {
      595             System.out.print("books获取检查----getSearchedBooks----MYSQL ERROR:" + e.getMessage());
      596         }
      597         return books;
      598     }
      599 
      600     public static boolean reBorrow(String id, String bookId, String bDate) {
      601         try {
      602             Connection con = null; //定义一个MYSQL链接对象
      603             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      604             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      605             Statement stmt; //创建声明
      606             stmt = con.createStatement();
      607 
      608             String updateSql = "update borrow set back_date ='"+bDate+"' where book_id='"+bookId+"' and reader_id='"+id+"' and is_back=0";
      609             int selectRes = stmt.executeUpdate(updateSql);
      610             if (selectRes != 0) {
      611                 return true;
      612             }
      613             con.close();
      614         } catch (Exception e) {
      615             System.out.print("reBorrow检查----reBorrow----MYSQL ERROR:" + e.getMessage());
      616         }
      617         return false;
      618     }
      619 
      620     public static boolean jiaokuan(String id, double jiaokuan) {
      621         try {
      622             Connection con = null; //定义一个MYSQL链接对象
      623             Class.forName("com.mysql.jdbc.Driver").newInstance();//MYSQL驱动
      624             con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/tushuguanli_database_test", "root", "root"); //链接本地MYSQL
      625             Statement stmt; //创建声明
      626             stmt = con.createStatement();
      627 
      628             String updateSql = "update reader set forfeit ='" + jiaokuan + "' where Id='" + id + "'";
      629             int selectRes = stmt.executeUpdate(updateSql);
      630             if (selectRes != 0) {
      631                 return true;
      632             }
      633             con.close();
      634         } catch (Exception e) {
      635             System.out.print("jiaokuan检查----jiaokuan----MYSQL ERROR:" + e.getMessage());
      636         }
      637         return false;
      638     }
      639 }

    8.entity包----实体类

    • Book
        1 package sample.entity;
        2 
        3 import java.util.Date;
        4 
        5 public class Book {
        6     private String Id;
        7     private String name;
        8     private String type;
        9     private String author;
       10     private String translator;
       11     private String publisher;
       12     private String publishTime;
       13     private int stock;
       14     private double price;
       15 
       16 
       17     public Book(String id, String name, String type, String author, String translator, String publisher, String publishTime, int stock, double price) {
       18         this.Id = id;
       19         this.name = name;
       20         this.type = type;
       21         this.author = author;
       22         this.translator = translator;
       23         this.publisher = publisher;
       24         this.publishTime = publishTime;
       25         this.stock = stock;
       26         this.price = price;
       27     }
       28 
       29     public Book() {
       30 
       31     }
       32 
       33     public String getId() {
       34         return Id;
       35     }
       36 
       37     public void setId(String id) {
       38         Id = id;
       39     }
       40 
       41     public String getName() {
       42         return name;
       43     }
       44 
       45     public void setName(String name) {
       46         this.name = name;
       47     }
       48 
       49     public String getType() {
       50         return type;
       51     }
       52 
       53     public void setType(String type) {
       54         this.type = type;
       55     }
       56 
       57     public String getAuthor() {
       58         return author;
       59     }
       60 
       61     public void setAuthor(String author) {
       62         this.author = author;
       63     }
       64 
       65     public String getTranslator() {
       66         return translator;
       67     }
       68 
       69     public void setTranslator(String translator) {
       70         this.translator = translator;
       71     }
       72 
       73     public String getPublisher() {
       74         return publisher;
       75     }
       76 
       77     public void setPublisher(String publisher) {
       78         this.publisher = publisher;
       79     }
       80 
       81     public String getPublishTime() {
       82         return publishTime;
       83     }
       84 
       85     public void setPublishTime(String publishTime) {
       86         this.publishTime = publishTime;
       87     }
       88 
       89     public int getStock() {
       90         return stock;
       91     }
       92 
       93     public void setStock(int stock) {
       94         this.stock = stock;
       95     }
       96 
       97     public double getPrice() {
       98         return price;
       99     }
      100 
      101     public void setPrice(double price) {
      102         this.price = price;
      103     }
      104 }
      View Code
    • Borrow
       1 package sample.entity;
       2 
       3 public class Borrow {
       4     private String id;
       5     private String bookId;
       6     private String readerId;
       7     private String borrowDate;
       8     private String backDate;
       9     private int isBack;
      10 
      11     public Borrow(String id, String bookId, String readerId, String borrowDate, String backDate, int isBack) {
      12         this.id = id;
      13         this.bookId = bookId;
      14         this.readerId = readerId;
      15         this.borrowDate = borrowDate;
      16         this.backDate = backDate;
      17         this.isBack = isBack;
      18     }
      19 
      20     public Borrow() {
      21 
      22     }
      23 
      24     public String getId() {
      25         return id;
      26     }
      27 
      28     public void setId(String id) {
      29         this.id = id;
      30     }
      31 
      32     public String getBookId() {
      33         return bookId;
      34     }
      35 
      36     public void setBookId(String bookId) {
      37         this.bookId = bookId;
      38     }
      39 
      40     public String getReaderId() {
      41         return readerId;
      42     }
      43 
      44     public void setReaderId(String readerId) {
      45         this.readerId = readerId;
      46     }
      47 
      48     public String getBorrowDate() {
      49         return borrowDate;
      50     }
      51 
      52     public void setBorrowDate(String borrowDate) {
      53         this.borrowDate = borrowDate;
      54     }
      55 
      56     public String getBackDate() {
      57         return backDate;
      58     }
      59 
      60     public void setBackDate(String backDate) {
      61         this.backDate = backDate;
      62     }
      63 
      64     public int getIsBack() {
      65         return isBack;
      66     }
      67 
      68     public void setIsBack(int isBack) {
      69         this.isBack = isBack;
      70     }
      71 }
      View Code
    • borrow_record
       1 package sample.entity;
       2 
       3 public class borrow_record {
       4     private String bookId;
       5     private String bookName;
       6     private String borrowDate;
       7     private String backDate;
       8 
       9     public borrow_record(String bookId, String bookName, String borrowDate, String backDate, int isBack) {
      10         this.bookId = bookId;
      11         this.bookName = bookName;
      12         this.borrowDate = borrowDate;
      13         this.backDate = backDate;
      14     }
      15 
      16     public borrow_record() {
      17 
      18     }
      19 
      20     public String getBookId() {
      21         return bookId;
      22     }
      23 
      24     public void setBookId(String bookId) {
      25         this.bookId = bookId;
      26     }
      27 
      28     public String getBookName() {
      29         return bookName;
      30     }
      31 
      32     public void setBookName(String bookName) {
      33         this.bookName = bookName;
      34     }
      35 
      36     public String getBorrowDate() {
      37         return borrowDate;
      38     }
      39 
      40     public void setBorrowDate(String borrowDate) {
      41         this.borrowDate = borrowDate;
      42     }
      43 
      44     public String getBackDate() {
      45         return backDate;
      46     }
      47 
      48     public void setBackDate(String backDate) {
      49         this.backDate = backDate;
      50     }
      51 
      52 }
      View Code
    • Reader
       1 package sample.entity;
       2 
       3 public class Reader {
       4     private String id;
       5     private String name;
       6     private String password;
       7     private String type;
       8     private String sex;
       9     private int max_num;
      10     private int days_num;
      11     private double forfeit;
      12 
      13     public Reader(String id, String name, String type, String sex, int max_num, int days_num, double forfeit) {
      14         this.id = id;
      15         this.name = name;
      16         this.type = type;
      17         this.sex = sex;
      18         this.max_num = max_num;
      19         this.days_num = days_num;
      20         this.forfeit = forfeit;
      21     }
      22 
      23     public Reader() {
      24 
      25     }
      26 
      27 
      28     public String getId() {
      29         return id;
      30     }
      31 
      32     public void setId(String id) {
      33         this.id = id;
      34     }
      35 
      36     public String getName() {
      37         return name;
      38     }
      39 
      40     public void setName(String name) {
      41         this.name = name;
      42     }
      43 
      44     public String getType() {
      45         return type;
      46     }
      47 
      48     public void setType(String type) {
      49         this.type = type;
      50     }
      51 
      52     public String getSex() {
      53         return sex;
      54     }
      55 
      56     public void setSex(String sex) {
      57         this.sex = sex;
      58     }
      59 
      60     public int getMax_num() {
      61         return max_num;
      62     }
      63 
      64     public void setMax_num(int max_num) {
      65         this.max_num = max_num;
      66     }
      67 
      68     public int getDays_num() {
      69         return days_num;
      70     }
      71 
      72     public void setDays_num(int days_num) {
      73         this.days_num = days_num;
      74     }
      75 
      76     public double getForfeit() {
      77         return forfeit;
      78     }
      79 
      80     public void setForfeit(double forfeit) {
      81         this.forfeit = forfeit;
      82     }
      83 
      84     public String getPassword() {
      85         return password;
      86     }
      87 
      88     public void setPassword(String password) {
      89         this.password = password;
      90     }
      91 }
      View Code
    • User
       1 package sample.entity;
       2 
       3 public class User {
       4     private String id;
       5     private String name;
       6     private String email;
       7     private int isAdmin;
       8 
       9     public String getId() {
      10         return id;
      11     }
      12 
      13     public void setId(String id) {
      14         this.id = id;
      15     }
      16 
      17     public String getName() {
      18         return name;
      19     }
      20 
      21     public void setName(String name) {
      22         this.name = name;
      23     }
      24 
      25     public String getEmail() {
      26         return email;
      27     }
      28 
      29     public void setEmail(String email) {
      30         this.email = email;
      31     }
      32 
      33     public int getIsAdmin() {
      34         return isAdmin;
      35     }
      36 
      37     public void setIsAdmin(int isAdmin) {
      38         this.isAdmin = isAdmin;
      39     }
      40 }
      View Code

     通过测试暂时还没有找到明显的bug,希望大家留言提出意见!

     

  • 相关阅读:
    【C语言篇】☞ 2. 常量、变量、scanf函数和printf 函数
    【C语言篇】☞ 1. 前言、基础
    React快速入门教程
    数论-欧拉函数
    数论-约数
    数论-质数专题
    匈牙利算法求二分图的最大匹配数
    染色法判断二分图
    Kruskal算法
    Prim算法
  • 原文地址:https://www.cnblogs.com/alimjan/p/9132853.html
Copyright © 2011-2022 走看看