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("您输入有误请重新输入");
}
}