1 import java.io.*;
2 import java.rmi.AccessException;
3
4
5 //txt存储格式 账号,密码,级别,金额,状态
6 class Rootx {
7 String username;
8 String password;
9 String level;
10 String money;
11 String stauts;
12 BufferedReader input;
13 String s1 = System.getProperty("user.dir") + "\\user_info.txt";
14 String s2 = System.getProperty("user.dir") + "\\user_info2.txt";
15
16 //初始化信息
17 public Rootx(String[] args) throws IOException {
18 this.username = args[0]; // id
19 this.password = args[1]; // 密码
20 this.level = args[2];// 级别
21 this.money = args[3]; // 金额
22 this.stauts = args[4]; // 状态
23 // System.out.printf("%s %s %s %s %s ", this.username, this.password, this.level, this.money, this.stauts); //展示信息
24 System.out.println("1: 添加新成员, 2: 冻结账号, 3: 解冻账号, 4: 查询所有用户信息, 5: 查询指定用户信息, 6: 退出系统 ");
25
26 this.input = new BufferedReader(new InputStreamReader(System.in));
27 String chose = (String) input.readLine();
28 while (!chose.toUpperCase().equals("6")) {
29 switch (chose) {
30 case "1":
31 this.add();
32 break;
33 case "2":
34 this.dongjie();
35 break;
36 case "3":
37 this.jiedong();
38 break;
39 case "4":
40 this.all();
41 break;
42 case "5":
43 this.geren();
44 break;
45 case "6":
46 break;
47 }
48 System.out.println("1: 添加新成员, 2: 冻结账号, 3: 解冻账号, 4: 查询所有用户信息, 5: 查询指定用户信息, 6: 退出系统 ");
49 chose = (String) input.readLine();
50 }
51 // input.close();
52 }
53
54
55 public void add() throws IOException {
56 File f1 = new File(s1);
57 System.out.println("输入新账号: ");
58 BufferedWriter txt2 = new BufferedWriter(new FileWriter(f1, true));
59 String al = new BufferedReader(new InputStreamReader(System.in)).readLine();
60 String info = al + ",123,1,5000,1";
61 txt2.write(info);
62 try {
63 txt2.close();
64 } catch (IOException x) {
65 System.out.println("关闭报错!!!!");
66 }
67 System.out.println(al + " 添加成功! ");
68
69 }
70
71 public void dongjie() throws IOException {
72 System.out.println("输入冻结的账号: ");
73 BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
74 String zhanghao = input.readLine();
75
76 File f1 = new File(s1);
77 File f2 = new File(s2);
78 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
79 BufferedWriter txt2 = new BufferedWriter(new FileWriter(f2));
80 while (txt1.ready()) {
81 String al = txt1.readLine();
82 String[] al_arr = al.split(",");
83 if (al_arr[0].equals(zhanghao)) {
84 al_arr[4] = "0";
85 al = String.join(",", al_arr);
86 }
87 txt2.write(al);
88 txt2.write("\r\n");
89 }
90 txt1.close();
91 txt2.close();
92 // input.close();
93 boolean d = f1.delete();
94 boolean r = f2.renameTo(f1);
95 System.out.println(zhanghao + " 冻结成功!");
96 }
97
98 public void jiedong() throws IOException {
99 System.out.println("输入解冻的账号: ");
100 BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
101 String zhanghao = input.readLine();
102
103 File f1 = new File(s1);
104 File f2 = new File(s2);
105 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
106 BufferedWriter txt2 = new BufferedWriter(new FileWriter(f2));
107 while (txt1.ready()) {
108 String al = txt1.readLine();
109 String[] al_arr = al.split(",");
110 if (al_arr[0].equals(zhanghao)) {
111 al_arr[4] = "1";
112 al = String.join(",", al_arr);
113 }
114 txt2.write(al);
115 txt2.write("\r\n");
116 }
117 txt1.close();
118 txt2.close();
119 // input.close();
120 boolean d = f1.delete();
121 boolean r = f2.renameTo(f1);
122 System.out.println(zhanghao + " 解冻成功!");
123 }
124
125 public void all() throws IOException {
126 File f1 = new File(s1);
127 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
128 while (txt1.ready()) {
129 String al = txt1.readLine();
130 System.out.println(al);
131 }
132 txt1.close();
133 }
134
135 public void geren() throws IOException {
136 File f1 = new File(s1);
137 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
138
139 System.out.println("输入查询账号: ");
140 BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
141 String zhanghao = input.readLine();
142 while (txt1.ready()) {
143 String al = txt1.readLine();
144 String[] al_arr = al.split(",");
145 if (al_arr[0].equals(zhanghao)) {
146 System.out.println(al);
147 }
148 }
149 try {
150 // input.close();
151 txt1.close();
152 } catch (IOException x) {
153 System.out.println("关闭报错 ");
154 }
155 }
156
157
158 }
159
160
161 class Client {
162 String username;
163 String password;
164 String level;
165 int money;
166 String stauts;
167 BufferedReader input;
168 String s1 = System.getProperty("user.dir") + "\\user_info.txt";
169 String s2 = System.getProperty("user.dir") + "\\user_info2.txt";
170
171 //初始化信息
172 public Client(String[] args) throws IOException {
173 this.input = new BufferedReader(new InputStreamReader(System.in));
174 System.out.print("请选择: ");
175 this.username = args[0]; // id
176 this.password = args[1]; // 密码
177 this.level = args[2];// 级别
178 this.money = Integer.parseInt(args[3]); // 金额
179 this.stauts = args[4]; // 状态
180 // System.out.printf("%s %s %s %s %s :", this.username, this.password, this.level, this.money, this.stauts); //展示信息
181 System.out.println("1: 查询余额, 2: 取款, 3: 存款, 4: 转账, 5: 修改个人密码, 6: 退出系统 ");
182 String chose = (String) input.readLine();
183 while (!chose.toUpperCase().equals("6")) {
184 switch (chose) { //"1: 查询余额, 2: 取款, 3: 存款, 4: 转账, 5: 修改个人密码, 6: 退出系统 "
185 case "1":
186 System.out.println("余额: " + this.money);
187 break;
188 case "2":
189 this.qukuan();
190 break;
191 case "3":
192 this.cunkuan();
193 break;
194 case "4":
195 this.zhuanzhang();
196 break;
197 case "5":
198 this.xgmm();
199 break;
200 case "6":
201 break;
202 }
203 System.out.println("1: 查询余额, 2: 取款, 3: 存款, 4: 转账, 5: 修改个人密码, 6: 退出系统 ");
204 chose = (String) input.readLine();
205 }
206 // input.close();
207 }
208
209 public void qukuan() throws IOException {
210 System.out.print("输入取款金额(最多5000,100的整数):");
211 int qian_int = 0;
212 String mon = (String) this.input.readLine();
213 try {
214 qian_int = Integer.parseInt(mon);
215 } catch (NumberFormatException e) {
216 System.out.print("(输入数字)");
217 }
218 while (qian_int % 100 != 0 || qian_int <= 0 || qian_int > 5000 || qian_int > this.money) {
219 System.out.print("金额输入错误(最多5000,100的整数):");
220 mon = (String) this.input.readLine();
221 try {
222 qian_int = Integer.parseInt(mon);
223 } catch (NumberFormatException e) {
224 System.out.print("(输入数字)");
225 }
226 }
227 this.money = this.money - qian_int;
228 System.out.println("取款" + mon + " ,余额: " + this.money);
229 File f1 = new File(s1);
230 File f2 = new File(s2);
231 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
232 BufferedWriter txt2 = new BufferedWriter(new FileWriter(f2));
233 while (txt1.ready()) {
234 String al = txt1.readLine();
235 String[] al_arr = al.split(",");
236 if (al_arr[0].equals(this.username)) {
237 al_arr[3] = Integer.toString(this.money);
238 al = String.join(",", al_arr);
239 }
240 txt2.write(al);
241 txt2.write("\r\n");
242 }
243 txt1.close();
244 txt2.close();
245 boolean d = f1.delete();
246 boolean r = f2.renameTo(f1);
247 }
248
249 public void cunkuan() throws IOException {
250 System.out.print("输入存款金额(100的整数,不能为负数):");
251 int qian_int = 0;
252 String mon = (String) this.input.readLine();
253 try {
254 qian_int = Integer.parseInt(mon);
255 } catch (NumberFormatException e) {
256 System.out.print("(输入数字)");
257 }
258 while (qian_int % 100 != 0 || qian_int <= 0) {
259 System.out.print("金额输入错误(100的整数,不能为负数):");
260 mon = (String) this.input.readLine();
261 try {
262 qian_int = Integer.parseInt(mon);
263 } catch (NumberFormatException e) {
264 System.out.print("(输入数字)");
265 }
266 }
267 this.money = this.money + qian_int;
268 System.out.println("存" + mon + " ,余额: " + this.money);
269 File f1 = new File(s1);
270 File f2 = new File(s2);
271 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
272 BufferedWriter txt2 = new BufferedWriter(new FileWriter(f2));
273 while (txt1.ready()) {
274 String al = txt1.readLine();
275 String[] al_arr = al.split(",");
276 if (al_arr[0].equals(this.username)) {
277 al_arr[3] = Integer.toString(this.money);
278 al = String.join(",", al_arr);
279 }
280 txt2.write(al);
281 txt2.write("\r\n");
282 }
283 txt1.close();
284 txt2.close();
285 boolean d = f1.delete();
286 boolean r = f2.renameTo(f1);
287 }
288
289 public void zhuanzhang() throws IOException {
290 int tag = 1;
291 System.out.print("输入他人账号:");
292 String other = (String) this.input.readLine();
293 System.out.print("输入转账金额(100的整数,不能为负数):");
294
295 int qian_int = -2;
296 String mon = null;
297 mon = (String) this.input.readLine();
298 try {
299 qian_int = Integer.parseInt(mon);
300 } catch (NumberFormatException e) {
301 System.out.print("(输入数字)");
302 }
303 while (qian_int % 100 != 0 || qian_int <= 0) {
304 System.out.print("金额输入错误(100的整数,不能为负数):");
305 mon = (String) this.input.readLine();
306 try {
307 qian_int = Integer.parseInt(mon);
308 } catch (NumberFormatException e) {
309 System.out.print("金额输入错误(100的整数,不能为负数):");
310 }
311 }
312
313 File f1 = new File(s1);
314 File f2 = new File(s2);
315 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
316 BufferedWriter txt2 = new BufferedWriter(new FileWriter(f2));
317 while (txt1.ready()) {
318 String al = txt1.readLine();
319 String[] al_arr = al.split(",");
320 if (al_arr[0].equals(other)) {
321 tag = 2;
322 break;
323
324 }
325 }
326 txt1.close();
327 if (other.equals(this.username)) {
328 tag = 3;
329 }
330 if (tag == 2) {
331 txt1 = new BufferedReader(new FileReader(f1));
332 while (txt1.ready()) {
333 String al = txt1.readLine();
334 String[] al_arr = al.split(",");
335 if (al_arr[0].equals(this.username)) {
336 this.money = this.money - qian_int;
337 al_arr[3] = Integer.toString(this.money);
338 al = String.join(",", al_arr);
339 } else if (al_arr[0].equals(other)) {
340 int other_amt = Integer.parseInt(al_arr[3]);
341 al_arr[3] = Integer.toString(other_amt + qian_int);
342 al = String.join(",", al_arr);
343 }
344 txt2.write(al);
345 txt2.write("\r\n");
346 }
347 } else if (tag == 3) {
348 System.out.println("不能转给自己");
349 } else System.out.println("对方ID不存在");
350 txt1.close();
351 txt2.close();
352 boolean d = f1.delete();
353 boolean r = f2.renameTo(f1);
354 System.out.println("转账成功,当前余额: " + this.money);
355 }
356
357 public void xgmm() throws IOException {
358 System.out.print("输入新密码:");
359 String new1 = (String) this.input.readLine();
360 System.out.print("再次确认密码:");
361 String new2 = (String) this.input.readLine();
362
363 while (!new1.equals(new2) || new1.length() <= 6) {
364 System.out.println("提示: 确保2次密码一致且长度不能小于6位");
365 System.out.print("输入新密码:");
366 new1 = (String) this.input.readLine();
367 System.out.print("再次确认密码:");
368 new2 = (String) this.input.readLine();
369 }
370 File f1 = new File(s1);
371 File f2 = new File(s2);
372 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
373 BufferedWriter txt2 = new BufferedWriter(new FileWriter(f2));
374 while (txt1.ready()) {
375 String al = txt1.readLine();
376 String[] al_arr = al.split(",");
377 if (al_arr[0].equals(this.username)) {
378 al_arr[1] = new1;
379 al = String.join(",", al_arr);
380 }
381 txt2.write(al);
382 txt2.write("\r\n");
383 }
384 txt1.close();
385 txt2.close();
386 boolean d = f1.delete();
387 boolean r = f2.renameTo(f1);
388 System.out.println("修改密码成功,当前密码: " + new1);
389 }
390 }
391
392
393 class ATM {
394 String s1 = System.getProperty("user.dir") + "\\user_info.txt";
395 String s2 = System.getProperty("user.dir") + "\\user_info2.txt";
396 int root; // 1 root用户
397 int tag; //1 登录成功
398 int status = 2; //0 冻结
399 String username;
400 String password;
401 String[] info;
402 BufferedReader br1 = new BufferedReader(new InputStreamReader(System.in));
403 BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
404
405 public ATM() throws IOException {
406 System.out.print("输入账号:");
407 this.username = (String) br1.readLine();
408
409 System.out.print("输入密码:");
410 this.password = (String) br2.readLine();
411
412 BufferedReader bline1 = new BufferedReader(new FileReader(s1));
413 while (bline1.ready()) {
414 String line = bline1.readLine();
415 String[] line_arr = line.split(",");
416 this.info = line_arr;
417 //root
418 if (line_arr[0].equals(this.username) && line_arr[4].equals("0")) {
419 // System.out.println("账号已冻结!");
420 this.status = 0;
421 break;
422 // System.exit(0);
423 // System.exit(0);
424 } else if (line_arr[0].equals(this.username) && line_arr[1].equals(this.password) && line_arr[2].equals("0") && line_arr[4].equals("1")) {
425 this.root = 1;
426 this.tag = 1;
427 break;
428 //普通用戶
429 } else if (line_arr[0].equals(this.username) && line_arr[1].equals(this.password) && line_arr[4].equals("1")) {
430 this.tag = 1;
431 break;
432 //普通用戶
433 } else if (line_arr[0].equals(this.username) && line_arr[4].equals("1")) {
434 int num = 1;
435 while (num <= 3) {
436 System.out.print("密码错误重新输入(错3次冻结,目前" + num + "次):");
437 this.password = (String) br2.readLine();
438 if (line_arr[1].equals(this.password) && line_arr[2].equals("0")) {
439 this.root = 1;
440 this.tag = 1;
441 break;
442 } else if (line_arr[1].equals(this.password)) {
443 this.tag = 1;
444 break;
445 }
446 num++;
447 }
448 if (num > 3) {
449 bline1.close();
450 this.dongjie();
451 // System.exit(0);
452 }
453 break;
454 }
455 }
456 try {
457 bline1.close();
458 // br2.close();
459 // br1.close();
460
461 } catch (Exception x) {
462 System.out.println(" ");
463 }
464 }
465
466 public void dongjie() throws IOException {
467 File f1 = new File(s1);
468 File f2 = new File(s2);
469 BufferedReader txt1 = new BufferedReader(new FileReader(f1));
470 BufferedWriter txt2 = new BufferedWriter(new FileWriter(f2));
471 while (txt1.ready()) {
472 String al = txt1.readLine();
473 String[] al_arr = al.split(",");
474 if (al_arr[0].equals(this.username)) {
475 al_arr[4] = "0";
476 al = String.join(",", al_arr);
477 }
478 txt2.write(al);
479 txt2.write("\r\n");
480 }
481 txt1.close();
482 txt2.close();
483 boolean d = f1.delete();
484 boolean r = f2.renameTo(f1);
485 this.status = 0;
486 }
487 }
488
489 public class ATM_test {
490 public static void main(String[] args) throws IOException {
491 String s1 = System.getProperty("user.dir") + "\\user_info.txt";
492 File f1 = new File(s1);
493 if (!f1.exists()) {
494 try {
495 boolean x = f1.createNewFile();
496 BufferedWriter w1 = new BufferedWriter(new FileWriter(f1,true));
497 w1.write("a1,123,0,100000000,1");
498 w1.write("\r\n");
499 w1.write("a2,123,1,10000,1");
500 w1.write("\r\n");
501 w1.write("a3,123,1,10000,0");
502 w1.write("\r\n");
503 w1.close();
504 } catch (IOException x) {
505 System.out.println("xx");
506 }
507 }
508
509
510 Rootx r1;
511 Client c1;
512 ATM atm1 = new ATM();
513 // 判断登录
514 if (atm1.tag == 1) {
515 if (atm1.root == 1) {
516 System.out.println("Root用户 登录成功!");
517 r1 = new Rootx(atm1.info);
518 } else {
519 System.out.println("普通用户 登录成功!");
520 c1 = new Client(atm1.info);
521 }
522 } else if (atm1.status == 0) {
523 System.out.println("账号已冻结,请联系管理员!");
524 } else System.out.println("账号或密码错误!");
525 atm1.br1.close();
526 atm1.br2.close();
527 }
528 }
529
530 //碰到问题
531 //main方法是静态方法 不能使用this
532 //txt修改文件内容不会写 (用复制到文件2 ,然后替换原文件代替)
533 // 转账部分可以优化