基于控制台的ATM机系统

来源:互联网 发布:windows系统更新失败 编辑:程序博客网 时间:2024/05/17 22:59
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());} elseSystem.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();}@Overridepublic boolean is(Item item) {transaction();return super.is(item);}@Overridepublic 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;@Overridepublic 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;}@Overridepublic boolean delete(Item item) {return false;}@Overridepublic 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;}@Overridepublic 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);//将刚刚添加的记录的账户赋值给accountSystem.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("您输入有误请重新输入"); }}


                                             
0 0
原创粉丝点击