import java.io.*;
import java.net.*;
import java.util.*;
//CIBC 银行ATM终端(客户端)
public class CIBCATM{
private boolean flag = false;
private BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
private String CIBCip = null;
private int CIBCport = 0;
public void selectOpt() throws Exception {//选择卡所属银行,然后转入相应的连接支行服务器的方法
System.out.println("你好,欢迎使用CIBC银行ATM");
while(true){
System.out.println("请插入您的磁卡");
String str = bufferedReader.readLine();
if(str.startsWith("CIBC")){
connectCIBC(str);
break;
}
if(str.startsWith("TD")){
connectCCHToTD(str);
break;
}else{
System.out.println("输入有误,请重新输入");
}
}
}
//连接CIBC服务器,根据选择进行对应的操作
public void connectCIBC(String str)throws Exception {
Socket socket = new Socket(CIBCip,CIBCport);
BufferedReader br = null;
PrintWriter pw = null;
try{//连接服务器判断密码是否正确
while(true){
String printCardId = str;
System.out.println("请输入密码:");
String printPassword = bufferedReader.readLine();
pw = new PrintWriter(socket.getOutputStream(),true);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw.println("m"+printCardId+"!"+printPassword);
String line = null;
while((line = br.readLine())!=null){
if(("true").equals(line)){
System.out.println("密码正确");
flag = true;
break;
}else{
flag = false;
System.out.println("密码错误");
break;
}
}
while(flag){//flag初值为false,如果密码正确则置为true
System.out.println("*****************");
System.out.println("1.查询余额");
System.out.println("2.取款");
System.out.println("3.存款");
System.out.println("4.退出");
System.out.println("请选择你的操作:");
int otp = Integer.parseInt(bufferedReader.readLine());
switch(otp){
case 1 :
//查询余额
pw.println("x"+printCardId);
String line1 = null;
while((line1 = br.readLine())!=null){
if(("true").equals(line1)){
System.out.println("此卡没有存款了!!");
break;
}else{
System.out.println("您的余额:"+line1+"元");
break;
}
}
break;
case 2 :
//取款
System.out.println("请输入你要取款的金额:");
String money = bufferedReader.readLine();
pw.println("q"+printCardId+"!"+money);
String line2 = null;
while((line2 = br.readLine())!=null){
if(("true").equals(line2)){
System.out.println("请您拿好你的钞票:"+money+"元");
break;
}else{
System.out.println("您的余额不足");
break;
}
}
break;
case 3 :
//存款
System.out.println("请你输入你要存的金额");
String money1 = bufferedReader.readLine();
pw.println("s"+printCardId+"!"+money1);
String line3 = null;
while((line3 = br.readLine())!=null){
if(("true").equals(line3)){
System.out.println("您已经存入钞票:"+money1+"元");
break;
}else{
System.out.println("系统故障,不能存款!请您拿好你的钞票");
break;
}
}
break;
case 4 :
//退出
System.out.println("请您清点您的钞票,拿好贵卡!");
pw.println("close");
selectOpt();
break;
default :
System.out.println("输入有误,请重新输入");
}
}
}
}catch(IOException ie){
ie.printStackTrace();
}finally{
br.close();
pw.close();
socket.close();
}
}
//连接TD服务器,根据选择进行操作(先把请求发给CIBC服务器,让CIBC传给总行)
public void connectCCHToTD(String str)throws Exception {
Socket socket = new Socket(CIBCip,CIBCport);
BufferedReader br = null;
PrintWriter pw = null;
try{//连接服务器判断密码是否正确
while(true){
String printCardId = str;
System.out.println("请输入密码:");
String printPassword = bufferedReader.readLine();
pw = new PrintWriter(socket.getOutputStream(),true);
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
pw.println("km"+"TD"+"$"+printCardId+"!"+printPassword+"#"+"CIBC");
//m是验证密码的字符串标示,TD是哪个银行的卡,printCardId卡号,printPassword卡的密码,CIBC从哪个银行的ATM上传来的就写哪个银行
String line = null;
while((line = br.readLine())!=null){
if(("true").equals(line)){
System.out.println("密码正确");
flag = true;
break;
}else{
flag = false;
System.out.println("密码错误");
break;
}
}
while(flag){//flag初值为false,如果密码正确则置为true
System.out.println("*****************");
System.out.println("1.查询余额");
System.out.println("2.取款");
System.out.println("3.退出");
System.out.println("请选择你的操作:");
int otp = Integer.parseInt(bufferedReader.readLine());
switch(otp){
case 1 :
//查询余额
pw.println("kx"+"TD"+"$"+printCardId+"#"+"CIBC");
String line1 = null;
while((line1 = br.readLine())!=null){
if(("true").equals(line1)){
System.out.println("此卡没有存款了!!");
break;
}else{
System.out.println("您的余额:"+line1+"元");
break;
}
}
break;
case 2 :
//取款
System.out.println("请输入你要取款的金额:");
String money = bufferedReader.readLine();
//pw.println("km"+"TD"+"$"+printCardId+"!"+printPassword+"#"+"CIBC");
pw.println("kq"+"TD"+"$"+printCardId+"!"+money+"#"+"CIBC");
String line2 = null;
while((line2 = br.readLine())!=null){
if(("true").equals(line2)){
System.out.println("请您拿好你的钞票:"+money+"元");
break;
}else{
System.out.println("您的余额不足");
break;
}
}
break;
case 3 :
//退出
System.out.println("请您清点您的钞票,拿好贵卡!");
pw.println("close");
selectOpt();
break;
default :
System.out.println("输入有误,请重新输入");
}
}
}
}catch(IOException ie){
ie.printStackTrace();
}finally{
br.close();
pw.close();
socket.close();
}
}
//读取配置文件,将ip和port设置好
public void starts()throws Exception {
Properties prop = new Properties();
try{
prop.load(new FileInputStream("config.properties"));
}catch(IOException ie){
ie.printStackTrace();
}
this.CIBCip = prop.getProperty("cibcbankIP");
this.CIBCport = Integer.parseInt(prop.getProperty("cibcbankPort"));
}
public static void main(String[] args)throws Exception {
CIBCATM ca = new CIBCATM();
ca.starts();
ca.selectOpt();
}
}