ATM系统0.2版
把注册的账号信息存入文本文件中,更新把信息存入文本,实现数据储存。
增加了
writeToFile(accounts); // 把信息写到文件中去
createAccountTable(ArrayList<Account>accounts)//从文件中读取信息到集合中
//本来想实现的目标,但是实际写完后,如果有用户注销,将要判断是哪一行要删除,得遍历一波,比较麻烦。或有用户注册,可以直接写到文件后面,这样就要写入文件的方法就要判断是属于哪一种。
直接就在后面结束操作就全部把集合中的信息重新写到文件中。
//用户注册时把信息写入到文件中,
//如果就注册就把这个用户追加到文件末尾, 先实现全部重写
// 如果用户消除这个用户,就在销户后面加个把信息重新写到文件中
用户的账号
public class Account {
//账号
private String ID;
//用户名
private String name;
// 密码
private String password;
//余额
private double balance = 0.0;
//可提现的额度
private double withdrawalAmount = 3000;
public Account() {
}
public Account(String ID, String name, String password, double balance, double withdrawalAmount) {
this.ID = ID;
this.name = name;
this.password = password;
this.balance = balance;
this.withdrawalAmount = withdrawalAmount;
}
public String getID() {
return ID;
}
public void setID(String ID) {
this.ID = ID;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public double getBalance() {
return balance;
}
public void setBalance(double balance) {
this.balance = balance;
}
public double getWithdrawalAmount() {
return withdrawalAmount;
}
public void setWithdrawalAmount(double withdrawalAmount) {
this.withdrawalAmount = withdrawalAmount;
}
}
主方法
public static void main(String[] args) {
//从文本读取信息
ArrayList<Account> accounts = createAccountTable(new ArrayList<>());
boolean flag = true;
while (flag){
flag=loading(accounts);
}
System.out.println("很高兴为您服务");
System.out.println("祝您旅途愉快,欢迎您的下次光临");
//退出程序就把信息写到文件中
writeToFile(accounts);
}
登入界面
//登入界面
public static boolean loading(ArrayList<Account> accounts){
Scanner sc = new Scanner(System.in);
System.out.println("======欢迎您进入幸福银行ATM系统======");
System.out.println("1.登入账户");
System.out.println("2.注册开户");
System.out.println("3.退出系统");
System.out.println("请输入命令1、2选择对应的操作:");
int select = sc.nextInt();
switch (select){
case 1:
// System.out.println("1.登入账户");
login(accounts,sc);
break;
case 2:
// System.out.println("1.注册开户");
register(accounts,sc);
break;
case 3:
return false;
}
return true;
}
注册账号
//开户
public static void register(ArrayList<Account> accounts, Scanner sc){
System.out.println("======欢迎您进入幸福银行用户办卡界面=====");
System.out.println("请输入你的姓名:");
String name = sc.next();
System.out.println("请输入你的密码:");
String password = sc.next();
System.out.println("请确认你的密码:");
String temp = sc.next();
if(password.equals(temp)){
Account account = new Account();
account.setName(name);
account.setPassword(password);
//如果没有账户就直接创建一个ID
if(accounts.size() == 0){
String cardID = createID();
account.setID(cardID);
}else {
//创建不能相同的ID号
boolean flag = true;
while(flag){
String cardID = createID();
for (int i = 0; i < accounts.size(); i++) {
Account account1 = accounts.get(i);
if(!cardID.equals(account1.getID())){
account.setID(cardID);
flag = false;
}
}
}
}
//设置最开始的提现额度为10万
// account.setWithdrawalAmount(100000);
//余额0元
account.setBalance(0.0);
//把账户加到集合当中去
accounts.add(account);
System.out.println("你的信息:");
System.out.println("持卡人:"+ account.getName()+"\t卡号:"+account.getID());
System.out.println("开户成功");
}else{
System.out.println("两次输入的密码不一样,请重新操作:");
register(accounts, sc);
}
}
卡号生成器
//创建随机8位数卡号
public static String createID(){
int[] card = {0,1,2,3,4,5,6,7,8,9};
Random ra = new Random();
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 8; i++) {
builder.append(card[ra.nextInt(10)]);
}
return builder.toString();
}
账户登入
// 用户账号登入
public static void login(ArrayList<Account> accounts, Scanner sc){
System.out.println("======幸福银行ATM系统登入界面======");
System.out.println("请输入您的卡号:");
String id = sc.next();
boolean falg = true;
for (int i = 0; i < accounts.size(); i++) {
Account account = accounts.get(i);
if(account.getID().equals(id)){
System.out.println("请您输入您的密码:");
String password = sc.next();
int count = 0;
while(!account.getPassword().equals(password)){
System.out.println("密码错误,请重新输入密码:");
password = sc.next();
if (count == 2) {
System.out.println("你输入的密码错误三次,将返回界面");
return;
}
count++;
}
System.out.println(account.getName()+"贵宾"+"\t卡号"+account.getID()+"欢迎进入系统");
falg = true;
//登入成功后,就可以进行数据操作 拿到当前账号信息
while(falg){
falg = operate(accounts,sc,account);
}
}
}
if(falg){
System.out.println("您的卡号不存在,");
login(accounts,sc);
}
}
系统的主操作界面
//用户登入成功后的操作界面(查询余额,存款,转账,取款 等)
public static boolean operate(ArrayList<Account> accounts, Scanner sc,Account account){
System.out.println("======欢迎您进入幸福银行用户操作界面======");
System.out.println("1、查询");
System.out.println("2、存款");
System.out.println("3、取款");
System.out.println("4、转账");
System.out.println("5、修改密码");
System.out.println("6、退出");
System.out.println("7、注销当前账户");
System.out.println("您可继续选择功能进行操作:");
int select = sc.nextInt();
switch (select){
case 1:
// System.out.println("1、查询");
queryAccount(account);
break;
case 2:
// System.out.println("2、存款");
setMoney(account,sc,0.0);
break;
case 3:
// System.out.println("3、取款");
withdrawal(account,sc);
break;
case 4:
// System.out.println("4、转账");
transferAccount(accounts, sc, account);
break;
case 5:
// System.out.println("5、修改密码");
//修改完密码后立即需要用新密码登入
Account account1 = modificationPassword(account,sc);
accounts.add(account1);
System.out.println("重新登入");
return false;
case 6:
//回到主界面
// System.out.println("6、退出");
// loading(accounts);
return false;
case 7:
// 注销完当前账号,立马返回到主界面,
// System.out.println("7、注销当前账户");
unsubscribe(accounts,account);
loading(accounts);
break;
}
return true;
}
查询账号信息
//查询账号信息
public static void queryAccount(Account account){
System.out.println("你的账户信息如下:");
System.out.println("卡号:"+account.getID());
System.out.println("姓名:"+account.getName());
System.out.println("余额:"+account.getBalance());
System.out.println("当次取现额度:"+account.getWithdrawalAmount());
}
修改账号密码
//修改密码
public static Account modificationPassword(Account account,Scanner sc){
System.out.println("请您输入新密码:");
String password = sc.next();
System.out.println("请再次输入你的密码:");
String temp = sc.next();
if(password.equals(temp)){
account.setPassword(password);
System.out.println("密码修改成功");
} else{
System.out.println("两次密码不一致,请重新输入:");
modificationPassword(account,sc);
}
return account;
}
账户注销
//注销账户
public static void unsubscribe(ArrayList<Account> accounts,Account account){
accounts.remove(account);
System.out.println("已完成注销!");
}
存款
//存款,存款成功后,调用一次用户信息的查询
public static void setMoney(Account account,Scanner sc,double money){
//这是为了存钱
if(money == 0.0){
System.out.println("请您输入存款的金额:");
//上个版本这里有问题,没有想到,如果有余额,再存,只是把原来的覆盖了,没有做到累加
account.setBalance(sc.nextDouble() + account.getBalance());
System.out.println("您已经存款成功");
queryAccount(account);
}else{
//这是给取完钱调用,更新余额
account.setBalance(account.getBalance() - money);
System.out.println("您已经取款成功!");
queryAccount(account);
}
}
取款
//取款
public static void withdrawal(Account account,Scanner sc){
if(account.getBalance() < 100){
System.out.println("你个穷鬼,余额不足100,取不出来");
}else{
System.out.println("请输入你要取的金额:");
double money = sc.nextDouble();
if(money > account.getWithdrawalAmount()){
System.out.println("您当前取款超过了当次限额");
withdrawal(account,sc);
}else{
if(money > account.getBalance()){
System.out.println("您的账户余额不足,请重新取款");
withdrawal(account,sc);
}else{
setMoney(account,sc,money);
}
}
}
}
转账
/转账
public static void transferAccount(ArrayList<Account> accounts, Scanner sc,Account account){
if(accounts.size()<2){
System.out.println("当前系统,账户不足2个,不能转账!");
// operate(accounts,sc,account);
}else{
if(account.getBalance() <100){
System.out.println("您自己都没钱,就别转了");
operate(accounts,sc,account);
}else{
boolean flag = true;
int count = 0;
while(flag){
System.out.println("请输入转账的账户卡号:");
String id = sc.next();
for (int i = 0; i < accounts.size(); i++) {
Account account1 = accounts.get(i);
if(id.equals(account1.getID())){
//如果找到了,就拿到要转账的地址,
flag = false;
count = i;
}
}
}
if(flag){
System.out.println("不存在该账户,请重新确认!");
transferAccount(accounts, sc,account);
}else{
System.out.println("您当前要为"+accounts.get(count).getName()+"转账");
System.out.println("请输入姓名确认");
String name = sc.next();
if(name.equals(accounts.get(count).getName())){
System.out.println("请输入你要转的金额:");
double money = sc.nextDouble();
//转账人减到money 被转账的人加money
account.setBalance(account.getBalance()-money);
accounts.get(count).setBalance(accounts.get(count).getBalance() + money);
System.out.println("转账成功");
queryAccount(account);
}else{
System.out.println("名字不同,请重新确认你的操作");
transferAccount(accounts, sc,account);
}
}
}
}
}
从文件读取信息
//从文件读取账户信息
public static ArrayList<Account> createAccountTable(ArrayList<Account>accounts){
try{
//文件按照 ID 姓名 密码 余额 可提现额度 顺序存储
BufferedReader reader = new BufferedReader(new FileReader("D:\\项目代码\\Accounts信息.txt"));
String str = null;
while((str = reader.readLine() )!= null){
if(!str.equals("")){
String[] line = str.split(",");
Account account = new Account();
account.setID(line[0]);
account.setName(line[1]);
account.setPassword(line[2]);
account.setBalance(Double.parseDouble(line[3]));
account.setWithdrawalAmount(Double.parseDouble(line[4]));
accounts.add(account);
}
}
}catch (Exception e){
System.out.println(e);
}
return accounts;
}
把信息写到文本中
public static void writeToFile(ArrayList<Account>accounts){
try{
FileWriter fw = new FileWriter("D:\\项目代码\\Accounts信息.txt");
BufferedWriter bufw = new BufferedWriter(fw);
for (int i = 0; i < accounts.size(); i++) {
Account account = accounts.get(i);
String str = account.getID()+","+ account.getName()+","+
account.getPassword()+","+ account.getBalance()+","+
account.getWithdrawalAmount();
bufw.write(str);
}
bufw.close();
}catch (Exception e){
System.out.println(e);
}
}