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 风格,控件很漂亮。最近上的数据库课程需要写一个数据库应用系统,就用它试了一下,整体感觉很棒,下面看看效果吧
- 登录界面
首先是登录界面,使用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,希望大家留言提出意见!