package SOSO; /** * CallService * * @author yaoxinxin * @version 1.0 * @description 打电话接口 * @date 2022/9/14 11:05 */ public interface CallService { public int call(int minCount,MobileCard card) throws Exception; }
package SOSO; import com.sun.org.apache.xpath.internal.operations.String; import java.io.*; import java.util.*; /** * CardUtil * * @author yaoxinxin * @version 1.0 * @description 工具类 * @date 2022/9/14 11:46 */ public class CardUtil { // 卡集合 private static Map<java.lang.String, MobileCard> cards = new HashMap<java.lang.String, MobileCard>(); // 消费记录集合 private static Map<java.lang.String, List<ConsumInfo>> consunmIofos = new HashMap<java.lang.String, List<ConsumInfo>>(); // 定义模拟的场景集合 private List<Scene> scenes = new ArrayList<>(); // public static Map<java.lang.String, MobileCard> getCards(){ return cards; } // public static void setCards(Map<java.lang.String ,MobileCard> cards){ CardUtil.cards = cards; } public static Map<java.lang.String, List<ConsumInfo>> getConsunmIofos() { return consunmIofos; } // // 静态块,用来初始化卡集合 static{ cards.put("13298201751",new MobileCard("13298201751","张飞","123456",new TalkPackage(58),100,80,100,10,0)); cards.put("18657588538",new MobileCard("18657588538","关羽","123456",new NetPackage(3072),100,80,100,10,0)); cards.put("12345678901",new MobileCard("12345678901","刘备","123456",new SuperPackage(78),100,200,10,10,10)); } // 普通初始化块,初始化当前对象时,自动调用(执行构造方法之前执行) { initScene(); } // 初始化场景 public void initScene(){ scenes.add(new Scene("通话",90,"问候客户,谁知其如此难缠 通话 90 分钟")); scenes.add(new Scene("通话",30,"询问妈妈身体状况 本地通话 30 分钟")); scenes.add(new Scene("短信",5,"参与环境保护实施方案问卷调查 发送短信 5 条")); scenes.add(new Scene("短信",50,"通知朋友手机换号,发送短信 50 条")); scenes.add(new Scene("上网",1024,"和女友微信视频聊天 使用流量 1G")); scenes.add(new Scene("上网",2048,"晚上手机在线看韩剧,不留神睡着啦! 使用流量 2G")); } // 根据用户和密码查询用户 public boolean isExistCard(java.lang.String number, java.lang.String password){ MobileCard mobileCard = cards.get(number); if(mobileCard!= null){ if(mobileCard.getPassWord().equals(password)){ return true; } } return false; } // 根据卡号查询卡是否存在 public boolean isExistCard(java.lang.String num){ return cards.containsKey(num); } /** * 创建卡号 * @return * 139开头的11位号码 * 该号码是新号,没有被注册过 */ public java.lang.String createNumber(){ Random random = new Random(); java.lang.String s = null; do{ int i = random.nextInt(100000000); long header = 13900000000L; s = header+i+""; //System.out.println(s); }while(isExistCard(s)); return s; } // 判断产生的号码是否在数组中 public boolean isExistInNumbers(java.lang.String number, java.lang.String[] numbers){ for (int i = 0; i < numbers.length; i++) { if (number.equals(numbers[i])){ return true; } } return false; } // 获得一组新卡号 // 号码之间不重复 public java.lang.String[] getNewNumbers(int count){ // 新建数组 java.lang.String[] numbers = new java.lang.String[count]; java.lang.String number = null; for (int i = 0; i < count; i++) { // 判断该号是否在数组中 do { number = createNumber(); }while (isExistInNumbers(number,numbers)); numbers[i] = number; } return numbers; } // 注册卡 public void addCard(MobileCard card){ cards.put(card.getCardNumber(),card); } // 根据卡号返回套餐 public ServicePackage getPackage(java.lang.String phoneNumber){ MobileCard mobileCard = cards.get(phoneNumber); ServicePackage serPackage = mobileCard.getSerPackage(); return serPackage; } // 根据序号获得套餐 public ServicePackage getPackage(int number){ switch (number){ case 1: return new TalkPackage(58); case 2: return new NetPackage(68); case 3: return new SuperPackage(78); } return null; } // 注销卡 public void delCard(String num){ cards.remove(num); } // 显示账单 public void showAmountDetail(java.lang.String number){ if(!isExistCard(number)){ System.out.println("该卡号不存在,请重新输入"); }else { MobileCard mobileCard = cards.get(number); System.out.println("您的卡号:"+number+"\n当月账单:"); System.out.println("套餐资费"+mobileCard.getSerPackage().getPrice()+"元\n账户余额:"+(mobileCard.getConsumerAmount()-mobileCard.getMoney())); } } /** * 显示套餐余量 * 套餐中包含的数据是不变的, * 消费的数据是记录在卡上的realXXX属性上 * 套餐余量 = 套餐原始数据 - 卡的实际消费数据 * @param number */ public void showRemainDetail(java.lang.String number){ // 首先获得卡 MobileCard mobileCard = cards.get(number); if(mobileCard == null){ System.out.println("该号码没有注册!"); }else { // 获得卡的套餐 ServicePackage serPackage = mobileCard.getSerPackage(); // 每个套餐包含的数据是不同的,需要判断套餐类型 if(serPackage instanceof SuperPackage){//超人套餐 SuperPackage superPackage = (SuperPackage) serPackage; int talkTime = superPackage.getTalkTime()-mobileCard.getRealTalkTime(); int smsCount = superPackage.getSmsCount() - mobileCard.getRealSMSCount(); int flow = superPackage.getFlow() - mobileCard.getRealFlow(); if (talkTime>0){ System.out.println("套餐通话时间剩余"+talkTime+"分钟"); }else { System.out.println("套餐通话时长剩余不足!"); } if (smsCount>0){ System.out.println("套餐剩余信息:"+smsCount+"条"); }else { System.out.println("信息剩余不足!"); } if(flow>0){ System.out.println("套餐剩余流量:"+flow+"M"); }else { System.out.println("套餐流量不足"); } }else if(serPackage instanceof TalkPackage){//话痨套餐 TalkPackage talkPackage = (TalkPackage) serPackage; int talkTime = talkPackage.getTalkTime()-mobileCard.getRealTalkTime(); int smsCount = talkPackage.getSmsCount() - mobileCard.getRealSMSCount(); if (talkTime>0){ System.out.println("套餐通话时间剩余"+talkTime+"分钟"); }else { System.out.println("套餐通话时长剩余不足!");