├── .DS_Store
├── 注意事项.pdf
├── .gitattributes
├── src
└── edu
│ └── school
│ └── card
│ ├── SchoolCardApplication.java
│ ├── frame
│ ├── util
│ │ ├── RegexUtils.java
│ │ └── BeanUtils.java
│ └── component
│ │ ├── BaseFrame.java
│ │ ├── Layer.java
│ │ ├── MyTableMouseMotionListener.java
│ │ └── BaseWindow.java
│ ├── enums
│ ├── LossCode.java
│ └── DelCode.java
│ ├── anon
│ └── ChangeValue.java
│ ├── bean
│ ├── CreditInfo.java
│ ├── ConsumeInfo.java
│ └── SchoolCard.java
│ ├── cache
│ └── GlobalCache.java
│ ├── page
│ ├── LoginPage.java
│ └── CardManagerPage.java
│ └── controller
│ └── SchoolCardController.java
├── school-card.iml
├── readme.txt
└── README.md
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/CampusCardManagementSystem/HEAD/.DS_Store
--------------------------------------------------------------------------------
/注意事项.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JavaGraduationProject/CampusCardManagementSystem/HEAD/注意事项.pdf
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.js linguist-language=java
2 | *.css linguist-language=java
3 | *.html linguist-language=java
4 |
--------------------------------------------------------------------------------
/src/edu/school/card/SchoolCardApplication.java:
--------------------------------------------------------------------------------
1 | package edu.school.card;
2 |
3 | import edu.school.card.page.LoginPage;
4 |
5 | public class SchoolCardApplication {
6 | public static void main(String[] args) {
7 | LoginPage login = new LoginPage();
8 | login.start();
9 |
10 | // CardManagerPage cardManagerPage = new CardManagerPage();
11 | // cardManagerPage.start();
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/src/edu/school/card/frame/util/RegexUtils.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.frame.util;
2 |
3 | import java.util.regex.Matcher;
4 | import java.util.regex.Pattern;
5 |
6 | public class RegexUtils {
7 |
8 | public static boolean isNumberOrEnglish(String value){
9 | String regex="^[a-zA-Z0-9\u4E00-\u9FA5]+$";
10 | Pattern pattern = Pattern.compile(regex);
11 | Matcher match=pattern.matcher(value);
12 | return match.matches();
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/src/edu/school/card/frame/component/BaseFrame.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.frame.component;
2 |
3 | import java.awt.*;
4 |
5 | public class BaseFrame extends Frame {
6 |
7 | public void init(String title, int width, int height, boolean visible){
8 | super.setLayout(null);
9 | super.setTitle(title);
10 | super.setSize(width,height);
11 | super.setVisible(visible);
12 | super.setResizable(false);
13 | super.setLocationRelativeTo(null);
14 | super.addWindowListener(new BaseWindow());
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/school-card.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/src/edu/school/card/enums/LossCode.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.enums;
2 |
3 | /**
4 | * 挂失枚举类
5 | * @date 2020/11/24
6 | */
7 | public enum LossCode {
8 |
9 | /**
10 | * 挂失
11 | */
12 | YES(1,"是"),
13 | /**
14 | * 未挂失
15 | */
16 | NO(0,"否");
17 |
18 | private String value;
19 |
20 | private int code;
21 |
22 | LossCode(int code, String value) {
23 | this.value = value;
24 | this.code = code;
25 | }
26 |
27 | public int getCode() {
28 | return code;
29 | }
30 |
31 | public String getValue() {
32 | return value;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/src/edu/school/card/anon/ChangeValue.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.anon;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | /**
9 | * 字典值转换注解
10 | * @date 2020/11/24
11 | */
12 | @Retention(RetentionPolicy.RUNTIME)
13 | @Target(ElementType.FIELD)
14 | public @interface ChangeValue {
15 |
16 | /**
17 | * 字段所在列
18 | * @return
19 | */
20 | int index() default 0;
21 |
22 | /**
23 | * 转换模式
24 | * @return
25 | */
26 | String pattern() default "";
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/src/edu/school/card/enums/DelCode.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.enums;
2 |
3 | /**
4 | * @author wujiayao
5 | * @date 2020/11/24
6 | */
7 | public enum DelCode {
8 |
9 | /**
10 | * 已删
11 | */
12 | YES(1,"是"),
13 | /**
14 | * 未删
15 | */
16 | NO(0,"否");
17 |
18 | private String value;
19 |
20 | private int code;
21 |
22 | DelCode(int code, String value) {
23 | this.value = value;
24 | this.code = code;
25 | }
26 |
27 | public int getCode() {
28 | return code;
29 | }
30 |
31 | public String getValue() {
32 | return value;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/readme.txt:
--------------------------------------------------------------------------------
1 | ------------------------------------------------------------------------------------------------------------------------
2 | 一. schoolcard.txt文档相等于校园卡的数据表.
3 |
4 | 第一列: 校园卡主键
5 | 第二列: 校园卡密码
6 | 第三列: 校园卡余额
7 | 第四列: 校园卡挂失(1:挂失,0:未挂失)
8 | 第五列: 校园卡用户名
9 | 第六列: 校原卡是否已删除(1:删除,0:未删除)
10 |
11 | ------------------------------------------------------------------------------------------------------------------------
12 | 二. credit.txt文档相等于充值的数据表.
13 |
14 | 第一列: 充值记录主键
15 | 第二列: 校园卡主键
16 | 第三列: 校园卡充值金额
17 | 第四列: 校园卡充值时间
18 |
19 | ------------------------------------------------------------------------------------------------------------------------
20 | 三. consume.txt文档相等于消费的数据表.
21 |
22 | 第一列: 消费记录主键
23 | 第二列: 校园卡主键
24 | 第三列: 校园卡消费金额
25 | 第四列: 校园卡消费时间
26 |
27 | ------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------
/src/edu/school/card/frame/component/Layer.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.frame.component;
2 |
3 | import edu.school.card.page.LoginPage;
4 |
5 | import java.awt.*;
6 | import java.awt.event.MouseAdapter;
7 | import java.awt.event.MouseEvent;
8 | import java.awt.event.WindowAdapter;
9 | import java.awt.event.WindowEvent;
10 |
11 | public class Layer {
12 |
13 | public static Frame frame = null;
14 |
15 | public static void alert(String content){
16 | frame = new Frame();
17 | frame.setResizable(false);
18 | frame.setTitle("错误提示");
19 | frame.setVisible(true);
20 | frame.setLocationRelativeTo(null);
21 | frame.setLayout(null);
22 | frame.setAlwaysOnTop(true);
23 | frame.addWindowListener(new WindowAdapter() {
24 | @Override
25 | public void windowClosing(WindowEvent e) {
26 | e.getWindow().setVisible(false);
27 | }
28 | });
29 | frame.setSize(300,200);
30 |
31 | Panel panel = new Panel();
32 | panel.setLayout(null);
33 | panel.setSize(300,200);
34 |
35 | Label label = new Label(content, FlowLayout.CENTER);
36 | label.setFont(new Font("宋体",Font.BOLD,20));
37 | label.setSize(300,200);
38 | panel.add(label);
39 |
40 | panel.setVisible(true);
41 | frame.add(panel);
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/src/edu/school/card/frame/component/MyTableMouseMotionListener.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.frame.component;
2 |
3 | import javax.swing.*;
4 | import java.awt.*;
5 | import java.awt.event.MouseEvent;
6 | import java.awt.event.MouseMotionAdapter;
7 |
8 | /**
9 | * @date 2020/11/25
10 | */
11 | public class MyTableMouseMotionListener extends MouseMotionAdapter {
12 |
13 | private int rowUnderMouse = -1;
14 |
15 | @Override
16 | public void mouseMoved(MouseEvent e){
17 | JTable table = (JTable)e.getSource();
18 | Point p = table.getMousePosition();
19 | if(p != null){
20 | rowUnderMouse = table.rowAtPoint(p);
21 | if(rowUnderMouse >= 0){
22 | for(int i=0;i
22.校园卡管理系统
11 |
12 |
13 |
14 |
15 |
16 |
17 | # 简介
18 |
19 | > 本代码来源于网络, 请入群(983063232)后联系群主索要sql文件!
20 | >
21 | > 用户名: admin 密码: 123456
22 | >
23 | >------------------------------------------------------------------------------------------------------------------------
24 | >一. schoolcard.txt文档相等于校园卡的数据表.
25 |
26 | 第一列: 校园卡主键
27 | 第二列: 校园卡密码
28 | 第三列: 校园卡余额
29 | 第四列: 校园卡挂失(1:挂失,0:未挂失)
30 | 第五列: 校园卡用户名
31 | 第六列: 校原卡是否已删除(1:删除,0:未删除)
32 |
33 | >------------------------------------------------------------------------------------------------------------------------
34 | >二. credit.txt文档相等于充值的数据表.
35 |
36 | 第一列: 充值记录主键
37 | 第二列: 校园卡主键
38 | 第三列: 校园卡充值金额
39 | 第四列: 校园卡充值时间
40 |
41 | ------------------------------------------------------------------------------------------------------------------------
42 | >三. consume.txt文档相等于消费的数据表.
43 |
44 | 第一列: 消费记录主键
45 | 第二列: 校园卡主键
46 | 第三列: 校园卡消费金额
47 | 第四列: 校园卡消费时间
48 | >------------------------------------------------------------------------------------------------------------------------
49 |
50 |
51 |
52 |
53 | # 环境
54 |
55 | - IntelliJ IDEA 2009.3
56 |
57 | - JDK 1.8
58 |
59 |
60 | ## 缩略图
61 |
62 | 
63 |
64 | 
65 |
66 | 
67 |
68 | 
69 |
70 |
71 |
--------------------------------------------------------------------------------
/src/edu/school/card/bean/SchoolCard.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.bean;
2 |
3 | import edu.school.card.anon.ChangeValue;
4 |
5 | import java.math.BigDecimal;
6 |
7 | /**
8 | * @author wujiayao
9 | * @date 2020/11/24
10 | */
11 | public class SchoolCard {
12 |
13 | /**
14 | * 卡号
15 | */
16 | @ChangeValue(index = 0)
17 | private Long cardNo;
18 |
19 | /**
20 | * 用户名
21 | */
22 | @ChangeValue(index = 4)
23 | private String userName;
24 |
25 | /**
26 | * 密码
27 | */
28 | @ChangeValue(index = 1)
29 | private String cardPwd;
30 |
31 | /**
32 | * 余额
33 | */
34 | @ChangeValue(index = 2)
35 | private BigDecimal balance;
36 |
37 | /**
38 | * 是否挂失
39 | */
40 | @ChangeValue(index = 3,pattern = "1=是,0=否")
41 | private String lossFlag;
42 |
43 | /**
44 | * 是否删除
45 | */
46 | @ChangeValue(index = 5,pattern = "1=是,0=否")
47 | private String delFlag;
48 |
49 | public Long getCardNo() {
50 | return cardNo;
51 | }
52 |
53 | public void setCardNo(Long cardNo) {
54 | this.cardNo = cardNo;
55 | }
56 |
57 | public String getUserName() {
58 | return userName;
59 | }
60 |
61 | public void setUserName(String userName) {
62 | this.userName = userName;
63 | }
64 |
65 | public String getCardPwd() {
66 | return cardPwd;
67 | }
68 |
69 | public void setCardPwd(String cardPwd) {
70 | this.cardPwd = cardPwd;
71 | }
72 |
73 | public BigDecimal getBalance() {
74 | return balance;
75 | }
76 |
77 | public void setBalance(BigDecimal balance) {
78 | this.balance = balance;
79 | }
80 |
81 | public String getLossFlag() {
82 | return lossFlag;
83 | }
84 |
85 | public void setLossFlag(String lossFlag) {
86 | this.lossFlag = lossFlag;
87 | }
88 |
89 | public String getDelFlag() {
90 | return delFlag;
91 | }
92 |
93 | public void setDelFlag(String delFlag) {
94 | this.delFlag = delFlag;
95 | }
96 |
97 | @Override
98 | public String toString() {
99 | return "SchoolCard{" +
100 | "cardNo=" + cardNo +
101 | ", userName='" + userName + '\'' +
102 | ", cardPwd='" + cardPwd + '\'' +
103 | ", balance=" + balance +
104 | ", lossFlag='" + lossFlag + '\'' +
105 | ", delFlag='" + delFlag + '\'' +
106 | '}';
107 | }
108 | }
109 |
--------------------------------------------------------------------------------
/src/edu/school/card/cache/GlobalCache.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.cache;
2 |
3 | import edu.school.card.bean.ConsumeInfo;
4 | import edu.school.card.bean.CreditInfo;
5 | import edu.school.card.bean.SchoolCard;
6 | import edu.school.card.enums.DelCode;
7 | import edu.school.card.enums.LossCode;
8 |
9 | import java.util.Arrays;
10 | import java.util.HashMap;
11 | import java.util.Map;
12 | import java.util.Set;
13 |
14 | public class GlobalCache {
15 |
16 | private static String warn;
17 |
18 | /**
19 | * 校园卡数据缓存
20 | */
21 | private static Map schoolCardCache = new HashMap<>();
22 |
23 | /**
24 | * 最大的校园卡主键
25 | */
26 | private static Long maxCardNo;
27 |
28 | /**
29 | * 查询的当前条数据
30 | */
31 | private static SchoolCard queryCurrentSchoolCard;
32 |
33 | /**
34 | * 消费数据缓存
35 | */
36 | private static Map consumeInfoCache = new HashMap<>();
37 |
38 | /**
39 | * 最大消费数据主键
40 | */
41 | private static Long maxConsumeId;
42 |
43 | /**
44 | * 充值数据缓存
45 | */
46 | private static Map creditInfoCache = new HashMap<>();
47 |
48 | /**
49 | * 最大充值数据主键
50 | */
51 | private static Long maxCreditId;
52 |
53 | public static String getWarn() {
54 | return warn;
55 | }
56 |
57 | public static void setWarn(String warn) {
58 | GlobalCache.warn = warn;
59 | }
60 |
61 | public static SchoolCard getQueryCurrentSchoolCard() {
62 | return queryCurrentSchoolCard;
63 | }
64 |
65 | public static void setQueryCurrentSchoolCard(SchoolCard queryCurrentSchoolCard) {
66 | GlobalCache.queryCurrentSchoolCard = queryCurrentSchoolCard;
67 | }
68 |
69 | public static Long getMaxCardNo() {
70 | return maxCardNo;
71 | }
72 |
73 | public static void setMaxCardNo(Long maxCardNo) {
74 | GlobalCache.maxCardNo = maxCardNo;
75 | }
76 |
77 | public static Long getMaxConsumeId() {
78 | return maxConsumeId;
79 | }
80 |
81 | public static void setMaxConsumeId(Long maxConsumeId) {
82 | GlobalCache.maxConsumeId = maxConsumeId;
83 | }
84 |
85 | public static Long getMaxCreditId() {
86 | return maxCreditId;
87 | }
88 |
89 | public static void setMaxCreditId(Long maxCreditId) {
90 | GlobalCache.maxCreditId = maxCreditId;
91 | }
92 |
93 | public static Map getSchoolCardCache() {
94 | return schoolCardCache;
95 | }
96 |
97 | public static void setSchoolCardCache(Map schoolCardCache) {
98 | GlobalCache.schoolCardCache = schoolCardCache;
99 | Object[] obj = getMaxKey(schoolCardCache.keySet());
100 | if (obj.length == 0){
101 | GlobalCache.setMaxCardNo(0L);
102 | }else {
103 | GlobalCache.setMaxCardNo(Long.parseLong(obj[obj.length - 1].toString()));
104 | }
105 | }
106 |
107 | private static Object[] getMaxKey(Set set) {
108 | Object[] obj = set.toArray();
109 | Arrays.sort(obj);
110 | return obj;
111 | }
112 |
113 | public static Map getConsumeInfoCache() {
114 | return consumeInfoCache;
115 | }
116 |
117 | public static void setConsumeInfoCache(Map consumeInfoCache) {
118 | GlobalCache.consumeInfoCache = consumeInfoCache;
119 | Object[] obj = getMaxKey(consumeInfoCache.keySet());
120 | if (obj.length == 0){
121 | GlobalCache.setMaxConsumeId(0L);
122 | }else {
123 | GlobalCache.setMaxConsumeId(Long.parseLong(obj[obj.length - 1].toString()));
124 | }
125 | }
126 |
127 | public static Map getCreditInfoCache() {
128 | return creditInfoCache;
129 | }
130 |
131 | public static void setCreditInfoCache(Map creditInfoCache) {
132 | GlobalCache.creditInfoCache = creditInfoCache;
133 | Object[] obj = getMaxKey(creditInfoCache.keySet());
134 | if (obj.length == 0){
135 | GlobalCache.setMaxCreditId(0L);
136 | }else {
137 | GlobalCache.setMaxCreditId(Long.parseLong(obj[obj.length - 1].toString()));
138 | }
139 | }
140 |
141 | public static Map getNotDelSchoolMap(){
142 | if (schoolCardCache.size() == 0){
143 | return null;
144 | }
145 | HashMap map = new HashMap<>();
146 | Set> entries = schoolCardCache.entrySet();
147 | for (Map.Entry entry : entries) {
148 | SchoolCard schoolCard = entry.getValue();
149 | if (schoolCard.getDelFlag().equals(DelCode.YES.getValue())){
150 | continue;
151 | }
152 | map.put(schoolCard.getCardNo(),schoolCard);
153 | }
154 | return map;
155 | }
156 | }
157 |
--------------------------------------------------------------------------------
/src/edu/school/card/frame/component/BaseWindow.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.frame.component;
2 |
3 | import edu.school.card.bean.ConsumeInfo;
4 | import edu.school.card.bean.CreditInfo;
5 | import edu.school.card.bean.SchoolCard;
6 | import edu.school.card.cache.GlobalCache;
7 | import edu.school.card.enums.DelCode;
8 | import edu.school.card.enums.LossCode;
9 | import edu.school.card.frame.util.BeanUtils;
10 |
11 | import java.awt.*;
12 | import java.awt.event.WindowAdapter;
13 | import java.awt.event.WindowEvent;
14 | import java.io.*;
15 | import java.util.Arrays;
16 | import java.util.Map;
17 | import java.util.Set;
18 |
19 | public class BaseWindow extends WindowAdapter {
20 |
21 | @Override
22 | public void windowClosing(WindowEvent e) {
23 | Window window = e.getWindow();
24 | window.setVisible(false);
25 | // 同步数据
26 | try {
27 | writeData();
28 | }catch (Exception ex){
29 | ex.printStackTrace();
30 | }finally {
31 | System.exit(0);
32 | }
33 | }
34 |
35 | private void writeData() throws IOException {
36 | // 写入校园卡数据
37 | writeSchoolCard();
38 | // 写入充值记录
39 | writeCredit();
40 | // 写入消费数记录
41 | writeConsume();
42 | }
43 |
44 | private void writeConsume() throws IOException{
45 | if (GlobalCache.getConsumeInfoCache().size() == 0){
46 | BeanUtils utils = new BeanUtils<>();
47 | Map conMap = utils.getBeanMap("consume.txt", ConsumeInfo.class);
48 | GlobalCache.setConsumeInfoCache(conMap);
49 | }
50 | FileOutputStream fw = new FileOutputStream(BeanUtils.getPathOut("consume.txt"));
51 | OutputStreamWriter ow = new OutputStreamWriter(fw,"UTF-8");
52 | Map consumeInfoCache = GlobalCache.getConsumeInfoCache();
53 | Set set = consumeInfoCache.keySet();
54 | Object[] obj = set.toArray();
55 | Arrays.sort(obj);
56 | for (Object key : obj) {
57 | ConsumeInfo consumeInfo = consumeInfoCache.get(key);
58 | ow.write(consumeInfo.getConsumeId()+","+consumeInfo.getCardNo()+","+
59 | consumeInfo.getConsumeBalance()+","+consumeInfo.getCreateTime()+"\r\n");
60 | }
61 | ow.flush();
62 | ow.close();
63 | fw.close();
64 | }
65 |
66 | private void writeCredit() throws IOException {
67 | if (GlobalCache.getCreditInfoCache().size() == 0){
68 | BeanUtils utils = new BeanUtils<>();
69 | GlobalCache.setCreditInfoCache(utils.
70 | getBeanMap(
71 | "credit.txt",
72 | CreditInfo.class));
73 | }
74 | FileOutputStream fw = new FileOutputStream(BeanUtils.getPathOut("credit.txt"));
75 | OutputStreamWriter ow = new OutputStreamWriter(fw,"UTF-8");
76 | Map creditInfoCache = GlobalCache.getCreditInfoCache();
77 | Set set = creditInfoCache.keySet();
78 | Object[] obj = set.toArray();
79 | Arrays.sort(obj);
80 | for (Object key : obj) {
81 | CreditInfo creditInfo = creditInfoCache.get(key);
82 | ow.write(creditInfo.getCreditId()+","+creditInfo.getCardNo()+","+
83 | creditInfo.getCreditBalance()+","+creditInfo.getCreateTime()+"\r\n");
84 | }
85 | ow.flush();
86 | ow.close();
87 | fw.close();
88 | }
89 |
90 | private void writeSchoolCard() throws IOException {
91 | FileOutputStream fw = new FileOutputStream(BeanUtils.getPathOut("schoolcard.txt"));
92 | OutputStreamWriter ow = new OutputStreamWriter(fw,"UTF-8");
93 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
94 | Set set = schoolCardCache.keySet();
95 | Object[] obj = set.toArray();
96 | Arrays.sort(obj);
97 | for (Object key : obj) {
98 | SchoolCard schoolCard = schoolCardCache.get(key);
99 | String lossFlag = schoolCard.getLossFlag();
100 | if (lossFlag.equals(LossCode.YES.getValue())){
101 | lossFlag = LossCode.YES.getCode()+"";
102 | }else {
103 | lossFlag = LossCode.NO.getCode()+"";
104 | }
105 |
106 | String delFlag = schoolCard.getDelFlag();
107 | if (delFlag.equals(DelCode.YES.getValue())){
108 | delFlag = DelCode.YES.getCode()+"";
109 | }else {
110 | delFlag = DelCode.NO.getCode()+"";
111 | }
112 | ow.write(schoolCard.getCardNo()+","+schoolCard.getCardPwd()+","+
113 | schoolCard.getBalance()+","+lossFlag+","+
114 | schoolCard.getUserName()+","+delFlag+"\r\n");
115 | }
116 | ow.flush();
117 | ow.close();
118 | fw.close();
119 | }
120 | }
121 |
--------------------------------------------------------------------------------
/src/edu/school/card/frame/util/BeanUtils.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.frame.util;
2 |
3 | import edu.school.card.anon.ChangeValue;
4 |
5 | import java.io.*;
6 | import java.lang.reflect.Field;
7 | import java.math.BigDecimal;
8 | import java.util.*;
9 |
10 | /**
11 | * 创建bean工具类
12 | * @date 2020/11/24
13 | */
14 | public class BeanUtils {
15 |
16 | public Map getBeanMap(String pathName, Class clazz){
17 | String pathOut = getPathOut(pathName);
18 | HashMap map = new HashMap<>();
19 | BufferedReader br = null;
20 | FileInputStream fis = null;
21 | InputStreamReader isr = null;
22 | try {
23 | fis = new FileInputStream(pathOut);
24 | isr = new InputStreamReader(fis, "UTF-8");
25 | br = new BufferedReader(isr);
26 | String line = null;
27 | while ((line = br.readLine()) != null){
28 | createBean(line, clazz, map);
29 | }
30 | } catch (Exception e) {
31 | e.printStackTrace();
32 | }finally {
33 | try {
34 | br.close();
35 | isr.close();
36 | fis.close();
37 | } catch (IOException e) {
38 | e.printStackTrace();
39 | }
40 | }
41 | return map;
42 | }
43 |
44 | public static String getPathOut(String pathName) {
45 | String path = BeanUtils.class.getClassLoader().getResource("").getPath().substring(1);
46 | String[] paths = path.split("/");
47 | String pathOut = "";
48 | for (int i = 0; i < paths.length; i++) {
49 | int count = paths.length - 4;
50 | if (i < count){
51 | pathOut += paths[i]+"/";
52 | }
53 | }
54 | pathOut = pathOut.substring(0, pathOut.length() - 1)+"/CampusCardManagementSystem/src/edu/school/card/conf/"+pathName;
55 | return pathOut;
56 | }
57 |
58 | public Vector getBeanVector(String path, Class clazz){
59 | Vector vector = new Vector<>();
60 | FileReader fr = null;
61 | BufferedReader br = null;
62 | try {
63 | fr = new FileReader(path);
64 | br = new BufferedReader(fr);
65 | String line = null;
66 | while ((line = br.readLine()) != null){
67 | T bean = createBean(line, clazz);
68 | vector.add(bean);
69 | }
70 | } catch (Exception e) {
71 | e.printStackTrace();
72 | }
73 | return vector;
74 | }
75 |
76 | private T createBean(String line, Class clazz) {
77 | String[] lines = line.split(",");
78 | Field[] fields = clazz.getDeclaredFields();
79 | T obj = null;
80 | try {
81 | obj = clazz.newInstance();
82 | for (Field field : fields) {
83 | ChangeValue anon = field.getAnnotation(ChangeValue.class);
84 | if (anon == null){
85 | continue;
86 | }
87 | int index = anon.index();
88 | String val = lines[index];
89 | field.setAccessible(true);
90 | String pattern = anon.pattern();
91 | if ("".equals(pattern)){
92 | changeType(field,obj,val);
93 | }else {
94 | String[] ps = pattern.split(",");
95 | for (String p : ps) {
96 | String[] pv = p.split("=");
97 | if (val.equals(pv[0])){
98 | val = pv[1];
99 | changeType(field,obj,val);
100 | }
101 | }
102 | }
103 | }
104 | } catch (Exception e) {
105 | e.printStackTrace();
106 | }
107 | return obj;
108 | }
109 |
110 | private void createBean(String line, Class clazz, HashMap map) {
111 | String[] lines = line.split(",");
112 | Field[] fields = clazz.getDeclaredFields();
113 | T obj = null;
114 | Long key = 0L;
115 | try {
116 | obj = clazz.newInstance();
117 | for (Field field : fields) {
118 | ChangeValue anon = field.getAnnotation(ChangeValue.class);
119 | if (anon == null){
120 | continue;
121 | }
122 | int index = anon.index();
123 | String val = lines[index];
124 | if (index == 0){
125 | key = Long.parseLong(val);
126 | }
127 | field.setAccessible(true);
128 | String pattern = anon.pattern();
129 | if ("".equals(pattern)){
130 | changeType(field,obj,val);
131 | }else {
132 | String[] ps = pattern.split(",");
133 | for (String p : ps) {
134 | String[] pv = p.split("=");
135 | if (val.equals(pv[0])){
136 | val = pv[1];
137 | changeType(field,obj,val);
138 | }
139 | }
140 | }
141 | }
142 | map.put(key,obj);
143 | } catch (Exception e) {
144 | e.printStackTrace();
145 | }
146 | }
147 |
148 | private void changeType(Field field, T obj, String val) throws IllegalAccessException {
149 | Class> type = field.getType();
150 | String typeName = type.getName();
151 | if (typeName.contains("String")){
152 | field.set(obj,val);
153 | }else if (typeName.contains("Long")){
154 | field.set(obj,Long.parseLong(val));
155 | }else if (typeName.contains("BigDecimal")){
156 | field.set(obj,new BigDecimal(val));
157 | }
158 | }
159 | }
160 |
--------------------------------------------------------------------------------
/src/edu/school/card/page/LoginPage.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.page;
2 |
3 | import edu.school.card.frame.component.BaseFrame;
4 | import edu.school.card.frame.component.Layer;
5 |
6 | import java.awt.*;
7 | import java.awt.event.MouseAdapter;
8 | import java.awt.event.MouseEvent;
9 | import java.awt.event.WindowAdapter;
10 | import java.awt.event.WindowEvent;
11 | import java.io.FileInputStream;
12 | import java.io.IOException;
13 | import java.io.InputStream;
14 | import java.util.Properties;
15 |
16 | public class LoginPage extends BaseFrame {
17 |
18 | private Panel container;
19 | private Label userNameLabel;
20 | private TextField userNameText;
21 | private Label passwordLabel;
22 | private TextField passwordText;
23 | private Button loginButton;
24 | private Button cancleButton;
25 |
26 | public void start(){
27 | init("校园卡管理系统",500,400,true);
28 | createComponents();
29 | }
30 |
31 | private void createComponents() {
32 | // 创建容器
33 | createContainer();
34 | // 创建标题
35 | createTitle();
36 | // 创建用户名
37 | createUserName();
38 | // 创建密码
39 | createPassword();
40 | // 创建登录按钮
41 | createLoginButton();
42 | // 创建取消按钮
43 | createCancleButton();
44 | // 后置处理器
45 | afterProsser();
46 | // 创建监听器
47 | createListener();
48 | }
49 |
50 | private void createListener() {
51 | loginButton.addMouseListener(new MouseAdapter() {
52 | @Override
53 | public void mouseClicked(MouseEvent e) {
54 | // 获取用户名
55 | String userName = userNameText.getText();
56 | if ("".equals(userName)){
57 | // 禁用组件
58 | enableComponents(false);
59 | // 用户名不能为空
60 | Layer.alert("用户名不能为空");
61 | Layer.frame.addWindowListener(new WindowAdapter() {
62 | @Override
63 | public void windowClosing(WindowEvent e) {
64 | e.getWindow().setVisible(false);
65 | enableComponents(true);
66 | }
67 | });
68 | return;
69 | }
70 | // 获取密码
71 | String password = passwordText.getText();
72 | if ("".equals(password)){
73 | // 禁用组件
74 | enableComponents(false);
75 | // 用户名不能为空
76 | Layer.alert("密码不能为空");
77 | Layer.frame.addWindowListener(new WindowAdapter() {
78 | @Override
79 | public void windowClosing(WindowEvent e) {
80 | e.getWindow().setVisible(false);
81 | enableComponents(true);
82 | }
83 | });
84 | return;
85 | }
86 |
87 | // 登录
88 | login(userName,password);
89 | }
90 | });
91 | }
92 |
93 | /**
94 | * 登录
95 | * @param userName
96 | * @param password
97 | */
98 | public void login(String userName, String password){
99 | Properties properties = new Properties();
100 | // 使用ClassLoader加载properties配置文件生成对应的输入流
101 | String path = this.getClass().getClassLoader().getResource("").getPath().substring(1);
102 | // 使用properties对象加载输入流
103 | InputStream in = null;
104 | try {
105 | in = new FileInputStream(path+"edu/school/card/conf/userInfo.properties");
106 | properties.load(in);
107 | } catch (IOException e) {
108 | e.printStackTrace();
109 | return;
110 | }
111 | //获取key对应的value值
112 | String username = properties.getProperty("username");
113 | String pwd = properties.getProperty("password");
114 | try {
115 | in.close();
116 | } catch (IOException e) {
117 | e.printStackTrace();
118 | return;
119 | }
120 | if (userName.equals(username)&&password.equals(pwd)){
121 | // 关闭当前页面
122 | this.setVisible(false);
123 | // 打开管理页面
124 | CardManagerPage cardManagerPage = new CardManagerPage();
125 | cardManagerPage.start();
126 | return;
127 | }
128 | // 登录失败
129 | Layer.alert("登录失败,用户名或密码错误");
130 | enableComponents(false);
131 | Layer.frame.addWindowListener(new WindowAdapter() {
132 | @Override
133 | public void windowClosing(WindowEvent e) {
134 | e.getWindow().setVisible(false);
135 | enableComponents(true);
136 | }
137 | });
138 | }
139 |
140 | /**
141 | * 启用用组件
142 | */
143 | private void enableComponents(boolean flag){
144 | userNameText.setEditable(flag);
145 | passwordText.setEditable(flag);
146 | loginButton.setEnabled(flag);
147 | cancleButton.setEnabled(flag);
148 | }
149 |
150 | private void createLoginButton() {
151 | loginButton = new Button("登 录");
152 | loginButton.setBounds(100,280,100,50);
153 | loginButton.setFont(new Font("宋体",Font.BOLD,20));
154 | container.add(loginButton);
155 | }
156 |
157 | private void createCancleButton() {
158 | cancleButton = new Button("取 消");
159 | cancleButton.setBounds(300,280,100,50);
160 | cancleButton.setFont(new Font("宋体",Font.BOLD,20));
161 | container.add(cancleButton);
162 | }
163 |
164 | private void createPassword() {
165 | passwordLabel = new Label("密 码 : ", Label.RIGHT);
166 | passwordLabel.setBounds(0,200,200,50);
167 | passwordLabel.setFont(new Font("宋体",Font.BOLD,20));
168 | container.add(passwordLabel);
169 |
170 | passwordText = new TextField();
171 | passwordText.setEchoChar('*');
172 | passwordText.setBounds(200,210,200,30);
173 | passwordText.setFont(new Font("宋体",Font.BOLD,20));
174 | container.add(passwordText);
175 | }
176 |
177 | private void createUserName() {
178 | userNameLabel = new Label("用 户 名 : ", Label.RIGHT);
179 | userNameLabel.setBounds(0,150,200,50);
180 | userNameLabel.setFont(new Font("宋体",Font.BOLD,20));
181 | container.add(userNameLabel);
182 |
183 | userNameText = new TextField();
184 | userNameText.setBounds(200,160,200,30);
185 | userNameText.setFont(new Font("宋体",Font.BOLD,20));
186 | container.add(userNameText);
187 | }
188 |
189 | private void afterProsser() {
190 | this.add(container);
191 | }
192 |
193 | private void createTitle() {
194 | Label title = new Label("校园卡管理系统", Label.CENTER);
195 | title.setBounds(0,40,500,100);
196 | title.setFont(new Font("宋体",Font.BOLD,30));
197 | container.add(title);
198 | }
199 |
200 | private void createContainer() {
201 | container = new Panel();
202 | container.setLayout(null);
203 | container.setSize(new Dimension(500,400));
204 | container.setVisible(true);
205 | }
206 | }
207 |
--------------------------------------------------------------------------------
/src/edu/school/card/controller/SchoolCardController.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.controller;
2 |
3 | import edu.school.card.bean.ConsumeInfo;
4 | import edu.school.card.bean.CreditInfo;
5 | import edu.school.card.bean.SchoolCard;
6 | import edu.school.card.cache.GlobalCache;
7 | import edu.school.card.enums.DelCode;
8 | import edu.school.card.enums.LossCode;
9 | import edu.school.card.frame.util.BeanUtils;
10 |
11 | import java.math.BigDecimal;
12 | import java.text.SimpleDateFormat;
13 | import java.util.*;
14 |
15 | /**
16 | * @date 2020/11/25
17 | */
18 | public class SchoolCardController {
19 |
20 | /**
21 | * 开卡
22 | * @param pwd
23 | * @param balance
24 | * @param username
25 | */
26 | public static void insertSchoolCard(String pwd, String balance, String username) {
27 | SchoolCard schoolCard = new SchoolCard();
28 | schoolCard.setCardPwd(pwd);
29 | schoolCard.setBalance(new BigDecimal(balance));
30 | schoolCard.setUserName(username);
31 | schoolCard.setDelFlag(DelCode.NO.getCode()+"");
32 | schoolCard.setLossFlag(LossCode.NO.getCode()+"");
33 | // 生成用户主键编号
34 | long cardNo = GlobalCache.getMaxCardNo() + 1;
35 | schoolCard.setCardNo(cardNo);
36 | // 向缓存中插入
37 | // 创建新Map
38 | HashMap copyMap = new HashMap<>();
39 | copyMap.putAll(GlobalCache.getSchoolCardCache());
40 |
41 | // 转换格式
42 | String delFlag = schoolCard.getDelFlag();
43 | if (delFlag.equals(DelCode.YES.getCode()+"")){
44 | schoolCard.setDelFlag(DelCode.YES.getValue());
45 | }else {
46 | schoolCard.setDelFlag(DelCode.NO.getValue());
47 | }
48 |
49 | String lossFlag = schoolCard.getLossFlag();
50 | if (lossFlag.equals(LossCode.YES.getCode()+"")){
51 | schoolCard.setLossFlag(LossCode.YES.getValue());
52 | }else {
53 | schoolCard.setLossFlag(LossCode.NO.getValue());
54 | }
55 |
56 | copyMap.put(cardNo,schoolCard);
57 | GlobalCache.setSchoolCardCache(copyMap);
58 | }
59 |
60 | /**
61 | * 挂失
62 | * @param cardNo
63 | */
64 | public static void lossSchoolCard(String cardNo) {
65 | HashMap map = new HashMap<>();
66 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
67 | map.putAll(schoolCardCache);
68 |
69 | Set set = map.keySet();
70 | for (Long key : set) {
71 | SchoolCard schoolCard = schoolCardCache.get(key);
72 | if (schoolCard.getCardNo().toString().equals(cardNo)){
73 | schoolCard.setLossFlag(LossCode.YES.getValue());
74 | schoolCardCache.put(key,schoolCard);
75 | break;
76 | }
77 | }
78 | }
79 |
80 | /**
81 | * 删卡
82 | * @param cardNo
83 | */
84 | public static void delSchoolCard(String cardNo) {
85 | HashMap map = new HashMap<>();
86 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
87 | map.putAll(schoolCardCache);
88 |
89 | Set set = map.keySet();
90 | for (Long key : set) {
91 | SchoolCard schoolCard = schoolCardCache.get(key);
92 | if (schoolCard.getCardNo().toString().equals(cardNo)){
93 | schoolCard.setDelFlag(DelCode.YES.getValue());
94 | schoolCardCache.put(key,schoolCard);
95 | break;
96 | }
97 | }
98 | }
99 |
100 | /**
101 | * 修改密码
102 | * @param cardNo
103 | * @param cardPwd
104 | */
105 | public static void updateSchoolCard(String cardNo, String cardPwd) {
106 | HashMap map = new HashMap<>();
107 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
108 | map.putAll(schoolCardCache);
109 |
110 | Set set = map.keySet();
111 | for (Long key : set) {
112 | SchoolCard schoolCard = schoolCardCache.get(key);
113 | if (schoolCard.getCardNo().toString().equals(cardNo)){
114 | if (schoolCard.getLossFlag().equals(LossCode.YES.getValue())){
115 | return;
116 | }
117 | if (schoolCard.getDelFlag().equals(DelCode.YES.getValue())){
118 | return;
119 | }
120 | schoolCard.setCardPwd(cardPwd);
121 | schoolCardCache.put(key,schoolCard);
122 | return;
123 | }
124 | }
125 | }
126 |
127 | /**
128 | * 查询校园卡信息
129 | * @param cardNo
130 | * @param cardUser
131 | */
132 | public static void querySchoolCard(String cardNo, String cardUser) {
133 | HashMap map = new HashMap<>();
134 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
135 | map.putAll(schoolCardCache);
136 |
137 | Set set = map.keySet();
138 | for (Long key : set) {
139 | SchoolCard schoolCard = schoolCardCache.get(key);
140 | if (!cardNo.equals("")){
141 | if (schoolCard.getCardNo().toString().equals(cardNo)){
142 | if (schoolCard.getLossFlag().equals(LossCode.YES.getValue())){
143 | return;
144 | }
145 | if (schoolCard.getDelFlag().equals(DelCode.YES.getValue())){
146 | return;
147 | }
148 | GlobalCache.setQueryCurrentSchoolCard(schoolCard);
149 | return;
150 | }
151 | }
152 |
153 | if (!cardUser.equals("")){
154 | if (schoolCard.getUserName().toString().equals(cardUser)){
155 | if (schoolCard.getLossFlag().equals(LossCode.YES.getValue())){
156 | return;
157 | }
158 | if (schoolCard.getDelFlag().equals(DelCode.YES.getValue())){
159 | return;
160 | }
161 | GlobalCache.setQueryCurrentSchoolCard(schoolCard);
162 | return;
163 | }
164 | }
165 | }
166 | }
167 |
168 | /**
169 | * 充值
170 | * @param cardNo
171 | * @param balance
172 | */
173 | public static void insertBalance(String cardNo, String balance) {
174 | if (GlobalCache.getCreditInfoCache().size() == 0){
175 | BeanUtils utils = new BeanUtils<>();
176 | GlobalCache.setCreditInfoCache(utils.
177 | getBeanMap(
178 | "credit.txt",
179 | CreditInfo.class));
180 | }
181 | HashMap map = new HashMap<>();
182 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
183 | map.putAll(schoolCardCache);
184 |
185 | Set set = map.keySet();
186 | for (Long key : set) {
187 | SchoolCard schoolCard = schoolCardCache.get(key);
188 | if (schoolCard.getCardNo().toString().equals(cardNo)){
189 | if (schoolCard.getLossFlag().equals(LossCode.YES.getValue())){
190 | return;
191 | }
192 | if (schoolCard.getDelFlag().equals(DelCode.YES.getValue())){
193 | return;
194 | }
195 |
196 | BigDecimal balance1 = schoolCard.getBalance();
197 | BigDecimal bigDecimal = balance1.add(new BigDecimal(balance));
198 | schoolCard.setBalance(bigDecimal);
199 | schoolCardCache.put(key,schoolCard);
200 |
201 | // 插入充值数据
202 | insertCredit(balance, schoolCard);
203 | return;
204 | }
205 | }
206 | }
207 |
208 | /**
209 | * 向充值表写入数据
210 | * @param balance
211 | * @param schoolCard
212 | */
213 | private static void insertCredit(String balance, SchoolCard schoolCard) {
214 | CreditInfo creditInfo = new CreditInfo();
215 | Long maxCreditId = GlobalCache.getMaxCreditId();
216 | if (maxCreditId == null){
217 | creditInfo.setCreditId(1L);
218 | }else {
219 | creditInfo.setCreditId(maxCreditId+1);
220 | }
221 | creditInfo.setCardNo(schoolCard.getCardNo());
222 | creditInfo.setCreditBalance(new BigDecimal(balance));
223 | creditInfo.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
224 |
225 | // 向缓存中插入
226 | // 创建新Map
227 | HashMap copyMap = new HashMap<>();
228 | copyMap.putAll(GlobalCache.getCreditInfoCache());
229 | copyMap.put(creditInfo.getCreditId(),creditInfo);
230 | GlobalCache.setCreditInfoCache(copyMap);
231 | }
232 |
233 | /**
234 | * 消费
235 | * @param cardNo
236 | * @param balance
237 | */
238 | public static void divBalance(String cardNo, String balance) {
239 | if (GlobalCache.getConsumeInfoCache().size() == 0){
240 | BeanUtils utils = new BeanUtils<>();
241 | Map conMap = utils.getBeanMap("consume.txt", ConsumeInfo.class);
242 | GlobalCache.setConsumeInfoCache(conMap);
243 | }
244 | HashMap map = new HashMap<>();
245 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
246 | map.putAll(schoolCardCache);
247 |
248 | Set set = map.keySet();
249 | for (Long key : set) {
250 | SchoolCard schoolCard = schoolCardCache.get(key);
251 | if (schoolCard.getCardNo().toString().equals(cardNo)){
252 | if (schoolCard.getLossFlag().equals(LossCode.YES.getValue())){
253 | return;
254 | }
255 | if (schoolCard.getDelFlag().equals(DelCode.YES.getValue())){
256 | return;
257 | }
258 |
259 | BigDecimal balance1 = schoolCard.getBalance();
260 | BigDecimal bigDecimal = balance1.subtract(new BigDecimal(balance));
261 | // 消费超过余额,返回
262 | if (bigDecimal.compareTo(BigDecimal.ZERO) == -1){
263 | GlobalCache.setWarn("本次消费超出卡中余额,请先充值");
264 | return;
265 | }
266 | schoolCard.setBalance(bigDecimal);
267 | schoolCardCache.put(key,schoolCard);
268 |
269 | // 向消费表写入数据
270 | insertConsume(balance, schoolCard);
271 | return;
272 | }
273 | }
274 | }
275 |
276 | private static void insertConsume(String balance, SchoolCard schoolCard) {
277 | ConsumeInfo consumeInfo = new ConsumeInfo();
278 | Long maxConsumeId = GlobalCache.getMaxConsumeId();
279 | if (maxConsumeId == null){
280 | consumeInfo.setConsumeId(1L);
281 | }else {
282 | consumeInfo.setConsumeId(maxConsumeId+1);
283 | }
284 | consumeInfo.setCardNo(schoolCard.getCardNo());
285 | consumeInfo.setConsumeBalance(new BigDecimal(balance));
286 | consumeInfo.setCreateTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
287 |
288 | // 向缓存中插入
289 | // 创建新Map
290 | HashMap copyMap = new HashMap<>();
291 | copyMap.putAll(GlobalCache.getConsumeInfoCache());
292 | copyMap.put(consumeInfo.getConsumeId(),consumeInfo);
293 | GlobalCache.setConsumeInfoCache(copyMap);
294 | }
295 | }
296 |
--------------------------------------------------------------------------------
/src/edu/school/card/page/CardManagerPage.java:
--------------------------------------------------------------------------------
1 | package edu.school.card.page;
2 |
3 | import edu.school.card.bean.ConsumeInfo;
4 | import edu.school.card.bean.CreditInfo;
5 | import edu.school.card.bean.SchoolCard;
6 | import edu.school.card.cache.GlobalCache;
7 | import edu.school.card.controller.SchoolCardController;
8 | import edu.school.card.enums.DelCode;
9 | import edu.school.card.frame.component.BaseFrame;
10 | import edu.school.card.frame.component.Layer;
11 | import edu.school.card.frame.util.BeanUtils;
12 | import edu.school.card.frame.util.RegexUtils;
13 |
14 | import javax.swing.*;
15 | import javax.swing.table.DefaultTableModel;
16 | import java.awt.*;
17 | import java.awt.event.MouseAdapter;
18 | import java.awt.event.MouseEvent;
19 | import java.awt.event.WindowAdapter;
20 | import java.awt.event.WindowEvent;
21 | import java.util.Arrays;
22 | import java.util.HashMap;
23 | import java.util.Map;
24 | import java.util.Set;
25 |
26 | /**
27 | * @date 2020/11/24
28 | */
29 | public class CardManagerPage extends BaseFrame {
30 |
31 | private Panel container;
32 |
33 | private JTable table;
34 |
35 | private String[] titles = {"卡编号","卡密码","卡余额","是否挂失","用户名"};
36 |
37 | /**
38 | * 开卡
39 | */
40 | // 卡编号
41 | private TextField startCardNoText;
42 | // 卡密码
43 | private TextField startCardPwdText;
44 | // 卡余额
45 | private TextField startCardYMoneyText;
46 | // 用户名
47 | private TextField startCardUserText;
48 | // 开卡按钮
49 | private Button startCardBtn;
50 |
51 | /**
52 | * 挂失卡
53 | */
54 | // 卡号
55 | private TextField disAbleCardNoText;
56 | // 挂失按钮
57 | private Button disAbleBtn;
58 |
59 | /**
60 | * 删除卡
61 | */
62 | // 卡号
63 | private TextField deleteCardNoText;
64 | // 删除按钮
65 | private Button deleteBtn;
66 |
67 | /**
68 | * 卡消费与卡充值
69 | */
70 | // 卡号
71 | private TextField addCardNoText;
72 | // 余额
73 | private TextField addYMoneyText;
74 | // 充值按钮
75 | private Button addBtn;
76 | // 消费按钮
77 | private Button decBtn;
78 |
79 | /**
80 | * 修改密码
81 | */
82 | // 卡号
83 | private TextField updateCardNoText;
84 | // 面
85 | private TextField updateCardPwdText;
86 | // 修改按钮
87 | private Button updateBtn;
88 |
89 | /**
90 | * 消费记录,充值记录
91 | */
92 | // 卡号
93 | private TextField hisCardNoText;
94 | // 充值按钮
95 | private Button hisAddBtn;
96 | // 消费按钮
97 | private Button hisDecBtn;
98 |
99 | /**
100 | * 查询
101 | */
102 | // 卡号
103 | private TextField queryCardNoText;
104 | // 用户名
105 | private TextField queryCardUserText;
106 | // 查询按钮
107 | private Button queryBtn;
108 |
109 | public void start(){
110 | init("校园卡管理系统",1000,800,true);
111 | // 创建组件
112 | createComponents();
113 | }
114 |
115 | private void createComponents() {
116 | // 创建容器
117 | createContainer();
118 | // 创建表格
119 | createTable();
120 | // 创建标题
121 | createTitle();
122 | // 后置处理器
123 | afterProsser();
124 | // 创建操作栏
125 | createTools();
126 | // 创建监听事件
127 | createListener();
128 | }
129 |
130 | /**
131 | * 监听事件
132 | */
133 | private void createListener() {
134 | // 创建开卡监听事件
135 | createStartCardListener();
136 | // 创建挂失卡监听事件
137 | createLossCardListener();
138 | // 创建删除卡监听事件
139 | createDelCardListener();
140 | // 创建修改卡密码监听事件
141 | createUpdatePwdListener();
142 | // 创建查询卡信息事件
143 | createQuerySchoolCardListener();
144 | // 监听充值
145 | createInsertBalanceListener();
146 | // 监听消费
147 | createDivBalanceListener();
148 | // 监听充值记录
149 | createInsertHistory();
150 | // 监听消费记录
151 | createDivHistory();
152 | }
153 |
154 | private void createDivHistory() {
155 | hisDecBtn.addMouseListener(new MouseAdapter() {
156 | @Override
157 | public void mouseClicked(MouseEvent e) {
158 | String cardNo = hisCardNoText.getText().trim();
159 | if (alert(cardNo,"卡编号不能为空")){
160 | return;
161 | }
162 | // 查询编号是否已存在
163 | if (alert2(cardNo,"卡编号不存在,请重新输入", GlobalCache.getSchoolCardCache())){
164 | return;
165 | }
166 |
167 | // 查询消费记录
168 | getDivHistory(cardNo);
169 | }
170 | });
171 | }
172 |
173 | private void getDivHistory(String cardNo) {
174 | int count = 0;
175 | if (GlobalCache.getConsumeInfoCache().size() == 0){
176 | BeanUtils utils = new BeanUtils<>();
177 | GlobalCache.setConsumeInfoCache(utils.
178 | getBeanMap(
179 | "consume.txt",
180 | ConsumeInfo.class));
181 | }
182 |
183 | HashMap map = new HashMap<>();
184 | // 判断卡号是否已被删除,删除则返回
185 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
186 | Set> entries = schoolCardCache.entrySet();
187 | for (Map.Entry entry : entries) {
188 | SchoolCard schoolCard = entry.getValue();
189 | if (schoolCard.getCardNo().toString().equals(cardNo)){
190 | if (schoolCard.getDelFlag().equals(DelCode.YES.getValue())){
191 | alert("该卡号已被删除,不可充值查询记录");
192 | return;
193 | }
194 |
195 | // 查询
196 | Map consumeInfoCache = GlobalCache.getConsumeInfoCache();
197 | Set> es = consumeInfoCache.entrySet();
198 | for (Map.Entry e : es) {
199 | ConsumeInfo consumeInfo = e.getValue();
200 | if (consumeInfo.getCardNo().toString().equals(cardNo)){
201 | map.put(Long.parseLong(String.valueOf(count)),consumeInfo);
202 | count++;
203 | }
204 | }
205 | break;
206 | }
207 | }
208 |
209 |
210 | Object[][] data = new Object[map.size()][4];
211 | for (int i = 0; i < data.length; i++) {
212 | Object[] datum = data[i];
213 | ConsumeInfo consumeInfo = map.get(Long.parseLong(String.valueOf(i)));
214 | for (int j = 0; j < datum.length; j++) {
215 | if (j == 0){
216 | data[i][j] = consumeInfo.getConsumeId();
217 | continue;
218 | }
219 | if (j == 1){
220 | data[i][j] = consumeInfo.getCardNo();
221 | continue;
222 | }
223 | if (j == 2){
224 | data[i][j] = consumeInfo.getConsumeBalance();
225 | continue;
226 | }
227 | if (j == 3){
228 | data[i][j] = consumeInfo.getCreateTime();
229 | }
230 | }
231 | }
232 |
233 | String[] title = {"消费编号","卡编号","消费金额","消费时间"};
234 | table.setModel(new DefaultTableModel(data,title));
235 | clearInsertHistory();
236 | }
237 |
238 | private void createInsertHistory() {
239 | hisAddBtn.addMouseListener(new MouseAdapter() {
240 | @Override
241 | public void mouseClicked(MouseEvent e) {
242 | String cardNo = hisCardNoText.getText().trim();
243 | if (alert(cardNo,"卡编号不能为空")){
244 | return;
245 | }
246 | // 查询编号是否已存在
247 | if (alert2(cardNo,"卡编号不存在,请重新输入", GlobalCache.getSchoolCardCache())){
248 | return;
249 | }
250 |
251 | // 查询充值记录
252 | getInsertHistory(cardNo);
253 | }
254 | });
255 | }
256 |
257 | private void getInsertHistory(String cardNo) {
258 | int count = 0;
259 | BeanUtils utils = new BeanUtils<>();
260 | if (GlobalCache.getCreditInfoCache().size() == 0){
261 | GlobalCache.setCreditInfoCache(utils.
262 | getBeanMap(
263 | "credit.txt",
264 | CreditInfo.class));
265 | }
266 |
267 | HashMap map = new HashMap<>();
268 | // 判断卡号是否已被删除,删除则返回
269 | Map schoolCardCache = GlobalCache.getSchoolCardCache();
270 | Set> entries = schoolCardCache.entrySet();
271 | for (Map.Entry entry : entries) {
272 | SchoolCard schoolCard = entry.getValue();
273 | if (schoolCard.getCardNo().toString().equals(cardNo)){
274 | if (schoolCard.getDelFlag().equals(DelCode.YES.getValue())){
275 | alert("该卡号已被删除,不可充值查询记录");
276 | return;
277 | }
278 |
279 | // 查询
280 | Map creditInfoCache = GlobalCache.getCreditInfoCache();
281 | Set> es = creditInfoCache.entrySet();
282 | for (Map.Entry e : es) {
283 | CreditInfo creditInfo = e.getValue();
284 | if (creditInfo.getCardNo().toString().equals(cardNo)){
285 | map.put(Long.parseLong(String.valueOf(count)),creditInfo);
286 | count++;
287 | }
288 | }
289 | break;
290 | }
291 | }
292 |
293 | Object[][] data = new Object[map.size()][4];
294 | for (int i = 0; i < data.length; i++) {
295 | Object[] datum = data[i];
296 | CreditInfo creditInfo = map.get(Long.parseLong(String.valueOf(i)));
297 | for (int j = 0; j < datum.length; j++) {
298 | if (j == 0){
299 | data[i][j] = creditInfo.getCreditId();
300 | continue;
301 | }
302 | if (j == 1){
303 | data[i][j] = creditInfo.getCardNo();
304 | continue;
305 | }
306 | if (j == 2){
307 | data[i][j] = creditInfo.getCreditBalance();
308 | continue;
309 | }
310 | if (j == 3){
311 | data[i][j] = creditInfo.getCreateTime();
312 | }
313 | }
314 | }
315 |
316 | String[] title = {"充值编号","卡编号","充值金额","充值时间"};
317 | table.setModel(new DefaultTableModel(data,title));
318 | clearInsertHistory();
319 | }
320 |
321 | // /**
322 | // * 获取开卡用户信息
323 | // */
324 | // private Object[][] getCreditMap() {
325 | // BeanUtils utils = new BeanUtils<>();
326 | // if (GlobalCache.getSchoolCardCache().size() == 0){
327 | // GlobalCache.setSchoolCardCache(utils.
328 | // getBeanMap(
329 | // "schoolcard.txt",
330 | // SchoolCard.class));
331 | // }
332 | // Object[][] data = getObjects();
333 | // return data;
334 | // }
335 |
336 | private void clearInsertHistory() {
337 | hisCardNoText.setText(null);
338 | }
339 |
340 | private void createDivBalanceListener() {
341 | decBtn.addMouseListener(new MouseAdapter() {
342 | @Override
343 | public void mouseClicked(MouseEvent e) {
344 | String cardNo = addCardNoText.getText().trim();
345 | if (alert(cardNo,"卡编号不能为空")){
346 | return;
347 | }
348 | // 查询编号是否已存在
349 | if (alert2(cardNo,"卡编号不存在,请重新输入", GlobalCache.getSchoolCardCache())){
350 | return;
351 | }
352 |
353 | String balance = addYMoneyText.getText();
354 | if (alert(balance,"卡余额不能为空")){
355 | return;
356 | }
357 | if (balance.contains("-")){
358 | alert("消费不能为负数");
359 | return;
360 | }
361 |
362 | try {
363 | SchoolCardController.divBalance(cardNo,balance);
364 | }catch (Exception ex){
365 | ex.printStackTrace();
366 | alert("警告!!! 请输入正确的金额");
367 | return;
368 | }
369 |
370 | if (GlobalCache.getWarn() != null){
371 | alert(GlobalCache.getWarn());
372 | return;
373 | }
374 |
375 | // 创建表格
376 | table.setModel(new DefaultTableModel(getSchoolCardMap(),titles));
377 | // 清除数据
378 | clearInsertBalance();
379 | }
380 | });
381 | }
382 |
383 | private void createInsertBalanceListener() {
384 | addBtn.addMouseListener(new MouseAdapter() {
385 | @Override
386 | public void mouseClicked(MouseEvent e) {
387 | String cardNo = addCardNoText.getText().trim();
388 | if (alert(cardNo,"卡编号不能为空")){
389 | return;
390 | }
391 | // 查询编号是否已存在
392 | if (alert2(cardNo,"卡编号不存在,请重新输入", GlobalCache.getSchoolCardCache())){
393 | return;
394 | }
395 |
396 | String balance = addYMoneyText.getText();
397 | if (alert(balance,"卡余额不能为空")){
398 | return;
399 | }
400 | if (balance.contains("-")){
401 | alert("充值不能为负数");
402 | return;
403 | }
404 |
405 | try {
406 | SchoolCardController.insertBalance(cardNo,balance);
407 | }catch (Exception ex){
408 | ex.printStackTrace();
409 | alert("警告!!! 请输入正确的金额");
410 | return;
411 | }
412 |
413 | // 创建表格
414 | table.setModel(new DefaultTableModel(getSchoolCardMap(),titles));
415 | // 清除数据
416 | clearInsertBalance();
417 | }
418 | });
419 | }
420 |
421 | private void clearInsertBalance() {
422 | addCardNoText.setText(null);
423 | addYMoneyText.setText(null);
424 | }
425 |
426 | private void createQuerySchoolCardListener() {
427 | queryBtn.addMouseListener(new MouseAdapter() {
428 | @Override
429 | public void mouseClicked(MouseEvent e) {
430 | String cardNo = queryCardNoText.getText();
431 | String cardUser = queryCardUserText.getText();
432 |
433 | if (cardNo.equals("")&&cardUser.equals("")){
434 | // 显示全部
435 | // 创建表格
436 | table.setModel(new DefaultTableModel(getSchoolCardMap(),titles));
437 | // 清除数据
438 | clearQueryCard();
439 | return;
440 | }else if ((!cardNo.equals(""))&&cardUser.equals("")){
441 | // 编号不为空时
442 | // 查询编号是否已存在
443 | if (alert2(cardNo,"卡编号不存在,请重新输入", GlobalCache.getSchoolCardCache())){
444 | return;
445 | }
446 |
447 | }else if (cardNo.equals("")&&(!cardUser.equals(""))){
448 | // 用户不为空时
449 | // 查询用户名是否已存在
450 | if (alertNoUser(cardUser,"卡用户名不存在,请修改用户名", GlobalCache.getSchoolCardCache())){
451 | return;
452 | }
453 | }
454 | // 查询校园卡信息
455 | try {
456 | SchoolCardController.querySchoolCard(cardNo,cardUser);
457 | }catch (Exception ex){
458 | ex.printStackTrace();
459 | alert("警告!!!出现异常了");
460 | return;
461 | }
462 |
463 | if (GlobalCache.getQueryCurrentSchoolCard() == null){
464 | alert("查无此人!!!");
465 | return;
466 | }
467 |
468 | // 创建表格
469 | table.setModel(new DefaultTableModel(getQueryCurrentSchoolCard(),titles));
470 | // 清除数据
471 | clearQueryCard();
472 | }
473 | });
474 | }
475 |
476 | private Object[][] getQueryCurrentSchoolCard() {
477 | SchoolCard schoolCard = GlobalCache.getQueryCurrentSchoolCard();
478 | Object[][] data = new Object[1][5];
479 | for (int i = 0; i < data.length; i++) {
480 | Object[] datum = data[i];
481 | for (int j = 0; j < datum.length; j++) {
482 | if (j == 0){
483 | data[i][j] = schoolCard.getCardNo();
484 | continue;
485 | }
486 | if (j == 1){
487 | data[i][j] = schoolCard.getCardPwd();
488 | continue;
489 | }
490 | if (j == 2){
491 | data[i][j] = schoolCard.getBalance();
492 | continue;
493 | }
494 | if (j == 3){
495 | data[i][j] = schoolCard.getLossFlag();
496 | continue;
497 | }
498 | if (j == 4){
499 | data[i][j] = schoolCard.getUserName();
500 | }
501 | }
502 | }
503 | return data;
504 | }
505 |
506 | private void clearQueryCard() {
507 | queryCardUserText.setText(null);
508 | queryCardNoText.setText(null);
509 | }
510 |
511 | private void createUpdatePwdListener() {
512 | updateBtn.addMouseListener(new MouseAdapter() {
513 | @Override
514 | public void mouseClicked(MouseEvent e) {
515 | // 获取卡用户名
516 | String cardNo = updateCardNoText.getText().trim();
517 | if (alert(cardNo,"卡编号不能为空")){
518 | return;
519 | }
520 | // 查询用户名是否已存在
521 | if (alert2(cardNo,"卡编号不存在,请重新输入", GlobalCache.getSchoolCardCache())){
522 | return;
523 | }
524 |
525 | // 获取密码
526 | String cardPwd = updateCardPwdText.getText().trim();
527 | if (alert(cardPwd, "卡密码不能为空")){
528 | return;
529 | }
530 | if (alert(cardPwd, "卡密码长度不能小于6位",6)){
531 | return;
532 | }
533 | if (alert("卡密码只能为数字或英文", RegexUtils.isNumberOrEnglish(cardPwd))){
534 | return;
535 | }
536 |
537 | // 修改卡密码
538 | try {
539 | SchoolCardController.updateSchoolCard(cardNo,cardPwd);
540 | }catch (Exception ex){
541 | ex.printStackTrace();
542 | alert("警告!!!出现异常了");
543 | return;
544 | }
545 |
546 | // 创建表格
547 | table.setModel(new DefaultTableModel(getSchoolCardMap(),titles));
548 | // 清除数据
549 | clearUpdateCard();
550 | }
551 | });
552 | }
553 |
554 | private void clearUpdateCard() {
555 | updateCardNoText.setText(null);
556 | updateCardPwdText.setText(null);
557 | }
558 |
559 | /**
560 | * 删除
561 | */
562 | private void createDelCardListener() {
563 | deleteBtn.addMouseListener(new MouseAdapter() {
564 | @Override
565 | public void mouseClicked(MouseEvent e) {
566 | String cardNo = deleteCardNoText.getText().trim();
567 | if (alert(cardNo, "卡编号不能为空")){
568 | return;
569 | }
570 | if (alert2(cardNo, "卡编号不存在,请重新输入",GlobalCache.getSchoolCardCache())){
571 | return;
572 | }
573 |
574 | // 删除
575 | try {
576 | SchoolCardController.delSchoolCard(cardNo);
577 | }catch (Exception ex){
578 | ex.printStackTrace();
579 | alert("警告!!!出现异常了");
580 | return;
581 | }
582 |
583 | // 创建表格
584 | table.setModel(new DefaultTableModel(getSchoolCardMap(),titles));
585 | // 清除数据
586 | clearDelCard();
587 | }
588 | });
589 | }
590 |
591 | private void clearDelCard() {
592 | deleteCardNoText.setText(null);
593 | }
594 |
595 | /**
596 | * 挂失
597 | */
598 | private void createLossCardListener() {
599 | disAbleBtn.addMouseListener(new MouseAdapter() {
600 | @Override
601 | public void mouseClicked(MouseEvent e) {
602 | String cardNo = disAbleCardNoText.getText().trim();
603 | if (alert(cardNo, "卡编号不能为空")){
604 | return;
605 | }
606 | if (alert2(cardNo, "卡编号不存在,请重新输入",GlobalCache.getSchoolCardCache())){
607 | return;
608 | }
609 |
610 | // 挂失
611 | try {
612 | SchoolCardController.lossSchoolCard(cardNo);
613 | }catch (Exception ex){
614 | ex.printStackTrace();
615 | alert("警告!!!出现异常了");
616 | return;
617 | }
618 |
619 | // 创建表格
620 | table.setModel(new DefaultTableModel(getSchoolCardMap(),titles));
621 | // 清除数据
622 | clearLossCard();
623 | }
624 | });
625 | }
626 |
627 | private void clearLossCard() {
628 | disAbleCardNoText.setText(null);
629 | }
630 |
631 | /**
632 | * 开卡
633 | */
634 | private void createStartCardListener() {
635 | startCardBtn.addMouseListener(new MouseAdapter() {
636 | @Override
637 | public void mouseClicked(MouseEvent e) {
638 | // 获取卡密码
639 | String pwd = startCardPwdText.getText().trim();
640 | if (alert(pwd, "卡密码不能为空")){
641 | return;
642 | }
643 | if (alert(pwd, "卡密码长度不能小于6位",6)){
644 | return;
645 | }
646 | if (alert("卡密码只能为数字或英文", RegexUtils.isNumberOrEnglish(pwd))){
647 | return;
648 | }
649 | // 获取卡余额
650 | String balance = startCardYMoneyText.getText().trim();
651 | if (alert(balance,"卡余额不能为空")){
652 | return;
653 | }
654 | // 获取卡用户名
655 | String username = startCardUserText.getText().trim();
656 | if (alert(username,"卡用户名不能为空")){
657 | return;
658 | }
659 |
660 | // 查询用户名是否已存在
661 | if (alert(username,"卡用户名已存在,请修改用户名", GlobalCache.getSchoolCardCache())){
662 | return;
663 | }
664 |
665 | // 插入校园卡数据
666 | try {
667 | SchoolCardController.insertSchoolCard(pwd,balance,username);
668 | }catch (Exception ex){
669 | alert("警告!!!出现异常了");
670 | return;
671 | }
672 | // 创建表格
673 | table.setModel(new DefaultTableModel(getSchoolCardMap(),titles));
674 | // 清除数据
675 | clearStartCard();
676 | }
677 | });
678 | }
679 |
680 | private void clearStartCard() {
681 | startCardPwdText.setText(null);
682 | startCardYMoneyText.setText(null);
683 | startCardUserText.setText(null);
684 | }
685 |
686 | public boolean alert(String value,String content){
687 | if ("".equals(value)){
688 | // 禁用组件
689 | enableComponents(false);
690 | // 用户名不能为空
691 | Layer.alert(content);
692 | Layer.frame.addWindowListener(new WindowAdapter() {
693 | @Override
694 | public void windowClosing(WindowEvent e) {
695 | e.getWindow().setVisible(false);
696 | enableComponents(true);
697 | }
698 | });
699 | return true;
700 | }
701 | return false;
702 | }
703 |
704 | public void alert(String content){
705 | // 禁用组件
706 | enableComponents(false);
707 | // 用户名不能为空
708 | Layer.alert(content);
709 | Layer.frame.addWindowListener(new WindowAdapter() {
710 | @Override
711 | public void windowClosing(WindowEvent e) {
712 | e.getWindow().setVisible(false);
713 | enableComponents(true);
714 | }
715 | });
716 | }
717 |
718 | public boolean alert(String value,String content,int length){
719 | if (value.length() < length){
720 | // 禁用组件
721 | enableComponents(false);
722 | // 用户名不能为空
723 | Layer.alert(content);
724 | Layer.frame.addWindowListener(new WindowAdapter() {
725 | @Override
726 | public void windowClosing(WindowEvent e) {
727 | e.getWindow().setVisible(false);
728 | enableComponents(true);
729 | }
730 | });
731 | return true;
732 | }
733 | return false;
734 | }
735 |
736 | public boolean alert(String value,String content, Map map){
737 | boolean flag = false;
738 | Set> entries = map.entrySet();
739 | for (Map.Entry entry : entries) {
740 | SchoolCard schoolCard = entry.getValue();
741 | if (schoolCard.getUserName().equals(value)){
742 | flag = true;
743 | break;
744 | }
745 | }
746 |
747 | if (flag){
748 | // 禁用组件
749 | enableComponents(false);
750 | // 用户名不能为空
751 | Layer.alert(content);
752 | Layer.frame.addWindowListener(new WindowAdapter() {
753 | @Override
754 | public void windowClosing(WindowEvent e) {
755 | e.getWindow().setVisible(false);
756 | enableComponents(true);
757 | }
758 | });
759 | return true;
760 | }
761 | return false;
762 | }
763 |
764 | public boolean alertNoUser(String value,String content, Map map){
765 | boolean flag = true;
766 | Set> entries = map.entrySet();
767 | for (Map.Entry entry : entries) {
768 | SchoolCard schoolCard = entry.getValue();
769 | if (schoolCard.getUserName().equals(value)){
770 | flag = false;
771 | break;
772 | }
773 | }
774 |
775 | if (flag){
776 | // 禁用组件
777 | enableComponents(false);
778 | // 用户名不能为空
779 | Layer.alert(content);
780 | Layer.frame.addWindowListener(new WindowAdapter() {
781 | @Override
782 | public void windowClosing(WindowEvent e) {
783 | e.getWindow().setVisible(false);
784 | enableComponents(true);
785 | }
786 | });
787 | return true;
788 | }
789 | return false;
790 | }
791 |
792 | public boolean alert2(String value,String content, Map map){
793 | boolean flag = false;
794 | Set> entries = map.entrySet();
795 | for (Map.Entry entry : entries) {
796 | SchoolCard schoolCard = entry.getValue();
797 | if (schoolCard.getCardNo().toString().equals(value)){
798 | flag = true;
799 | break;
800 | }
801 | }
802 |
803 | if (!flag){
804 | // 禁用组件
805 | enableComponents(false);
806 | // 用户名不能为空
807 | Layer.alert(content);
808 | Layer.frame.addWindowListener(new WindowAdapter() {
809 | @Override
810 | public void windowClosing(WindowEvent e) {
811 | e.getWindow().setVisible(false);
812 | enableComponents(true);
813 | }
814 | });
815 | return true;
816 | }
817 | return false;
818 | }
819 |
820 | public boolean alert(String content,boolean flag){
821 | if (!flag){
822 | // 禁用组件
823 | enableComponents(false);
824 | // 用户名不能为空
825 | Layer.alert(content);
826 | Layer.frame.addWindowListener(new WindowAdapter() {
827 | @Override
828 | public void windowClosing(WindowEvent e) {
829 | e.getWindow().setVisible(false);
830 | enableComponents(true);
831 | }
832 | });
833 | return true;
834 | }
835 | return false;
836 | }
837 |
838 | private void enableComponents(boolean flag) {
839 | startCardPwdText.setEnabled(flag);
840 | startCardYMoneyText.setEnabled(flag);
841 | startCardUserText.setEnabled(flag);
842 | startCardBtn.setEnabled(flag);
843 |
844 | disAbleCardNoText.setEnabled(flag);
845 | disAbleBtn.setEnabled(flag);
846 |
847 | deleteCardNoText.setEnabled(flag);
848 | deleteBtn.setEnabled(flag);
849 |
850 | addCardNoText.setEnabled(flag);
851 | addYMoneyText.setEnabled(flag);
852 | addBtn.setEnabled(flag);
853 | decBtn.setEnabled(flag);
854 |
855 | updateCardNoText.setEnabled(flag);
856 | updateCardPwdText.setEnabled(flag);
857 | updateBtn.setEnabled(flag);
858 |
859 | hisCardNoText.setEnabled(flag);
860 | hisAddBtn.setEnabled(flag);
861 | hisDecBtn.setEnabled(flag);
862 |
863 | queryCardNoText.setEnabled(flag);
864 | queryCardUserText.setEnabled(flag);
865 | queryBtn.setEnabled(flag);
866 | }
867 |
868 | private void createTools() {
869 | // 创建卡编号标签
870 | createLabel();
871 | // 创建开卡行
872 | createCardFirstRow();
873 | // 创建挂失行
874 | createCardSecondRow();
875 | // 创建删除行
876 | createCardThirdRow();
877 | // 创建消费充值行
878 | createCardFourRow();
879 | // 创建修改密码行
880 | createCardFifthRow();
881 | // 创建充值消费记录行
882 | createCardSixRow();
883 | // 创建查询行
884 | createCardSevenRow();
885 | }
886 |
887 | private void createCardSevenRow() {
888 | queryCardNoText = new TextField();
889 | queryCardNoText.setBounds(10,660,160,30);
890 | queryCardNoText.setFont(new Font("宋体",Font.BOLD,16));
891 |
892 | queryCardUserText = new TextField();
893 | queryCardUserText.setBounds(610,660,160,30);
894 | queryCardUserText.setFont(new Font("宋体",Font.BOLD,16));
895 |
896 | queryBtn = new Button("查询");
897 | queryBtn.setBounds(825,660,160,30);
898 | queryBtn.setFont(new Font("宋体",Font.BOLD,16));
899 |
900 | container.add(queryBtn);
901 | container.add(queryCardNoText);
902 | container.add(queryCardUserText);
903 | }
904 |
905 | private void createCardSixRow() {
906 | hisCardNoText = new TextField();
907 | hisCardNoText.setBounds(10,620,160,30);
908 | hisCardNoText.setFont(new Font("宋体",Font.BOLD,16));
909 |
910 | hisAddBtn = new Button("充值记录");
911 | hisAddBtn.setBounds(610,620,160,30);
912 | hisAddBtn.setFont(new Font("宋体",Font.BOLD,16));
913 |
914 | hisDecBtn = new Button("消费记录");
915 | hisDecBtn.setBounds(825,620,160,30);
916 | hisDecBtn.setFont(new Font("宋体",Font.BOLD,16));
917 |
918 | container.add(hisDecBtn);
919 | container.add(hisAddBtn);
920 | container.add(hisCardNoText);
921 | }
922 |
923 | private void createCardFifthRow() {
924 | updateCardNoText = new TextField();
925 | updateCardNoText.setBounds(10,580,160,30);
926 | updateCardNoText.setFont(new Font("宋体",Font.BOLD,16));
927 |
928 | updateCardPwdText = new TextField();
929 | updateCardPwdText.setBounds(210,580,160,30);
930 | updateCardPwdText.setFont(new Font("宋体",Font.BOLD,16));
931 |
932 | updateBtn = new Button("修改密码");
933 | updateBtn.setBounds(825,580,160,30);
934 | updateBtn.setFont(new Font("宋体",Font.BOLD,16));
935 |
936 | container.add(updateBtn);
937 | container.add(updateCardNoText);
938 | container.add(updateCardPwdText);
939 | }
940 |
941 | private void createCardFourRow() {
942 | addCardNoText = new TextField();
943 | addCardNoText.setBounds(10,540,160,30);
944 | addCardNoText.setFont(new Font("宋体",Font.BOLD,16));
945 |
946 | addYMoneyText = new TextField();
947 | addYMoneyText.setBounds(410,540,160,30);
948 | addYMoneyText.setFont(new Font("宋体",Font.BOLD,16));
949 |
950 | addBtn = new Button("卡充值");
951 | addBtn.setBounds(610,540,160,30);
952 | addBtn.setFont(new Font("宋体",Font.BOLD,16));
953 |
954 | decBtn = new Button("卡消费");
955 | decBtn.setBounds(825,540,160,30);
956 | decBtn.setFont(new Font("宋体",Font.BOLD,16));
957 |
958 | container.add(addCardNoText);
959 | container.add(addYMoneyText);
960 | container.add(addBtn);
961 | container.add(decBtn);
962 | }
963 |
964 | private void createCardThirdRow() {
965 | deleteCardNoText = new TextField();
966 | deleteCardNoText.setBounds(10,500,160,30);
967 | deleteCardNoText.setFont(new Font("宋体",Font.BOLD,16));
968 |
969 | deleteBtn = new Button("删除");
970 | deleteBtn.setBounds(825,500,160,30);
971 | deleteBtn.setFont(new Font("宋体",Font.BOLD,16));
972 |
973 | container.add(deleteBtn);
974 | container.add(deleteCardNoText);
975 | }
976 |
977 | /**
978 | * 挂失
979 | */
980 | private void createCardSecondRow() {
981 | disAbleCardNoText = new TextField();
982 | disAbleCardNoText.setBounds(10,460,160,30);
983 | disAbleCardNoText.setFont(new Font("宋体",Font.BOLD,16));
984 |
985 | disAbleBtn = new Button("挂失");
986 | disAbleBtn.setBounds(825,460,160,30);
987 | disAbleBtn.setFont(new Font("宋体",Font.BOLD,16));
988 | container.add(disAbleBtn);
989 | container.add(disAbleCardNoText);
990 | }
991 |
992 | /**
993 | * 开卡
994 | */
995 | private void createCardFirstRow() {
996 | startCardNoText = new TextField();
997 | startCardNoText.setBounds(10,420,160,30);
998 | startCardNoText.setFont(new Font("宋体",Font.BOLD,16));
999 |
1000 | startCardPwdText = new TextField();
1001 | startCardPwdText.setBounds(210,420,160,30);
1002 | startCardPwdText.setFont(new Font("宋体",Font.BOLD,16));
1003 |
1004 | startCardYMoneyText = new TextField();
1005 | startCardYMoneyText.setBounds(410,420,160,30);
1006 | startCardYMoneyText.setFont(new Font("宋体",Font.BOLD,16));
1007 |
1008 | startCardUserText = new TextField();
1009 | startCardUserText.setBounds(610,420,160,30);
1010 | startCardUserText.setFont(new Font("宋体",Font.BOLD,16));
1011 |
1012 | startCardBtn = new Button("开卡");
1013 | startCardBtn.setBounds(825,420,160,30);
1014 | startCardBtn.setFont(new Font("宋体",Font.BOLD,16));
1015 | container.add(startCardBtn);
1016 |
1017 | container.add(startCardNoText);
1018 | container.add(startCardPwdText);
1019 | container.add(startCardYMoneyText);
1020 | container.add(startCardUserText);
1021 | container.add(startCardBtn);
1022 | }
1023 |
1024 | private void createLabel() {
1025 | Label cardNo = new Label("卡编号", Label.RIGHT);
1026 | cardNo.setBounds(50,380,65,40);
1027 | cardNo.setFont(new Font("宋体",Font.BOLD,16));
1028 |
1029 | Label cardPwd = new Label("卡密码", Label.RIGHT);
1030 | cardPwd.setBounds(250,380,65,40);
1031 | cardPwd.setFont(new Font("宋体",Font.BOLD,16));
1032 |
1033 | Label cardYMoney = new Label("卡余额", Label.RIGHT);
1034 | cardYMoney.setBounds(450,380,65,40);
1035 | cardYMoney.setFont(new Font("宋体",Font.BOLD,16));
1036 |
1037 | Label cardUser = new Label("用户名", Label.RIGHT);
1038 | cardUser.setBounds(650,380,65,40);
1039 | cardUser.setFont(new Font("宋体",Font.BOLD,16));
1040 |
1041 | Label cardOper = new Label("操作", Label.RIGHT);
1042 | cardOper.setBounds(860,380,65,40);
1043 | cardOper.setFont(new Font("宋体",Font.BOLD,16));
1044 |
1045 | container.add(cardNo);
1046 | container.add(cardPwd);
1047 | container.add(cardYMoney);
1048 | container.add(cardUser);
1049 | container.add(cardOper);
1050 | }
1051 |
1052 | private void createTable() {
1053 | Object[][] datas = getSchoolCardMap();;
1054 | // titles = {"卡编号","卡密码","卡余额","是否挂失","用户名"};
1055 | table = new JTable(datas, titles);
1056 | table.setBorder(BorderFactory.createLineBorder(Color.GRAY,1));
1057 | table.setVisible(true);
1058 | table.setBounds(0,0,980,300);
1059 | table.getTableHeader().setPreferredSize(new Dimension(table.getWidth(),50));
1060 | table.setRowHeight(30);
1061 | table.getTableHeader().setFont(new Font("宋体",Font.BOLD,16));
1062 | table.setFont(new Font("宋体",Font.BOLD,16));
1063 | table.setEnabled(false);
1064 |
1065 | JScrollPane panel = new JScrollPane();
1066 | panel.setBorder(BorderFactory.createLineBorder(Color.GRAY,1));
1067 | panel.setBounds(10,80,980,300);
1068 | panel.setVisible(true);
1069 |
1070 | panel.setViewportView(table);
1071 | container.add(panel);
1072 | container.setBackground(table.getTableHeader().getBackground());
1073 | }
1074 |
1075 | /**
1076 | * 获取开卡用户信息
1077 | */
1078 | private Object[][] getSchoolCardMap() {
1079 | BeanUtils utils = new BeanUtils<>();
1080 | if (GlobalCache.getSchoolCardCache().size() == 0){
1081 | GlobalCache.setSchoolCardCache(utils.
1082 | getBeanMap(
1083 | "schoolcard.txt",
1084 | SchoolCard.class));
1085 | }
1086 | Object[][] data = getObjects();
1087 | return data;
1088 | }
1089 |
1090 | private Object[][] getObjects() {
1091 | Map notDelSchoolMap = GlobalCache.getNotDelSchoolMap();
1092 | Object[][] data = new Object[notDelSchoolMap.size()][5];
1093 | // 数据重新整理
1094 | HashMap map = getDistinctSchoolCardMap(notDelSchoolMap);
1095 | for (int i = 0; i < data.length; i++) {
1096 | Object[] datum = data[i];
1097 | SchoolCard schoolCard = map.get(Long.parseLong(String.valueOf(i)));
1098 | for (int j = 0; j < datum.length; j++) {
1099 | if (j == 0){
1100 | data[i][j] = schoolCard.getCardNo();
1101 | continue;
1102 | }
1103 | if (j == 1){
1104 | data[i][j] = schoolCard.getCardPwd();
1105 | continue;
1106 | }
1107 | if (j == 2){
1108 | data[i][j] = schoolCard.getBalance();
1109 | continue;
1110 | }
1111 | if (j == 3){
1112 | data[i][j] = schoolCard.getLossFlag();
1113 | continue;
1114 | }
1115 | if (j == 4){
1116 | data[i][j] = schoolCard.getUserName();
1117 | }
1118 | }
1119 | }
1120 | return data;
1121 | }
1122 |
1123 | private HashMap getDistinctSchoolCardMap(Map schoolCardCache) {
1124 | HashMap map = new HashMap<>();
1125 | Set set = schoolCardCache.keySet();
1126 | Object[] obj = set.toArray();
1127 | Arrays.sort(obj);
1128 | long count = 0;
1129 | for (int i = 0; i < obj.length; i++) {
1130 | Object key = obj[i];
1131 | map.put(count,schoolCardCache.get(key));
1132 | count ++;
1133 | }
1134 | return map;
1135 | }
1136 |
1137 | private void createContainer() {
1138 | container = new Panel();
1139 | container.setLayout(null);
1140 | container.setSize(new Dimension(1000,800));
1141 | container.setVisible(true);
1142 | }
1143 |
1144 | private void afterProsser() {
1145 | this.add(container);
1146 | }
1147 |
1148 | private void createTitle() {
1149 | Label title = new Label("校园卡列表", Label.CENTER);
1150 | title.setBounds(0,20,1000,60);
1151 | title.setFont(new Font("宋体",Font.BOLD,25));
1152 | container.add(title);
1153 | }
1154 | }
1155 |
--------------------------------------------------------------------------------