java学习7:银行存取款的例子,主要涉及对象同步问题,类似于数据库存取款,数据一致性问题

银行存取款的例子,主要涉及对象同步问题,类似于数据库存取款,数据一致性问题。
--存取款都是用线程来控制


注意:这里程序设计中没考虑账户金额不足的问题,这里只考虑了对操作对象的同步问题。
      对共享对象操作的类、代码块 要加上 synchronized 关键字


代码如下:
Bank类:
package com.imooc.bank;


public class Bank {
    private String account;//账号
    private int balance;//余额


    public Bank(String account, int balance) {
        this.account = account;
        this.balance = balance;
    }


    public String getAccount() {
        return account;
    }


    public void setAccount(String account) {
        this.account = account;
    }


    public int getBalance() {
        return balance;
    }


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


    @Override
    public String toString() {
        return "Bank[" +
                "账号 : " + account +
                " 余额 : " + balance +
                ']';
    }


    public synchronized void  saveAccount(){
        //可以在不同位置添加sleep
        //获取当前账号余额
        int balance = getBalance();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //修改余额,存100元
        balance+=100;
        //修改账户余额
        setBalance(balance);
        //输出存款后余额
        System.out.println("存款后的账户余额为: "+balance);
    }
    public  void drawAccount(){
        synchronized (this) {
            //在不同的位置添加sleep方法
            //获取当前账户余额
            int balance = getBalance();
            //修改,取出200;
            balance = balance - 200;
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            //修改账户余额
            setBalance(balance);
            System.out.println("取款后的账户余额: " + balance);
        }
    }
}


存钱的Runnable接口对象:
package com.imooc.bank;


//存款
public class SaveAccount implements Runnable {
    Bank bank;


    public SaveAccount(Bank bank) {
        this.bank = bank;
    }


    @Override
    public void run() {
        bank.saveAccount();
    }
}


取钱的Runnable接口对象:
package com.imooc.bank;


public class DrawAccount implements Runnable {
    Bank bank;


    public DrawAccount(Bank bank) {
        this.bank = bank;
    }


    @Override
    public void run() {
        bank.drawAccount();
    }
}


主类:
package com.imooc.bank;


public class Test {
    public static void main(String[] args) {
        //创建账户,给定余额1000
        Bank bank = new Bank("10001", 1000);
        //创建线程对象
        SaveAccount sa = new SaveAccount(bank);
        DrawAccount da = new DrawAccount(bank);
        Thread save = new Thread(sa);
        Thread draw = new Thread(da);


        draw.start();
        save.start();


        try {
            draw.join();
            save.join();


        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(bank);


    }

}

感谢慕课网

兰州商学院陇桥学院 工学系课程设计报告 设 计 题 目:银行存取款管理系统 系 别:工学系 专 业 (方 向):信息管理与信息系统 年 级、 班: 2011级信息管理与信息系统班 2013 年7 月 5 日 目录 一、系统开发的背景 3 二、系统分析与设计 4 (一)系统功能要求: 4 (二)系统模块结构设计 5 1、存款系统模块,该模块主要实现:用户的存款要求; 5 2、取款模块,该模块主要实现:用户的取款要求; 6 3、余额查询模块,该模块主要实现:用户完成各项存取款后的余额查询业务; 6 4、利率模块,该模块主要实现:用户完成各项业务后,对账户余额利率的查询; 6 5、转账模块,该模块主要实现:用户对其存款的转账业务; 6 6、退出模块,业务完成,退出系统。 6 三、系统的设计与实现 6 (一)登录界面 6 (二)主菜单界面 9 (三)各模块的具体实现 12 四、系统测试 15 (一)登录界面: 15 (二)主菜单界面: 16 (三)各操作界面: 17 五、总结 18 六、附件(代码、部分图表) 19 银行存取款管理系统 一、系统开发的背景 随着社会经济的发展,信息化程度的不断深入,银行的传统业务己愈来愈不能满足银 行客户的需要。 现今,人们的金融意识、科技意识己经有了很大的提高,在紧张忙碌的生活中,己 越来越来不习惯每月奔忙于各银行营业柜台之问去排队缴各种各样的费用了;同时,各 种经营单位如电信、移动、供电、煤气、自来水、证券等等一是为了提高服务质量、方 便客户,二是为了减轻自己日趋繁重的工作量,纷纷委托银行为其开展代收代付业务: 同时,随着我国加入世贸组织的日益临近,我国的银行业将面临更加激烈的同业竞争, 如何提供更多的金融产品和更优质的服务,如何吸引更多的客户,如何利用计算机技术 加强银行帐户信息管理、进行银行业务再造,提高银行的工作效率和业务竟争能力是摆 在各家银行面前的一个迫切需要解诀的问题。 随着代理业务不断发展,业务品种越来越多,各项业务做法互有差异,这就对银行 的电子化水平和相应的管理水平提出了更高的要求。如何利用电子化的手段构建一个高 效统一的、通用灵活的系统来管理各种各样的业务,是每个商业银行所要研究的课题。 支持决策系统的,需要在数据库的基础上,进行联机分析处理,每次处理的数据量大, 响应时间长。 特别是银行每天要处理大量的存取款事件,做好存取款银行工作重要的环节,然 而要有效处理必须要有良好的程序和数据管理系统来建立一个良好的软件系统来实现快 速、有效、准确、安全的处理银行事物。 二、系统分析与设计 (一)系统功能要求: 根据系统的需求分析,本系统的功能要求: 1.用户登录界面:包括账户和密码,使有银行账号的用户进入系统管理自己的财务。 2.存款记录:记录每个时间点的存款金额和银行余额,使用户金额一目了然。 3.存款流水账:记录每天,每个用户存款金额,最后进行汇总。 4.利息结算:按照用户的存款金额和存款时间,进行月利率或者年利率计算制。 5.取款记录:记录每个时间点的取款金额和银行余额。 (二)系统模块结构设计 通过对系统功能的分析,银行存取款管理系统功能。 图1银行存取款管理系统功能图 通过上图的功能分析,把整个系统划分为6个模块: 主要导航栏有:欢迎使用储蓄卡管理(存款、取款、查询余额、利率、注销退出) 1、存款系统模块,该模块主要实现:用户的存款要求; 2、取款模块,该模块主要实现:用户的取款要求; 3、余额查询模块,该模块主要实现:用户完成各项存取款后的余额查询业务; 4、利率模块,该模块主要实现:用户完成各项业务后,对账户余额利率的查询; 5、转账模块,该模块主要实现:用户对其存款的转账业务; 6、退出模块,业务完成,退出系统。 三、系统的设计与实现 (一)登录界面 分析:首先输出界面,其中有用户名和密码,然后进入主页面,该模块的具体代码 。 l1=new Label("欢迎来到银行管理系统",Label.CENTER); Font f=new Font("宋体",Font.BOLD,30); l1.setFont(f); l2=new Label("请输入管理员帐号",Label.CENTER); l3=new Label("请输入管理员密码",Label.CENTER); setBackground(Color.pink); btn=new Button("确定"); t1=new TextField(20); t2=new TextField(15); //t2.setEchoChar( * ); l1.setForeground(Color.red); t1.setBackground(Color.cyan); t2.setBackground(Color.cyan); t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值