├── FaceReco.iml
├── README.md
├── pom.xml
└── src
├── META-INF
└── MANIFEST.MF
└── main
└── java
└── cn
└── cyan
├── facedao
├── FacebaiduDeal.java
├── FacebaiduMain.java
├── FacebaiduRegister.java
└── FacebaiduTest.java
├── util
├── BaiduApiUtil
│ └── DeleteUserGroup.java
├── Base64Util.java
├── DB.java
├── FileUtil.java
├── GsonUtils.java
├── HttpUtil.java
└── OpertareDBSets
│ ├── OperateDB.java
│ ├── OperateDB2.java
│ ├── OperateDB3.java
│ ├── OperateDB4.java
│ ├── OperateDB5.java
│ └── OperateDB6.java
└── view
├── AdminBasicInfoPage.java
├── AdminDataManipulationPage.java
├── AdminPage.java
├── AttendanceCheckingDataPage.java
├── AttendanceCheckingPage.java
├── BasicInfoPage.java
├── FaceUploadingPage.java
├── InitializingPage.java
├── LoginPage.java
├── PasswordChangingPage.java
├── StudentPage.java
├── StudentRegister.java
├── TeacherBasicInfoPage.java
└── TeacherPage.java
/FaceReco.iml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # FaceRecognition_JavaSwing
2 | 大二下Java期末大作业 Java Swing写的人脸识别考勤系统windows桌面程序,用的百度V3人脸识别API
3 |
--------------------------------------------------------------------------------
/pom.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 4.0.0
6 |
7 | FaceRecoGroup
8 | FaceReco
9 | 1.0-SNAPSHOT
10 |
11 |
12 | 1.8
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | org.apache.maven.plugins
21 | maven-compiler-plugin
22 |
23 | 7
24 | 7
25 |
26 |
27 |
28 |
29 |
30 | maven-clean-plugin
31 | 3.1.0
32 |
33 |
34 |
35 | maven-resources-plugin
36 | 3.0.2
37 |
38 |
39 | maven-compiler-plugin
40 | 3.8.0
41 |
42 |
43 | maven-surefire-plugin
44 | 2.22.1
45 |
46 |
47 | maven-jar-plugin
48 | 3.0.2
49 |
50 |
51 | maven-install-plugin
52 | 2.5.2
53 |
54 |
55 | maven-deploy-plugin
56 | 2.8.2
57 |
58 |
59 |
60 | maven-site-plugin
61 | 3.7.1
62 |
63 |
64 | maven-project-info-reports-plugin
65 | 3.0.0
66 |
67 |
68 |
69 |
70 |
71 |
72 | org.apache.maven.plugins
73 | maven-compiler-plugin
74 |
75 | 7
76 | 7
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 | com.baidu.aip
87 | java-sdk
88 | 4.11.0
89 |
90 |
91 | com.nativelibs4java
92 | bridj
93 | 0.7.0
94 |
95 |
96 | com.github.sarxos
97 | webcam-capture
98 | 0.3.12
99 |
100 |
101 | net.sf.json-lib
102 | json-lib
103 | 2.4
104 | jdk15
105 |
106 |
107 | org.apache.httpcomponents
108 | httpclient
109 | 4.5.8
110 |
111 |
112 | org.apache.httpcomponents
113 | httpcore
114 | 4.4.11
115 |
116 |
117 | com.google.code.gson
118 | gson
119 | 2.8.5
120 |
121 |
122 | commons-net
123 | commons-net
124 | 3.6
125 |
126 |
127 | org.eclipse.swt
128 | org.eclipse.swt.win32.win32.x86_64
129 | 4.6.1
130 |
131 |
132 | SwingSets3
133 | SwingSets3
134 | 1.0
135 |
136 |
137 |
138 |
139 |
140 |
--------------------------------------------------------------------------------
/src/META-INF/MANIFEST.MF:
--------------------------------------------------------------------------------
1 | Manifest-Version: 1.0
2 | Main-Class: cn.cyan.view.InitializingPage
3 |
4 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/facedao/FacebaiduDeal.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.facedao;
2 |
3 | import cn.cyan.util.HttpUtil;
4 | import net.sf.json.JSONArray;
5 | import net.sf.json.JSONObject;
6 |
7 | import java.io.BufferedReader;
8 | import java.io.IOException;
9 | import java.io.InputStreamReader;
10 | import java.net.HttpURLConnection;
11 | import java.net.URL;
12 |
13 | /**
14 | * 更改人脸库 组 需要修改
15 | * 添加人脸库时 修改add()方法(以及detect()方法)中参数 (应该是管理员界面会调用此接口)
16 | * 搜索人脸时 修改search()方法中参数 (考勤会调用此接口)
17 | * 修改与删除人脸 (也是管理员才会调用的接口)
18 | */
19 |
20 | public class FacebaiduDeal {
21 |
22 | /**
23 | * 百度云AK
24 | */
25 | private static final String API_KEY = "mBBpwKa7HOwGTwzlXim5dcUn";
26 | /**
27 | * 百度云SK
28 | */
29 | private static final String SECRET_KEY = "4ETRBMSq37nVLhbyyIFDAg2Sskhn96hF";
30 | /**
31 | * 获取access_token的接口地址
32 | */
33 | private static final String AUTH_HOST = "https://aip.baidubce.com/oauth/2.0/token?";
34 | /**
35 | * 进行人脸检测的接口地址
36 | */
37 | private static final String DETECT_HOST = "https://aip.baidubce.com/rest/2.0/face/v3/detect";
38 | /**
39 | * 进行人脸入人脸库的接口地址
40 | */
41 | private static final String FACEADD_HOST = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/add";
42 | /**
43 | * 进行人脸搜索的接口地址
44 | */
45 | private static final String FACRENZ_HOST = "https://aip.baidubce.com/rest/2.0/face/v3/search";
46 | /**
47 | * 进行人脸更新的接口地址
48 | */
49 | private static final String FACERGX_HOST = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/update";
50 | /**
51 | * 进行人脸删除的接口地址
52 | */
53 | private static final String FACEDELE_HOST = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/face/delete";
54 | /**
55 | * 进行人脸信息查询的接口地址
56 | */
57 | private static final String FACESELECT_HOST = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/user/get";
58 |
59 | /**
60 | * Gruop_id
61 | */
62 | private static final String groupid = "student_face_database";
63 |
64 | /**
65 | * 人脸探测 json解析搞定
66 | * @return 返回人脸数
67 | * @throws Exception
68 | */
69 | public String detect(String imgParam) throws Exception {
70 | JSONObject jsonObject = null;
71 |
72 | String param = "max_face_num=" + 1
73 | + "&face_field="
74 | + "age,beauty,gender,glasses,race,quality"
75 | + "&image=" + imgParam
76 | + "&image_type=BASE64";
77 |
78 | String accessToken = getAuth();
79 | String result = HttpUtil.post(DETECT_HOST, accessToken,"application/json", param);
80 | System.out.println(result);
81 |
82 |
83 | jsonObject = JSONObject.fromObject(result);
84 | String error_code = jsonObject.optString("error_code");
85 |
86 | /**
87 | * 划重点!!!!!!!!!
88 | * 写上博客
89 | * 去表头 也就是只取result对象 前面的都不要
90 | * V3返回JSON result是对象 不是数组Array
91 | * 所以V2文档得解析出错
92 | */
93 | if (error_code.equals("0")) {
94 | JSONObject jsonObjectResult = JSONObject.fromObject(jsonObject.optJSONObject("result"));
95 |
96 | //取result对象中的face_num对象
97 | int face_num;
98 | face_num = jsonObjectResult.optInt("face_num");
99 | System.out.println("face_num: " + face_num);
100 |
101 | //取result对象中的 face_list对象数组
102 | JSONArray jsonArrayFaceList = JSONArray.fromObject(jsonObjectResult.optJSONArray("face_list"));
103 |
104 | //取对象数组的face_token对象
105 | String face_token = jsonArrayFaceList.optJSONObject(0).optString("face_token");
106 | System.out.println("face_token: " + face_token);
107 |
108 | //取对象数组的 location 对象
109 | JSONObject jsonObjectLocation = jsonArrayFaceList.optJSONObject(0).optJSONObject("location");
110 | //然后解析location中的各个键值对
111 | double left = jsonObjectLocation.optDouble("left");
112 | double top = jsonObjectLocation.optDouble("top");
113 | double width = jsonObjectLocation.optDouble("width");
114 | double height = jsonObjectLocation.optDouble("height");
115 | int rotation = jsonObjectLocation.optInt("rotation");
116 | System.out.println("left: " + left);
117 | System.out.println("top: " + top);
118 | System.out.println("width: " + width);
119 | System.out.println("height: " + height);
120 | System.out.println("rotation: " + rotation);
121 |
122 | //取face_probability
123 | Double face_probability = jsonArrayFaceList.optJSONObject(0).optDouble("face_probability");
124 |
125 | //取angle
126 | JSONObject jsonObjectAngle = jsonArrayFaceList.optJSONObject(0).optJSONObject("angle");
127 | double yaw = jsonObjectAngle.optDouble("yaw");
128 | double pitch = jsonObjectAngle.optDouble("pitch");
129 | double roll = jsonObjectAngle.optDouble("roll");
130 | System.out.println("yaw: " + yaw);
131 | System.out.println("pitch: " + pitch);
132 | System.out.println("roll: " + roll);
133 |
134 | //取age
135 | double age = jsonArrayFaceList.optJSONObject(0).optDouble("age");
136 | System.out.println("age: " + age);
137 | //取beauty
138 | double beauty = jsonArrayFaceList.optJSONObject(0).optDouble("beauty");
139 | System.out.println("beauty: " + beauty);
140 |
141 | //取gender
142 | JSONObject jsonObjectGender = jsonArrayFaceList.optJSONObject(0).optJSONObject("gender");
143 | String type = jsonObjectGender.optString("type");
144 | double probability = jsonObjectGender.optDouble("probability");
145 | System.out.println("gender type: " + type);
146 | System.out.println("gender probability: " + probability);
147 |
148 | //取glasses
149 | JSONObject jsonObjectGlasses = jsonArrayFaceList.optJSONObject(0).optJSONObject("glasses");
150 | String glasses_type = jsonObjectGender.optString("type");
151 | double glasses_probability = jsonObjectGender.optDouble("probability");
152 | System.out.println("glasses type: " + glasses_type);
153 | System.out.println("glasses probability: " + glasses_probability);
154 |
155 | //取race
156 | JSONObject jsonObjectRace = jsonArrayFaceList.optJSONObject(0).optJSONObject("race");
157 | String race_type = jsonObjectGender.optString("type");
158 | double race_probability = jsonObjectGender.optDouble("probability");
159 | System.out.println("race type: " + race_type);
160 | System.out.println("race probability: " + race_probability);
161 |
162 | //取quality
163 | JSONObject jsonObjectQuality = jsonArrayFaceList.optJSONObject(0).optJSONObject("quality");
164 | JSONObject jsonObjectOcclusion = jsonObjectQuality.optJSONObject("occlusion");
165 | double left_eye = jsonObjectOcclusion.optDouble("left_eye");
166 | double right_eye = jsonObjectOcclusion.optDouble("right_eye");
167 | double nose = jsonObjectOcclusion.optDouble("nose");
168 | double mouth = jsonObjectOcclusion.optDouble("mouth");
169 | double left_cheek = jsonObjectOcclusion.optDouble("left_cheek");
170 | double right_cheek = jsonObjectOcclusion.optDouble("right_cheek");
171 | double chin_contour = jsonObjectOcclusion.optDouble("chin_contour");
172 | System.out.println("left_eye: " + left_eye);
173 | System.out.println("right_eye:" + right_eye);
174 |
175 | //取blur
176 | double blur = jsonArrayFaceList.optJSONObject(0).optDouble("blur");
177 | System.out.println("blur: " + blur);
178 | //取illumination
179 | double illumination = jsonArrayFaceList.optJSONObject(0).optDouble("illumination");
180 | //取completeness
181 | int completeness = jsonArrayFaceList.optJSONObject(0).optInt("competeness");
182 |
183 |
184 |
185 | /**
186 | * 测试成功的 Bean方法 以后有机会学
187 | */
188 | // try {
189 | //// FJFaceListUtil fjFaceListUtil = JSON.parseObject(result, FJFaceListUtil.class);
190 | //// System.out.println(JSON.toJSONString(fjFaceListUtil));
191 | //
192 | // } catch (Exception e) {
193 | // System.out.println("解析异常");
194 | // e.printStackTrace();
195 | // }
196 | }
197 |
198 | return error_code;
199 |
200 | }
201 |
202 | /**
203 | * 人脸信息入人脸库
204 | * @return
205 | * imgParam:人脸base64串
206 | * uid:人脸id(例如身份证等)
207 | * @throws Exception
208 | */
209 | public JSONObject faceadd(String imgParam, String uid, String userinfo) throws Exception {
210 | JSONObject jsonObject = null;
211 |
212 | if(userinfo==null){
213 | userinfo = uid;
214 | }
215 | /**
216 | * 参数修改处
217 | */
218 | String param = "user_id=" + uid
219 | + "&group_id=" + groupid
220 | + "&image=" + imgParam
221 | + "&image_type=BASE64"
222 | + "&user_info=" + userinfo
223 | + "&action_type=REPLACE"
224 | + "&liveness_control=LOW";
225 |
226 | String accessToken = getAuth();
227 | String result = HttpUtil.post(FACEADD_HOST, accessToken, "application/json", param);
228 |
229 | jsonObject = JSONObject.fromObject(result);
230 |
231 | return jsonObject;
232 | }
233 |
234 |
235 | /**
236 | * 人脸信息识别,判断指定人脸是否存在库中
237 | * @param imgParam:人脸信息,base64转码后的串
238 | * @return
239 | */
240 | public JSONObject facesearch(String imgParam) {
241 | JSONObject jsonObject = null;
242 |
243 | try {
244 |
245 | /**
246 | * 参数修改处
247 | */
248 | String param = "&group_id_list=" + groupid//暂时 下一周改接口 方便后期查询
249 | + "&image=" + imgParam
250 | + "&image_type=BASE64"
251 | + "&quality_control=LOW"
252 | + "&liveness_control=LOW"
253 | + "&max_user_num=1";
254 |
255 | String accessToken = getAuth();
256 | String result = HttpUtil.post(FACRENZ_HOST, accessToken, "application/json",param);
257 | jsonObject = JSONObject.fromObject(result);
258 | return jsonObject;
259 |
260 | } catch (Exception e) {
261 |
262 | e.printStackTrace();
263 | }
264 | return null;
265 | }
266 |
267 |
268 | /**
269 | * 人脸信息库存更新
270 | * @param imgParam
271 | * @param userinfo
272 | * @return
273 | */
274 | public JSONObject faceupdate(String imgParam, String userinfo, String uid) {
275 | JSONObject jsonObject = null;
276 |
277 | try {
278 |
279 | String param = "&user_id="+uid
280 | + "&image=" + imgParam
281 | + "&image_type=BASE64"
282 | + "&user_info=" + userinfo
283 | + "&group_id=" + groupid
284 | + "&action_type=REPLACE"
285 | + "&quality_control=LOW"
286 | + "&liveness_control=LOW";
287 |
288 | String accessToken = getAuth();
289 | String result = HttpUtil.post(FACERGX_HOST, accessToken, "application/json", param);
290 | jsonObject = JSONObject.fromObject(result);
291 | return jsonObject;
292 |
293 | } catch (Exception e) {
294 |
295 | e.printStackTrace();
296 | }
297 | return null;
298 | }
299 |
300 | /**
301 | * 指定人脸信息删除
302 | * @param uid
303 | * @return
304 | */
305 | public JSONObject facedelete(String uid, String face_token) {
306 |
307 | JSONObject jsonObject = null;
308 |
309 | try {
310 | String param = "&user_id=" + uid
311 | + "&group_id=" + groupid
312 | + "&face_token=" + face_token;
313 |
314 | System.out.println(param);
315 |
316 | String accessToken = getAuth();
317 | String result = HttpUtil.post(FACEDELE_HOST, accessToken, "application/json",param);
318 | jsonObject = JSONObject.fromObject(result);
319 | return jsonObject;
320 |
321 | } catch (Exception e) {
322 |
323 | e.printStackTrace();
324 | }
325 | return null;
326 | }
327 |
328 |
329 | /**
330 | * 根据人脸查询用户信息
331 | * @param uid
332 | * @return
333 | */
334 | public JSONObject faceselect(String uid) {
335 |
336 | JSONObject jsonObject = null;
337 |
338 | try {
339 | String param = "&user_id="+uid
340 | +"&group_id=" + groupid;
341 |
342 | String accessToken = getAuth();
343 | String result = HttpUtil.post(FACESELECT_HOST, accessToken, "application/json", param);
344 | jsonObject = JSONObject.fromObject(result);
345 |
346 | return jsonObject;
347 |
348 | } catch (Exception e) {
349 |
350 | e.printStackTrace();
351 | }
352 | return null;
353 | }
354 |
355 | /**
356 | * 获取权限token
357 | * @return
358 | */
359 | public String getAuth(){
360 | // 获取access_token地址
361 | String getAccessTokenUrl = AUTH_HOST
362 | // 1. grant_type为固定参数
363 | + "grant_type=client_credentials"
364 | // 2. 官网获取的 API Key
365 | + "&client_id=" + API_KEY
366 | // 3. 官网获取的 Secret Key
367 | + "&client_secret=" + SECRET_KEY;
368 | JSONObject jsonObject = null;
369 | BufferedReader in = null;
370 | try {
371 | URL realUrl = new URL(getAccessTokenUrl);
372 | HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
373 | connection.setRequestMethod("GET");
374 | connection.connect();
375 | // 获取所有响应头字段
376 | // Map> map = connection.getHeaderFields();
377 | // 遍历所有的响应头字段
378 | /*for (String key : map.keySet()) {
379 | System.err.println(key + "--->" + map.get(key));
380 | }*/
381 | // 定义 BufferedReader输入流来读取URL的响应
382 | in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
383 | String result = "";
384 | String line;
385 | while ((line = in.readLine()) != null) {
386 | result += line;
387 | }
388 | /**
389 | * 返回结果示例
390 | */
391 | jsonObject = JSONObject.fromObject(result);
392 | String access_token = jsonObject.getString("access_token");
393 | return access_token;
394 | } catch (Exception e) {
395 | e.printStackTrace();
396 | } finally {
397 | if(in!=null){
398 | try {
399 | in.close();
400 | } catch (IOException e) {
401 | e.printStackTrace();
402 | }
403 | }
404 | }
405 | return null;
406 | }
407 | }
408 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/facedao/FacebaiduMain.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.facedao;
2 |
3 | import net.sf.json.JSONArray;
4 | import net.sf.json.JSONObject;
5 | import org.apache.commons.lang.exception.ExceptionUtils;
6 |
7 | import javax.swing.*;
8 | import java.io.UnsupportedEncodingException;
9 | import java.net.URLEncoder;
10 |
11 | /**
12 | *
13 | * @author chenxianj
14 | * 20180107
15 | *调用百度提供的人脸识别接口进行人脸信息的
16 | *入库、检测、识别、库中人脸修改、库中人脸
17 | *删除以及相关查询
18 | */
19 | public class FacebaiduMain {
20 |
21 |
22 | /**
23 | * chenxianj 20170117
24 | *人脸信息处理的主方法:向外部提供该方法,
25 | *通过传过来的标志进行相关方法的调用
26 | *imgStr:人脸信息,经base64转码后的
27 | *faceflag:人脸信息处理标志,如下
28 | *detect:人脸信息检测
29 | *add:向人脸库中增加人脸信息
30 | *recognition:人脸识别,判断指定人脸是否在人脸库中
31 | *update:修改库中已存在的人脸信息
32 | *delete:删除库中指定人脸信息
33 | *select:查询库中指定人脸信息
34 | * @throws Exception
35 | * @throws UnsupportedEncodingException
36 | */
37 | public void Faceinfomain(String faceflag,String imgStr,String uid,String userinfo) throws Exception{
38 | /**
39 | * face flag 选择人脸处理方法detect(被包含)、add、recognition、update、delete、select(被包含)
40 | * imgStr是base64编码
41 | * uid 是user_id
42 | * userinfo 即用户信息 默认未user_id
43 | */
44 | try {
45 | //人脸处理类
46 | FacebaiduDeal facedeal = new FacebaiduDeal();
47 |
48 | /**
49 | * imgStr为请求参数
50 | * 人脸检测的请求参数有
51 | * 必选 image (string)即图片base64编码
52 | * 必选 image_type即图片类型BASE64、URL、FACE_TOKEN
53 | * 非必选 face_field (string) 包括age、beauty expression face_shape gender glasses landmark
54 | *landmark150 race quality eye_status emotion face_type
55 | * 非必选max_face_num int32 最多处理人脸数目 默认值为1 仅检测图片中面积最大的人脸 最大值10 检测图片中面积最大的10张人脸
56 | * 非必选 face_type string 人脸的类型 LIVE IDCARD WATERMARK CERT 默认live生活照
57 | * 非必选 liveness string 活体控制 检测中不符合要求的人脸会被过滤 NONE 不进行控制 LOW较低的活体要求 MORMAL HIGH 默认NONE
58 | */
59 | String imgParam = null;
60 |
61 | if(faceflag.equals("detect")||faceflag.equals("add")||faceflag.equals("search")||faceflag.equals("update")){
62 |
63 | if(imgStr==null){
64 |
65 | throw new Exception("人脸信息不能为空!");
66 | }
67 | }
68 | imgParam = URLEncoder.encode(imgStr, "UTF-8");
69 |
70 | //人脸检测,imgParam
71 | if(faceflag.equals("detect")){
72 |
73 | facedeal.detect(imgParam);
74 |
75 | }
76 |
77 |
78 | //人脸信息入人脸库
79 | if(faceflag.equals("add")){
80 |
81 | //入库之前先检测下人脸信息是否合规
82 | facedeal.detect(imgParam);
83 |
84 | JSONObject jsonObject = facedeal.faceadd(imgParam, uid, userinfo);
85 |
86 | if(jsonObject==null){
87 |
88 | throw new Exception("脸部信息入库失败!");
89 | }
90 |
91 | String errorcode = jsonObject.optString("error_code");
92 |
93 | if(errorcode.equals("0")){
94 | JOptionPane.showMessageDialog(null, "人脸注册成功" );
95 |
96 | } else {
97 | String errormsg = jsonObject.optString("error_msg");
98 |
99 | System.out.println("errormsg: "+errormsg);
100 |
101 | throw new Exception("脸部信息入库失败!报错信息为:"+errormsg);
102 | }
103 | }
104 |
105 |
106 | //人脸信息搜索,判断指定人脸是否在人脸库中
107 | if(faceflag.equals("search")){
108 |
109 | JSONObject jsonjt = facedeal.facesearch(imgParam);
110 | String error_msg = jsonjt.optString("error_msg");
111 | String error_code = jsonjt.optString("error_code");
112 |
113 | System.out.println("errormsg:"+error_msg);
114 |
115 |
116 | if(error_code.equals("0")){
117 |
118 | JSONObject jsonObjectResult = JSONObject.fromObject(jsonjt.optJSONObject("result"));
119 |
120 | String face_token = jsonObjectResult.optString("face_token");
121 |
122 | JSONArray jsonArrayUserList = jsonObjectResult.optJSONArray("user_list");
123 | String group_id = jsonArrayUserList.optJSONObject(0).optString("group_id");
124 | String user_id = jsonArrayUserList.optJSONObject(0).optString("user_id");
125 | String user_info = jsonArrayUserList.optJSONObject(0).optString("user_info");
126 | double score = jsonArrayUserList.optJSONObject(0).optDouble("score");
127 |
128 |
129 | if(score<80){
130 |
131 | throw new Exception("该人脸信息在人脸库中不存在!");
132 | }
133 | System.out.println("face_token: " + face_token);
134 | System.out.println("group_id: "+group_id);
135 | System.out.println("user_info: "+user_info);
136 | System.out.println("scores: "+score);
137 |
138 | try {
139 | UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
140 | } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
141 | | UnsupportedLookAndFeelException e) {
142 | e.printStackTrace();
143 | }
144 | JOptionPane.showMessageDialog(null,"以下是人脸识别返回结果信息:\n"
145 | + "group_id: "+group_id + "\n" +"user_info: "+user_info + "\n" + "匹配得分: "+score );
146 | }else {
147 | System.out.println("因为某些原因查找失败");
148 | JOptionPane.showMessageDialog(null, "因为某些原因查找失败");
149 |
150 | }
151 | }
152 |
153 |
154 | //人脸信息更新
155 | if(faceflag.equals("update")){
156 |
157 | //入库之前先检测下人脸信息是否合规
158 | facedeal.detect(imgParam);
159 |
160 | JSONObject jsonObject = facedeal.faceupdate(imgParam, userinfo,uid);
161 |
162 | String errorcode = jsonObject.optString("error_code");
163 |
164 | if(errorcode == "0"){
165 |
166 | String errormsg = jsonObject.optString("error_msg");
167 |
168 | System.out.println("errormsg:"+errormsg);
169 | }
170 |
171 | jsonObject.optInt("log_id");
172 |
173 | }
174 |
175 |
176 | //人脸信息删除
177 | if(faceflag.equals("delete")){
178 |
179 | //删除之前想看是否存在这个人的信息需要获取face_token信息来删除
180 | JSONObject jsonObjectTest = facedeal.facesearch(imgParam);
181 | JSONObject jsonObjectResult = JSONObject.fromObject(jsonObjectTest.optJSONObject("result"));
182 |
183 | String error_code = jsonObjectTest.optString("error_code");
184 |
185 | if (error_code.equals("0")) {
186 | String face_token = jsonObjectResult.optString("face_token");
187 |
188 | System.out.println(face_token);
189 |
190 |
191 | JSONObject jsonObject = facedeal.facedelete(uid, face_token);
192 |
193 | String errorcode = jsonObject.optString("error_code");
194 |
195 | if(!errorcode.equals("0")){
196 |
197 | String errormsg = jsonObject.optString("error_msg");
198 |
199 | System.out.println("errormsg:"+errormsg);
200 | }
201 |
202 | jsonObject.optDouble("log_id");
203 | } else {
204 | System.out.println("删除失败 不存在这样的人脸");
205 | }
206 |
207 |
208 |
209 | }
210 | //人脸信息查询
211 | if(faceflag.equals("select")){
212 | JSONObject sjson = facedeal.faceselect(uid);
213 |
214 | if(sjson.optJSONObject("result")!=null){
215 |
216 | JSONObject jsonObjectd = JSONObject.fromObject(sjson.optJSONObject("result"));
217 |
218 | String group_id = jsonObjectd.optJSONArray("user_list").optJSONObject(0).optString("gruop_id");
219 | String user_info = jsonObjectd.optJSONArray("user_list").optJSONObject(0).optString("user_info");
220 |
221 | System.out.println("group_id: "+group_id);
222 | System.out.println("user_info: "+user_info);
223 |
224 |
225 | try {
226 | UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
227 | } catch (ClassNotFoundException | InstantiationException | IllegalAccessException
228 | | UnsupportedLookAndFeelException event) {
229 | event.printStackTrace();
230 | }
231 |
232 | JOptionPane.showMessageDialog(null,"以下是人脸信息查询返回结果信息:\n" + "group_id: "+group_id + "\n" +"user_info: "+user_info );
233 |
234 | }else{
235 |
236 | String errorcode = sjson.optString("error_msg");
237 |
238 | System.out.println("errorcode:"+errorcode);
239 | }
240 |
241 |
242 | }
243 |
244 | } catch (Exception e) {
245 | // TODO Auto-generated catch block
246 | throw new Exception(ExceptionUtils.getStackTrace(e));
247 | }
248 | }
249 | }
250 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/facedao/FacebaiduRegister.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.facedao;
2 |
3 | import cn.cyan.util.FileUtil;
4 | import com.baidu.aip.util.Base64Util;
5 |
6 | /**
7 | * @Author: Cyan
8 | * @Date: 2019/5/30 22:45
9 | * 用来注册上传人脸到百度平台人脸数据库
10 | */
11 | public class FacebaiduRegister {
12 |
13 | public void uploadingFace(String filepath, String face_student_id, String face_student_name) {
14 | try {
15 | System.out.println("filename is " + filepath);
16 | System.out.println(face_student_id);
17 | System.out.println(face_student_name);
18 |
19 | byte[] imgData;
20 | imgData = FileUtil.readFileByBytes(filepath);
21 | String imgStr = Base64Util.encode(imgData);
22 | FacebaiduMain facedeal = new FacebaiduMain();
23 |
24 | facedeal.Faceinfomain("add", imgStr, face_student_id, face_student_name);
25 | } catch (Exception e) {
26 | // TODO Auto-generated catch block
27 | e.printStackTrace();
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/facedao/FacebaiduTest.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.facedao;
2 |
3 | import cn.cyan.util.FileUtil;
4 | import com.baidu.aip.util.Base64Util;
5 |
6 | public class FacebaiduTest {
7 |
8 | public static void main(String[] args) {
9 |
10 |
11 | try {
12 | byte[] imgData;
13 | imgData = FileUtil.readFileByBytes("D:\\Java大作业\\FaceRecoDemo\\src\\main\\java\\cn\\cyan\\facedao\\images\\lisa01.jpg");
14 | String imgStr = Base64Util.encode(imgData);
15 | FacebaiduMain facedeal = new FacebaiduMain();
16 | /**
17 | * 如果要往人脸库中加入人脸
18 | * faceflag为add
19 | * uid 自己设置 最好按序增加
20 | * userinfo 必须填写为学生姓名
21 | */
22 | facedeal.Faceinfomain("add", imgStr, "001", "辛璐玥");
23 | } catch (Exception e) {
24 | // TODO Auto-generated catch block
25 | e.printStackTrace();
26 | }
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/BaiduApiUtil/DeleteUserGroup.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util.BaiduApiUtil;
2 |
3 | import cn.cyan.facedao.FacebaiduDeal;
4 | import cn.cyan.util.GsonUtils;
5 | import cn.cyan.util.HttpUtil;
6 |
7 | import java.util.HashMap;
8 | import java.util.Map;
9 |
10 | /**
11 | * @Author: Cyan
12 | * @Date: 2019/5/19 15:50
13 | */
14 | public class DeleteUserGroup {
15 |
16 | /**
17 | * 重要提示代码中所需工具类
18 | * FileUtil,Base64Util,HttpUtil,GsonUtils请从
19 | * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
20 | * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
21 | * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
22 | * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
23 | * 下载
24 | */
25 | public static String groupDelete() {
26 | // 请求url
27 | String url = "https://aip.baidubce.com/rest/2.0/face/v3/faceset/group/delete";
28 | try {
29 | Map map = new HashMap<>();
30 | map.put("group_id", "group_repeat");
31 |
32 | String param = GsonUtils.toJson(map);
33 |
34 | FacebaiduDeal facebaiduDeal = new FacebaiduDeal();
35 | String accessToken = facebaiduDeal.getAuth();
36 |
37 | String result = HttpUtil.post(url, accessToken, "application/json", param);
38 | System.out.println(result);
39 | return result;
40 | } catch (Exception e) {
41 | e.printStackTrace();
42 | }
43 | return null;
44 | }
45 |
46 | public static void main(String[] args) {
47 | DeleteUserGroup.groupDelete();
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/Base64Util.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util;
2 |
3 | /**
4 | * Base64 工具类
5 | */
6 | public class Base64Util {
7 | private static final char last2byte = (char) Integer.parseInt("00000011", 2);
8 | private static final char last4byte = (char) Integer.parseInt("00001111", 2);
9 | private static final char last6byte = (char) Integer.parseInt("00111111", 2);
10 | private static final char lead6byte = (char) Integer.parseInt("11111100", 2);
11 | private static final char lead4byte = (char) Integer.parseInt("11110000", 2);
12 | private static final char lead2byte = (char) Integer.parseInt("11000000", 2);
13 | private static final char[] encodeTable = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};
14 |
15 | public Base64Util() {
16 | }
17 |
18 | public static String encode(byte[] from) {
19 | StringBuilder to = new StringBuilder((int) ((double) from.length * 1.34D) + 3);
20 | int num = 0;
21 | char currentByte = 0;
22 |
23 | int i;
24 | for (i = 0; i < from.length; ++i) {
25 | for (num %= 8; num < 8; num += 6) {
26 | switch (num) {
27 | case 0:
28 | currentByte = (char) (from[i] & lead6byte);
29 | currentByte = (char) (currentByte >>> 2);
30 | case 1:
31 | case 3:
32 | case 5:
33 | default:
34 | break;
35 | case 2:
36 | currentByte = (char) (from[i] & last6byte);
37 | break;
38 | case 4:
39 | currentByte = (char) (from[i] & last4byte);
40 | currentByte = (char) (currentByte << 2);
41 | if (i + 1 < from.length) {
42 | currentByte = (char) (currentByte | (from[i + 1] & lead2byte) >>> 6);
43 | }
44 | break;
45 | case 6:
46 | currentByte = (char) (from[i] & last2byte);
47 | currentByte = (char) (currentByte << 4);
48 | if (i + 1 < from.length) {
49 | currentByte = (char) (currentByte | (from[i + 1] & lead4byte) >>> 4);
50 | }
51 | }
52 |
53 | to.append(encodeTable[currentByte]);
54 | }
55 | }
56 |
57 | if (to.length() % 4 != 0) {
58 | for (i = 4 - to.length() % 4; i > 0; --i) {
59 | to.append("=");
60 | }
61 | }
62 |
63 | return to.toString();
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/DB.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util;
2 |
3 | import javax.swing.*;
4 | import java.sql.*;
5 |
6 | public class DB {
7 | /*
8 | * jdbc驱动要能够正确的编码和解码(java语言内存使用unicode编码) 插入数据时(编码),查询数据时(解码)
9 | * jdbc
10 | * :mysql://localhost:3306/jsd1406db?useUnicode=true&characterEncoding=utf8
11 | * 通知数据库如何编码
12 | */
13 | private final String url = "jdbc:mysql://localhost:3306/acs?useUnicode=true&characterEncoding=utf8";
14 | private final String userName = "root";
15 | private final String password = "xly520lisa";
16 | private Connection con = null;
17 | private Statement stm = null;
18 |
19 | /* 通过构造方法加载数据库驱动 */
20 | public DB() {
21 | try {
22 | Class.forName("com.mysql.jdbc.Driver").newInstance(); // 加载com.mysql.jdbc.Driver(初始化类)这个类然后创建实例化Object对象
23 | } catch (Exception e) {
24 | e.printStackTrace();
25 | System.out.println("加载数据库驱动失败!");
26 | }
27 | }
28 |
29 | /* 创建数据库连接 */
30 | public void createCon() {
31 | try {
32 | con = DriverManager.getConnection(url, userName, password);
33 | } catch (Exception e) {
34 | e.printStackTrace();
35 | System.out.println("获取数据库连接失败!");
36 | }
37 | }
38 |
39 | /* 获取Statement对象 */
40 | public void getStm() {
41 | createCon();
42 | try {
43 | stm = con.createStatement();
44 | } catch (SQLException e) {
45 | e.printStackTrace();
46 | System.out.println("创建Statement对象失败!");
47 | }
48 | }
49 |
50 | /**
51 | * @功能 对数据库的增加、修改和删除的操作
52 | * @参数 sql为要执行的SQL语句
53 | * @返回值 boolean型值
54 | */
55 | public boolean executeUpdate(String sql) {
56 | System.out.println(sql);
57 | boolean mark = false;
58 | Savepoint sp = null; //事务回滚
59 |
60 | try {
61 | getStm();
62 | sp = con.setSavepoint();
63 | int iCount = stm.executeUpdate(sql);
64 | if (iCount > 0)
65 | mark = true;
66 | else if (iCount <= 0) {
67 | mark = false;
68 | con.rollback(sp);
69 | con.commit();
70 | JOptionPane.showMessageDialog(null,"数据库数据操作出错,执行事务回滚,请检查,数据输入不得为空!");
71 | }
72 |
73 | } catch (Exception e) {
74 | e.printStackTrace();
75 | mark = false;
76 | JOptionPane.showMessageDialog(null,"数据库操作异常,请检查,数据输入不得为空");
77 | }
78 | return mark;
79 | }
80 |
81 | /* 查询数据库 */
82 | public ResultSet executeQuery(String sql) {
83 | ResultSet rs = null;
84 | try {
85 | getStm();
86 | try {
87 | rs = stm.executeQuery(sql);
88 | } catch (Exception e) {
89 | e.printStackTrace();
90 | System.out.println("查询数据库失败!");
91 | }
92 | } catch (Exception e) {
93 | e.printStackTrace();
94 | }
95 |
96 | return rs;
97 | }
98 |
99 | /* 关闭数据库的操作 */
100 | public void closed() {
101 | if (stm != null)
102 | try {
103 | stm.close();
104 | } catch (SQLException e) {
105 | e.printStackTrace();
106 | System.out.println("关闭stm对象失败!");
107 | }
108 | if (con != null)
109 | try {
110 | con.close();
111 | } catch (SQLException e) {
112 | e.printStackTrace();
113 | System.out.println("关闭con对象失败!");
114 | }
115 | }
116 | }
117 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/FileUtil.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util;
2 |
3 | import java.io.*;
4 |
5 | /**
6 | * 文件读取工具类
7 | */
8 | public class FileUtil {
9 |
10 | /**
11 | * 读取文件内容,作为字符串返回
12 | */
13 | public static String readFileAsString(String filePath) throws IOException {
14 | File file = new File(filePath);
15 | if (!file.exists()) {
16 | throw new FileNotFoundException(filePath);
17 | }
18 |
19 | if (file.length() > 1024 * 1024 * 1024) {
20 | throw new IOException("File is too large");
21 | }
22 |
23 | StringBuilder sb = new StringBuilder((int) (file.length()));
24 | // 创建字节输入流
25 | FileInputStream fis = new FileInputStream(filePath);
26 | // 创建一个长度为10240的Buffer
27 | byte[] bbuf = new byte[10240];
28 | // 用于保存实际读取的字节数
29 | int hasRead = 0;
30 | while ( (hasRead = fis.read(bbuf)) > 0 ) {
31 | sb.append(new String(bbuf, 0, hasRead));
32 | }
33 | fis.close();
34 | return sb.toString();
35 | }
36 |
37 | /**
38 | * 根据文件路径读取byte[] 数组
39 | */
40 | public static byte[] readFileByBytes(String filePath) throws IOException {
41 | File file = new File(filePath);
42 | if (!file.exists()) {
43 | throw new FileNotFoundException(filePath);
44 | } else {
45 | ByteArrayOutputStream bos = new ByteArrayOutputStream((int) file.length());
46 | BufferedInputStream in = null;
47 |
48 | try {
49 | in = new BufferedInputStream(new FileInputStream(file));
50 | short bufSize = 1024;
51 | byte[] buffer = new byte[bufSize];
52 | int len1;
53 | while (-1 != (len1 = in.read(buffer, 0, bufSize))) {
54 | bos.write(buffer, 0, len1);
55 | }
56 |
57 | byte[] var7 = bos.toByteArray();
58 | return var7;
59 | } finally {
60 | try {
61 | if (in != null) {
62 | in.close();
63 | }
64 | } catch (IOException var14) {
65 | var14.printStackTrace();
66 | }
67 |
68 | bos.close();
69 | }
70 | }
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/GsonUtils.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2017 Baidu, Inc. All Rights Reserved.
3 | */
4 | package cn.cyan.util;
5 |
6 | import com.google.gson.Gson;
7 | import com.google.gson.GsonBuilder;
8 | import com.google.gson.JsonParseException;
9 |
10 | import java.lang.reflect.Type;
11 |
12 | /**
13 | * Json工具类.
14 | */
15 | public class GsonUtils {
16 | private static Gson gson = new GsonBuilder().create();
17 |
18 | public static String toJson(Object value) {
19 | return gson.toJson(value);
20 | }
21 |
22 | public static T fromJson(String json, Class classOfT) throws JsonParseException {
23 | return gson.fromJson(json, classOfT);
24 | }
25 |
26 | public static T fromJson(String json, Type typeOfT) throws JsonParseException {
27 | return (T) gson.fromJson(json, typeOfT);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/HttpUtil.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util;
2 |
3 | import java.io.BufferedReader;
4 | import java.io.DataOutputStream;
5 | import java.io.InputStreamReader;
6 | import java.net.HttpURLConnection;
7 | import java.net.URL;
8 | import java.util.List;
9 | import java.util.Map;
10 |
11 | /**
12 | * http 工具类
13 | */
14 | public class HttpUtil {
15 |
16 | public static String post(String requestUrl, String accessToken, String params)
17 | throws Exception {
18 | String contentType = "application/x-www-form-urlencoded";
19 | return HttpUtil.post(requestUrl, accessToken, contentType, params);
20 | }
21 |
22 | public static String post(String requestUrl, String accessToken, String contentType, String params)
23 | throws Exception {
24 | String encoding = "UTF-8";
25 | if (requestUrl.contains("nlp")) {
26 | encoding = "GBK";
27 | }
28 | return HttpUtil.post(requestUrl, accessToken, contentType, params, encoding);
29 | }
30 |
31 | public static String post(String requestUrl, String accessToken, String contentType, String params, String encoding)
32 | throws Exception {
33 | String url = requestUrl + "?access_token=" + accessToken;
34 | return HttpUtil.postGeneralUrl(url, contentType, params, encoding);
35 | }
36 |
37 | public static String postGeneralUrl(String generalUrl, String contentType, String params, String encoding)
38 | throws Exception {
39 | URL url = new URL(generalUrl);
40 | // 打开和URL之间的连接
41 | HttpURLConnection connection = (HttpURLConnection) url.openConnection();
42 | connection.setRequestMethod("POST");
43 | // 设置通用的请求属性
44 | connection.setRequestProperty("Content-Type", contentType);
45 | connection.setRequestProperty("Connection", "Keep-Alive");
46 | connection.setUseCaches(false);
47 | connection.setDoOutput(true);
48 | connection.setDoInput(true);
49 |
50 | // 得到请求的输出流对象
51 | DataOutputStream out = new DataOutputStream(connection.getOutputStream());
52 | out.write(params.getBytes(encoding));
53 | out.flush();
54 | out.close();
55 |
56 | // 建立实际的连接
57 | connection.connect();
58 | // 获取所有响应头字段
59 | Map> headers = connection.getHeaderFields();
60 | // 遍历所有的响应头字段
61 | for (String key : headers.keySet()) {
62 | System.err.println(key + "--->" + headers.get(key));
63 | }
64 | // 定义 BufferedReader输入流来读取URL的响应
65 | BufferedReader in = null;
66 | in = new BufferedReader(
67 | new InputStreamReader(connection.getInputStream(), encoding));
68 | String result = "";
69 | String getLine;
70 | while ((getLine = in.readLine()) != null) {
71 | result += getLine;
72 | }
73 | in.close();
74 | System.err.println("result:" + result);
75 | return result;
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/OpertareDBSets/OperateDB.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util.OpertareDBSets;
2 |
3 | import cn.cyan.util.DB;
4 |
5 | import java.sql.ResultSet;
6 | import java.sql.ResultSetMetaData;
7 | import java.sql.SQLException;
8 | import java.util.Vector;
9 |
10 | /**
11 | * @Author: Cyan
12 | * @Date: 2019/5/27 21:22
13 | * 操作学生表
14 | */
15 | public class OperateDB {
16 |
17 | public static Vector getRows() {
18 | Vector rows = null;
19 | Vector columnHeads = null;
20 |
21 | try {
22 | //通过构造方法加载数据库驱动
23 | DB db = new DB();
24 | //执行SQL语句
25 | ResultSet rs = null;
26 | rs = db.executeQuery("select * from student");
27 |
28 |
29 | if (rs.wasNull()) {
30 | System.out.println("记录为空");
31 | }
32 |
33 | rows = new Vector();
34 |
35 | ResultSetMetaData rsmd = rs.getMetaData();
36 |
37 | while (rs.next()) {
38 | rows.addElement(getNextRow(rs, rsmd));
39 | }
40 |
41 |
42 | } catch (SQLException e) {
43 | System.out.println("未成功读取数据");
44 | e.printStackTrace();
45 | }
46 |
47 | return rows;
48 | }
49 |
50 | //得到数据库表头
51 | public static Vector getHead() {
52 | Vector columnHeads = null;
53 |
54 | try {
55 | DB db = new DB();
56 | ResultSet rs = db.executeQuery("select * from student");
57 |
58 | boolean moreRecords = rs.next();
59 | if (!moreRecords) {
60 | System.out.println("记录为空");
61 | }
62 |
63 | columnHeads = new Vector();
64 | ResultSetMetaData rsmd = rs.getMetaData();
65 |
66 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
67 | columnHeads.addElement(rsmd.getColumnName(i));
68 | }
69 |
70 | } catch (SQLException e) {
71 | System.out.println("未成功打开数据库");
72 | e.printStackTrace();
73 | }
74 |
75 | return columnHeads;
76 | }
77 |
78 |
79 | //得到数据库中下一行数据
80 | private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException {
81 | Vector currentRow = new Vector();
82 |
83 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
84 | currentRow.addElement(rs.getString(i));
85 | }
86 |
87 | return currentRow;
88 | }
89 |
90 |
91 | //测试
92 | public static void main(String[] args) {
93 | getRows();
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/OpertareDBSets/OperateDB2.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util.OpertareDBSets;
2 |
3 | import cn.cyan.util.DB;
4 |
5 | import java.sql.ResultSet;
6 | import java.sql.ResultSetMetaData;
7 | import java.sql.SQLException;
8 | import java.util.Vector;
9 |
10 | /**
11 | * @Author: Cyan
12 | * @Date: 2019/5/29 19:19
13 | * 操作选课表
14 | */
15 | public class OperateDB2 {
16 |
17 | public static Vector getRows() {
18 | Vector rows = null;
19 | Vector columnHeads = null;
20 |
21 | try {
22 | //通过构造方法加载数据库驱动
23 | DB db = new DB();
24 | //执行SQL语句
25 | ResultSet rs = null;
26 | rs = db.executeQuery("select * from classselecting");
27 |
28 |
29 | if (rs.wasNull()) {
30 | System.out.println("记录为空");
31 | }
32 |
33 | rows = new Vector();
34 |
35 | ResultSetMetaData rsmd = rs.getMetaData();
36 |
37 | while (rs.next()) {
38 | rows.addElement(getNextRow(rs, rsmd));
39 | }
40 |
41 |
42 | } catch (SQLException e) {
43 | System.out.println("未成功读取数据");
44 | e.printStackTrace();
45 | }
46 |
47 | return rows;
48 | }
49 |
50 | //得到数据库表头
51 | public static Vector getHead() {
52 | Vector columnHeads = null;
53 |
54 | try {
55 | DB db = new DB();
56 | ResultSet rs = db.executeQuery("select * from classselecting");
57 |
58 | boolean moreRecords = rs.next();
59 | if (!moreRecords) {
60 | System.out.println("记录为空");
61 | }
62 |
63 | columnHeads = new Vector();
64 | ResultSetMetaData rsmd = rs.getMetaData();
65 |
66 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
67 | columnHeads.addElement(rsmd.getColumnName(i));
68 | }
69 |
70 | } catch (SQLException e) {
71 | System.out.println("未成功打开数据库");
72 | e.printStackTrace();
73 | }
74 |
75 | return columnHeads;
76 | }
77 |
78 |
79 | //得到数据库中下一行数据
80 | private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException {
81 | Vector currentRow = new Vector();
82 |
83 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
84 | currentRow.addElement(rs.getString(i));
85 | }
86 |
87 | return currentRow;
88 | }
89 |
90 |
91 | //测试
92 | public static void main(String[] args) {
93 | getRows();
94 | }
95 | }
96 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/OpertareDBSets/OperateDB3.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util.OpertareDBSets;
2 |
3 | import cn.cyan.util.DB;
4 |
5 | import java.sql.ResultSet;
6 | import java.sql.ResultSetMetaData;
7 | import java.sql.SQLException;
8 | import java.util.Vector;
9 |
10 | /**
11 | * @Author: Cyan
12 | * @Date: 2019/5/29 19:32
13 | * 操作课程表
14 | */
15 |
16 |
17 | public class OperateDB3 {
18 |
19 | public static Vector getRows() {
20 | Vector rows = null;
21 | Vector columnHeads = null;
22 |
23 | try {
24 | //通过构造方法加载数据库驱动
25 | DB db = new DB();
26 | //执行SQL语句
27 | ResultSet rs = null;
28 | rs = db.executeQuery("select * from classes");
29 |
30 |
31 | if (rs.wasNull()) {
32 | System.out.println("记录为空");
33 | }
34 |
35 | rows = new Vector();
36 |
37 | ResultSetMetaData rsmd = rs.getMetaData();
38 |
39 | while (rs.next()) {
40 | rows.addElement(getNextRow(rs, rsmd));
41 | }
42 |
43 |
44 | } catch (SQLException e) {
45 | System.out.println("未成功读取数据");
46 | e.printStackTrace();
47 | }
48 |
49 | return rows;
50 | }
51 |
52 | //得到数据库表头
53 | public static Vector getHead() {
54 | Vector columnHeads = null;
55 |
56 | try {
57 | DB db = new DB();
58 | ResultSet rs = db.executeQuery("select * from classes");
59 |
60 | boolean moreRecords = rs.next();
61 | if (!moreRecords) {
62 | System.out.println("记录为空");
63 | }
64 |
65 | columnHeads = new Vector();
66 | ResultSetMetaData rsmd = rs.getMetaData();
67 |
68 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
69 | columnHeads.addElement(rsmd.getColumnName(i));
70 | }
71 |
72 | } catch (SQLException e) {
73 | System.out.println("未成功打开数据库");
74 | e.printStackTrace();
75 | }
76 |
77 | return columnHeads;
78 | }
79 |
80 |
81 | //得到数据库中下一行数据
82 | private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException {
83 | Vector currentRow = new Vector();
84 |
85 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
86 | currentRow.addElement(rs.getString(i));
87 | }
88 |
89 | return currentRow;
90 | }
91 |
92 |
93 | //测试
94 | public static void main(String[] args) {
95 | getRows();
96 | }
97 | }
98 |
99 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/OpertareDBSets/OperateDB4.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util.OpertareDBSets;
2 |
3 | import cn.cyan.util.DB;
4 |
5 | import java.sql.ResultSet;
6 | import java.sql.ResultSetMetaData;
7 | import java.sql.SQLException;
8 | import java.util.Vector;
9 |
10 | /**
11 | * @Author: Cyan
12 | * @Date: 2019/5/29 22:48
13 | * 操作考勤表
14 | */
15 | public class OperateDB4 {
16 | public static Vector getRows() {
17 | Vector rows = null;
18 | Vector columnHeads = null;
19 |
20 | try {
21 | //通过构造方法加载数据库驱动
22 | DB db = new DB();
23 | //执行SQL语句
24 | ResultSet rs = null;
25 | rs = db.executeQuery("select * from view_attendancechecking");
26 |
27 |
28 | if (rs.wasNull()) {
29 | System.out.println("记录为空");
30 | }
31 |
32 | rows = new Vector();
33 |
34 | ResultSetMetaData rsmd = rs.getMetaData();
35 |
36 | while (rs.next()) {
37 | rows.addElement(getNextRow(rs, rsmd));
38 | }
39 |
40 |
41 | } catch (SQLException e) {
42 | System.out.println("未成功读取数据");
43 | e.printStackTrace();
44 | }
45 |
46 | return rows;
47 | }
48 |
49 | //得到数据库表头
50 | public static Vector getHead() {
51 | Vector columnHeads = null;
52 |
53 | try {
54 | DB db = new DB();
55 | ResultSet rs = db.executeQuery("select * from view_attendancechecking");
56 |
57 | boolean moreRecords = rs.next();
58 | if (!moreRecords) {
59 | System.out.println("记录为空");
60 | }
61 |
62 | columnHeads = new Vector();
63 | ResultSetMetaData rsmd = rs.getMetaData();
64 |
65 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
66 | columnHeads.addElement(rsmd.getColumnName(i));
67 | }
68 |
69 | } catch (SQLException e) {
70 | System.out.println("未成功打开数据库");
71 | e.printStackTrace();
72 | }
73 |
74 | return columnHeads;
75 | }
76 |
77 |
78 | //得到数据库中下一行数据
79 | private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException {
80 | Vector currentRow = new Vector();
81 |
82 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
83 | currentRow.addElement(rs.getString(i));
84 | }
85 |
86 | return currentRow;
87 | }
88 |
89 |
90 | //测试
91 | public static void main(String[] args) {
92 | getRows();
93 | }
94 | }
95 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/OpertareDBSets/OperateDB5.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util.OpertareDBSets;
2 |
3 | import cn.cyan.util.DB;
4 |
5 | import java.sql.ResultSet;
6 | import java.sql.ResultSetMetaData;
7 | import java.sql.SQLException;
8 | import java.util.Vector;
9 |
10 | /**
11 | * @Author: Cyan
12 | * @Date: 2019/5/31 11:01
13 | * 教师表
14 | */
15 | public class OperateDB5 {
16 |
17 | public static Vector getRows() {
18 | Vector rows = null;
19 | Vector columnHeads = null;
20 |
21 | try {
22 | //通过构造方法加载数据库驱动
23 | DB db = new DB();
24 | //执行SQL语句
25 | ResultSet rs = null;
26 | rs = db.executeQuery("select * from teacher");
27 |
28 |
29 | if (rs.wasNull()) {
30 | System.out.println("记录为空");
31 | }
32 |
33 | rows = new Vector();
34 |
35 | ResultSetMetaData rsmd = rs.getMetaData();
36 |
37 | while (rs.next()) {
38 | rows.addElement(getNextRow(rs, rsmd));
39 | }
40 |
41 |
42 | } catch (SQLException e) {
43 | System.out.println("未成功读取数据");
44 | e.printStackTrace();
45 | }
46 |
47 | return rows;
48 | }
49 |
50 | //得到数据库表头
51 | public static Vector getHead() {
52 | Vector columnHeads = null;
53 |
54 | try {
55 | DB db = new DB();
56 | ResultSet rs = db.executeQuery("select * from teacher");
57 |
58 | boolean moreRecords = rs.next();
59 | if (!moreRecords) {
60 | System.out.println("记录为空");
61 | }
62 |
63 | columnHeads = new Vector();
64 | ResultSetMetaData rsmd = rs.getMetaData();
65 |
66 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
67 | columnHeads.addElement(rsmd.getColumnName(i));
68 | }
69 |
70 | } catch (SQLException e) {
71 | System.out.println("未成功打开数据库");
72 | e.printStackTrace();
73 | }
74 |
75 | return columnHeads;
76 | }
77 |
78 |
79 | //得到数据库中下一行数据
80 | private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException {
81 | Vector currentRow = new Vector();
82 |
83 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
84 | currentRow.addElement(rs.getString(i));
85 | }
86 |
87 | return currentRow;
88 | }
89 |
90 |
91 | //测试
92 | public static void main(String[] args) {
93 | getRows();
94 | }
95 | }
96 |
97 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/util/OpertareDBSets/OperateDB6.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.util.OpertareDBSets;
2 |
3 | import cn.cyan.util.DB;
4 |
5 | import java.sql.ResultSet;
6 | import java.sql.ResultSetMetaData;
7 | import java.sql.SQLException;
8 | import java.util.Vector;
9 |
10 | /**
11 | * @Author: Cyan
12 | * @Date: 2019/5/31 21:55
13 | */
14 | public class OperateDB6 {
15 |
16 | public static Vector getRows() {
17 | Vector rows = null;
18 | Vector columnHeads = null;
19 |
20 | try {
21 | //通过构造方法加载数据库驱动
22 | DB db = new DB();
23 | //执行SQL语句
24 | ResultSet rs = null;
25 | rs = db.executeQuery("select * from 授课表");
26 |
27 |
28 | if (rs.wasNull()) {
29 | System.out.println("记录为空");
30 | }
31 |
32 | rows = new Vector();
33 |
34 | ResultSetMetaData rsmd = rs.getMetaData();
35 |
36 | while (rs.next()) {
37 | rows.addElement(getNextRow(rs, rsmd));
38 | }
39 |
40 |
41 | } catch (SQLException e) {
42 | System.out.println("未成功读取数据");
43 | e.printStackTrace();
44 | }
45 |
46 | return rows;
47 | }
48 |
49 | //得到数据库表头
50 | public static Vector getHead() {
51 | Vector columnHeads = null;
52 |
53 | try {
54 | DB db = new DB();
55 | ResultSet rs = db.executeQuery("select * from 授课表");
56 |
57 | boolean moreRecords = rs.next();
58 | if (!moreRecords) {
59 | System.out.println("记录为空");
60 | }
61 |
62 | columnHeads = new Vector();
63 | ResultSetMetaData rsmd = rs.getMetaData();
64 |
65 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
66 | columnHeads.addElement(rsmd.getColumnName(i));
67 | }
68 |
69 | } catch (SQLException e) {
70 | System.out.println("未成功打开数据库");
71 | e.printStackTrace();
72 | }
73 |
74 | return columnHeads;
75 | }
76 |
77 |
78 | //得到数据库中下一行数据
79 | private static Vector getNextRow(ResultSet rs, ResultSetMetaData rsmd) throws SQLException {
80 | Vector currentRow = new Vector();
81 |
82 | for (int i = 1; i <= rsmd.getColumnCount(); i++) {
83 | currentRow.addElement(rs.getString(i));
84 | }
85 |
86 | return currentRow;
87 | }
88 |
89 |
90 | //测试
91 | public static void main(String[] args) {
92 | getRows();
93 | }
94 | }
95 |
96 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/view/AdminBasicInfoPage.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.view;
2 |
3 | import cn.cyan.util.DB;
4 | import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;
5 |
6 | import javax.swing.*;
7 | import javax.swing.table.DefaultTableModel;
8 | import java.awt.*;
9 | import java.awt.event.ActionEvent;
10 | import java.awt.event.ActionListener;
11 | import java.net.URL;
12 | import java.sql.ResultSet;
13 | import java.sql.SQLException;
14 |
15 | /**
16 | * @Author: Cyan
17 | * @Date: 2019/5/31 9:01
18 | */
19 | public class AdminBasicInfoPage extends JFrame {
20 | private String userAccount;
21 | private String userPassword;
22 | private DefaultTableModel defaultTableModel;
23 | private JTable jTablePersonalInfo;
24 | private JScrollPane jScrollPaneBasicInfo;
25 | private JButton jButtonSaveTheChange;
26 | private JLabel jLabelBasicInfo;
27 | private JPanel jPanelBasicInfo;
28 |
29 | public String getUserAccount() {
30 | return userAccount;
31 | }
32 |
33 | public void setUserAccount(String userAccount) {
34 | this.userAccount = userAccount;
35 | }
36 |
37 | public String getUserPassword() {
38 | return userPassword;
39 | }
40 |
41 | public void setUserPassword(String userPassword) {
42 | this.userPassword = userPassword;
43 | }
44 |
45 | public AdminBasicInfoPage() {
46 |
47 | this.setTitle("考勤系统管理员界面");
48 | this.setLayout(new GridLayout(1, 1));
49 | this.setBounds(600, 200, 720, 320);
50 | this.setLocationRelativeTo(null);
51 | //修改左上角Java图标
52 | URL imgURL = this.getClass().getResource("/viewingImg/titleicon.png");
53 | ImageIcon imageIcon = new ImageIcon(imgURL);
54 | Image image = imageIcon.getImage();
55 | this.setIconImage(image);
56 |
57 | try {
58 | BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;
59 | org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
60 | UIManager.put("RootPane.setupButtonVisible", false);
61 | } catch(Exception e) {
62 | //TODO exception
63 | e.printStackTrace();
64 | }
65 |
66 | jLabelBasicInfo = new JLabel("基本信息");
67 | jPanelBasicInfo = new JPanel();
68 |
69 |
70 | // jPanelBasicInfo.setPreferredSize(new Dimension(720, 280));
71 |
72 | /**
73 | * 基本信息表格
74 | */
75 | jTablePersonalInfo = new JTable(6, 2);
76 | //设置行宽
77 | jTablePersonalInfo.setRowHeight(30);
78 | //设置列宽
79 | jTablePersonalInfo.getColumnModel().getColumn(0).setPreferredWidth(200);
80 | jTablePersonalInfo.getColumnModel().getColumn(1).setPreferredWidth(400);
81 | //设置表头不可见
82 | jTablePersonalInfo.getTableHeader().setVisible(false);
83 | /**
84 | * 选课信息表格 调整到方法内
85 | */
86 |
87 |
88 | jScrollPaneBasicInfo = new JScrollPane(jTablePersonalInfo);
89 | jScrollPaneBasicInfo.setPreferredSize(new Dimension(500,250));
90 |
91 |
92 |
93 | jButtonSaveTheChange = new JButton("保存修改");
94 | jButtonSaveTheChange.setBackground(Color.CYAN);
95 | jButtonSaveTheChange.setContentAreaFilled(true);
96 | jButtonSaveTheChange.setBorder(null);
97 |
98 | jPanelBasicInfo.add(jLabelBasicInfo);
99 | jPanelBasicInfo.add(jScrollPaneBasicInfo);
100 | jPanelBasicInfo.add(jButtonSaveTheChange);
101 |
102 | this.add(jPanelBasicInfo);
103 |
104 | this.setVisible(true);
105 | this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
106 | }
107 |
108 |
109 | //接收教师功能选择页面账户
110 | //接下来实现表的展示
111 | public void receTheAccountInfo(final AdminBasicInfoPage adminBasicInfoPage) {
112 | final String account = adminBasicInfoPage.getUserAccount();
113 | final String pwd = adminBasicInfoPage.getUserPassword();
114 |
115 | //测试传入参数
116 | System.out.println(account);
117 | System.out.println(pwd);
118 |
119 | /**
120 | * 个人基本信息
121 | */
122 | try {
123 | //获取数据库此账号数据
124 | DB db = new DB();
125 | ResultSet rs = null;
126 |
127 | rs = db.executeQuery("select * from admin where admin_id = '" + account + "'");
128 | //
129 | System.out.println("select * from admin where admin_id = '" + account + "'");
130 |
131 | if (rs.wasNull()) {
132 | System.out.println("获取数据失败为空!");
133 | } else {
134 | /**
135 | * 接下来获取数据展示在表格中
136 | */
137 | String attribute_id = null;
138 | String attribute_name = null;
139 | String attribute_sex = null;
140 | String attribute_position = null;
141 | String attribute_department = null;
142 | String loginpassword = null;
143 |
144 | rs.next();
145 |
146 | attribute_id = rs.getString("admin_id");
147 | attribute_name = rs.getString("admin_name");
148 | attribute_sex = rs.getString("admin_sex");
149 | attribute_position = rs.getString("admin_position");
150 | attribute_department = rs.getString("admin_department");
151 | loginpassword = rs.getString("admin_pwd");
152 |
153 | System.out.println(attribute_id);
154 | System.out.println(attribute_name);
155 | System.out.println(attribute_sex);
156 | System.out.println(attribute_position);
157 | System.out.println(attribute_department);
158 | System.out.println(loginpassword);
159 |
160 | jTablePersonalInfo.setValueAt("职工号", 0, 0);
161 | jTablePersonalInfo.setValueAt("姓名", 1, 0);
162 | jTablePersonalInfo.setValueAt("性别", 2, 0);
163 | jTablePersonalInfo.setValueAt("职位", 3, 0);
164 | jTablePersonalInfo.setValueAt("部门", 4, 0);
165 | jTablePersonalInfo.setValueAt("密码", 5, 0);
166 |
167 |
168 | jTablePersonalInfo.setValueAt(attribute_id, 0, 1);
169 | jTablePersonalInfo.setValueAt(attribute_name, 1, 1);
170 | jTablePersonalInfo.setValueAt(attribute_sex, 2, 1);
171 | jTablePersonalInfo.setValueAt(attribute_position, 3, 1);
172 | jTablePersonalInfo.setValueAt(attribute_department, 4, 1);
173 | jTablePersonalInfo.setValueAt(loginpassword, 5, 1);
174 |
175 | }
176 |
177 | } catch(SQLException e) {
178 | e.printStackTrace();
179 | }
180 |
181 | jButtonSaveTheChange.addActionListener(new ActionListener() {
182 | @Override
183 | public void actionPerformed(ActionEvent e) {
184 | int column = jTablePersonalInfo.getColumnCount();
185 | int row = jTablePersonalInfo.getRowCount();
186 |
187 | //测试
188 | System.out.println(row);
189 |
190 | //value数组存放表格中第二列的所有数据
191 | String[] value = new String[row];
192 | // //测试
193 | // String str = jTablePersonalInfo.getValueAt(3, 1).toString();
194 | // System.out.println(str);
195 |
196 | for (int i = 0; i < row; i++) {
197 |
198 | value[i] = jTablePersonalInfo.getValueAt(i, 1).toString();
199 | System.out.println(value[i]);
200 |
201 | }
202 |
203 | //以下为数据库操作
204 | DB db = new DB();
205 |
206 | db.executeUpdate("delete from admin where admin_id = '" + account + "'");
207 |
208 |
209 | db.executeUpdate("insert into admin values(" + "'" + value[0] + "'" + "," + "'" + value[1]+ "'" + "," +
210 | "'" + value[2] + "'" + "," + "'" + value[3] + "'" + "," + "'" +value[4] + "'" + "," + "'" +
211 | value[5] + "'" + ")");
212 | //测试SQL语句
213 | System.out.println("insert into admin values(" + "'" + value[0] + "'" + "," + "'" + value[1]+ "'" + "," +
214 | "'" + value[2] + "'" + "," + "'" + value[3] + "'" + "," + "'" +value[4] + "'" + "," + "'" +
215 | value[5] + "'" + ")");
216 |
217 |
218 | System.out.println("操作已完成");
219 | }
220 | });
221 |
222 |
223 | }
224 |
225 |
226 | //单元测试
227 | public static void main(String[] args) {
228 | AdminBasicInfoPage adminBasicInfoPage = new AdminBasicInfoPage();
229 | }
230 | }
231 |
232 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/view/AdminPage.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.view;
2 |
3 | import org.eclipse.swt.SWT;
4 | import org.eclipse.swt.graphics.GC;
5 | import org.eclipse.swt.graphics.ImageData;
6 | import org.eclipse.swt.graphics.PaletteData;
7 | import org.eclipse.swt.graphics.RGB;
8 | import org.eclipse.swt.widgets.Display;
9 | import org.eclipse.swt.graphics.Image;
10 | import org.eclipse.swt.graphics.Rectangle;
11 | import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;
12 |
13 | import javax.swing.*;
14 | import java.awt.*;
15 | import java.awt.event.MouseAdapter;
16 | import java.awt.event.MouseEvent;
17 | import java.net.URL;
18 | import java.awt.Graphics;
19 | import java.awt.Insets;
20 | import java.awt.image.BufferedImage;
21 | import java.awt.image.ColorModel;
22 | import java.awt.image.DirectColorModel;
23 | import java.awt.image.IndexColorModel;
24 | import java.awt.image.WritableRaster;
25 |
26 |
27 | /**
28 | * @Author: Cyan
29 | * @Date: 2019/5/20 8:10
30 | * 考勤入口 和基本信息修改入口 和考勤数据查看 与 特殊情况 如请假信息添加
31 | * java swing 只关闭当前窗体 不关闭其他窗体
32 | * https://blog.csdn.net/u012721519/article/details/51068993
33 | *
34 | * imageicon转image
35 | * Image image=icon.getImage();
36 | * https://zhidao.baidu.com/question/54882399.html
37 | */
38 | public class AdminPage extends JFrame{
39 |
40 | // private JFrame jFrameAdmin;
41 | private JPanel jPanelAdmin;
42 | // private JPanel jPanelBasicInfo;
43 | // private JPanel jPanelAttendanceChecking;
44 | // private JPanel jPanelAttendanceData;
45 | private JLabel jLabelBasicInfo;
46 | private JLabel jLabelBasicInfoText;
47 | private JLabel jLabelDataManipulation;
48 | private JLabel jLabelDataManipulationText;
49 | private JLabel jLabelFaceUploading;
50 | private JLabel jLabelFaceUploadingText;
51 | private GridBagLayout gridBagLayout;
52 | private GridBagConstraints gridBagConstraints;
53 | private String userAccount;
54 | private String userPassword;
55 | private static String userType = "管理员";
56 |
57 |
58 | public String getUserAccount() {
59 | return userAccount;
60 | }
61 |
62 | public void setUserAccount(String userAccount) {
63 | this.userAccount = userAccount;
64 | }
65 |
66 | public String getUserPassword() {
67 | return userPassword;
68 | }
69 |
70 | public void setUserPassword(String userPassword) {
71 | this.userPassword = userPassword;
72 | }
73 |
74 | public AdminPage() {
75 | // jFrameAdmin = new JFrame();
76 | /**总面板*/
77 | jPanelAdmin = new JPanel();
78 |
79 | /**基本信息图标标签**/
80 | jLabelBasicInfo = new JLabel();
81 | jLabelBasicInfoText = new JLabel("管理员信息");
82 | /**系统后台数据操作图标标签**/
83 | jLabelDataManipulation = new JLabel();
84 | jLabelDataManipulationText = new JLabel("系统数据管理");
85 | /**人脸录入图标标签**/
86 | jLabelFaceUploading = new JLabel();
87 | jLabelFaceUploadingText = new JLabel("人脸信息录入");
88 |
89 | /**网格包布局**/
90 | gridBagLayout = new GridBagLayout();
91 | gridBagConstraints = new GridBagConstraints();
92 |
93 | //修改左上角Java图标
94 | URL imgURL = this.getClass().getResource("/viewingImg/titleicon.png");
95 | ImageIcon imageIcon = new ImageIcon(imgURL);
96 | java.awt.Image image = imageIcon.getImage();
97 | this.setIconImage(image);
98 |
99 | init();
100 |
101 |
102 | }
103 |
104 | public void init() {
105 | this.setTitle("考勤系统管理员界面");
106 | // jFrameTeacher.setLayout(null);
107 | // jFrameTeacher.setBounds(300, 200, 1200, 800);
108 | // jFrameTeacher.setLocationRelativeTo(null);
109 | // this.setAlwaysOnTop(true);
110 | // this.setUndecorated(false);
111 | this.getGraphicsConfiguration().getDevice().setFullScreenWindow(this);
112 |
113 | try {
114 | BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;
115 | org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
116 | UIManager.put("RootPane.setupButtonVisible", false);
117 | } catch(Exception e) {
118 | //TODO exception
119 | e.printStackTrace();
120 | }
121 |
122 | jPanelAdmin = new JPanel() {
123 | @Override
124 | protected void paintComponent(Graphics g) {
125 | super.paintComponent(g);
126 |
127 | try {
128 | /**
129 | * image如何创建对象
130 | * https://blog.csdn.net/u012723673/article/details/53326257
131 | */
132 | // BufferedImage bufferedImage = ImageIO.read(new File("viewingImg/AdminPageBackground.png"));
133 | // ImageData imageData = new ImageData("AdminPageBackground.png");
134 | // Display display = new Display();
135 | // BufferedImage awtImage = convertToAWT(imageData);
136 | // Image swtImage = new Image(display, convertToSWT(awtImage));
137 | URL imgURL = this.getClass().getResource("/viewingImg/AdminPageBackground.png");
138 | ImageIcon imageIcon = new ImageIcon(imgURL);
139 | java.awt.Image image = imageIcon.getImage();
140 | /**
141 | * 获取屏幕的高度与宽度(两种方式)
142 | * https://blog.csdn.net/jobfyz/article/details/78466171
143 | */
144 | Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
145 | int width = dimension.width; //1707px
146 | int height = dimension.height; //960px
147 | g.drawImage(image, 0, 0, width, height, this);
148 | } catch (Exception e) {
149 | e.getStackTrace();
150 | }
151 | }
152 | };
153 |
154 | //基本信息入口图标标签
155 | int iconwidth1 = 128;
156 | int iconheight1 = 128;
157 |
158 | URL imgURL1 = this.getClass().getResource("/viewingImg/basicinfo.png");
159 | ImageIcon imageIcon1 = new ImageIcon(imgURL1);
160 | // ImageIcon imageIcon1;
161 | // imageIcon1 = new ImageIcon("viewingImg/基本信息.png");
162 | java.awt.Image image1 = imageIcon1.getImage();
163 | image1 = image1.getScaledInstance(iconwidth1, iconheight1, 1);
164 | imageIcon1.setImage(image1);
165 | jLabelBasicInfo.setIcon(imageIcon1);
166 | // jPanelBasicInfo.add(jLabelBasicInfo);
167 | // jPanelBasicInfo.setBounds(70, 200, iconwidth1, iconheight1);
168 |
169 |
170 | //系统数据管理入口图标标签
171 | int iconwidth2 = 160;
172 | int iconheight2 = 160;
173 | URL imgURL2 = this.getClass().getResource("/viewingImg/data.png");
174 | ImageIcon imageIcon2 = new ImageIcon(imgURL2);
175 | // ImageIcon imageIcon2;
176 | // imageIcon2 = new ImageIcon("viewingImg/数据.png");
177 | java.awt.Image image2 = imageIcon1.getImage();
178 | image2 = image2.getScaledInstance(iconwidth1, iconheight1, 1);
179 | imageIcon1.setImage(image2);
180 | jLabelDataManipulation.setIcon(imageIcon2);
181 | // jPanelAttendanceChecking.add(jLabelAttendanceChecking);
182 | // jPanelAttendanceChecking.setBounds(400, 200, iconwidth2, iconheight2);
183 |
184 | //人脸录入入口图标标签
185 | int iconwidth3 = 128;
186 | int iconheight3 = 128;
187 |
188 | URL imgURL3 = this.getClass().getResource("/viewingImg/face.png");
189 | ImageIcon imageIcon3 = new ImageIcon(imgURL3);
190 | // ImageIcon imageIcon3;
191 | // imageIcon3 = new ImageIcon("viewingImg/人脸.png");
192 | java.awt.Image image3 = imageIcon1.getImage();
193 | image3 = image3.getScaledInstance(iconwidth1, iconheight1, 1);
194 | imageIcon1.setImage(image3);
195 | jLabelFaceUploading.setIcon(imageIcon3);
196 | // jPanelAttendanceData.add(jLabelAttendanceData);
197 | // jPanelAttendanceData.setBounds(800, 200, iconwidth3, iconheight3);
198 |
199 |
200 | /**
201 | * 文字标签
202 | */
203 | Color color = new Color(191, 173, 111);
204 | jLabelBasicInfoText.setFont(new Font("微软雅黑", Font.BOLD, 24));
205 | jLabelBasicInfoText.setForeground(color);
206 | jLabelDataManipulationText.setFont(new Font("微软雅黑", Font.BOLD, 24));
207 | jLabelDataManipulationText.setForeground(color);
208 | jLabelFaceUploadingText.setFont(new Font("微软雅黑", Font.BOLD, 24));
209 | jLabelFaceUploadingText.setForeground(color);
210 |
211 |
212 |
213 | /**
214 | * 给系统数据管理图标标签添加监听事件
215 | * 如何javaSwing关闭子窗口不关闭父窗口
216 | * http://www.cnblogs.com/hualidezhuanshen/p/5433572.html
217 | * 给系统数据管理图标标签添加鼠标监听事件
218 | * https://blog.csdn.net/xuqimm/article/details/71170300
219 | */
220 | jLabelDataManipulation.addMouseListener(new MouseAdapter() {
221 | @Override
222 | public void mouseClicked(MouseEvent e) {
223 | super.mouseClicked(e);
224 |
225 | AdminDataManipulationPage adminDataManipulationPage = new AdminDataManipulationPage();
226 | }
227 | /**
228 | * 图标变换
229 | * 鼠标点击
230 | * 鼠标进入
231 | * 鼠标离开
232 | */
233 | @Override
234 | public void mousePressed(MouseEvent e) {
235 | super.mousePressed(e);
236 | }
237 |
238 | @Override
239 | public void mouseEntered(MouseEvent e) {
240 | super.mouseEntered(e);
241 | }
242 |
243 | @Override
244 | public void mouseExited(MouseEvent e) {
245 | super.mouseExited(e);
246 | }
247 | });
248 |
249 |
250 | jLabelDataManipulationText.addMouseListener(new MouseAdapter() {
251 | @Override
252 | public void mouseClicked(MouseEvent e) {
253 | super.mouseClicked(e);
254 |
255 | AdminDataManipulationPage adminDataManipulationPage = new AdminDataManipulationPage();
256 | }
257 |
258 | @Override
259 | public void mousePressed(MouseEvent e) {
260 | super.mousePressed(e);
261 | }
262 |
263 | @Override
264 | public void mouseEntered(MouseEvent e) {
265 | super.mouseEntered(e);
266 | }
267 |
268 | @Override
269 | public void mouseExited(MouseEvent e) {
270 | super.mouseExited(e);
271 | }
272 | });
273 |
274 |
275 | /**
276 | * 管理员基本信息图标标签和文字标签添加鼠标监听事件
277 | */
278 | jLabelBasicInfo.addMouseListener(new MouseAdapter() {
279 | @Override
280 | public void mouseClicked(MouseEvent e) {
281 | super.mouseClicked(e);
282 |
283 | AdminBasicInfoPage adminBasicInfoPage = new AdminBasicInfoPage();
284 | String account = getUserAccount();
285 | String pwd = getUserPassword();
286 |
287 | adminBasicInfoPage.setUserAccount(account);
288 | adminBasicInfoPage.setUserPassword(pwd);
289 |
290 | adminBasicInfoPage.receTheAccountInfo(adminBasicInfoPage);
291 |
292 | }
293 |
294 | @Override
295 | public void mousePressed(MouseEvent e) {
296 | super.mousePressed(e);
297 | }
298 |
299 | @Override
300 | public void mouseEntered(MouseEvent e) {
301 | super.mouseEntered(e);
302 | }
303 |
304 | @Override
305 | public void mouseExited(MouseEvent e) {
306 | super.mouseExited(e);
307 | }
308 | });
309 |
310 | jLabelBasicInfoText.addMouseListener(new MouseAdapter() {
311 | @Override
312 | public void mouseClicked(MouseEvent e) {
313 | super.mouseClicked(e);
314 |
315 | AdminBasicInfoPage adminBasicInfoPage = new AdminBasicInfoPage();
316 | String account = getUserAccount();
317 | String pwd = getUserPassword();
318 |
319 | adminBasicInfoPage.setUserAccount(account);
320 | adminBasicInfoPage.setUserPassword(pwd);
321 |
322 | adminBasicInfoPage.receTheAccountInfo(adminBasicInfoPage);
323 | }
324 |
325 | @Override
326 | public void mousePressed(MouseEvent e) {
327 | super.mousePressed(e);
328 | }
329 |
330 | @Override
331 | public void mouseEntered(MouseEvent e) {
332 | super.mouseEntered(e);
333 | }
334 |
335 | @Override
336 | public void mouseExited(MouseEvent e) {
337 | super.mouseExited(e);
338 | }
339 | });
340 |
341 | /**
342 | * 考勤后台数据图标标签和文字标签添加鼠标监听事件
343 | */
344 | jLabelFaceUploading.addMouseListener(new MouseAdapter() {
345 | @Override
346 | public void mouseClicked(MouseEvent e) {
347 | super.mouseClicked(e);
348 |
349 | FaceUploadingPage faceUploadingPage = new FaceUploadingPage();
350 | }
351 |
352 | @Override
353 | public void mousePressed(MouseEvent e) {
354 | super.mousePressed(e);
355 | }
356 |
357 | @Override
358 | public void mouseEntered(MouseEvent e) {
359 | super.mouseEntered(e);
360 | }
361 |
362 | @Override
363 | public void mouseExited(MouseEvent e) {
364 | super.mouseExited(e);
365 | }
366 | });
367 |
368 | jLabelFaceUploadingText.addMouseListener(new MouseAdapter() {
369 | @Override
370 | public void mouseClicked(MouseEvent e) {
371 | super.mouseClicked(e);
372 |
373 | FaceUploadingPage faceUploadingPage = new FaceUploadingPage();
374 | }
375 |
376 | @Override
377 | public void mousePressed(MouseEvent e) {
378 | super.mousePressed(e);
379 | }
380 |
381 | @Override
382 | public void mouseEntered(MouseEvent e) {
383 | super.mouseEntered(e);
384 | }
385 |
386 | @Override
387 | public void mouseExited(MouseEvent e) {
388 | super.mouseExited(e);
389 | }
390 | });
391 |
392 |
393 | /**
394 | * 设置JPanelTeacher
395 | * 为网格包布局
396 | */
397 | jPanelAdmin.setOpaque(false);
398 | jPanelAdmin.setLayout(gridBagLayout);
399 |
400 | /**
401 | * 接下来设置各组件以适应网格包布局
402 | */
403 | //基本信息入口标签显示
404 | gridBagConstraints = new GridBagConstraints(0, 0, 6, 3, 0, 0,
405 | GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 100, 0, 120 ),0, 0);
406 | gridBagLayout.setConstraints(jLabelBasicInfo, gridBagConstraints);
407 | jPanelAdmin.add(jLabelBasicInfo);
408 |
409 | //考勤入口标签显示
410 | gridBagConstraints = new GridBagConstraints(12, 0, 6, 3, 0, 0,
411 | GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 120, 0, 120 ),0, 0);
412 | gridBagLayout.setConstraints(jLabelDataManipulation, gridBagConstraints);
413 | jPanelAdmin.add(jLabelDataManipulation);
414 |
415 | //考勤后台数据标签显示
416 | gridBagConstraints = new GridBagConstraints(24, 0, 6, 3, 0, 0,
417 | GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 120, 0, 100 ),0, 0);
418 | gridBagLayout.setConstraints(jLabelFaceUploading, gridBagConstraints);
419 | jPanelAdmin.add(jLabelFaceUploading);
420 |
421 | //基本信息文字内容标签内容
422 | gridBagConstraints = new GridBagConstraints(0, 6, 6, 2, 0, 0,
423 | GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 100, 120, 120 ),0, 0);
424 | gridBagLayout.setConstraints(jLabelBasicInfoText, gridBagConstraints);
425 | jPanelAdmin.add(jLabelBasicInfoText);
426 |
427 | //考勤入口文字内容标签内容
428 | gridBagConstraints = new GridBagConstraints(12, 6, 6, 2, 0, 0,
429 | GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 120, 120, 120 ),0, 0);
430 | gridBagLayout.setConstraints(jLabelDataManipulationText, gridBagConstraints);
431 | jPanelAdmin.add(jLabelDataManipulationText);
432 |
433 | //考勤数据文字内容标签内容
434 | gridBagConstraints = new GridBagConstraints(24, 6, 6, 2, 0, 0,
435 | GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(0, 120, 120, 100 ),0, 0);
436 | gridBagLayout.setConstraints(jLabelFaceUploadingText, gridBagConstraints);
437 | jPanelAdmin.add(jLabelFaceUploadingText);
438 |
439 |
440 | this.add(jPanelAdmin);
441 | }
442 |
443 |
444 |
445 |
446 | public void showFrameAdmin() {
447 | this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
448 | this.setVisible(true);
449 | }
450 |
451 | private static GridBagConstraints getGridBagConstraints(int gridx, int gridy, int gridwidth,
452 | int gridheight, double weightx, double weighty,
453 | int anchor, int fill, Insets insets, int ipadx,
454 | int ipady) {
455 | return new GridBagConstraints(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor,
456 | fill, insets, ipadx, ipady);
457 | }
458 |
459 | /**
460 | *
461 | * @param data
462 | * @return
463 | */
464 | public static BufferedImage convertToAWT(ImageData data) {
465 | ColorModel colorModel = null;
466 | PaletteData palette = data.palette;
467 | if (palette.isDirect) {
468 | colorModel = new DirectColorModel(data.depth, palette.redMask,
469 | palette.greenMask, palette.blueMask);
470 | BufferedImage bufferedImage = new BufferedImage(colorModel,
471 | colorModel.createCompatibleWritableRaster(data.width,
472 | data.height), false, null);
473 | WritableRaster raster = bufferedImage.getRaster();
474 | int[] pixelArray = new int[3];
475 | for (int y = 0; y < data.height; y++) {
476 | for (int x = 0; x < data.width; x++) {
477 | int pixel = data.getPixel(x, y);
478 | RGB rgb = palette.getRGB(pixel);
479 | pixelArray[0] = rgb.red;
480 | pixelArray[1] = rgb.green;
481 | pixelArray[2] = rgb.blue;
482 | raster.setPixels(x, y, 1, 1, pixelArray);
483 | }
484 | }
485 | return bufferedImage;
486 | } else {
487 | RGB[] rgbs = palette.getRGBs();
488 | byte[] red = new byte[rgbs.length];
489 | byte[] green = new byte[rgbs.length];
490 | byte[] blue = new byte[rgbs.length];
491 | for (int i = 0; i < rgbs.length; i++) {
492 | RGB rgb = rgbs[i];
493 | red[i] = (byte) rgb.red;
494 | green[i] = (byte) rgb.green;
495 | blue[i] = (byte) rgb.blue;
496 | }
497 | if (data.transparentPixel != -1) {
498 | colorModel = new IndexColorModel(data.depth, rgbs.length, red,
499 | green, blue, data.transparentPixel);
500 | } else {
501 | colorModel = new IndexColorModel(data.depth, rgbs.length, red,
502 | green, blue);
503 | }
504 | BufferedImage bufferedImage = new BufferedImage(colorModel,
505 | colorModel.createCompatibleWritableRaster(data.width,
506 | data.height), false, null);
507 | WritableRaster raster = bufferedImage.getRaster();
508 | int[] pixelArray = new int[1];
509 | for (int y = 0; y < data.height; y++) {
510 | for (int x = 0; x < data.width; x++) {
511 | int pixel = data.getPixel(x, y);
512 | pixelArray[0] = pixel;
513 | raster.setPixel(x, y, pixelArray);
514 | }
515 | }
516 | return bufferedImage;
517 | }
518 | }
519 |
520 | /**
521 | *
522 | * @param bufferedImage
523 | * @return
524 | */
525 | static ImageData convertToSWT(BufferedImage bufferedImage) {
526 | if (bufferedImage.getColorModel() instanceof DirectColorModel) {
527 | DirectColorModel colorModel = (DirectColorModel) bufferedImage
528 | .getColorModel();
529 | PaletteData palette = new PaletteData(colorModel.getRedMask(),
530 | colorModel.getGreenMask(), colorModel.getBlueMask());
531 | ImageData data = new ImageData(bufferedImage.getWidth(),
532 | bufferedImage.getHeight(), colorModel.getPixelSize(),
533 | palette);
534 | WritableRaster raster = bufferedImage.getRaster();
535 | int[] pixelArray = new int[3];
536 | for (int y = 0; y < data.height; y++) {
537 | for (int x = 0; x < data.width; x++) {
538 | raster.getPixel(x, y, pixelArray);
539 | int pixel = palette.getPixel(new RGB(pixelArray[0],
540 | pixelArray[1], pixelArray[2]));
541 | data.setPixel(x, y, pixel);
542 | }
543 | }
544 | return data;
545 | } else if (bufferedImage.getColorModel() instanceof IndexColorModel) {
546 | IndexColorModel colorModel = (IndexColorModel) bufferedImage
547 | .getColorModel();
548 | int size = colorModel.getMapSize();
549 | byte[] reds = new byte[size];
550 | byte[] greens = new byte[size];
551 | byte[] blues = new byte[size];
552 | colorModel.getReds(reds);
553 | colorModel.getGreens(greens);
554 | colorModel.getBlues(blues);
555 | RGB[] rgbs = new RGB[size];
556 | for (int i = 0; i < rgbs.length; i++) {
557 | rgbs[i] = new RGB(reds[i] & 0xFF, greens[i] & 0xFF,
558 | blues[i] & 0xFF);
559 | }
560 | PaletteData palette = new PaletteData(rgbs);
561 | ImageData data = new ImageData(bufferedImage.getWidth(),
562 | bufferedImage.getHeight(), colorModel.getPixelSize(),
563 | palette);
564 | data.transparentPixel = colorModel.getTransparentPixel();
565 | WritableRaster raster = bufferedImage.getRaster();
566 | int[] pixelArray = new int[1];
567 | for (int y = 0; y < data.height; y++) {
568 | for (int x = 0; x < data.width; x++) {
569 | raster.getPixel(x, y, pixelArray);
570 | data.setPixel(x, y, pixelArray[0]);
571 | }
572 | }
573 | return data;
574 | }
575 | return null;
576 | }
577 |
578 | static ImageData createSampleImage(Display display) {
579 | Image image = new Image(display, 100, 100);
580 | Rectangle bounds = image.getBounds();
581 | GC gc = new GC(image);
582 | gc.setBackground(display.getSystemColor(SWT.COLOR_BLUE));
583 | gc.fillRectangle(bounds);
584 | gc.setBackground(display.getSystemColor(SWT.COLOR_GREEN));
585 | gc.fillOval(0, 0, bounds.width, bounds.height);
586 | gc.setForeground(display.getSystemColor(SWT.COLOR_RED));
587 | gc.drawLine(0, 0, bounds.width, bounds.height);
588 | gc.drawLine(bounds.width, 0, 0, bounds.height);
589 | gc.dispose();
590 | ImageData data = image.getImageData();
591 | image.dispose();
592 | return data;
593 | }
594 |
595 | public static void main(String[] args) {
596 | AdminPage adminPage = new AdminPage();
597 | adminPage.showFrameAdmin();
598 | }
599 | }
600 |
--------------------------------------------------------------------------------
/src/main/java/cn/cyan/view/AttendanceCheckingDataPage.java:
--------------------------------------------------------------------------------
1 | package cn.cyan.view;
2 |
3 | import cn.cyan.util.DB;
4 | import cn.cyan.util.OpertareDBSets.OperateDB4;
5 | import jdk.nashorn.internal.ir.CatchNode;
6 | import org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper;
7 | import javax.swing.*;
8 | import javax.swing.table.DefaultTableModel;
9 | import java.awt.*;
10 | import java.awt.event.*;
11 | import java.net.URL;
12 | import java.sql.ResultSet;
13 | import java.sql.SQLException;
14 | import java.util.ArrayList;
15 | import java.util.Vector;
16 |
17 | /**
18 | * @Author: Cyan
19 | * @Date: 2019/5/29 22:31
20 | */
21 | public class AttendanceCheckingDataPage extends JFrame {
22 |
23 | private String userAccount;
24 | private String userPassword;
25 | private DefaultTableModel defaultTableModel;
26 | private JTable jTableAttendanceData;
27 | private JScrollPane jScrollPaneData;
28 | private JButton jButtonSaveTheChange;
29 | private JButton jButtonCheckAmount;
30 | private JPanel jPanelBasicInfo;
31 | private JComboBox jComboBoxselectcheckingtable;
32 | private JPanel jPaneljcombox;
33 | private JPanel jPanelTable;
34 |
35 | public String getUserAccount() {
36 | return userAccount;
37 | }
38 |
39 | public void setUserAccount(String userAccount) {
40 | this.userAccount = userAccount;
41 | }
42 |
43 | public String getUserPassword() {
44 | return userPassword;
45 | }
46 |
47 | public void setUserPassword(String userPassword) {
48 | this.userPassword = userPassword;
49 | }
50 |
51 | public AttendanceCheckingDataPage() {
52 |
53 | this.setTitle("考勤后台界面");
54 | this.setLayout(new BorderLayout());
55 | this.setBounds(600, 200, 800, 320);
56 | this.setLocationRelativeTo(null);
57 | //修改左上角Java图标
58 | URL imgURL = this.getClass().getResource("/viewingImg/titleicon.png");
59 | ImageIcon imageIcon = new ImageIcon(imgURL);
60 | Image image = imageIcon.getImage();
61 | this.setIconImage(image);
62 |
63 | try {
64 | BeautyEyeLNFHelper.frameBorderStyle = BeautyEyeLNFHelper.FrameBorderStyle.translucencyAppleLike;
65 | org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();
66 | } catch(Exception e) {
67 | //TODO exception
68 | e.printStackTrace();
69 | }
70 |
71 | jPanelBasicInfo = new JPanel();
72 |
73 |
74 | // jPanelBasicInfo.setPreferredSize(new Dimension(720, 280));
75 |
76 | /**
77 | * 考勤数据表格
78 | */
79 | // //取得数据库的考勤表的各行数据
80 | // Vector rowData = OperateDB4.getRows();
81 | // //取得数据库的考勤表的表头数据
82 | // Vector columnNames = OperateDB4.getHead();
83 | //
84 | // //新建表格
85 | // defaultTableModel = new DefaultTableModel(rowData, columnNames);
86 | // jTableAttendanceData = new JTable(defaultTableModel);
87 | // jScrollPaneData = new JScrollPane(jTableAttendanceData);
88 | jPaneljcombox = new JPanel();
89 | jPanelTable = new JPanel();
90 |
91 | jButtonSaveTheChange = new JButton("添加备注");
92 | jButtonCheckAmount = new JButton("查看未考勤人数");
93 | jButtonCheckAmount.setBorder(null);
94 | jButtonCheckAmount.setContentAreaFilled(true);
95 | jButtonCheckAmount.setFocusPainted(false);
96 | jPaneljcombox.add(jButtonCheckAmount);
97 | jButtonSaveTheChange.setContentAreaFilled(true);
98 | jButtonSaveTheChange.setBorder(null);
99 |
100 | //将面板和表格分别添加到窗体中
101 | // this.add(jScrollPaneData, BorderLayout.CENTER);
102 | this.add(jButtonSaveTheChange, BorderLayout.EAST);
103 | this.add(jPaneljcombox, BorderLayout.WEST);
104 | this.add(jPanelTable, BorderLayout.CENTER);
105 |
106 | this.setVisible(true);
107 | this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
108 | }
109 |
110 |
111 | //接收教师功能选择页面账户
112 | //接下来实现表的展示
113 | public void receTheAccountInfo(final AttendanceCheckingDataPage attendanceCheckingDataPage) {
114 | final String account = attendanceCheckingDataPage.getUserAccount();
115 | final String pwd = attendanceCheckingDataPage.getUserPassword();
116 |
117 | //测试传入参数
118 | System.out.println(account);
119 | System.out.println(pwd);
120 |
121 |
122 | /**
123 | * 通过数据库视图查登录教师所授课课程
124 | */
125 | try {
126 | DB db = new DB();
127 | ResultSet rs = null;
128 | int class_account = 0;
129 | ArrayList labels = new ArrayList();
130 |
131 | rs = db.executeQuery("select class_id from view_selectcheckingclass where class_teacher_id = '" + account + "'");
132 | if (rs.wasNull()) {
133 | System.out.println("获取数据失败为空!");
134 | } else {
135 | while (rs.next()) {
136 | class_account++;
137 | String reslut = rs.getString("class_id");
138 | labels.add(reslut);
139 | }
140 | }
141 | String[] strLabel = (String[]) labels.toArray(new String[0]);
142 | jComboBoxselectcheckingtable = new JComboBox(strLabel);
143 | jComboBoxselectcheckingtable.setEditable(false);
144 | jComboBoxselectcheckingtable.setSelectedIndex(0);
145 | jPaneljcombox.add(jComboBoxselectcheckingtable);
146 |
147 | /**
148 | * 设置默认的选项对应的考勤table
149 | */
150 | final String defaultItem = jComboBoxselectcheckingtable.getSelectedItem().toString();
151 | try {
152 | DB db2 = new DB();
153 | ResultSet rs2 = null;
154 |
155 | System.out.println("here");
156 | rs2 = db.executeQuery("select s_id, s_name, s_flag, s_lastcheck, s_remark from view_attendancechecking where s_classid = '" + defaultItem + "'");
157 | // System.out.println("here");
158 | if (rs2.wasNull()) {
159 | System.out.println("获取数据失败为空!");
160 | } else {
161 | Vector columnName = new Vector();//字段名
162 | Vector> dataVector = new
163 | Vector>(); //存储所有数据,里面每个小的Vector是存单行的
164 | columnName.add("学生学号");
165 | columnName.add("学生姓名");
166 | columnName.add("签到签退标志");
167 | columnName.add("最近一次考勤");
168 | columnName.add("备注");
169 | // System.out.println("here2");
170 |
171 | try {
172 | while (rs2.next()) {
173 | Vector