/*信1705-1 20173458 王嘉梁*/
packageatm;importjava.util.Scanner;import java.io.*;importjava.util.Date;importjava.text.SimpleDateFormat;classAccount {privateString accountID;privateString accountname;privateString operatedate;private intoperatetype;privateString accountpassword;private intaccountbalance;private intamount;public String[] operation = new String[100]; //记录所有的操作
int operationTimes; //存取款、转账、改密、查询余额操作的次数
public int inputTimes; //录入密码错误的次数
public voidsetAccountID(String a) {
accountID=a;
}public voidsetAccountname(String a) {
accountname=a;
}public voidsetOperatedate(String a) {
operatedate=a;
}public void setOperatetype(inta) {
operatetype=a;
}public voidsetAccountpassword(String a) {
accountpassword=a;
}public void setAccountbalance(inta) {
accountbalance=a;
}public void setAmount(inta) {
amount=a;
}publicString getAccountID() {returnaccountID;
}publicString getAccountname() {returnaccountname;
}publicString getOperatedate() {returnoperatedate;
}public intgetOperatetype() {returnoperatetype;
}publicString getAccountpassword() {returnaccountpassword;
}public intgetAccountbalance() {returnaccountbalance;
}public intgetAmount() {returnamount;
}
Account()
{
accountID=null;
accountname=null;
operatedate=null;
operatetype=0;
accountpassword=null;
accountbalance=0;
amount=0;for(int i=0;i<100;i++)
operation[i]=null;
operationTimes=0;
inputTimes=0;
}
}classAccountManager{static Scanner sc = newScanner(System.in);static Account[] account = new Account[10];static int m=0;public void informationInput() throwsIOException {
BufferedReader br= new BufferedReader(new InputStreamReader(new FileInputStream("accountinformation.txt")));
String data= null;int i=1;while((data = br.readLine())!=null) //将accountinformation.txt的内容导入到对象数组account内
{switch(i)
{case 1:account[m].setAccountID(data);break;case 2:account[m].setAccountname(data);break;case 3:account[m].setAccountpassword(data);break;case 4:account[m].setAccountbalance(Integer.parseInt(data));break;
}
i++;if(i>4)
{
i=1;
m++;
}
}
br.close();
}public void listInput() throwsIOException {
BufferedReader br= new BufferedReader(new InputStreamReader(new FileInputStream("accountlist.txt")));
String data;for(int i=1,j=0;i<5*m && j
{
data=br.readLine();if(i%5==3)
account[j].setOperatedate(data);else if(i%5==4)
account[j].setOperatetype(Integer.parseInt(data));else if(i%5==0)
{
account[j].setAmount(Integer.parseInt(data));
j++;
}
}
br.close();
}
AccountManager()throwsIOException {for(int i=0;i<10;i++)
account[i]= newAccount();
informationInput();
listInput();
}public void outputAll() throwsIOException {
BufferedWriter bw1= new BufferedWriter(new OutputStreamWriter(new FileOutputStream("accountinformation.txt")));
BufferedWriter bw2= new BufferedWriter(new OutputStreamWriter(new FileOutputStream("accountlist.txt")));for(int i=0;i
{
bw1.write(account[i].getAccountID()+ "\r\n"); //更新accountinformation.txt的内容
bw1.write(account[i].getAccountname() + "\r\n");
bw1.write(account[i].getAccountpassword()+ "\r\n");
bw1.write(Integer.toString(account[i].getAccountbalance())+ "\r\n");
bw1.flush();
bw2.write(account[i].getAccountID()+ "\r\n"); //更新accountlist.txt的内容
bw2.write(account[i].getAccountname() + "\r\n");
bw2.write(account[i].getOperatedate()+ "\r\n");
bw2.write(Integer.toString(account[i].getOperatetype())+ "\r\n");
bw2.write(Integer.toString(account[i].getAmount())+ "\r\n");
bw2.flush();
}bw1.close();
bw2.close();
}public int input() throwsIOException {
String regex= "[0-9]{8}";
System.out.println("***************************************************************");
System.out.println(" 欢迎使用中国工商银行自动柜员系统");
System.out.println("***************************************************************");
System.out.print(" 请输入您的账号:");
String ID=sc.next();boolean isExist = false;if(ID.matches(regex)) //判断是否为数字和数字位数是否为8位
{for(int i=0;i
if(ID.compareTo(account[i].getAccountID())==0)
{
isExist=true;while(account[i].inputTimes<3)
{
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[i].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.print(" 请输入您的密码:");
String pw=sc.next();if(pw.compareTo(account[i].getAccountpassword())==0) //密码输入正确
returni;elseSystem.out.println("密码录入错误");
account[i].inputTimes++;
}
System.out.println("该账号三次录入密码错误,该卡已被系统没收,请与工行及时联系处理");
}if(isExist==false)
{
System.out.println("该账号不存在"); //没有找到
return -1;
}
}elseSystem.out.println("该卡不是工行卡"); //不符合要求
return -1;
}public int face(int t) throwsIOException {int i=1;do{
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.println(" 1、存款;\n 2、取款;\n 3、转账汇款;\n 4、修改密码;\n 5、查询余额;");
System.out.print("***************************************************************\n请选择:");
String s=sc.next();switch(s)
{case "1":i=save(t);break;case "2":i=take(t);break;case "3":transfer(t);break;case "4":changePassword(t);break;case "5":findBalance(t);break;case "Q":i=0;break;case "q":i=0;break;default:System.out.println("请正确选择!");
}
}while(i!=0);return -1; //返回值为-1使主函数while语句结束,重新输入账号密码
}public int save(int t) throwsIOException {do{
String regex= "[0-9]+";
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.print(" 请输入存款金额:");
String s=sc.next();if(s.matches(regex))
{
account[t].setAccountbalance(account[t].getAccountbalance()+Integer.parseInt(s));
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.println("\t\t当前账户存款操作成功。");
System.out.println("\t\t当前账户余额为:"+account[t].getAccountbalance()+"元");
System.out.println("****************************************************************");
Date d= newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
account[t].setOperatedate(sdf.format(d));
account[t].setOperatetype(1);
account[t].setAmount(Integer.parseInt(s));
account[t].operation[account[t].operationTimes]="1"+sdf.format(d)+s; //用于存储所有进行过的存款操作,格式为操作类型、操作时间、操作金额
account[t].operationTimes++;
outputAll();return 1; //1为存款成功
}else if(s.compareTo("q")==0)return 0; //0为返回输入账号密码界面
elseSystem.out.println("输入金额有误");
}while(true);
}public int take(int t) throwsIOException{do{
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.println("\t\t当前账户每日可以支取2万元。\n\t\t1、100元\n\t\t2、500元\n\t\t3、1000元\n\t\t4、1500元\n\t\t5、2000元\n\t\t6、5000元\n\t\t7、其他金额\n\t\t8、退卡\n\t\t9、返回");
System.out.print("***************************************************************\n请选择:");
String s=sc.next();int money=0;switch(s)
{case "1":money=100;break;case "2":money=500;break;case "3":money=1000;break;case "4":money=1500;break;case "5":money=2000;break;case "6":money=5000;break;case "7":
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.print(" 请输入取款金额:");
String regex= "[0-9]+";
String str=sc.next();if(str.matches(regex))
money=Integer.parseInt(str);elseSystem.out.println("输入金额有误");break;case "8":return 0; //回到输入账号密码界面
case "9":return 1; //回到选择功能界面
default:System.out.println("请正确选择!");
}if(money==0)continue;else if(account[t].getAccountbalance()
System.out.println("账户余额不足");else{
account[t].setAccountbalance(account[t].getAccountbalance()-money);
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.println("\t\t当前账户取款操作"+money+"元成功。");
System.out.println("\t\t当前账户余额为:"+account[t].getAccountbalance()+"元");
System.out.println("****************************************************************");
Date d= newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
account[t].setOperatedate(sdf.format(d));
account[t].setOperatetype(2);
account[t].setAmount(money);
account[t].operation[account[t].operationTimes]="2"+sdf.format(d)+Integer.toString(money); //用于存储所有进行过的取款操作
account[t].operationTimes++;
outputAll();
}
}while(true);
}public void transfer(int t) throwsIOException{
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.print(" 请输入转账账户:");
String ID=sc.next();boolean isExist = false;for(int i=0;i
if(ID.compareTo(account[i].getAccountID())==0)
{
isExist=true;
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.print(" 请输入金额:");int money=sc.nextInt();if(account[t].getAccountbalance()
System.out.println("账户余额不足");else{
StringBuffer name= new StringBuffer(account[i].getAccountname()); //隐藏被转账者账户姓名
name.replace(0, 1, "*");
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.println(" 请确认是否向"+name.toString()+"转账"+money+"元。(y/n)");
String s=sc.next();if(s.compareTo("Y")==0||s.compareTo("y")==0)
{
account[t].setAccountbalance(account[t].getAccountbalance()-money);
account[i].setAccountbalance(account[i].getAccountbalance()+money);
Date d= newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
account[t].setOperatedate(sdf.format(d));
account[t].setOperatetype(3);
account[t].setAmount(money);
account[t].operation[account[t].operationTimes]="3"+sdf.format(d)+account[i].getAccountID()+Integer.toString(money); //用于存储进行过的转账操作
account[t].operationTimes++;
outputAll();
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.println(" 当前账户向"+name.toString()+"成功转账"+money+"元。");
System.out.println(" 当前账户余额为:"+account[t].getAccountbalance()+"元");
System.out.println("***************************************************************");
}
}
}if(isExist==false)
System.out.println("该账号不存在"); //没有找到被转账者账户
}public void changePassword(int t) throwsIOException{do{
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.print(" 请输入当前密码:");
String oldPassword=sc.next();if(oldPassword.compareTo(account[t].getAccountpassword())!=0)
System.out.println("当前密码录入错误");else{
System.out.print(" 请输入修改密码:");
String newPassword=sc.next();
System.out.print(" 请输入确认密码:");
String confirmPassword=sc.next();if(newPassword.compareTo(confirmPassword)!=0)
System.out.println("修改密码与确认密码不一致");else{
Date d= newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
account[t].setOperatedate(sdf.format(d));
account[t].setOperatetype(4);
account[t].setAmount(0);
account[t].operation[account[t].operationTimes]="4"+sdf.format(d)+account[t].getAccountpassword()+newPassword; //用于存储进行过的改密操作
account[t].operationTimes++;
account[t].setAccountpassword(newPassword);
outputAll();
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.print(" 当前账户密码修改成功");return;
}
}
}while(true);
}public void findBalance(int t) throwsIOException{
Date d= newDate();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd");
account[t].setOperatedate(sdf.format(d));
account[t].setOperatetype(4);
account[t].setAmount(0);
outputAll();
System.out.println("\n\n\n***************************************************************");
System.out.println(" 欢迎"+account[t].getAccountname()+"使用中国工商银行自助柜员系统");
System.out.println("***************************************************************");
System.out.println("\t\t当前账户余额为:"+account[t].getAccountbalance()+"元");
System.out.println("\t\t账户清单信息为:");for(int i=0,j=1;i
{
String s1=account[t].operation[i].substring(0,1);
String date=account[t].operation[i].substring(1,11);switch(s1)
{case "1":
String amount1=account[t].operation[i].substring(11);
System.out.println("\t"+j+"、"+date+"\t存款\t\t"+amount1+"元");
j++;break;case "2":
String amount2=account[t].operation[i].substring(11);
System.out.println("\t"+j+"、"+date+"\t取款\t\t"+amount2+"元");
j++;break;case "3":
String man=account[t].operation[i].substring(11,19);
String amount3=account[t].operation[i].substring(19);
System.out.println("\t"+j+"、"+date+"\t转账汇款\t\t"+"向账户"+man+"转账"+amount3+"元");
j++;break;case "4":
String operate=account[t].operation[i].substring(11,17)+"修改为"+account[t].operation[i].substring(17);
System.out.println("\t"+j+"、"+date+"\t修改账户密码\t"+operate);
j++;break;
}
}
System.out.println("***************************************************************");
}
}public classATM {public static void main(String[] args) throwsIOException {
AccountManager am= newAccountManager();do{int t=am.input();while(t>=0)
t=am.face(t);
}while(true);
}
}