设计一个银行ATM取款机系统。
要求:
1、需要有账户类Account,里面包含账户姓名、账号、密码、余额、账户类型 管理员和普通用户 两种等信息,不同的账户包括管理员Manager类、普通用户User类 继承自此账户类。
2、账户的信息需要从文件中读取例如:读取记事本,读取的存取到集合类中ArrayList、LinkedList、HashMap、HashTable。
3、普通用户需要输入账号、密码及账户类型,在确认正确后显示除了密码的所有信息;否则提示用户密码或者账号输入错误,然后回到登录登录要求有:账号输入、密码、以及账户类型的选择。
4、普通用户登录成功后。用户可以取钱、转账、退出。
4.1 取钱。需要输入金额,如果金额大于余额需要提示 提示:如果输入的不是数字,需要进行异常处理;如果输入的不是正数,需要提示。要考虑到非正常的情况 ;
4.2 转账。如果金额小于等于余额,直接转账,在转账后,需要输入对方的账号对方账号要存在,才能成功,否则会有相应提示;否则提示余额不足。要考虑到非正常的情况。
4.3 退出。直接退出到登录页面。
5、管理员账号登录。
5.1 可以查看所有的普通用户 以列表的形式存在 ,并且对所有的普通用户都可以修改根据列表的信息前的对应的1、2、3等序号进行修改,不能修改账号,只能修改密码,仅限于密码重置为默认密码 例如默认密码000000
package _7_text;
import java.util.ArrayList;
public class Account {
private String name = "";
private int role = 0;
private String password = "";
public static ArrayList<Account> normalUsersList = new ArrayList<Account>();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getRole() {
return role;
}
public void setRole(int role) {
this.role = role;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Account(String name, int role, String password) {
super();
this.name = name;
this.role = role;
this.password = password;
}
public Account() {
super();
}
}
package _7_text;
public class Manager extends Account {
//数据文件中,管理员信息和普通用户都存在一个文件中,
//只是管理员没有金额,金额部分是一个空字符串
private String manageAccount = "";//管理员账号
public static final String defaultedPassword = "000000";//管理员给普通用户重置密码:
public String getManageAccount() {
return manageAccount;
}
public void setManageAccount(String manageAccount) {
this.manageAccount = manageAccount;
}
}
package _7_text;
public class NormalUser extends Account {
private int money = 0;//金额
//普通用户卡号,用户转账,唯一
public String id_card = "";
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
public String getId_card() {
return id_card;
}
public void setId_card(String id_card) {
this.id_card = id_card;
}
}
package _7_text;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;
public class ATMTest {
public static void main(String[] args) {
try {
//1.文件读取,且把文件中的数据转成对象,在集合中保存
//读文档
File file = new File("src\\account.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String strAccount = bufferedReader.readLine();//读取文件中的一行(按照每行读取数据)
//管理员在文件的第一行(管理员放在链表的第一个)
Manager manager = new Manager();
String[] temp = strAccount.split(",");//把上面读的一条记录分割成字符串数组
manager.setManageAccount(temp[1]);
manager.setName(temp[0]);
manager.setPassword(temp[2]);
manager.setRole(Integer.parseInt(temp[4]));
Account.normalUsersList.add(manager);//把第一个用户(管理员)放在集合链表中
//继续读文件,普通用户在其他行
strAccount = bufferedReader.readLine();
while (strAccount != null) {
temp = strAccount.split(",");
NormalUser normalUser = new NormalUser();
normalUser.setName(temp[0]);
normalUser.setId_card(temp[1]);
normalUser.setMoney(Integer.parseInt(temp[2]));
normalUser.setPassword(temp[3]);
normalUser.setRole(0);
Account.normalUsersList.add(normalUser);
strAccount = bufferedReader.readLine();
}
while (true) {
System.out.println("======用户登录======");
System.out.println("======1.输入用户账号======");
Scanner scanner = new Scanner(System.in);
String strAccountTemp = scanner.next();
System.out.println("======2.输入用户密码======");
String strPasswordTemp = scanner.next();
System.out.println("======3.输入用户角色(只能允许输入0或者1,0:管理员;1:普通用户)======");
while (true) {
try {
int role = Integer.parseInt(scanner.next());
if (role == 1 || role == 0) {
break;
} else {
System.out.printf("请再次输入角色,确定输入的是数字,且是0或1");
}
} catch (Exception e) {
System.out.println("请再次输入角色,确定输入的是数字,且是0或1");
}
}
boolean boolResult = false;
for (Account account : Account.normalUsersList) {//遍历Account.normalUsersList的集合,取出每一个元素
//boolResult = true;
}
if (boolResult) {
while (true) {
for (int i = 0; i < Account.normalUsersList.size(); i++) {
NormalUser normalUserTmp = (NormalUser) Account.normalUsersList.get(i);
if ("zhangsan3".equals(normalUserTmp.getName())) {
normalUserTmp.setMoney(normalUserTmp.getMoney() - 1000);
}
}
}
} else {
System.out.println("登录不成功");
System.out.println("按1继续登录,按2退出登录,结束程序");
int iChoice = scanner.nextInt();
if (iChoice == 2) {
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(file, false)));
String str = "";
Manager managerTmp = (Manager) Account.normalUsersList.get(0);
str = managerTmp.getName() + "," + managerTmp.getManageAccount() +
",," + managerTmp.getPassword() + "," + managerTmp.getRole();
bufferedWriter.write(str);
bufferedWriter.newLine();
for (int i = 1; i < Account.normalUsersList.size(); i++) {
NormalUser normalUserTmp = (NormalUser) Account.normalUsersList.get(i);
str = normalUserTmp.getName() + "," + normalUserTmp.getId_card() +
"," + normalUserTmp.getMoney() + "," + normalUserTmp.getPassword() +
"," + normalUserTmp.getRole();
bufferedWriter.write(str);
bufferedWriter.newLine();
}
bufferedWriter.flush();
bufferedWriter.close();
System.out.println("程序结束");
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}