嗖嗖移动大厅--部分代码

public class Sosomain {
    private static final String String = null;
    Scanner input=new Scanner(System.in);
    CardUtil util=new CardUtil();
public static void main(String[] args) {
    
    Sosomain sosomain=new Sosomain();
    sosomain.menu();
}

private void menu() {
    boolean isExit=false;
    int num=-1;
    util.init();
    System.out.println("~~~~~~~~~~~~欢迎使用搜搜移动大厅~~~~~~~~~~~~");
    do{
        System.out.println("1、登录注册");
        System.out.println("2、用户注册");
        System.out.println("3、使用嗖嗖");
        System.out.println("4、话费充值");
        System.out.println("5、资费说明");
        System.out.println("6、退出系统");
        System.out.print("请选择你需要的操作:");
        int choose=input.nextInt();
        switch(choose){
        case 1:
            //System.out.println("1、登录注册");
            System.out.print("请输入手机卡号:");
            String mobileNumber=input.next();
            System.out.print("请输入密码:");
            String password=input.next();
            
            //将用户输入的卡号和密码和数组中的内容进行比较
            if(util.isExistCard(mobileNumber,password)){
                System.out.println("登陆成功!");
                //登录成功之后显示二级菜单
                show(mobileNumber);
            }else{
                System.out.println("登陆失败!");
            }
            break;
        case 2:
            //System.out.println("2、用户注册");
            /**
             * 1、选号码
             */
            //1.1创建号码
            String [] newNumbers=util.getNewNumbers(9);
            
            //1.2显示号码
            for(int i=0;i<newNumbers.length;i++){
                System.out.println((i+1)+":"+newNumbers[i]);
            }
            //1.3提示用户选择号码
            System.out.print("请选择您要的号码编号:");
            String numNum=newNumbers[input.nextInt()-1];
            
            /**
             * 2、选套餐
             */
            System.out.println("1:话痨套餐   2:网虫套餐  3:超人套餐");
            System.out.print("请选择您需要的套餐编号:");
            int taocan=input.nextInt();
            ServicePage pack=util.createPack(taocan);
            /**
             * 3、注册
             */
            System.out.print("请输入姓名:");
            String name=input.next();
            System.out.print("请输入密码:");
            String pwd=input.next();
            /**
             * 4、缴费
             */
            System.out.print("请输入缴费金额:");
            double money=input.nextDouble();
            //充值金额小于套餐金额,提醒用户缴费不足
            while(pack.getPrice()>money){
                System.out.println("缴费不足,请从新充值!");
                money=input.nextDouble();
            }
            /**
             * 将数据增加到MAP集合中
             */
            //1卡号、2姓名、3密码、4所属套餐、5当月消费金额、6当前余额:充值金额-当月消费金额
            MobileCard card=new MobileCard(numNum, name, pwd, pack, pack.getPrice(), money-pack.getPrice());
            //增加到集合中
            util.addCard(card);
            break;
        case 3:
            //System.out.println("3、使用嗖嗖");
            break;
        case 4:
            //System.out.println("4、话费充值");
            System.out.print("请输入需要充值的卡号:");
            String numer=input.next();
            System.out.print("请输入您需要充值的金额:");
            double money1=input.nextDouble();
            util.chargeMoney(numer, money1);
            break;
        case 5:
            //System.out.println("5、资费说明");
            show2();
            break;
        case 6:
            isExit=true;
            break;
            default:
                isExit=true;
                break;
        }
        if(!isExit){
            System.out.println("输入0返回上一级");
            num=input.nextInt();
        }else{
            break;
        }
    } while(num==0);
    System.out.println("谢谢使用!");
}
public void show(String mobileNumber){
    System.out.println("------嗖嗖移动菜单--------");
    do{
        System.out.println("1、本月账单查询");
        System.out.println("2、套餐余量查询");
        System.out.println("3、打印消费详单");
        System.out.println("4、套餐变更");
        System.out.println("5、办理退网");
        System.out.print("请选择您要的操作:");
        int choose=input.nextInt();
        switch(choose){
        case 1:
            System.out.println("-----------显示本月账单信息------------");
            util.showDescription(mobileNumber);
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            System.out.print("请输入您需要更换套餐的卡号:");
            String cardNumber=input.next();
            System.out.print("请选择您需要更换的套餐编号:");
            String tcNumber=input.next();
            util.changingPack(cardNumber, tcNumber);
            
            break;
        case 5:
            break;
            default:
                break;
        }
    }while(true);
}
//读取文件

    public void show2(){
        File file =new File("zifei.txt");
        FileInputStream fis=null;
        try {
            fis=new FileInputStream(file);
            byte [] s =new byte[1000];
            int len;
            while((len=fis.read(s))!=-1){
                String str=new String(s,0,len);
                System.out.println(str);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            try {
                fis.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

//方法(部分)

public class CardUtil<ConsumInfo> {
    Map<String, MobileCard> cards = new HashMap<String, MobileCard>(); // 所有手机卡的列表
    List<Scene> scenes = new ArrayList<Scene>(); //初始化场景
    
    //初始化用户
    public void init(){
        MobileCard card1=new MobileCard("13813811111","卢本伟","123",new TalkPackage(),58.0,42.0);
        MobileCard card2=new MobileCard("13813822222","张三","123", new NetPackage(),68.0,32.0);
        MobileCard card3=new MobileCard("13813833333","PDD","123",new SuperPackage(),78.0,22.0);
        MobileCard card4=new MobileCard("13813866666","大司马","123",new TalkPackage(),78.0,2.0);
    cards.put("13813811111", card1);
    cards.put("13813822222", card2);
    cards.put("13813833333", card3);
    cards.put("13813866666", card4);
    }
    //初始话场景
    public void initScence(){
        Scene s=new Scene("通话",90,"问候客户,谁知其如此难缠 通话90分钟");
        Scene s1=new Scene("通话",30,"询问妈妈身体状况 本地通话30分钟");
        Scene s2=new Scene("短信",5,"参与环境保护实施方案问卷调查 发送短信5条");
        Scene s3=new Scene("短信",50,"通知朋友手机换号,发送短信50条");
        Scene s4=new Scene("上网",1*1024,"和女友微信视频聊天   使用流量1G");
        Scene s5=new Scene("上网",2*1024,"晚上手机在线看韩剧,不留神睡着啦! 使用流量 2G");
        scenes.add(s);
        scenes.add(s1);
        scenes.add(s2);
        scenes.add(s3);
        scenes.add(s4);
        scenes.add(s5);
    }
    //是否存在此卡用户
    public boolean isExistCard(String number,String passWord){
        //使用迭代器遍历集合
        Set<String> keySet = cards.keySet();
        Iterator<String> itor=keySet.iterator();
        while(itor.hasNext()){
            //如果有值就进行卡号和密码的对比
            String searchNumer=itor.next();//集合中找到的电话号码
             //找到的电话号码入的一样并且卡号的
            if(searchNumer.equals(number)&&cards.get(searchNumer).getPassword().equals(passWord)){
                return true;
            }
        }
        
        return false;
        }
    

    //是否已注册
    public boolean isExistCard(String searchNumber){
        Set<String> numbers=cards.keySet();
        for(String number:numbers){
            if(number.equals(searchNumber)){
                return true;
            }
        }
        return false;
        
    }
    
    //创建卡号
    private String createNumber(){
        Random random=new Random();
        // 记录现有用户中是否存在此卡号用户 是:true 否:false
        int temp=0;
        String newNum=null;
        boolean flag=false;
        do{
            flag=false;
        do{
            temp=random.nextInt(100000000);
        }while(temp<10000000);
        //手机号码组成
        newNum="139"+temp;
        //产生的随机数和已有的号码相同则不要
        Set<String> keySet=cards.keySet();
        for(String oldNum:keySet){
            if(oldNum.equals(newNum)){
                flag=true;
            }
        }
        }while(flag);
        return newNum;
    }
    
    //生产指定个数的新卡号列表
    public String[] getNewNumbers(int count){
        String []newNums=new String[count];
        //循环给newNUms 赋值
        for(int i=0;i<count;i++){
            newNums[i]=createNumber();
        }

        return newNums;

    }
    
        
    
    //添加新卡
    public void addCard(MobileCard card){
        System.out.println("注册成功!");
        cards.put(card.getCardNumber(),card);
        card.showMeg();
    }
    
    //指定卡号办理退网
    public void delCard(String delNumber){
        
    }
    
    //查询指定卡套餐余量
    public void showRemainDetail(String serachNumber){
        
    }
    //查询指定卡当月消费账单
    public void showAmountDetail(String searchNumber){
        
    }
    //指定卡号换套餐
    public void changingPack(String number,String packNum){
        // 指定的手机卡
        MobileCard card;
        // 要换的套餐
        ServicePage pack;
        if(isExistCard(number)){
            card=cards.get(number);
            switch(packNum){
            case "1":
                pack=new TalkPackage();
            break;
            case  "2":
                pack=new NetPackage();
                break;
                default:
                    pack=new SuperPackage();
                    break;
            
            }
            //判断用户现有套餐和更换套餐是否相同
            if(!(card.getSerPackage().getClass().getName().equals(pack.getClass().getName()))){
                // 该卡余额中减去当月套餐资费
                //卡里余额大于套餐资费
                if(card.getMoney()>=pack.getPrice()){
                    card.setMoney(card.getMoney()-pack.getPrice());
                    //更换套餐
                    card.setSerPackage(pack);
                    //当月使用数据清零
                    card.setRealFlow(0);
                    card.setRealSMSCount(0);
                    card.setRealTalkTime(0);
                    //当月套餐金额设置为更换后的套餐资费
                    card.setConsumAmount(pack.getPrice());
                    System.out.println("更换套餐成功!");
                    pack.showInfo();
                }
            }else{
                System.out.println("对不起,您已是该套餐用户,无法更换!");
            }
        }else{
            System.out.println("对不起,您的卡号未注册,不可以更换套餐!");
        }
        
        
        
    }
    //为指定卡号充值
    public void  chargeMoney(String number,double money){
        MobileCard card;
        
        Set<String> key=cards.keySet();
        for(String s:key){
            if(s.equals(number)){
                if(money<50){
                    System.out.println("对不起,最低充值50");
                break;
                }else{
                    card=cards.get(number);
                card.setMoney(card.getMoney()+money);
                    System.out.println("充值成功,当前余额为:"+card.getMoney()+"元");
                    break;
                }
            }else{
                System.out.println("您输入的卡号不存在!");
                break;
            }
        }
        
        
    }public void showDescription(String mobileNumber){
    //根据电话号码的这个key查询到对应的value,在根据需要获取其中的属性
     MobileCard card=cards.get(mobileNumber);
    System.out.println("您的卡号"+mobileNumber+"的月账单");
    System.out.println("套餐资费:"+card.getSerPackage().getPrice());
    System.out.println("合计"+card.getConsumAmount()+"元/月");
    System.out.println("余额"+card.getMoney()+"元");

}
    public ServicePage createPack(int taocan) {
        ServicePage pack=null;
        switch (taocan) {
        case 1:
            pack=new TalkPackage();
            break;
        case 2:
            pack=new NetPackage();
            break;
        case 3:
            pack=new SuperPackage();
            break;
        default:
            System.err.println("暂时没有其他套餐!");
            break;
        }
        return pack;
    }
}

 

posted @ 2020-06-02 18:40  小飞侠呀  阅读(675)  评论(0)    收藏  举报