ATM模拟

Person类

package atm;

import java.io.Serializable;

public class Person implements Serializable {

	private static final long serialVersionUID = -7086234362131593577L;
	private int id;//
	private String name;
	private String acount;//
	private String passwd;
	private double money;

	public Person() {
		super();
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getAcount() {
		return acount;
	}

	public void setAcount(String acount) {
		this.acount = acount;
	}

	public String getPasswd() {
		return passwd;
	}

	public void setPasswd(String passwd) {
		this.passwd = passwd;
	}

	public double getMoney() {
		return money;
	}

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

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", acount=" + acount + ", passwd=" + passwd + ", money=" + money
				+ "]";
	}

}

ATM核心类

package atm;

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

public class ATM {
	static int id = 0;
	/**
	 * 这个person变量不可以初始化,必须在添加账户的时候再初始化,此person变量指当前的人
	 */
	private Person person = null;
	public HashMap<String, Person> atm = new HashMap<>();

	public HashMap<String, Person> getAtm() {
		return atm;
	}

	public void setAtm(HashMap<String, Person> atm) {
		this.atm = atm;
	}

	public Person reigster(String name, String passwd) {
		person = new Person();
		person.setId(++id);
		person.setName(name);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddhhmmss");
		Date date = new Date();
		String acount = sdf.format(date) + id;
		person.setAcount(acount);
		person.setPasswd(passwd);
		atm.put(acount, person);
		return person;
	}

	public Person land(String acount, String passwd) {
		Person newPerson = atm.get(acount);
		if (newPerson != null) {
			if (newPerson.getAcount().equals(acount)) {
				if (newPerson.getPasswd().equals(passwd)) {
					// 登陆的时候把成员变量该为着个查询的到的变量
					// 否则挡墙登陆的person就一直都是null
					// 这就可能导致我遇到的问题:
					// 转账之后当前对象就变成了对方,登陆的时候查询不到自己的信息
					this.person = newPerson;
					return newPerson;
				} else {
					System.out.println("密码错误");
					return null;
				}
			} else {
				System.out.println("账号错误");
				return null;
			}
		} else {
			System.out.println("没有这个账户");
			return null;
		}
	}

	public boolean save(double money) {
		person.setMoney(person.getMoney() + money);
		return true;
	}

	public boolean take(double money) {
		person.setMoney(person.getMoney() - money);
		return true;
	}

	public Person query() {
		return this.person;
	}

	public void showAll() {
		Collection<Person> s = atm.values();
		for (Person a : s) {
			System.out.println(a);
		}
	}

	public boolean transfer(String newAcount, double addMoney) {
		double m = atm.get(newAcount).getMoney();
		atm.get(newAcount).setMoney(m + addMoney);
		double n = person.getMoney();
		person.setMoney(n - addMoney);
		return true;
	}
}

ATM测试类

package atm;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Scanner;

public class ATMTest {

	public static void main(String[] args) {
		ATM demo = new ATM();
		System.out.println("欢迎使用火才ATM\n");
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		while (true) {
			System.out.println("1.注册     2.登陆");
			int i = sc.nextInt();
			if (i == 1) {
				System.out.println("请输入名字:");
				String name = sc.next();
				System.out.println("请输入密码");
				String passwd = sc.next();
				Person person = demo.reigster(name, passwd);
				if (person != null) {
					System.out.println("注册成功");
					System.out.println(person);
					// 注册成功之后就要将其存到文件中去
					saveToFile(demo.getAtm());
				} else {
					System.out.println("注册失败");
				}
			}
			if (i == 2) {
				// 登陆的时候先加载文件中的信息加载到atm中
				loadToAtm(demo);
				sc = new Scanner(System.in);
				System.out.println("请输入账号");
				String acount = sc.next();
				System.out.println("请输入密码");
				String passwd = sc.next();
				Person person = demo.land(acount, passwd);
				if (person != null) {
					System.out.println("登陆成功\n");
					c: while (true) {
						System.out.println("1.存钱   2.取钱   3.转账   4.查询   5.返回主菜单");
						int j = sc.nextInt();
						double money = 0;
						switch (j) {
						case 1:
							System.out.println("请输入存多少钱");
							money = sc.nextDouble();
							demo.save(money);
							System.out.println("存钱成功\n");
							break;
						case 2:
							System.out.println("请输入取多少钱");
							money = sc.nextDouble();
							demo.take(money);
							System.out.println("取钱成功\n");
							break;
						case 3:
							sc = new Scanner(System.in);
							System.out.println("请输入对方账号");
							String newAcount = sc.next();
							System.out.println("请输转多少钱");
							money = sc.nextDouble();
							demo.transfer(newAcount, money);
							System.out.println("转钱成功\n");
							break;
						case 4:
							System.out.println(demo.query());
							break;
						case 5:
							// 当返回主菜单的时候就重新保存一次
							saveToFile(demo.getAtm());
							break c;
						// case6作为调试的时候用查询各个人的信息
						case 6:
							demo.showAll();
							break;
						default:
							break;
						}
					}
				} else {
					System.out.println("登陆失败");
				}
			}
		}
	}

	// 将文件中的信息加载到ATM机中去
	@SuppressWarnings("unchecked")
	private static void loadToAtm(ATM demo) {
		ObjectInputStream oos = null;
		try {
			oos = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("c:/atm.txt"))));
			try {
				demo.setAtm((HashMap<String, Person>) oos.readObject());
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (oos != null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

	}

	// 将用户的账户信息保存到文件中
	private static void saveToFile(HashMap<String, Person> atm) {
		ObjectOutputStream oos = null;
		try {
			oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("c:/atm.txt"))));
			oos.writeObject(atm);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (oos != null) {
				try {
					oos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}

}


猜你喜欢

转载自blog.csdn.net/qq_32182637/article/details/79196542
atm