技术开发 频道

实战迷你版“一卡通”交易系统

  好,所有用到的模式都介绍完毕了,我们把完整的类图整理一下,如图35-4所示。

图35-4 扣款子模块完整类图

  蜘蛛网了?这还不是复杂的,真实系统比这复杂得多,幸好我们在之前已经分析过,还是比较容易看懂的。我们所有的开发都完成了,是不是应该写一个测试类来展示一下我们的成果,如代码清单35-10所示。

  代码清单35-1 场景类

public class Client {
    
//模拟交易
    public static void main(String[] args) {
        
//初始化一张IC卡
        Card card = initIC();
        
//显示一下卡内信息
        System.out.println("========初始卡信息:=========");
        showCard(card);    
        
//是否停止运行标志
        boolean flag = true;
        
while(flag){
            Trade trade
= createTrade();
            
            DeductionFacade.deduct(card, trade);
            
//交易成功,打印出成功处理消息
            System.out.println("\n======交易凭证========");
            System.out.println(trade.getTradeNo()
+" 交易成功!");
            System.out.println(
"本次发生的交易金额为:"+ trade.getAmount()/100.0 + "");
            
//展示一下卡内信息
            showCard(card);
            
            System.out.print(
"\n是否需要退出?(Y/N)");
            
if(getInput().equalsIgnoreCase("y")){
                flag
= false;  //退出;
            }
        }
    }
    
//初始化一个IC卡
    private static Card initIC(){
        Card card
= new Card();
        card.setCardNo(
"1100010001000");
        card.setFreeMoney(
100000);  //一千元
        card.setSteadyMoney(80000); //八百元
        return card;
    }
    
//产生一条交易
    private static Trade createTrade(){
        Trade trade
= new Trade();
        System.out.print(
"请输入交易编号:");
        trade.setTradeNo(getInput());
        System.out.print(
"请输入交易金额:");
        trade.setAmount(Integer.parseInt(getInput()));
        
//返回交易
        return trade;
    }
    
//打印出当前卡内交易余额
    public static void showCard(Card card){

        System.out.println(
"IC卡编号:" + card.getCardNo());
        System.out.println(
"固定类型余额:"+ card.getSteadyMoney()/100.0 + "");
        System.out.println(
"自由类型余额:"+ card.getFreeMoney()/100.0 + "");
    }
    
//获得键盘输入
    public static String getInput(){
        String str
="";
        
try {
            str
= (new BufferedReader(new InputStreamReader(System.in))).readLine();
        }
catch (IOException e) {
            
//异常处理
        }
        
return str;
    }
}
0
相关文章