Day016-2021-08-19 银行管理

第十六天,综合之前的内容,做一个练习

18周 JAVA从入门到入土

一、练习

制作一个银行的管理页面,可以转账并生成交易记录:

package com.bank.entity;

public class User {
	private String uuid;

	private String mobile;
	private String password;

	private String cardno = "0-0-0-0";
	private String identity;
	private String name;
	private double balance;

	public User(String mobile, String password, String name) {
		super();
		this.mobile = mobile;
		this.password = password;
		this.name = name;
	}

	public User(String str) {
		this(str.split("-")[0], str.split("-")[1], str.split("-")[2]);
	}

	public String getUuid() {
		return uuid;
	}

	public void setUuid(String uuid) {
		this.uuid = uuid;
	}

	public String getMobile() {
		return mobile;
	}

	public void setMobile(String mobile) {
		this.mobile = mobile;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getCardno() {
		return cardno;
	}

	public void setCardno(String cardno) {
		this.cardno = cardno;
	}

	public String getIdentity() {
		return identity;
	}

	public void setIdentity(String identity) {
		this.identity = identity;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getBalance() {
		return balance;
	}

	public void setBalance(double balance) {
		this.balance = balance;
	}

	@Override
	public String toString() {
		StringBuilder str = new StringBuilder();
		str.append("-------------------------------------\n");
		str.append("用户姓名:\t" + name + "\n");
		str.append("手机号码:\t" + mobile + "\n");
		str.append("银行卡号:\t" + cardno.split("-")[0] + "-******-" + cardno.split("-")[3] + "\n");
		str.append("身份证号:\t" + identity + "\n");
		str.append("用户余额:\t" + balance + "\n");
		str.append("-------------------------------------");
		return str.toString();
	}
}
package com.bank.dao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Properties;

import com.bank.entity.User;

public class UserDao {
	private static UserDao myBankDao = new UserDao();

	private UserDao() {
		super();
	}

	public static UserDao getInstance() {
		return myBankDao;
	}

	// 从用户库里搜索用户
	public User searchFromUserLibrary(String mobile) {
		try {
			BufferedReader bufferedReader = new BufferedReader(new FileReader("file/userLibrary.txt"));
			User user = null;
			String row = "";
			while ((row = bufferedReader.readLine()) != null) {
				if (row.split("-")[0].equals(mobile)) {
					user = new User(row);
				}
			}
			bufferedReader.close();
			return user;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	// 得到用户全部数据
	public User getAllUserData(User user) {
		try {
			Properties property = new Properties();
			property.load(new FileInputStream("file/userData/" + user.getMobile() + ".txt"));
			user.setUuid(property.get("uuid").toString());
			user.setCardno(property.get("cardno").toString());
			user.setIdentity(property.get("identity").toString());
			user.setBalance(Double.parseDouble(property.get("balance").toString()));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return user;
	}

	public User getAllUserData(String mobile) {
		return getAllUserData(searchFromUserLibrary(mobile));
	}

	// 用户产生信息
	public String formateUserData(User user) {
		StringBuilder str = new StringBuilder();
		str.append("uuid=" + user.getUuid() + "\n");
		str.append("cardno=" + user.getCardno() + "\n");
		str.append("identity=" + user.getIdentity() + "\n");
		str.append("balance=" + user.getBalance() + "\n");
		return str.toString();
	}

	// 保存用户信息
	public void saveUserData(User user) {
		try {
			BufferedWriter output = new BufferedWriter(new FileWriter("file/userData/" + user.getMobile() + ".txt"));
			output.write(formateUserData(user));
			output.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 加扣款
	public User changeMoney(User user, double money, boolean isAdd) {
		user.setBalance(user.getBalance() + money * (isAdd ? 1 : -1));
		saveUserData(user);
		return user;
	}

	// 加款
	public User plusMoney(User user, double money) {
		return changeMoney(user, money, true);
	}

	// 扣款
	public User minusMoney(User user, double money) {
		return changeMoney(user, money, false);
	}
}
package com.bank.entity;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Record {
	private String uuid;
	private String senderMobile;
	private String receiverMobile;
	private double money;
	private Date time;
	private String simpletime;
	private String way;

	public Record(String uuid, String senderMobile, String receiverMobile, double money, Date time) {
		super();
		this.uuid = uuid;
		this.senderMobile = senderMobile;
		this.receiverMobile = receiverMobile;
		this.money = money;
		this.time = time;
		this.simpletime = new SimpleDateFormat("yyyy-MM-dd").format(time);
	}

	public Record(String str) throws Exception {
		this(str.split("#")[0], str.split("#")[1], str.split("#")[2], Double.parseDouble(str.split("#")[3]),
				new SimpleDateFormat("yyyy-MM-dd").parse(str.split("#")[4]));
	}

	public Record(String str, String mobile) throws Exception {
		this(str);
		if (str.split("#")[1].equals(mobile)) {
			this.way = "转出";
		} else if (str.split("#")[2].equals(mobile)) {
			this.way = "转入";
		} else {
			this.way = "无关";
		}
	}

	public String getUuid() {
		return uuid;
	}

	public void setUuid(String uuid) {
		this.uuid = uuid;
	}

	public String getSenderMobile() {
		return senderMobile;
	}

	public void setSenderMobile(String senderMobile) {
		this.senderMobile = senderMobile;
	}

	public String getReceiverMobile() {
		return receiverMobile;
	}

	public void setReceiverMobile(String receiverMobile) {
		this.receiverMobile = receiverMobile;
	}

	public double getMoney() {
		return money;
	}

	public void setMoney(double money) {
		this.money = money;
	}

	public Date getTime() {
		return time;
	}

	public void setTime(Date time) {
		this.time = time;
	}

	public String getSimpaltime() {
		return simpletime;
	}

	public void setSimpaltime(String simpaltime) {
		this.simpletime = simpaltime;
	}

	public String getWay() {
		return way;
	}

	public void setWay(String way) {
		this.way = way;
	}

	@Override
	public String toString() {
		StringBuilder str = new StringBuilder();
		str.append("---------------------------------------------------\n");
		str.append("交易单号:\n" + uuid + "\n");
		str.append("支付方手机号:\t" + senderMobile + "\n");
		str.append("接收方手机号:\t" + receiverMobile + "\n");
		str.append("转账金额:\t\t" + money + "\n");
		str.append("转账时间:\t\t" + simpletime + "\n");
		str.append("转账方式:\t\t" + way + "\n");
		str.append("---------------------------------------------------");
		return str.toString();
	}
}
package com.bank.dao;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import java.util.stream.Collectors;

import com.bank.entity.Record;

public class RecordDao {
	private static RecordDao recordDao = new RecordDao();

	private RecordDao() {
		super();
	}

	public static RecordDao getInstance() {
		return recordDao;
	}

	// 获取全部转账记录
	public List<Record> getAllRecords(String mobile) {
		try {
			List<Record> list = new ArrayList<Record>();
			BufferedReader input = new BufferedReader(new FileReader("file/recoverDetail.txt"));
			String row = "";
			while ((row = input.readLine()) != null) {
				list.add(new Record(row, mobile));
			}
			input.close();
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	// 获取相关转账记录
	public List<Record> getMineRecords(String mobile) {
		try {
			List<Record> list = new ArrayList<Record>();
			BufferedReader input = new BufferedReader(new FileReader("file/recoverDetail.txt"));
			String row = "";
			while ((row = input.readLine()) != null) {
				if (row.split("#")[1].equals(mobile) || row.split("#")[2].equals(mobile)) {
					list.add(new Record(row, mobile));
				}
			}
			input.close();
			return list;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	// 时间段合理化
	public Date[] changeTime(Date[] arr) {
		if (arr[1].before(arr[0])) {
			Date min = arr[1];
			arr[1] = arr[0];
			arr[0] = min;
		}
		return arr;
	}

	// 按时间筛选转账记录
	public List<Record> filterListByTime(List<Record> list, Date[] arr) {
		return list.stream().filter(o -> (o.getTime().after(arr[0]) || o.getTime().equals(arr[0])))
				.filter(o -> (o.getTime().before(arr[1]) || o.getTime().equals(arr[1]))).collect(Collectors.toList());
	}

	// 按金额筛选转账记录
	public List<Record> filterListByMoney(List<Record> list, double minMoney, double maxMoney) {
		return list.stream().filter(o -> o.getMoney() >= minMoney).filter(o -> o.getMoney() <= maxMoney)
				.collect(Collectors.toList());
	}

	// 按方式筛选转账记录
	public List<Record> filterListByWay(List<Record> list, String str) {
		return list.stream().filter(o -> o.getWay().equals(str)).collect(Collectors.toList());
	}

	// 按时间排序
	public List<Record> sortListByTime(List<Record> list, boolean flag) {
		return list.stream().sorted((o1, o2) -> {
			if (o1.getTime().before(o2.getTime())) {
				return -1 * (flag ? 1 : -1);
			}
			if (o1.getTime().after(o2.getTime())) {
				return 1 * (flag ? 1 : -1);
			}
			return 0;
		}).collect(Collectors.toList());
	}

	// 按金额排序
	public List<Record> sortListByMoney(List<Record> list, boolean flag) {
		return list.stream().sorted((o1, o2) -> {
			if (o1.getMoney() - o2.getMoney() > 0) {
				return 1 * (flag ? 1 : -1);
			}
			if (o1.getMoney() - o2.getMoney() < 0) {
				return -1 * (flag ? 1 : -1);
			}
			return 0;
		}).collect(Collectors.toList());
	}

	// 打印转账记录
	public void printList(String filter, List<Record> list, boolean isRecover, String adress) {
		try {
			BufferedWriter output = new BufferedWriter(new FileWriter(adress, !isRecover));
			output.write(filter);
			output.newLine();
			for (Record record : list) {
				output.write(record.toString());
				output.newLine();
			}
			for (int i = 0; i < 3; i++) {
				output.newLine();
			}
			output.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void printList(String filter, List<Record> list, boolean isRecover) {
		printList(filter, list, isRecover, "file/outputFile/list.txt");
	}

	// 交易记录产生信息
	public String formateRecordData(Record record) {
		return record.getUuid() + "#" + record.getSenderMobile() + "#" + record.getReceiverMobile() + "#"
				+ record.getMoney() + "#" + record.getSimpaltime();
	}

	// 生成交易记录档案
	public void writeRecord(Record record) {
		try {
			BufferedWriter output = new BufferedWriter(new FileWriter("file/recoverDetail.txt", true));
			output.write(formateRecordData(record));
			output.newLine();
			output.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 生成一个交易记录
	public Record newRecord(String senderMobile, String receiverMobile, double money) {
		Record record = new Record(UUID.randomUUID().toString(), senderMobile, receiverMobile, money,
				Calendar.getInstance().getTime());
		record.setWay("转出");
		writeRecord(record);
		return record;
	}
}
package com.bank.utils;

import java.text.SimpleDateFormat;
import java.util.Date;

public class ValidateUtil {
	// 检查手机号码
	public static boolean checkMobile(String mobile) {
		try {
			Long.parseLong(mobile);
		} catch (Exception e) {
			return false;
		}
		if ((mobile.length() != 11) || (mobile.charAt(0) != '1')) {
			return false;
		}
		return true;
	}

	// 检查时间格式
	public static Date checkTime(String time) {
		Date date;
		try {
			date = new SimpleDateFormat("yyyy-MM-dd").parse(time);
		} catch (Exception e) {
			return null;
		}
		return date;
	}
}
package com.bank.view;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Scanner;

import com.bank.dao.RecordDao;
import com.bank.dao.UserDao;
import com.bank.entity.Record;
import com.bank.entity.User;
import com.bank.utils.ValidateUtil;

@SuppressWarnings("resource")
public class MyBankAPP {
	public static void main(String[] args) {
		// 实例化dao
		UserDao userDao = UserDao.getInstance();
		RecordDao recordDao = RecordDao.getInstance();
		User user;
		// 登录页面
		System.out.println("---欢迎进入手机银行---");
		while (true) {
			while (true) {
				System.out.println("--------");
				System.out.println("-1.登录");
				System.out.println("-2.退出");
				System.out.println("--------");
				Integer opt = new Scanner(System.in).nextInt();
				if (opt == 1) { // 登录
					System.out.println("请输入手机号码:");
					String mobile = new Scanner(System.in).next();
					if (!ValidateUtil.checkMobile(mobile)) {
						System.out.println("!!!请输入正确的手机号!!!");
						continue;
					}
					user = userDao.searchFromUserLibrary(mobile);
					if (user == null) {
						System.out.println("该手机号未注册银行卡!");
						continue;
					}
					int times = 3;
					while (true) {
						System.out.println("请输入账户密码:");
						String password = new Scanner(System.in).next();
						if (user.getPassword().equals(password)) {
							System.out.println("登录成功!");
							break;
						}
						times--;
						if (times <= 0) {
							System.out.println("登录失败!");
							break;
						}
						System.out.println("密码错误,你还有" + times + "机会!");
					}
					if (times > 0) {
						break;
					} else {
						continue;
					}
				} else if (opt == 2) { // 退出
					System.out.println("正在退出程序...");
					System.exit(0);
				}
			}
			// 得到全部数据
			user = userDao.getAllUserData(user);
			List<Record> myRecordList = recordDao.getMineRecords(user.getMobile());
			// 操作界面
			while (true) {
				System.out.println("-------------");
				System.out.println("-1.个人数据");
				System.out.println("-2.在线转账");
				System.out.println("-3.转账记录");
				System.out.println("-4.筛选账单");
				System.out.println("-8.账号登出");
				System.out.println("-9.退出程序");
				System.out.println("-------------");
				Integer opt = new Scanner(System.in).nextInt();
				if (opt == 1) { // 个人数据
					System.out.println(user);
				} else if (opt == 2) { // 在线转账
					System.out.println("请输入收款人手机号码:");
					String receiverMobile = new Scanner(System.in).next();
					if (!ValidateUtil.checkMobile(receiverMobile)) {
						System.out.println("手机号码不正确!");
						continue;
					}
					if (user.getMobile().equals(receiverMobile)) {
						System.out.println("不能给自己转账!");
						continue;
					}
					User receiver = userDao.searchFromUserLibrary(receiverMobile);
					if (receiver == null) {
						System.out.println("该手机号未注册银行卡!");
						continue;
					}
					receiver = userDao.getAllUserData(receiver);
					while (true) {
						System.out.println("请输入转账金额:");
						double money = new Scanner(System.in).nextDouble();
						if (money <= 0) {
							System.out.println("转账失败!");
							break;
						} else if (money > user.getBalance()) {
							System.out.println("余额不足!账户余额:" + user.getBalance() + "元");
							continue;
						}
						// 给己方扣款
						user = userDao.minusMoney(user, money);
						// 给对方加款
						receiver = userDao.plusMoney(receiver, money);
						// 产生交易记录
						myRecordList.add(recordDao.newRecord(user.getMobile(), receiver.getMobile(), money));
						// 交易结束
						System.out.println("转账成功!");
						break;
					}
				} else if (opt == 3) { // 转账记录
					for (Record record : myRecordList) {
						System.out.println(record);
					}
				} else if (opt == 4) { // 筛选账单
					List<Record> filteredList = myRecordList;
					// 按时间筛选
					System.out.println("请选择交易时间:");
					int i = 1;
					Date[] dateArr = new Date[2];
					while (i < 3) {
						System.out.println("请输入第" + i + "个日期:");
						String inputTime = new Scanner(System.in).next();
						dateArr[i - 1] = ValidateUtil.checkTime(inputTime);
						if (dateArr[i - 1] == null) {
							System.out.println("输入有误,请重新输入:");
						} else {
							i++;
						}
					}
					dateArr = recordDao.changeTime(dateArr);
					filteredList = recordDao.filterListByTime(filteredList, dateArr);
					if (filteredList.size() == 0) {
						System.out.println("未检测到相关记录!");
						continue;
					}
					// 按金额筛选
					System.out.println("请输入金额范围");
					System.out.println("请输入最小值(单笔最小为0元):");
					double minMoney = new Scanner(System.in).nextDouble();
					if (minMoney < 0 || minMoney > 2000) {
						minMoney = 0;
						System.out.println("最小金额设置失败,已默认0元");
					}
					System.out.println("请输入最大值(单笔最大为20000元):");
					double maxMoney = new Scanner(System.in).nextDouble();
					if (maxMoney < minMoney || maxMoney > 20000) {
						maxMoney = 20000;
						System.out.println("最大金额设置失败,已默认20000元");
					}
					filteredList = recordDao.filterListByMoney(filteredList, minMoney, maxMoney);
					if (filteredList.size() == 0) {
						System.out.println("未检测到相关记录!");
						continue;
					}
					// 按方式筛选
					System.out.println("请选择交易方式:");
					System.out.println("-1.转入\t-2.转出\t-3.全部");
					int way;
					while (true) {
						way = new Scanner(System.in).nextInt();
						if (way == 1 || way == 2 || way == 3) {
							break;
						}
						System.out.println("非法输入!请重新输入:");
					}
					String wayStr = "";
					if (way == 1) {
						wayStr = "转入";
						filteredList = recordDao.filterListByWay(filteredList, wayStr);
					} else if (way == 2) {
						wayStr = "转出";
						filteredList = recordDao.filterListByWay(filteredList, wayStr);
					} else if (way == 3) {
						wayStr = "全部";
					}
					if (filteredList.size() == 0) {
						System.out.println("未检测到相关记录!");
						continue;
					}
					// 排序方式
					System.out.println("请选择排序方式:");
					System.out.println("-1.时间\t-2.金额");
					int sortWay;
					while (true) {
						sortWay = new Scanner(System.in).nextInt();
						if (sortWay == 1 || sortWay == 2) {
							break;
						}
						System.out.println("非法输入!请重新输入:");
					}
					System.out.println("请选择升序降序:");
					System.out.println("-1.升序\t-2.降序");
					int sortUpOrDown;
					while (true) {
						sortUpOrDown = new Scanner(System.in).nextInt();
						if (sortUpOrDown == 1 || sortUpOrDown == 2) {
							break;
						}
						System.out.println("非法输入!请重新输入:");
					}
					if (sortWay == 1) {
						filteredList = recordDao.sortListByTime(filteredList, sortUpOrDown == 1 ? true : false);
					} else if (sortWay == 2) {
						filteredList = recordDao.sortListByMoney(filteredList, sortUpOrDown == 1 ? true : false);
					}
					// 整理筛选条件
					StringBuilder filterStr = new StringBuilder();
					filterStr.append("交易时间:\t\t");
					filterStr.append(new SimpleDateFormat("yyyy/MM/dd").format(dateArr[0]));
					filterStr.append(" - ");
					filterStr.append(new SimpleDateFormat("yyyy/MM/dd").format(dateArr[1]));
					filterStr.append("\n");
					filterStr.append("交易金额:\t\t" + minMoney + " - " + maxMoney + "\n");
					filterStr.append("交易方式:\t\t" + wayStr + "\n");
					filterStr.append(
							"排序方式:\t\t" + (sortWay == 1 ? "时间" : "金额") + (sortUpOrDown == 1 ? "升序" : "降序") + "\n");
					// 是否打印账单
					System.out.println("是否需要打印账单:");
					System.out.println("-true.是\t-false.否");
					boolean isPrintList = new Scanner(System.in).nextBoolean();
					// 打印
					if (isPrintList) {
						System.out.println("是否覆盖文件内的数据:");
						System.out.println("-true.是\t-false.否");
						boolean isRecover = new Scanner(System.in).nextBoolean();
						recordDao.printList(filterStr.toString(), filteredList, isRecover);
					}
					// 输出结果
					System.out.println("---------------------筛选结果---------------------");
					System.out.println(filterStr.toString());
					for (Record record : filteredList) {
						System.out.println(record);
					}
					if (isPrintList) {
						System.out.println("交易记录已成功打印!");
					}
				} else if (opt == 8) { // 账号登出
					System.out.println("正在登出账号...");
					break;
				} else if (opt == 9) { // 退出程序
					System.out.println("正在退出程序...");
					System.exit(0);
				}
			}
		}
	}
}

用户的账号密码:
文件
用户的具体信息:
文件
文件
交易记录:
文件
运行结果:
运行结果
打印出来的清单:
运行结果
操作完成后的用户信息:
运行结果
运行结果
操作完成后的交易记录:
运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值