`

题目---银行帐户管理系统

阅读更多


//注意:不用if else语句的前提是状态的流动按照一定的规律来运作,就像head first里面的糖果机,状态1:没25分钱 ----投入25分(动作)--->状态2:有25分钱,这些状态之间可以根据逻辑来判断。。。但是如果状态的流动是根据随机或者人的意愿的话,那么if/else语句不可避免

下面题目是CSDN上面抄过来的。。。。

一个假象的银行帐户管理系统中: 

*   帐户(Account)分为普通帐户,VIP帐户和信用卡帐户三种. 
*   每个帐户都可以执行取钱,存钱,注销三种操作 
*   关于取钱操作的细节: 
          普通帐户每次取钱限额为1000元,不能透支 
            VIP帐户每次取钱限额为3000元,不能透支 
            信用卡帐户每次取钱限额为3000元,可以透支 
*   另外每个帐户有四种可能的状态:新建、正常、冻结、挂失 
*   帐号处于不同状态时对于上面提到的三种操作会产生影响: 
            新建状态时不能执行注销操作 
            挂失状态时不能执行存钱、取钱操作 
            冻结状态时不能执行存钱、取钱、注销操作 

下面有一种设计。。。是我所想的。。但是不合理
interface   Account   {   ...   } 
class   GeneralAccount   implements   Account   {   ...   } 
class   VipAccount   implements   Account   {   ...   } 
class   CreditCardAccount   implements   Account   {   ...   } 

不合理之处在于:我的帐户显然可以动态的进行变化,只要吝啬的我愿意多付那么一点点的服务费...但是当我的帐户开始转型时,系统无法让一个GeneralAccount自动转变为VipAccount。。。,所以用户的帐户类型应该用状态来描述,而不是抽象成类。。。


除了取钱以外的其他操作似乎都与不同类型的帐户无关
所以在设计的时候,帐户里面只要绑定取钱一个动作
interface   AccountType   { 
    Money   get(int   amount); 
} 

class   GeneralType   implements   AccountType   { 
    Money   get(int   amount)   {   ...   } 
} 

class   VipType   implements   AccountType   { 
    Money   get(int   amount)   {   ...   } 
} 

class   CreditCardType   implements   AccountType   { 
    Money   get(int   amount)   {   ...   } 
} 

class   Account   { 
    private   String   name; 
    private   String   password; 
    private   AccountType   type; 
    
    Account(int   typeCode)   { 
    } 
    
    void   changeType(int   newTypeCode)   { 
    } 
    
    boolean   logout()   {   ...   } 
    boolean   save(Money   m)   {   ...   } 
    
    Money   get(int   amount)   { 
        Money   result   =   type.get(amount); //这个动作与类型相关,所以委托类型来完成
        return   result; 
    } 
} 

//====================下面是用判断还是策略模式呢?===============
接着那个牛人分析了一下如何实现类型的初始化和类型的转换 
Account(int   typeCode)   { 
    setType(int   typeCode); 
    //   ...other   init   handles 
} 

void   changeType(int   newTypeCode)   { 
    //   do   something   before   change   type... 
    setType(newTypeCode); 
    //   do   something   after   change   type... 
} 

private   void   setType(int   typeCode)   { 
    //   这里假设, 
    //   0代表普通帐户, 
    //   1代表VIP帐户 
    //   2代表信用卡帐户 
    switch   (typeCode)   { 
        case   0:   
            type   =   new   GeneralType(); 
            break; 
        case   1:   
            type   =   new   VipType(); 
            break; 
        case   2: 
            type   =   new   CreditCardType(); 
            break; 
        default: 
            throw   new   AccountTypeException( "Error   account   type   code:   "   +   typeCode); 
    } 
} 
============或者===============================
使用策略模式
当然这里也可以采用策略类来动态确定类型,比如 
Account(AccountType   aType)   {   type   =   aType;   } 
void   changeType(AccountType   newType)   {   type   =   newType;   } 


//状态引用类和状态类本身应该是一种强耦合的关系,所以将这种初始化的任务交给Account自己来维护是合理的,而且这样的switch   or   if/else语句并不冗长
.但是策略模式:由于将选择与初始化帐户类型的操作权利移交到外部的控制类中,那么控制类必定要做出同样的条件选择,而且还必须完全了解帐户类型,帐户和帐户类型之间的互相了解是合情合理的,但外部控制类是否也必须对帐户类型一清二楚就有待定夺了。。。 

//接下来,那个牛人说道:其次,这里的状态只有四种,而且规则并不复杂,我们需要进行抽象或硬要添加某种模式无非是出于以下几种目的 
1。过多的条件选择。。。注意,注意,“条件选择”不是重点。。。“过多的”才是重点 
2。条件选择路径下的各个业务逻辑(算法)异常复杂,但通常即使是仅仅将那些令人作呕的实现逻辑提炼(重构)出来组成一些private   mehtod也就够用了 
3。最可能必须要采用某种策略来降低耦合的目的是因为过多的变化,如果状态的个数是不确定的,或者状态的实现是天马行空的。。。(业务人员通常精于此道),那么采取某种策略将不变与变化隔离是有必要的。 

注意到:基于 "似乎不同状态的帐户在限制某些操作时,对所有的类型都采取了统一的动作

有三种状态,每种状态对应了不同的取钱操作,这里使用状态模式。。。,这里的状态只影响能不能取钱,但是怎么取钱还是要问帐户类型。。。

Account   { 
    private   AccountState   state; 
     private   AccountType   type; 

    Money   get(int   amount,AccountType  type )   { 
        return   state.get(amount,type); //这里改变了
    } 
    ... 
} 
interface   AccountState   { 
    boolean   logout(); 
    boolean   save(Money   m); 
    Money   get(int   amount,AccountType  type ); //如果能取钱,再委托类型来取钱
} 



分享到:
评论

相关推荐

    银行账户管理系统

    根据题目描述,本项目是一款基于Java语言开发的银行账户管理系统,作为软件工程课程设计的一部分。该系统旨在通过模拟银行账户的基本操作(如存款、取款、查询等),加深学生对Java编程语言及其在实际应用中的理解。...

    开题报告范文-银行管理系统

    ### 银行管理系统开题报告关键知识点解析 #### 一、项目背景与目标 - **项目背景**:随着信息技术的迅速发展,银行系统需要适应不断变化的技术环境以提高服务效率和服务质量。当前,许多银行虽然已经实现了基本的...

    c++银行账户管理设计报告

    1. **实验题目**:银行账户管理系统的开发。 2. **实验地点与时间**:在软件楼303进行,为期一周的时间(11月21日至11月25日)。 3. **实验目的**:通过本实验,学生将学习如何使用C++语言实现一个简单的银行账户...

    银行管理系统python代码

    【银行管理系统Python代码】是一个基于Python编程语言实现的简易银行管理软件。这个系统设计得既简单又实用,适合初学者理解和学习,同时也适用于快速搭建基本的银行账户操作模拟环境。在Python编辑器如PyCharm中,...

    银行储蓄管理系统java(编译运行过,可以运行).rar

    题目描述:设计一个银行储蓄管理系统,以菜单方式工作。 功能需求: (1) 设计一个账户类Account,包括户名、密码、电话、余额等信息。 (2) 为新用户开户。 (3) 为老用户修改信息、销户、挂失。 (4) 可以办理存取款...

    银行账户管理(java版)

    题目:定义一个基类 Acount 表示所有的账户。以此为基础派生出活期账户类( Saving )、定期账户类( FixSaving )、信用卡账户类( Checking )。每种账户均需提供存( deposit )和取( withdrawal )两种方法。...

    python简单的银行管理系统

    5. **用户界面**:虽然题目没有明确指出,但一个简单的银行管理系统可能包括命令行界面或图形用户界面(GUI)。Python的`input()`函数可以接收用户输入,而像`tkinter`这样的库则可以用于创建GUI。 6. **设计模式**...

    基于C++开发的银行账户管理系统+源代码+文档说明

    题目3:银行账户管理系统“ 1.-需求+ 模拟实现一个银行账户管理系统,银行管理客户,银行可以新建客户,一个客户底下有自己的个账户或多个账户,账户可以派生借记卡账户和信用卡账户。账户可以设计共性功能如存款,...

    软件工程--银行卡管理系统

    本项目是一款基于Java语言开发的银行卡管理系统,旨在提供一个全面、高效的银行账户管理平台。这个系统可能作为软件工程或相关课程的设计实例,以帮助学生理解并实践软件开发的全过程,包括需求分析、设计、编码、...

    银行储蓄管理系统

    首先,银行储蓄管理系统的核心功能包括账户管理、存款操作、取款服务、利息计算和交易记录查询等。在账户管理模块,用户可以进行开户、销户、修改个人信息等操作,系统需确保数据的安全性和准确性。存款和取款功能则...

    简易银行卡管理系统的开发

    这个系统旨在帮助用户方便地管理和跟踪他们的银行账户活动,如存款、取款、转账等基本功能。以下是对这个系统的详细分析和相关知识点的阐述: 1. **C++编程语言**:C++是一种静态类型的、编译式的、通用的、大小写...

    简单的项目 银行账户管理

    5. **用户界面**:虽然题目未明确提及,但一个完整的银行账户管理系统通常会包含用户交互界面。这可能涉及Swing或JavaFX,让用户可以直观地进行开户、查询、转账等操作。 6. **文档编写**:项目附带的详细文档是...

    C语言课程设计报告银行账户信息管理系统.doc

    银行账户信息管理系统课程设计报告 在这个课程设计报告中,我们将设计一个银行账户信息管理系统,使用 C 语言来实现。这个系统的主要功能是管理银行账户信息,包括账户信息的添加、删除、修改和查询等操作。 课程...

    银行信息管理系统源码

    6. **用户界面**:虽然题目未明确提及,但一个完整的银行信息管理系统通常会有用户界面,可能采用命令行界面或图形用户界面(GUI)。对于GUI,可能会用到Qt、wxWidgets或MFC等库。 7. **多线程与并发**:考虑到银行...

    C++课程设计(银行账户管理)

    在这个银行账户管理系统中,可能会定义如`Account`、`Bank`和`Customer`等类,它们分别代表账户、银行和客户。这些类将包含属性(如账号、余额、用户名等)和操作(如存款、取款、查询余额等)。 2. **类和对象**:...

    C语言课程设计报告(银行账户信息管理系统)更正版.doc

    C 语言课程设计报告银行账户信息管理系统 本设计报告旨在设计一个银行账户信息管理系统,使用 C 语言实现。该系统能够完成存款、取款、查询余额、查询存款记录和查询取款记录等功能。 一、课程设计目的 1. 加深对...

    数据库课程设计报告-银行管理系统.docx

    本次设计的题目是“银行管理系统”,该系统的目标是为模拟银行环境提供数据存储、处理和查询的功能,确保银行交易的安全、准确和高效。 1.2 要求完成的主要任务 设计的主要任务包括但不限于:理解银行业务流程,...

    银行账户管理程序C语言代码报告

    ### 银行账户管理程序C语言代码报告 #### 一、课程设计题目与要求 ##### 1.1 设计题目 本次课程设计的主题为**银行...通过以上模块的设计与实现,可以构建一个功能完善的银行账户管理系统,满足基本的银行业务需求。

    C++课程设计(银行管理系统)

    它适用于大一学习C++编程的学生,无需使用复杂的数据库系统即可实现基本的银行账户管理功能。 #### 二、程序结构分析 1. **主菜单函数 `mainmenu()`**: - 显示主菜单界面。 - 提供三个选项:创建新账户、操作...

Global site tag (gtag.js) - Google Analytics