`

模拟提款存款的一个例子

    博客分类:
  • Java
阅读更多

今天在JavaWorld.tw论坛上看到一个求提款和存款的帖子(http://www.javaworld.com.tw/jute/post/view?bid=29&id=247594&sty=1&tpg=1&age=0),自己写了个例子,加深对Java Thread的学习和理解:

package cn.xbmu.lib.jfly.test;

import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * A:帳戶類別:
設計提款功能,每次可以提出100元,但是當帳戶餘額為0,不可以再提款。
設計存款功能,每次可以存入1000元,但是當帳戶餘額不為0,不可以再存款。

B:提款類別:在此類別中執行「提款」的功能。

C:存款類別:在此類別中執行「存款」的功能。

D:主程是要啟動使用「提款類別」和「存款類別」兩個執行緒。 
 * @author JFly
 */
public class MySaveAndGet {

    public static void main(String[] args) throws InterruptedException {
        Account acc = new Account();
        PutMoney pm = new PutMoney(acc);
        TakeMoney tm = new TakeMoney(acc);
        pm.start();
        tm.start();

        Thread.sleep(5000);   // 模拟动作执行5秒
        synchronized(pm) {
            pm.close = true;
            pm.notifyAll();
        }
        synchronized(tm) {
            tm.close = true;
            tm.notifyAll();
        }
    }
}

class Account {
    int m;      // 帐户余额
    boolean t_or_p = false;     // 提款或者存款,false存款,true提款

     void takeM() {
        if (m == 0) {
            System.out.println("帐户余额为0,不可以再提款!");
        } else {
            m = m - 100;
            System.out.println("取出后剩余 " + m);
        }
        t_or_p = true;          // 提款动作
    }

     void putM() {
        if (m != 0) {
            System.out.println("帐户余额不为0,不可以再存款!");
        } else {
            m = m + 1000;
            System.out.println("存入后剩余 " + m);
        }
        t_or_p = false;       // 存款动作
    }
}

class PutMoney extends Thread {

    Account acc = null;
    boolean close = false;

    public PutMoney(Account acc) {
        this.acc = acc;
    }

    @Override
    public void run() {
        while (true) {      // 模拟存款
            synchronized (acc) {
                while (!acc.t_or_p) {
                    try {
                        acc.wait();
                    } catch (InterruptedException ex) {
                        Logger.getLogger(PutMoney.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                if(close) {
                    break;
                }
                acc.putM();
                acc.notifyAll();
            }
        }
    }
}

class TakeMoney extends Thread {

    Account acc = null;
    boolean close = false;

    public TakeMoney(Account acc) {
        this.acc = acc;
    }

    @Override
    public void run() {
        while (true) {      // 模拟提款
            synchronized (acc) {
                while (acc.t_or_p) {
                    try {
                        acc.wait();
                    } catch (InterruptedException ex) {
                        Logger.getLogger(TakeMoney.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                if(close) {
                    break;
                }
                acc.takeM();
                acc.notifyAll();
            }
        }
    }
}

 

分享到:
评论

相关推荐

    ATM模拟提款机

    通过这样的模拟,用户可以了解ATM操作流程,熟悉银行业务,同时也为学习编程和金融系统设计提供了一个实践平台。 ATM模拟提款机的核心功能包括: 1. **登录与安全**:如同真实的ATM机,模拟ATM也会有登录系统。...

    自动提款模拟系统系统+论文

    自动提款模拟系统自动提款模拟自动提款模拟系统系统

    Winform模拟银行提款机

    总的来说,"Winform模拟银行提款机"项目展示了如何结合多种IT技术来构建一个功能完善的模拟银行系统。从用户界面设计到后台服务通信,再到数据安全和性能优化,每个环节都体现了开发者对软件工程原则的理解和实践。...

    模拟银行ATM提款机系统

    模拟银行ATM提款机系统(单线程),我的RAD...程序是C/S结构,由服务端和客户端程序构成,还有一个配置程序来定义文件和IP,程序还实现了冲帐功能。我还在思考如何设计多线程的设计,特公布了原码,望大家帮我看看。

    C语言模拟ATM自动提款机系统

    在这个例子中,"USER.TXT"可能就是一个包含所有用户信息的数据文件。 3. **输入验证**:在处理用户输入时,系统需要进行验证,例如检查密码长度、格式等。这可能涉及到字符串操作和条件判断。 4. **安全措施**:在...

    銀行存款提款機

    【银行存款提款机】,通常被称为自动取款机(ATM)或自动存款机(CDM),是现代银行业务中不可或缺的一部分。这种机器允许客户在任何时间进行现金存取,无需银行工作人员的协助,极大地提高了金融服务的便利性。ATM...

    模拟ATM提款机写的一个简单的程序

    在IT领域,ATM(Automated Teller Machine)模拟程序是一个经典的编程练习,它可以帮助开发者理解和实践面向对象设计、用户交互以及基本的银行交易逻辑。在这个项目中,我们看到一个初学者使用Java语言编写了一个...

    java版 模拟ATM提款机

    在Java编程领域,模拟ATM(自动取款机)是一个常见的练习项目,它可以帮助开发者熟悉面向对象编程、异常处理、用户交互以及简单的银行交易逻辑。在这个项目中,我们可以通过创建类来代表ATM、账户、交易等核心概念,...

    C语言模拟ATM提款机.doc

    C语言模拟ATM提款机

    自动提款机模拟软件程序

    本文将详细介绍如何使用C#语言实现一个银行业务自动存取款系统,即自动提款机模拟软件程序。该系统允许客户通过ATM进行基本的银行操作,如登录、查询余额、取款和转账等。 2.3 程序设计 在用户登录阶段,系统首先...

    模拟ATM自动取款机的简易银行卡系统

    总的来说,模拟ATM自动取款机的简易银行卡系统是一个综合性的项目,涵盖了银行系统的多个核心模块,对于学习和理解计算机科学中的数据库操作、用户认证、事务处理和安全控制等方面具有很高的价值。通过实践这样的...

    atm_file.rar_ATMS_atm_java ATM 模拟_实现提款机_银行数据文件

    "atms"指的是ATM系统,"atm_模拟"表示这是一个模拟器,"实现提款机"表明其功能集中在取款操作上,而"银行数据文件"则再次强调了数据存储的方式。 为了实现ATM的功能,Java程序需要处理以下几个关键点: 1. **账户...

    提款机模拟

    提款机模拟.vsd

    模拟银行ATM提款机系统.rar_模拟ATM机c++_银行_银行ATM _银行模拟系统_银行系统

    模拟银行ATM提款机系统

    ATM提款机存储系统模拟(SQL)

    ATM提款机存储系统模拟基于SQL技术,是一个用于学习和实际工作中理解数据库操作与管理的实用案例。这个系统的核心在于使用T-SQL(Transact-SQL),这是Microsoft SQL Server所使用的扩展版本的SQL语言,它提供了更...

    银行提款机系统2_银行;模拟ATM_authortzn_

    该“银行提款机系统2”是authortzn作者创建的一个项目,它旨在模拟真实的ATM机操作流程,包括用户登录、账户查询、存款、取款、转账等核心功能。通过这个模拟系统,开发者可以更好地理解和掌握银行业务逻辑与Python...

    C语言模拟实现的自动提款机.rar

    这是一个用C语言模拟实现的自动提款机界面及操作。 数据用TXT文档,程序内有注释及说明,对C语言进阶可能会有帮助。 运行前请先查看文件夹中的说明。 实现了登录,查帐,转帐,修改密码,除了能出钱外的基本功能都有...

    模拟银行ATM提款机系统.zip_ATM系统_atm_银行ATM _银行模拟系统_银行系统

    本项目是一个模拟银行ATM系统的实现,旨在帮助理解ATM系统的工作原理和设计思路。 在ATM系统的设计中,主要涉及以下几个关键知识点: 1. **用户认证**:ATM系统首先需要验证用户身份,通常通过银行卡和PIN码(个人...

    ATM提款机项目

    JAVA写的,ATM项目,可以直接运行(注释:这是一个小小的后台ATM项目),通过控制台模拟实现ATM提款机效果,里面有效果图和表。

    论文研究 - 人民币加入特别提款权对特别提款权利率的影响研究

    基于人民币进入特别提款权货币篮子的背景,本文将研究期分为三个部分,以分析人民币进入特别提款权货币篮子的影响:一个完整​​的回顾期,包括人民币在内。 国际货币基金组织宣布将接受人民币,但尚未接受; ...

Global site tag (gtag.js) - Google Analytics