├── .gitignore
├── README.md
├── WebContent
├── 01.jpg
├── 02.jpg
├── 03.jpg
├── 04.jpg
├── META-INF
│ └── MANIFEST.MF
├── WEB-INF
│ ├── lib
│ │ └── mysql-connector-java-8.0.18.jar
│ └── web.xml
├── admin.jsp
├── admin_admin.jsp
├── admin_bdtimes.jsp
├── admin_book.jsp
├── admin_booktype.jsp
├── admin_borrow.jsp
├── admin_brtimes.jsp
├── admin_feedback.jsp
├── admin_history.jsp
├── admin_login.jsp
├── admin_user.jsp
├── bdtimes.jsp
├── borrow.jsp
├── brtimes.jsp
├── feedback.jsp
├── history.jsp
├── index.jsp
├── login.jsp
├── myproblem.jsp
├── register.jsp
├── result.jsp
├── select.jsp
└── static
│ ├── assets
│ ├── css
│ │ ├── admin.css
│ │ ├── amazeui.datatables.min.css
│ │ ├── amazeui.min.css
│ │ ├── app.css
│ │ ├── app.less
│ │ ├── fullcalendar.min.css
│ │ └── fullcalendar.print.css
│ └── js
│ │ ├── amazeui.datatables.min.js
│ │ ├── app.js
│ │ ├── dataTables.responsive.min.js
│ │ ├── fullcalendar.min.js
│ │ ├── jquery.min.js
│ │ ├── moment.js
│ │ └── theme.js
│ ├── css
│ ├── bootstrap-admin-theme.css
│ ├── bootstrap-theme.css
│ ├── bootstrap-theme.css.map
│ ├── bootstrap-theme.min.css
│ ├── bootstrap-theme.min.css.map
│ ├── bootstrap.css
│ ├── bootstrap.css.map
│ ├── bootstrap.min.css
│ ├── bootstrap.min.css.map
│ └── dataTables.bootstrap.css
│ ├── fonts
│ ├── glyphicons-halflings-regular.eot
│ ├── glyphicons-halflings-regular.svg
│ ├── glyphicons-halflings-regular.ttf
│ ├── glyphicons-halflings-regular.woff
│ └── glyphicons-halflings-regular.woff2
│ ├── jQuery
│ ├── ajaxfileupload.js
│ └── jquery-3.1.1.min.js
│ └── js
│ ├── addAdmin.js
│ ├── addBook.js
│ ├── addBookNum.js
│ ├── addBookType.js
│ ├── addReader.js
│ ├── addReaderType.js
│ ├── adminLogin.js
│ ├── adminUpdateInfo.js
│ ├── adminUpdatePwd.js
│ ├── ajax_upload.js
│ ├── backBook.js
│ ├── batchAddBook.js
│ ├── batchAddReader.js
│ ├── bootstrap-dropdown.min.js
│ ├── bootstrap.js
│ ├── bootstrap.min.js
│ ├── borrowBook.js
│ ├── dataTables.bootstrap.js
│ ├── deleteAdmin.js
│ ├── deleteBook.js
│ ├── deleteBookType.js
│ ├── deleteReader.js
│ ├── exportBook.js
│ ├── exportReader.js
│ ├── getAllBookTypes.js
│ ├── getAllReaderTypes.js
│ ├── getBackInfo.js
│ ├── getBookInfo.js
│ ├── getBookTypes.js
│ ├── getBorrowInfo.js
│ ├── getForfeitInfo.js
│ ├── getReader.js
│ ├── getReaderBackInfo.js
│ ├── getReaderBookInfo.js
│ ├── getReaderForfeitInfo.js
│ ├── jquery.dataTables.zh_CN.js
│ ├── login.js
│ ├── npm.js
│ ├── pay.js
│ ├── reader.js
│ ├── readerUpdateInfo.js
│ ├── readerUpdatePwd.js
│ ├── renewBook.js
│ ├── updateAdmin.js
│ ├── updateAuthorization.js
│ ├── updateBook.js
│ ├── updateBookType.js
│ ├── updateReader.js
│ └── updateReaderType.js
├── screenshot
├── 1.png
├── 2.png
├── 3.png
├── 4.png
├── 5.png
├── 6.png
├── 7.png
├── 8.png
└── 9.png
└── src
└── com
└── rain
├── bean
├── AdminBean.java
├── BookBean.java
├── HistoryBean.java
├── ProblemBean.java
└── TypeBean.java
├── dao
├── AdminDao.java
├── BookDao.java
├── ProblemDao.java
└── TypeDao.java
├── servlet
├── AddAdminServlet.java
├── AddBookServlet.java
├── AddBookTypeServlet.java
├── AddProblemServlet.java
├── AddTimeServlet.java
├── AddUserServlet.java
├── AdminLoginServlet.java
├── AdminServlet.java
├── CodeServlet.java
├── LoginServlet.java
├── RegisterServlet.java
├── bdtimesServlet.java
├── borrowServlet.java
├── brtimesServlet.java
├── deleteAdminServlet.java
├── deleteProblemServlet.java
├── deleteServlet.java
├── deleteTypeServlet.java
├── deleteUserServlet.java
├── selectProblemServlet.java
├── selectServlet.java
├── updateAdminServlet.java
├── updateBookServlet.java
├── updateBookTypeServlet.java
├── updateProblemServlet.java
└── updateUserServlet.java
└── util
└── DBUtil.java
/.gitignore:
--------------------------------------------------------------------------------
1 | ######################################################################
2 | # Build Tools
3 |
4 | .gradle
5 | /build/
6 | !gradle/wrapper/gradle-wrapper.jar
7 |
8 | target/
9 | !.mvn/wrapper/maven-wrapper.jar
10 |
11 | out/
12 |
13 | ######################################################################
14 | # IDE
15 |
16 | ### STS ###
17 | .apt_generated
18 | .classpath
19 | .factorypath
20 | .project
21 | .settings
22 | .springBeans
23 |
24 | ### IntelliJ IDEA ###
25 | .idea
26 | *.iws
27 | *.iml
28 | *.ipr
29 |
30 | ### NetBeans ###
31 | nbproject/private/
32 | build/*
33 | nbbuild/
34 | dist/
35 | nbdist/
36 | .nb-gradle/
37 |
38 | ######################################################################
39 | # Others
40 | *.log
41 | *.xml.versionsBackup
42 | *.swp
43 |
44 | !*/build/*.java
45 | !*/build/*.html
46 | !*/build/*.xml
47 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
245.基于java+jsp的图书馆管理系统
2 |
3 | - 完整代码获取地址:从戎源码网 ([https://armycodes.com/](https://armycodes.com/))
4 | - 技术探讨、资料分享,请加QQ群:692619798
5 | - 作者微信:19941326836 QQ:952045282
6 | - 承接计算机毕业设计、Java毕业设计、Python毕业设计、深度学习、机器学习
7 | - 选题+开题报告+任务书+程序定制+安装调试+论文+答辩ppt 一条龙服务
8 | - 所有选题地址 ([https://github.com/YuLin-Coder/AllProjectCatalog](https://github.com/YuLin-Coder/AllProjectCatalog))
9 |
10 | ## 项目介绍
11 | 基于java+jsp的图书馆管理系统:前端 jsp、jquery,后端 servlet、jdbc;角色分为管理员、用户;集成图书管理、借书、还书、问题反馈等功能于一体的系统。
12 |
13 | ## 环境
14 |
15 | - IntelliJ IDEA 2021.3
16 |
17 | - Mysql 5.7.26
18 |
19 | - Tomcat 7.0.73
20 |
21 | - JDK 1.8
22 |
23 | ## 运行截图
24 | 
25 |
26 | 
27 |
28 | 
29 |
30 | 
31 |
32 | 
33 |
34 | 
35 |
36 | 
37 |
38 | 
39 |
40 | 
41 |
--------------------------------------------------------------------------------
/WebContent/01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/01.jpg
--------------------------------------------------------------------------------
/WebContent/02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/02.jpg
--------------------------------------------------------------------------------
/WebContent/03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/03.jpg
--------------------------------------------------------------------------------
/WebContent/04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/04.jpg
--------------------------------------------------------------------------------
/WebContent/META-INF/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | Class-Path:
3 |
4 |
--------------------------------------------------------------------------------
/WebContent/WEB-INF/lib/mysql-connector-java-8.0.18.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/WEB-INF/lib/mysql-connector-java-8.0.18.jar
--------------------------------------------------------------------------------
/WebContent/WEB-INF/web.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | books
4 |
5 | index.html
6 | index.htm
7 | index.jsp
8 | default.html
9 | default.htm
10 | default.jsp
11 |
12 |
--------------------------------------------------------------------------------
/WebContent/admin_login.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" contentType="text/html; charset=UTF-8"
2 | pageEncoding="UTF-8"%>
3 |
4 |
5 |
6 |
7 | 图书馆管理系统
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
23 |
24 |
25 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
×
39 | 正在前往管理员管理系统...
40 |
41 |
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/WebContent/login.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" contentType="text/html; charset=UTF-8"
2 | pageEncoding="UTF-8"%>
3 | <%
4 | String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
5 | + request.getContextPath() + "/";
6 | %>
7 |
8 |
9 |
10 |
11 |
12 | 图书馆管理系统
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
31 |
36 |
37 |
38 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
×
52 | 欢迎登录图书馆管理系统
53 |
54 |
97 |
98 |
99 |
100 |
101 |
--------------------------------------------------------------------------------
/WebContent/register.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" contentType="text/html; charset=UTF-8"
2 | pageEncoding="UTF-8"%>
3 |
4 |
5 |
6 |
7 | 注册账号
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
选择主题
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
注册用户
37 |
创建一个新的用户
38 |
39 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/WebContent/result.jsp:
--------------------------------------------------------------------------------
1 | <%@ page language="java" contentType="text/html; charset=UTF-8"
2 | pageEncoding="UTF-8"%>
3 |
4 |
5 |
6 |
7 |
8 | 反馈结果
9 |
10 |
11 | 反馈成功,页面将于3s后自动跳转
12 | 点我跳转
13 |
14 |
--------------------------------------------------------------------------------
/WebContent/static/assets/css/admin.css:
--------------------------------------------------------------------------------
1 | /**
2 | * admin.css
3 | */
4 |
5 |
6 | /*
7 | fixed-layout 固定头部和边栏布局
8 | */
9 |
10 | html,
11 | body {
12 | height: 100%;
13 | overflow: hidden;
14 | }
15 |
16 | ul {
17 | margin-top: 0;
18 | }
19 |
20 | .admin-icon-yellow {
21 | color: #ffbe40;
22 | }
23 |
24 | .admin-header {
25 | position: fixed;
26 | top: 0;
27 | left: 0;
28 | right: 0;
29 | z-index: 1500;
30 | font-size: 1.4rem;
31 | margin-bottom: 0;
32 | }
33 |
34 | .admin-header-list a:hover :after {
35 | content: none;
36 | }
37 |
38 | .admin-main {
39 | position: relative;
40 | height: 100%;
41 | padding-top: 51px;
42 | background: #f3f3f3;
43 | }
44 |
45 | .admin-menu {
46 | position: fixed;
47 | z-index: 10;
48 | bottom: 30px;
49 | right: 20px;
50 | }
51 |
52 | .admin-sidebar {
53 | width: 260px;
54 | min-height: 100%;
55 | float: left;
56 | border-right: 1px solid #cecece;
57 | }
58 |
59 | .admin-sidebar.am-active {
60 | z-index: 1600;
61 | }
62 |
63 | .admin-sidebar-list {
64 | margin-bottom: 0;
65 | }
66 |
67 | .admin-sidebar-list li a {
68 | color: #5c5c5c;
69 | padding-left: 24px;
70 | }
71 |
72 | .admin-sidebar-list li:first-child {
73 | border-top: none;
74 | }
75 |
76 | .admin-sidebar-sub {
77 | margin-top: 0;
78 | margin-bottom: 0;
79 | box-shadow: 0 16px 8px -15px #e2e2e2 inset;
80 | background: #ececec;
81 | padding-left: 24px;
82 | }
83 |
84 | .admin-sidebar-sub li:first-child {
85 | border-top: 1px solid #dedede;
86 | }
87 |
88 | .admin-sidebar-panel {
89 | margin: 10px;
90 | }
91 |
92 | .admin-content {
93 | display: -webkit-box;
94 | display: -webkit-flex;
95 | display: -ms-flexbox;
96 | display: flex;
97 | -webkit-box-orient: vertical;
98 | -webkit-box-direction: normal;
99 | -webkit-flex-direction: column;
100 | -ms-flex-direction: column;
101 | flex-direction: column;
102 | background: #fff;
103 | }
104 |
105 | .admin-content,
106 | .admin-sidebar {
107 | height: 100%;
108 | overflow-x: hidden;
109 | overflow-y: scroll;
110 | -webkit-overflow-scrolling: touch;
111 | }
112 |
113 | .admin-content-body {
114 | -webkit-box-flex: 1;
115 | -webkit-flex: 1 0 auto;
116 | -ms-flex: 1 0 auto;
117 | flex: 1 0 auto;
118 | }
119 |
120 | .admin-content-footer {
121 | font-size: 85%;
122 | color: #777;
123 | }
124 |
125 | .admin-content-list {
126 | border: 1px solid #e9ecf1;
127 | margin-top: 0;
128 | }
129 |
130 | .admin-content-list li {
131 | border: 1px solid #e9ecf1;
132 | border-width: 0 1px;
133 | margin-left: -1px;
134 | }
135 |
136 | .admin-content-list li:first-child {
137 | border-left: none;
138 | }
139 |
140 | .admin-content-list li:last-child {
141 | border-right: none;
142 | }
143 |
144 | .admin-content-table a {
145 | color: #535353;
146 | }
147 | .admin-content-file {
148 | margin-bottom: 0;
149 | color: #666;
150 | }
151 |
152 | .admin-content-file p {
153 | margin: 0 0 5px 0;
154 | font-size: 1.4rem;
155 | }
156 |
157 | .admin-content-file li {
158 | padding: 10px 0;
159 | }
160 |
161 | .admin-content-file li:first-child {
162 | border-top: none;
163 | }
164 |
165 | .admin-content-file li:last-child {
166 | border-bottom: none;
167 | }
168 |
169 | .admin-content-file li .am-progress {
170 | margin-bottom: 4px;
171 | }
172 |
173 | .admin-content-file li .am-progress-bar {
174 | line-height: 14px;
175 | }
176 |
177 | .admin-content-task {
178 | margin-bottom: 0;
179 | }
180 |
181 | .admin-content-task li {
182 | padding: 5px 0;
183 | border-color: #eee;
184 | }
185 |
186 | .admin-content-task li:first-child {
187 | border-top: none;
188 | }
189 |
190 | .admin-content-task li:last-child {
191 | border-bottom: none;
192 | }
193 |
194 | .admin-task-meta {
195 | font-size: 1.2rem;
196 | color: #999;
197 | }
198 |
199 | .admin-task-bd {
200 | font-size: 1.4rem;
201 | margin-bottom: 5px;
202 | }
203 |
204 | .admin-content-comment {
205 | margin-bottom: 0;
206 | }
207 |
208 | .admin-content-comment .am-comment-bd {
209 | font-size: 1.4rem;
210 | }
211 |
212 | .admin-content-pagination {
213 | margin-bottom: 0;
214 | }
215 | .admin-content-pagination li a {
216 | padding: 4px 8px;
217 | }
218 |
219 | @media only screen and (min-width: 641px) {
220 | .admin-sidebar {
221 | display: block;
222 | position: static;
223 | background: none;
224 | }
225 |
226 | .admin-offcanvas-bar {
227 | position: static;
228 | width: auto;
229 | background: none;
230 | -webkit-transform: translate3d(0, 0, 0);
231 | -ms-transform: translate3d(0, 0, 0);
232 | transform: translate3d(0, 0, 0);
233 | overflow-y: visible;
234 | min-height: 100%;
235 | }
236 | .admin-offcanvas-bar:after {
237 | content: none;
238 | }
239 | }
240 |
241 | @media only screen and (max-width: 640px) {
242 | .admin-sidebar {
243 | width: inherit;
244 | }
245 |
246 | .admin-offcanvas-bar {
247 | background: #f3f3f3;
248 | }
249 |
250 | .admin-offcanvas-bar:after {
251 | background: #BABABA;
252 | }
253 |
254 | .admin-sidebar-list a:hover, .admin-sidebar-list a:active{
255 | -webkit-transition: background-color .3s ease;
256 | -moz-transition: background-color .3s ease;
257 | -ms-transition: background-color .3s ease;
258 | -o-transition: background-color .3s ease;
259 | transition: background-color .3s ease;
260 | background: #E4E4E4;
261 | }
262 |
263 | .admin-content-list li {
264 | padding: 10px;
265 | border-width: 1px 0;
266 | margin-top: -1px;
267 | }
268 |
269 | .admin-content-list li:first-child {
270 | border-top: none;
271 | }
272 |
273 | .admin-content-list li:last-child {
274 | border-bottom: none;
275 | }
276 |
277 | .admin-form-text {
278 | text-align: left !important;
279 | }
280 |
281 | }
282 |
283 | /*
284 | * user.html css
285 | */
286 | .user-info {
287 | margin-bottom: 15px;
288 | }
289 |
290 | .user-info .am-progress {
291 | margin-bottom: 4px;
292 | }
293 |
294 | .user-info p {
295 | margin: 5px;
296 | }
297 |
298 | .user-info-order {
299 | font-size: 1.4rem;
300 | }
301 |
302 | /*
303 | * errorLog.html css
304 | */
305 |
306 | .error-log .am-pre-scrollable {
307 | max-height: 40rem;
308 | }
309 |
310 | /*
311 | * table.html css
312 | */
313 |
314 | .table-main {
315 | font-size: 1.4rem;
316 | padding: .5rem;
317 | }
318 |
319 | .table-main button {
320 | background: #fff;
321 | }
322 |
323 | .table-check {
324 | width: 30px;
325 | }
326 |
327 | .table-id {
328 | width: 50px;
329 | }
330 |
331 | @media only screen and (max-width: 640px) {
332 | .table-select {
333 | margin-top: 10px;
334 | margin-left: 5px;
335 | }
336 | }
337 |
338 | /*
339 | gallery.html css
340 | */
341 |
342 | .gallery-list li {
343 | padding: 10px;
344 | }
345 |
346 | .gallery-list a {
347 | color: #666;
348 | }
349 |
350 | .gallery-list a:hover {
351 | color: #3bb4f2;
352 | }
353 |
354 | .gallery-title {
355 | margin-top: 6px;
356 | font-size: 1.4rem;
357 | }
358 |
359 | .gallery-desc {
360 | font-size: 1.2rem;
361 | margin-top: 4px;
362 | }
363 |
364 | /*
365 | 404.html css
366 | */
367 |
368 | .page-404 {
369 | background: #fff;
370 | border: none;
371 | width: 200px;
372 | margin: 0 auto;
373 | }
374 |
--------------------------------------------------------------------------------
/WebContent/static/assets/css/fullcalendar.print.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * FullCalendar v0.0.0 Print Stylesheet
3 | * Docs & License: http://fullcalendar.io/
4 | * (c) 2016 Adam Shaw
5 | */
6 |
7 | /*
8 | * Include this stylesheet on your page to get a more printer-friendly calendar.
9 | * When including this stylesheet, use the media='print' attribute of the tag.
10 | * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
11 | */
12 |
13 | .fc {
14 | max-width: 100% !important;
15 | }
16 |
17 |
18 | /* Global Event Restyling
19 | --------------------------------------------------------------------------------------------------*/
20 |
21 | .fc-event {
22 | background: #fff !important;
23 | color: #000 !important;
24 | page-break-inside: avoid;
25 | }
26 |
27 | .fc-event .fc-resizer {
28 | display: none;
29 | }
30 |
31 |
32 | /* Table & Day-Row Restyling
33 | --------------------------------------------------------------------------------------------------*/
34 |
35 | .fc th,
36 | .fc td,
37 | .fc hr,
38 | .fc thead,
39 | .fc tbody,
40 | .fc-row {
41 | border-color: #ccc !important;
42 | background: #fff !important;
43 | }
44 |
45 | /* kill the overlaid, absolutely-positioned components */
46 | /* common... */
47 | .fc-bg,
48 | .fc-bgevent-skeleton,
49 | .fc-highlight-skeleton,
50 | .fc-helper-skeleton,
51 | /* for timegrid. within cells within table skeletons... */
52 | .fc-bgevent-container,
53 | .fc-business-container,
54 | .fc-highlight-container,
55 | .fc-helper-container {
56 | display: none;
57 | }
58 |
59 | /* don't force a min-height on rows (for DayGrid) */
60 | .fc tbody .fc-row {
61 | height: auto !important; /* undo height that JS set in distributeHeight */
62 | min-height: 0 !important; /* undo the min-height from each view's specific stylesheet */
63 | }
64 |
65 | .fc tbody .fc-row .fc-content-skeleton {
66 | position: static; /* undo .fc-rigid */
67 | padding-bottom: 0 !important; /* use a more border-friendly method for this... */
68 | }
69 |
70 | .fc tbody .fc-row .fc-content-skeleton tbody tr:last-child td { /* only works in newer browsers */
71 | padding-bottom: 1em; /* ...gives space within the skeleton. also ensures min height in a way */
72 | }
73 |
74 | .fc tbody .fc-row .fc-content-skeleton table {
75 | /* provides a min-height for the row, but only effective for IE, which exaggerates this value,
76 | making it look more like 3em. for other browers, it will already be this tall */
77 | height: 1em;
78 | }
79 |
80 |
81 | /* Undo month-view event limiting. Display all events and hide the "more" links
82 | --------------------------------------------------------------------------------------------------*/
83 |
84 | .fc-more-cell,
85 | .fc-more {
86 | display: none !important;
87 | }
88 |
89 | .fc tr.fc-limited {
90 | display: table-row !important;
91 | }
92 |
93 | .fc td.fc-limited {
94 | display: table-cell !important;
95 | }
96 |
97 | .fc-popover {
98 | display: none; /* never display the "more.." popover in print mode */
99 | }
100 |
101 |
102 | /* TimeGrid Restyling
103 | --------------------------------------------------------------------------------------------------*/
104 |
105 | /* undo the min-height 100% trick used to fill the container's height */
106 | .fc-time-grid {
107 | min-height: 0 !important;
108 | }
109 |
110 | /* don't display the side axis at all ("all-day" and time cells) */
111 | .fc-agenda-view .fc-axis {
112 | display: none;
113 | }
114 |
115 | /* don't display the horizontal lines */
116 | .fc-slats,
117 | .fc-time-grid hr { /* this hr is used when height is underused and needs to be filled */
118 | display: none !important; /* important overrides inline declaration */
119 | }
120 |
121 | /* let the container that holds the events be naturally positioned and create real height */
122 | .fc-time-grid .fc-content-skeleton {
123 | position: static;
124 | }
125 |
126 | /* in case there are no events, we still want some height */
127 | .fc-time-grid .fc-content-skeleton table {
128 | height: 4em;
129 | }
130 |
131 | /* kill the horizontal spacing made by the event container. event margins will be done below */
132 | .fc-time-grid .fc-event-container {
133 | margin: 0 !important;
134 | }
135 |
136 |
137 | /* TimeGrid *Event* Restyling
138 | --------------------------------------------------------------------------------------------------*/
139 |
140 | /* naturally position events, vertically stacking them */
141 | .fc-time-grid .fc-event {
142 | position: static !important;
143 | margin: 3px 2px !important;
144 | }
145 |
146 | /* for events that continue to a future day, give the bottom border back */
147 | .fc-time-grid .fc-event.fc-not-end {
148 | border-bottom-width: 1px !important;
149 | }
150 |
151 | /* indicate the event continues via "..." text */
152 | .fc-time-grid .fc-event.fc-not-end:after {
153 | content: "...";
154 | }
155 |
156 | /* for events that are continuations from previous days, give the top border back */
157 | .fc-time-grid .fc-event.fc-not-start {
158 | border-top-width: 1px !important;
159 | }
160 |
161 | /* indicate the event is a continuation via "..." text */
162 | .fc-time-grid .fc-event.fc-not-start:before {
163 | content: "...";
164 | }
165 |
166 | /* time */
167 |
168 | /* undo a previous declaration and let the time text span to a second line */
169 | .fc-time-grid .fc-event .fc-time {
170 | white-space: normal !important;
171 | }
172 |
173 | /* hide the the time that is normally displayed... */
174 | .fc-time-grid .fc-event .fc-time span {
175 | display: none;
176 | }
177 |
178 | /* ...replace it with a more verbose version (includes AM/PM) stored in an html attribute */
179 | .fc-time-grid .fc-event .fc-time:after {
180 | content: attr(data-full);
181 | }
182 |
183 |
184 | /* Vertical Scroller & Containers
185 | --------------------------------------------------------------------------------------------------*/
186 |
187 | /* kill the scrollbars and allow natural height */
188 | .fc-scroller,
189 | .fc-day-grid-container, /* these divs might be assigned height, which we need to cleared */
190 | .fc-time-grid-container { /* */
191 | overflow: visible !important;
192 | height: auto !important;
193 | }
194 |
195 | /* kill the horizontal border/padding used to compensate for scrollbars */
196 | .fc-row {
197 | border: 0 !important;
198 | margin: 0 !important;
199 | }
200 |
201 |
202 | /* Button Controls
203 | --------------------------------------------------------------------------------------------------*/
204 |
205 | .fc-button-group,
206 | .fc button {
207 | display: none; /* don't display any button-related controls */
208 | }
209 |
--------------------------------------------------------------------------------
/WebContent/static/assets/js/theme.js:
--------------------------------------------------------------------------------
1 | var saveSelectColor = {
2 | 'Name': 'SelcetColor',
3 | 'Color': 'theme-white'
4 | }
5 |
6 |
7 |
8 | // 判断用户是否已有自己选择的模板风格
9 | if (storageLoad('SelcetColor')) {
10 | $('body').attr('class', storageLoad('SelcetColor').Color)
11 | } else {
12 | storageSave(saveSelectColor);
13 | $('body').attr('class', 'theme-white')
14 | }
15 |
16 |
17 | // 本地缓存
18 | function storageSave(objectData) {
19 | localStorage.setItem(objectData.Name, JSON.stringify(objectData));
20 | }
21 |
22 | function storageLoad(objectName) {
23 | if (localStorage.getItem(objectName)) {
24 | return JSON.parse(localStorage.getItem(objectName))
25 | } else {
26 | return false
27 | }
28 | }
--------------------------------------------------------------------------------
/WebContent/static/css/dataTables.bootstrap.css:
--------------------------------------------------------------------------------
1 | table.dataTable {
2 | clear: both;
3 | margin-top: 6px !important;
4 | margin-bottom: 6px !important;
5 | max-width: none !important;
6 | }
7 | table.dataTable td,
8 | table.dataTable th {
9 | -webkit-box-sizing: content-box;
10 | -moz-box-sizing: content-box;
11 | box-sizing: content-box;
12 | }
13 | table.dataTable.nowrap th,
14 | table.dataTable.nowrap td {
15 | white-space: nowrap;
16 | }
17 |
18 | div.dataTables_wrapper div.dataTables_length label {
19 | font-weight: normal;
20 | text-align: left;
21 | white-space: nowrap;
22 | }
23 | div.dataTables_wrapper div.dataTables_length select {
24 | width: 75px;
25 | display: inline-block;
26 | }
27 | div.dataTables_wrapper div.dataTables_filter {
28 | text-align: right;
29 | }
30 | div.dataTables_wrapper div.dataTables_filter label {
31 | font-weight: normal;
32 | white-space: nowrap;
33 | text-align: left;
34 | }
35 | div.dataTables_wrapper div.dataTables_filter input {
36 | margin-left: 0.5em;
37 | display: inline-block;
38 | width: auto;
39 | }
40 | div.dataTables_wrapper div.dataTables_info {
41 | padding-top: 8px;
42 | white-space: nowrap;
43 | }
44 | div.dataTables_wrapper div.dataTables_paginate {
45 | margin: 0;
46 | white-space: nowrap;
47 | text-align: right;
48 | }
49 | div.dataTables_wrapper div.dataTables_paginate ul.pagination {
50 | margin: 2px 0;
51 | white-space: nowrap;
52 | }
53 |
54 | table.dataTable thead > tr > th,
55 | table.dataTable thead > tr > td {
56 | padding-right: 30px;
57 | }
58 | table.dataTable thead > tr > th:active,
59 | table.dataTable thead > tr > td:active {
60 | outline: none;
61 | }
62 | table.dataTable thead .sorting,
63 | table.dataTable thead .sorting_asc,
64 | table.dataTable thead .sorting_desc,
65 | table.dataTable thead .sorting_asc_disabled,
66 | table.dataTable thead .sorting_desc_disabled {
67 | cursor: pointer;
68 | position: relative;
69 | }
70 | table.dataTable thead .sorting:after,
71 | table.dataTable thead .sorting_asc:after,
72 | table.dataTable thead .sorting_desc:after,
73 | table.dataTable thead .sorting_asc_disabled:after,
74 | table.dataTable thead .sorting_desc_disabled:after {
75 | position: absolute;
76 | bottom: 8px;
77 | right: 8px;
78 | display: block;
79 | font-family: 'Glyphicons Halflings';
80 | opacity: 0.5;
81 | }
82 | table.dataTable thead .sorting:after {
83 | opacity: 0.2;
84 | content: "\e150";
85 | /* sort */
86 | }
87 | table.dataTable thead .sorting_asc:after {
88 | content: "\e155";
89 | /* sort-by-attributes */
90 | }
91 | table.dataTable thead .sorting_desc:after {
92 | content: "\e156";
93 | /* sort-by-attributes-alt */
94 | }
95 | table.dataTable thead .sorting_asc_disabled:after,
96 | table.dataTable thead .sorting_desc_disabled:after {
97 | color: #eee;
98 | }
99 |
100 | div.dataTables_scrollHead table.dataTable {
101 | margin-bottom: 0 !important;
102 | }
103 |
104 | div.dataTables_scrollBody table {
105 | border-top: none;
106 | margin-top: 0 !important;
107 | margin-bottom: 0 !important;
108 | }
109 | div.dataTables_scrollBody table thead .sorting:after,
110 | div.dataTables_scrollBody table thead .sorting_asc:after,
111 | div.dataTables_scrollBody table thead .sorting_desc:after {
112 | display: none;
113 | }
114 | div.dataTables_scrollBody table tbody tr:first-child th,
115 | div.dataTables_scrollBody table tbody tr:first-child td {
116 | border-top: none;
117 | }
118 |
119 | div.dataTables_scrollFoot table {
120 | margin-top: 0 !important;
121 | border-top: none;
122 | }
123 |
124 | @media screen and (max-width: 767px) {
125 | div.dataTables_wrapper div.dataTables_length,
126 | div.dataTables_wrapper div.dataTables_filter,
127 | div.dataTables_wrapper div.dataTables_info,
128 | div.dataTables_wrapper div.dataTables_paginate {
129 | text-align: center;
130 | }
131 | }
132 | table.dataTable.table-condensed > thead > tr > th {
133 | padding-right: 20px;
134 | }
135 | table.dataTable.table-condensed .sorting:after,
136 | table.dataTable.table-condensed .sorting_asc:after,
137 | table.dataTable.table-condensed .sorting_desc:after {
138 | top: 6px;
139 | right: 6px;
140 | }
141 |
142 | table.table-bordered.dataTable {
143 | border-collapse: separate !important;
144 | }
145 | table.table-bordered.dataTable th,
146 | table.table-bordered.dataTable td {
147 | border-left-width: 0;
148 | }
149 | table.table-bordered.dataTable th:last-child, table.table-bordered.dataTable th:last-child,
150 | table.table-bordered.dataTable td:last-child,
151 | table.table-bordered.dataTable td:last-child {
152 | border-right-width: 0;
153 | }
154 | table.table-bordered.dataTable tbody th,
155 | table.table-bordered.dataTable tbody td {
156 | border-bottom-width: 0;
157 | }
158 |
159 | div.dataTables_scrollHead table.table-bordered {
160 | border-bottom-width: 0;
161 | }
162 |
--------------------------------------------------------------------------------
/WebContent/static/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/static/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/WebContent/static/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/static/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/WebContent/static/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/static/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/WebContent/static/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YuLin-Coder/No245LibraryManagementSystem/01bef34e70e2a6ac460dc615b87c4078dcb776e6/WebContent/static/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/WebContent/static/js/addAdmin.js:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * ajax提交添加管理员的信息
4 | * @param {Object} '#addAdmin'
5 | */
6 | $(function () {
7 |
8 |
9 |
10 |
11 | $('#addAdmin').click(function () {
12 |
13 | if (!validAddAdmin()) {
14 | return;
15 | }
16 | var postdata = "username="+$.trim($("#addUsername").val())+"&name="+$.trim($("#addName").val())+"&phone="+ $.trim($("#addPhone").val());
17 | ajax(
18 | {
19 | method:'POST',
20 | url:'admin/adminManageAction_addAdmin.action',
21 | params: postdata,
22 | callback:function(data) {
23 | if (data == 1) {
24 | $("#addModal").modal("hide");//关闭模糊框
25 | showInfo("添加成功");
26 |
27 | }else if (data == -1) {
28 | $("#addModal").modal("hide");//关闭模糊框
29 | showInfo("该管理员已存在");
30 | }else {
31 | $("#addModal").modal("hide");//关闭模糊框
32 | showInfo("添加失败");
33 | }
34 |
35 | }
36 | }
37 |
38 | );
39 |
40 |
41 | });
42 |
43 | $('#modal_info').on('hide.bs.modal',function() {//提示模糊框隐藏时候触发
44 | location.reload(); //刷新当前页面
45 | });
46 |
47 |
48 |
49 | });
50 |
51 |
52 |
53 | function validAddAdmin() {
54 | var flag = true;
55 |
56 | var username = $.trim($("#addUsername").val());
57 | if (username == "") {
58 | $('#addUsername').parent().addClass("has-error");
59 | $('#addUsername').next().text("请输入用户名");
60 | $("#addUsername").next().show();
61 | flag = false;
62 | } else if (username.length<2 || username.length > 15) {
63 | $("#addUsername").parent().addClass("has-error");
64 | $("#addUsername").next().text("用户名长度必须在2~15之间");
65 | $("#addUsername").next().show();
66 | flag = false;
67 | } else {
68 | $('#addUsername').parent().removeClass("has-error");
69 | $('#addUsername').next().text("");
70 | $("#addUsername").next().hide();
71 | }
72 |
73 |
74 |
75 | var reg = new RegExp("[\\u4E00-\\u9FFF]+","g");
76 | var name = $.trim($("#addName").val());
77 | if(name == ""){
78 | $('#addName').parent().addClass("has-error");
79 | $('#addName').next().text("请输入真实姓名");
80 | $("#addName").next().show();
81 | flag = false;
82 | }else if(!reg.test(name)){
83 | $('#addName').parent().addClass("has-error");
84 | $('#addName').next().text("真实姓名必须为中文");
85 | $("#addName").next().show();
86 | flag = false;
87 | }else {
88 | $('#addName').parent().removeClass("has-error");
89 | $('#addName').next().text("");
90 | $("#addName").next().hide();
91 | }
92 |
93 | var phone = $.trim($("#addPhone").val());
94 | if(phone == ""){
95 | $('#addPhone').parent().addClass("has-error");
96 | $('#addPhone').next().text("请输入联系号码");
97 | $("#addPhone").next().show();
98 | flag = false;
99 | }else if(!(/^1[34578]\d{9}$/.test(phone))){
100 | //电话号码格式的校验
101 | $('#addPhone').parent().addClass("has-error");
102 | $('#addPhone').next().text("手机号码有误");
103 | $("#addPhone").next().show();
104 | return false;
105 | }else {
106 | $('#addPhone').parent().removeClass("has-error");
107 | $('#addPhone').next().text("");
108 | $("#addPhone").next().hide();
109 | }
110 |
111 |
112 | return flag;
113 | }
114 |
115 |
116 |
117 |
118 |
119 |
120 | function showInfo(msg) {
121 | $("#div_info").text(msg);
122 | $("#modal_info").modal('show');
123 | }
124 |
125 |
126 |
--------------------------------------------------------------------------------
/WebContent/static/js/addBook.js:
--------------------------------------------------------------------------------
1 |
2 | $(function () {
3 |
4 |
5 | $('#addBook').click(function () {
6 |
7 |
8 | if (!validAddBook()) {
9 | return;
10 | }
11 |
12 | var postdata = "bookName="+$.trim($("#addBookName").val())+"&autho="+ $.trim($("#addAutho").val())+"&press="+ $.trim($("#addPress").val())+"&num="+ $.trim($("#addNum").val())+"&price="+ $.trim($("#addPrice").val())+"&description="
13 | + $.trim($("#addDescription").val())+"&bookTypeId="+ $.trim($("#addBookType").val())+"&ISBN="+ $.trim($("#addISBN").val());
14 |
15 | ajax(
16 | {
17 | method:'POST',
18 | url:'admin/bookManageAction_addBook.action',
19 | params: postdata,
20 | callback:function(data) {
21 | if (data == 1) {
22 | $("#addModal").modal("hide");//关闭模糊框
23 | showInfo("添加成功");
24 |
25 | }else {
26 | $("#addModal").modal("hide");//关闭模糊框
27 | showInfo("添加失败");
28 | }
29 |
30 | }
31 | }
32 |
33 | );
34 |
35 |
36 | });
37 |
38 |
39 |
40 |
41 |
42 |
43 | $('#modal_info').on('hide.bs.modal',function() {//提示模糊框隐藏时候触发
44 | location.reload(); //刷新当前页面
45 | });
46 |
47 |
48 | $('#btn_add').click(function () {
49 | $("#addBookType option[value!=-1]").remove();//移除先前的选项
50 | ajax(
51 | {
52 | url:"admin/bookManageAction_getAllBookTypes.action",
53 | type:"json",
54 | callback:function(data) {
55 | // 循环遍历每个图书分类,每个名称生成一个option对象,添加到