基于控制台的ATM机系统

package atmsystem;

import database.*;
import user.*;
import view.View;
import java.util.HashMap;
import java.util.Scanner;

/**
 * @author 李永军
 *
 */
public class ATMSystem {
	private Scanner in;
	boolean b = false;// 登录是否成功的标志变量
	// 利用组合
	private BankDatabase bdb;// 创建银行数据库对象的引用
	private User u;// 创建用户对象的引用
	private View v;// 创建界面对象的引用
	private HashMap<Integer, DrawMoney> kv;// 在取款时 每个数字 对应的一个功能(取的钱数)所以用HashMap来实现,这样以后如果要改数字所对应的钱数修改的地方会很少

	public ATMSystem()// 将成员变量初始化
	{
		v = new View();
		in = new Scanner(System.in);
		kv = new HashMap<Integer, DrawMoney>();
		kv.put(1, new DrawMoney(20));
		kv.put(2, new DrawMoney(40));
		kv.put(3, new DrawMoney(60));
		kv.put(4, new DrawMoney(100));
		kv.put(5, new DrawMoney(200));
		kv.put(6, new DrawMoneyOther());
	}

	public void primaryMenu()// 程序运行后的登录处理
	{
		String str = v.Menu();// 将封装好的界面对象
		switch (str) {
		case "登录":
			this.b = land();
			break;
		case "注册":
			register();
			primaryMenu();
			break;
		case "":
			v.error();
			primaryMenu();
			break;
		}
		if (b) {
			primaryMen();// 服务的菜单
		}
	}

	public void register()// 注册的操作
	{
		System.out.println("请输入您的姓名");
		String name = in.next();
		System.out.println("请输入您的密码");
		String pin = in.next();
		u = new User();//给User对象赋值并初始化
		u.setName(name);
		u.setPin(pin);
		bdb = new BankDatabase();
		bdb.register(u);//调用银行数据库方法将数据添加到数据库中
		primaryMenu();//返回登录界面
		
	}

	public boolean land()//登录操作
	{
		int s = v.landViewA();
		String pin = v.landViewP();//将在View对象接受的账户和密码给User对象赋值
		u = new User();
		u.setId(s);
		u.setPin(pin);
		bdb = new BankDatabase();//初始化银行数据库
		if (bdb.query(u)) //查找数据库中数据又没有该用户
		{
			return true;
		}
		return false;
	}

	public int query() // 返回用户的余额
	{
		return u.getBalance();
	}

	public boolean logOff() 
	{
		this.b = false;
		return true;
	}

	public void drawMoneyMenu()// 取款的服务操作
	{
		int k = v.drawMoneyMenu();
		if (kv.get(k).is(u)) {
			u.setBalance(kv.get(k).bala(u));
			if (bdb.update(u))
				System.out.println("取款成功!您的余额:" + query());
		} else
			System.out.println("余额不足!");
	}

	public void primaryMen()// 服务菜单的操作
	{
		int choose =v.primaryMenu();
		if(choose<0||choose>4)
		{
			v.error();//输出错误信息 
			primaryMen();
		}
		else
		{
			switch (choose) 
			{
			case 1:
				System.out.println("您的余额:" + query());
				returnMenu();
				break;// 查询
			case 2:
				drawMoneyMenu();
				returnMenu();
				break;//取款服务
			case 3:
				DepositMoney dm = new DepositMoney();
				if (dm.a()) {
					u.setBalance(u.getBalance() + dm.getMoney());
					bdb.update(u);
					System.out.println("存入成功");
					System.out.println("您的余额:" + query());
					returnMenu();
				}
				break;//存款服务
			case 4:
				if (logOff()) {
					System.out.println("注销成功!");
				} else {
					System.out.println("注销失败!");
				}
				break;//注销操作
	
			}
		}
	}

	public void returnMenu()// 返回服务菜单
	{
		System.out.println("按任意键 返回主菜单");
		if (in.nextLine() != null)
			primaryMen();
	}

}
<pre name="code" class="java">package atmsystem;
import view.View;
/**
 * @author 李永军
 *
 */
public class DepositMoney {
	private int money;
	
	public boolean a()
	{
		View v = new View();
		int money=v.DepositMoneyMenu();
		if(money>0)
		{
			this.money=money;
			return true;
		}
			
		return false;
	}
	public int getMoney()
	{
		return this.money;
	}
	
}

package atmsystem;

import user.*;

/**
 * @author 李永军
 *
 */
public class DrawMoney {
	private int money;
	
	public DrawMoney(int money) {
		this.money = money;
	}
	public DrawMoney()
	{
		
	}

	public boolean is(Item item )
	{
		if(((User)item).getBalance()>money&&money<10000)//判断余额是否大于用户所取金额
		{
			return true;
		}
		else
		{
			return false;
		}
	}
	public int bala(Item item)
	{
		return ((User)item).getBalance()-money;//如果判断为真就返回减去所取金额之后的金额
	}
	
	public void setMoney(int m)
	{
		this.money=m;
	}
	
}

package atmsystem;

import user.*;
import view.View;
/**
 * @author 李永军
 *
 */
public class DrawMoneyOther extends DrawMoney{
	private View v;
	public DrawMoneyOther()
	{
		v= new View();
	}

	@Override
	public boolean is(Item item) {
		transaction();
		return super.is(item);
	}

	@Override
	public int bala(Item item) {
		
		
		return super.bala(item);
	}
	public void transaction()
	{
		
		int money=v.drawMoneyOther();
		if(money>0)
			super.setMoney(money);
		else
		{
			System.out.println("输入有误请重新输入:");
			transaction();
		}
	}

}

package database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import user.*;

/**
 * @author 李永军
 *
 */
public class BankDatabase implements DatabaseSystem {
	private Connection conn = null;
	private PreparedStatement pstmt=null;
	private ResultSet rs=null;
	private String sql;
	@Override
	public boolean query(Item item) {
		conn = DBUtil.open();
		String sql="select * from account";
		boolean b=false;
			try {
				Statement stmt = conn.createStatement();
				ResultSet rs= stmt.executeQuery(sql);
				while(rs.next())  //遍历数据库中的account表 和登录是接收到的账户密码做比较如果账户密码正确返回true若错误返回false
				{
					if(item.getId()==rs.getInt(1))
					{
						if(((User)item).getPin().equals(rs.getString(3)))//如果账户密码正确将User对象赋值
						{
							item.setName(rs.getString(2));//多态 将name赋值给User对象
							((User)item).setBalance(rs.getInt(4));// 向下塑形 将余额赋值给User对象
							System.out.println("Hi   "+rs.getString(2));
							b=true;
							return true;// 对比成功 返回true
						}
						else
						{		
							System.out.println("密码输入错误,请重新登录:");
							return b;//重新调用登陆系统
						}
					}
					
				}	
					if(!b)
					{	System.out.println("您还没有注册请先注册。");
						return b;
					}
				
			} catch (SQLException e) {
				e.printStackTrace();
			}finally
			{
				DBUtil.close(conn);//关闭数据库
			}
			return b;
	}

	@Override
	public boolean delete(Item item) {
		return false;
	}

	@Override
	public boolean update(Item item) //更新数据库中的余额
	{
		conn=DBUtil.open();
		sql="update account set balance=? where account=?";
		try {
			pstmt=conn.prepareStatement(sql);
			pstmt.setInt(1, ((User)item).getBalance());
			pstmt.setInt(2, item.getId());
			pstmt.executeUpdate();
			return true;
		} catch (SQLException e) {
			System.out.println("余额不足 无法取出");
		}
		return false;
	}

	@Override
	public void register(Item item) // 将在ATMSystem中User对象中的账户和密码添加到数据库中
	{
		conn = DBUtil.open();
		String sql="insert account(name,pin,balance) values(?,?,default)";//sql语句添加记录
		try {
			conn=DBUtil.open();
			PreparedStatement pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, ((User)item).getName());
			pstmt.setString(2, ((User)item).getPin());
			pstmt.executeUpdate();
			rs= pstmt.executeQuery("select * from account");
			if(rs.next())//如果数据表中有记录 
			{
				rs.last();//将游标移到最后一条记录
				int account = rs.getInt(1);//将刚刚添加的记录的账户赋值给account
				System.out.println("注册成功!您的账号是:"+account);//输出新添加的账户号
				item=new User(account,((User)item).getName(),((User)item).getPin());//创建一个新的用户将数据表中的记录数据赋值给User对象
			}
		} catch (SQLException e) {
			System.out.println("注册失败!");
		}finally{
			DBUtil.close(conn);//关闭数据库连接
			
		}
	}

}

package database;

import user.Item;

/**
 * @author 李永军
 *
 */
public interface DatabaseSystem {
	
	
	boolean query(Item item);
	void register(Item item);
	boolean delete(Item item);
	boolean update(Item item);
	
}

package database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * @author 李永军
 *
 */
public class DBUtil {
	private static String driver;
	private static String url;
	private static String username;
	private static String password;
	static{
		driver="com.mysql.jdbc.Driver";
		url="jdbc:mysql://localhost:3306/imooc";
		username="root";
		password="";
	}
	public static Connection open()
	{
		try {
			Class.forName(driver);
			Connection conn=DriverManager.getConnection(url, username, password);
			return conn;
			
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return null;
	}
	public static void close(Connection conn)
	{
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
}

package test;

import atmsystem.ATMSystem;

/**
 * @author 李永军
 *
 */
public class Test {
	public static void main(String[] args) {
		ATMSystem atm = new ATMSystem();
		atm.primaryMenu();
		
	}
}

package user;

/**
 * @author 李永军
 *
 */
public class Item {
	private int id;
	private String name;
	
	public int getId() {
		return id;
	}

	public String getName() {
		return name;
	}

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

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

package user;

/**
 * @author 李永军
 *
 */
public class User extends Item{
	private int id;
	private String name;
	private String pin;
	private int balance=0;
	
	
	public User()
	{
		
	}
	public User(int id,String name, String pin) {
		this.id=id;
		this.name = name;
		this.pin = pin;
	}



	public String getPin() {
		return pin;
	}
	public void setPin(String pin) {
		this.pin = pin;
	}
	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 int getBalance() {
		return balance;
	}

	public void setBalance(int balance) {
		this.balance = balance;
	}


	
	
}

package view;

import java.util.Scanner;

/**
 * @author 李永军
 *
 */
public class View {
	private Scanner in = new Scanner(System.in);
	
	public String Menu()//登录界面的输出信息
	{
		System.out.println("欢迎来到登陆界面请您输入登陆进行登陆(如果没有账户请输入注册)");
		String land = in.next();
		if("登录".equals(land)||"注册".equals(land))		
			return land;//将接收到的指令返回交给ATMSystem类
		return "";
	}
	public int primaryMenu()
	{
		System.out.println("----------输入数字1进行查询服务------------");
		System.out.println("----------输入数字2进行取钱服务------------");
		System.out.println("----------输入数字3进行存钱服务------------");
		System.out.println("----------输入数字4注销用户---------------");
		return in.nextInt();
	}
	public int landViewA()
	{
		System.out.println("请输入您的账户号:");
		int s = in.nextInt();
		return s;
		
	}
	public String landViewP()
	{
		System.out.println("请输入您的账密码:");
		String pin =in.next(); 
		return pin;
	}
	public int drawMoneyMenu()//取钱界面
	{
		System.out.println("Withdrawal menu");
		System.out.println("1 - $20       4 - $100");
		System.out.println("2 - $40       5 - $200");
		System.out.println("3 - $60       6 - Cancel transaction");
		System.out.println("Choose a withdrawal amount");
		int number = in.nextInt();
		return number;
	}
	public int drawMoneyOther() {
		System.out.println("请输入您的金额");
		return in.nextInt();
	}
	public int DepositMoneyMenu()
	{
		System.out.println("请放入钱:");
		int money = in.nextInt();
		return money;
	}
	public void error()
	{
		System.out.println("您输入有误请重新输入"); 
	}
}



                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值