/**

  • 测试类 业务类

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class TestSosoMgr {
    public static Scanner se = new Scanner(System.in);
    public static CardUtil cardUtil=new CardUtil();
    public static MobileCard mobileCard = new MobileCard();
    public static Cousumlnfo cousumlnfo = new Cousumlnfo();
    public static Scene scene = new Scene();
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    start();
    }
    public static void start() {//一级菜单
    do {
    System.out.println("**欢迎使用橙橙 移动业务大厅");
    System.out.println(“1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统”);

         System.out.println("请选择--");int num = se.nextInt();switch (num) {case 1:System.out.println("******用户登录*****");System.out.print("请输入手机号:");String number = se.next();System.out.print("请输入密码:");String passWord = se.next();boolean bos = cardUtil.isExistCard(number, passWord);if (bos) {cardMenu(number);}break;case 2:System.out.println("******可选者卡号*****");registCard();break;case 3:System.out.println("******使用橙橙*****");System.out.print("请输入手机号:");String number2 = se.next();cardUtil.userSoso(number2);break;case 4:System.out.println("******话费充值*****");System.out.print("请输入手机号:");String number3 = se.next();System.out.print("请输入充值金额:");double money = se.nextDouble();cardUtil.chargeMoney(number3,money);break;case 5:System.out.println("******资费说明*****");cardUtil.showDescription();break;case 6:System.out.println("******退出系统*****");System.exit(0);break;default:System.out.println("******输入的选项不正确,请重新输入*****");break;}} while (true);
    

    }
    public static void cardMenu(String number) {//二级菜单
    boolean bbs = true;
    do {
    System.out.println(“嗖嗖移动用户菜单”);
    System.out.println(“1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)”);

        int num = se.nextInt();switch (num) {case 1:System.out.println("******本月账单查询*****");cardUtil.showAmountDetail(number);break;case 2:System.out.println("******套餐余量查询*****");cardUtil.showRemainDetail(number);break;case 3:System.out.println("******打印消费详单*****");cardUtil.prinConsumlnfo(number);;break;case 4:System.out.println("******套餐变更*****");System.out.print("请输入要变更的套餐类型:");System.out.print("1.话痨套餐  2.网虫套餐  3.超人套餐\t请选择序号");int packNum = se.nextInt();cardUtil.changingPack(number, packNum);break;case 5:System.out.println("******办理退网*****");cardUtil.delCard(number);break;default:bbs = false;}} while (bbs);System.out.println("谢谢使用***");
    

    }
    //用户注册流程
    public static void registCard() {
    String[] cardNumber = cardUtil.getNewNumbers(9);
    System.out.println(“请选择卡号(输入1~9的序号)”);
    int num2 =se.nextInt();
    mobileCard.setCardNumber(cardNumber[num2]);
    cardUtil.addCard(mobileCard);
    System.out.print(“1.话痨套餐 2.网虫套餐 3.超人套餐\t请选择序号”);
    int num = se.nextInt();
    ServicePackage talkPackage = cardUtil.createPack(num);
    if (talkPackage instanceof TalkPackage) {
    talkPackage = (TalkPackage)talkPackage;
    mobileCard.setSerPackage(talkPackage);
    System.out.print(“请输入姓名:”);
    String name = se.next();
    mobileCard.setUserName(name);
    System.out.print(“请输入密码:”);
    String passWord= se.next();
    mobileCard.setPassWord(passWord);
    double money;
    System.out.println(“请输入预存话费金额:”);
    do {
    money = se.nextDouble();
    if (money<talkPackage.price) {
    System.out.print("您预存的话费金额不足以支付本月固定套餐费,请重新输入: ");
    }
    } while (money < talkPackage.price);
    cardUtil.chargeMoney(cardNumber[num2], money);
    cousumlnfo.setCardNumber(cardNumber[num2]);

         //mobileCard.setMoney(money);boolean bos = cardUtil.isExistCard(cardNumber[num2]);if (bos) {System.out.println("注册成功:");mobileCard.setMoney(money-talkPackage.price);cardUtil.printAmountDetail(cardNumber[num2]);talkPackage.shownlfo();}}if (talkPackage instanceof Netpackage) {talkPackage = (Netpackage)talkPackage;mobileCard.setSerPackage(talkPackage);System.out.print("请输入姓名:");String name = se.next();mobileCard.setUserName(name);System.out.print("请输入密码:");String passWord= se.next();mobileCard.setPassWord(passWord);double money;System.out.println("请输入预存话费金额:");do {money = se.nextDouble();if (money<talkPackage.price) {System.out.print("您预存的话费金额不足以支付本月固定套餐费,请重新输入: ");}} while (money < talkPackage.price);cardUtil.chargeMoney(cardNumber[num2], money);cousumlnfo.setCardNumber(cardNumber[num2]);//mobileCard.setMoney(money);boolean bos = cardUtil.isExistCard(cardNumber[num2]);if (bos) {System.out.println("注册成功:");mobileCard.setMoney(money-talkPackage.price);cardUtil.printAmountDetail(cardNumber[num2]);talkPackage.shownlfo();}}if (talkPackage instanceof SuperPackage) {talkPackage =(SuperPackage)talkPackage;mobileCard.setSerPackage(talkPackage);System.out.print("请输入姓名:");String name = se.next();mobileCard.setUserName(name);System.out.print("请输入密码:");String passWord= se.next();mobileCard.setPassWord(passWord);double money;System.out.println("请输入预存话费金额:");do {money = se.nextDouble();if (money<talkPackage.price) {System.out.print("您预存的话费金额不足以支付本月固定套餐费,请重新输入: ");}} while (money < talkPackage.price);cardUtil.chargeMoney(cardNumber[num2], money);cousumlnfo.setCardNumber(cardNumber[num2]);//mobileCard.setMoney(money);boolean bos = cardUtil.isExistCard(cardNumber[num2]);if (bos) {System.out.println("注册成功:");mobileCard.setMoney(money-talkPackage.price);cardUtil.printAmountDetail(cardNumber[num2]);talkPackage.shownlfo();}}
    

    }

}

/**

  • 工具类

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class CardUtil {
    //存放用户列表
    public static Map<String , MobileCard> cards =new HashMap<String, MobileCard>() ;

    //存放卡号消费记录
    public static Map<String , List> consumlnfos = new HashMap<String, List>();

    Scene scene = new Scene();
    Cousumlnfo cousumlnfo = new Cousumlnfo();
    //初始化场景
    public String initScenes(int key) {

     String type = null;switch (key) {case 1:type = "通话 ,问候客户,谁知其如此难缠,通话90分钟"; scene.setDescription(type);cousumlnfo.setType("通话");scene.setData(90);scene.setType("通话");break;case 2:type = "通话 ,询问妈妈身体状况,本地通话30分钟"; scene.setDescription(type);cousumlnfo.setType("通话");scene.setData(30);scene.setType("通话");break;case 3:type = "短信 ,参与环境保护实施方案问卷调查,发送短信5条";scene.setDescription(type);cousumlnfo.setType("短信");scene.setData(5);scene.setType("短信");break;case 4:type = "短信 ,通知朋友换手机,发送短信50条"; scene.setDescription(type);cousumlnfo.setType("短信");scene.setData(50);scene.setType("短信");break;case 5:type = "上网 ,和女友微信视屏聊天,使用流量1GB"; scene.setDescription(type);cousumlnfo.setType("上网");scene.setData(1024);scene.setType("上网");break;case 6:type = "上网,晚上手机在线看亮剑,看得过瘾,使用流量2GB,剩下的日子干瞪眼~~"; scene.setDescription(type);cousumlnfo.setType("上网");scene.setData(1024*2);scene.setType("上网");break;}return type;
    

    }
    //注册新卡
    public void addCard(MobileCard card) {
    cards.put(card.getCardNumber(),card );
    }

    //话费充值
    public void chargeMoney(String number,double money){
    cards.get(number).setMoney( cards.get(number).getMoney() +money);
    System.out.println(“账户余额:” + cards.get(number).getMoney()
    );

    }

    //使用嗖嗖
    public void userSoso(String number) {
    MobileCard card = cards.get(number);//获取卡号对象
    ServicePackage pack = card.getSerPackage();//获取持卡所属套餐
    Random random = new Random();
    int ranNum = 0;
    int temp = 0;//记录各场景中的实际消费数据
    boolean bos = true;//定位有没有使用成功
    do {

       ranNum = random.nextInt(6)+1;//Scene scene = new Scene();scene.setType(initScenes(ranNum));switch (ranNum) {case 1:if (pack instanceof CallServixe) {//执行通话方法System.out.println(scene.getDescription());CallServixe callServixe = (CallServixe)pack;try {temp = callServixe.call(scene.getData(), card);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//添加一条记录addConsuminfo(number, new Cousumlnfo(number,scene.getType(),temp));bos = false;break;}else {//如果该卡套餐不支持通话功能,则重新生成随机数选择其他场景continue;}case 2:if (pack instanceof CallServixe) {//执行通话方法System.out.println(scene.getDescription());CallServixe callServixe = (CallServixe)pack;try {temp = callServixe.call(scene.getData(), card);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//添加一条记录addConsuminfo(number, new Cousumlnfo(number,scene.getType(),temp));bos = false;break;}else {//如果该卡套餐不支持通话功能,则重新生成随机数选择其他场景continue;}case 3:if (pack instanceof SendService) {//执行发短信方法System.out.println(scene.getDescription());SendService sendService = (SendService)pack;try {temp = sendService.send(scene.getData(), card);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//添加一条记录addConsuminfo(number, new Cousumlnfo(number,scene.getType(),temp));bos = false;break;}else {//如果该卡套餐不支持短信功能,则重新生成随机数选择其他场景continue;}case 4:if (pack instanceof SendService) {//执行发短信方法System.out.println(scene.getDescription());SendService sendService = (SendService)pack;try {temp = sendService.send(scene.getData(), card);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//添加一条记录addConsuminfo(number, new Cousumlnfo(number,scene.getType(),temp));bos = false;break;}else {//如果该卡套餐不支持短信功能,则重新生成随机数选择其他场景continue;} case 5:if (pack instanceof NetService) {//执行上网方法System.out.println(scene.getDescription());NetService netService = (NetService)pack;try {temp = netService.netPlay(scene.getData(), card);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//添加一条记录addConsuminfo(number, new Cousumlnfo(number,scene.getType(),temp));bos = false;break;}else {//如果该卡套餐不支持上网功能,则重新生成随机数选择其他场景continue;} case 6:if (pack instanceof NetService) {//执行上网方法System.out.println(scene.getDescription());NetService netService = (NetService)pack;try {temp = netService.netPlay(scene.getData(), card);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}//添加一条记录addConsuminfo(number, new Cousumlnfo(number,scene.getType(),temp));bos = false;break;}else {//如果该卡套餐不支持上网功能,则重新生成随机数选择其他场景continue;}                 }} while (bos);
    

    }

    //资费说明
    public void showDescription() {
    System.out.println(“品牌套餐\t\t话痨套餐\t网虫套餐\t超人套餐”);
    System.out.println(“通话时长(分钟)\t500mim\t\t200mim”);
    System.out.println(“上网流量(GB)\t\t3GB\t1GB”);
    System.out.println(“短信条数(条)\t30条\t\t50条”);
    System.out.println(“资费(元/月)\t58\t68\t78”);
    System.err.println(“超出通话:0.2元/分钟”);
    System.err.println(“超出短信:0.1元/条”);
    System.err.println(“超出流量:0.1元/M”);

    }

    //本月账单查询
    public void showAmountDetail(String number) {
    System.out.println("=====================================================");

     System.out.println("您的卡号:" + number );System.out.println("套餐资费:" + cards.get(number).serPackage.price );System.out.println("合计==:" + cards.get(number).serPackage.price + cards.get(number).getConsumAmount()  );System.out.println("账户余额:" + cards.get(number).getMoney());System.out.println("=====================================================");MobileCard card;//要查询的卡card = cards.get(number);//获取集合中一个元素StringBuffer meg = new StringBuffer();meg.append("您的卡号:" + card.getCardNumber() +"单月账单");meg.append("套餐资费:" + card.getSerPackage().getPrice()+"元\n");meg.append("合计:" + Common.dataFormat(card.getConsumAmount())+"元\t");meg.append("账户余额:" +Common.dataFormat(card.getMoney()) + "元");
    

    System.out.println(meg);

    }

    //套餐余流量查询 instanceof 判断属于哪个套餐的卡
    public void showRemainDetail(String number){
    if (cards.get(number).serPackage instanceof SuperPackage) {
    SuperPackage superPackage = (SuperPackage)cards.get(number).serPackage;
    System.out.println(“您的卡号:” + number );
    System.out.println(“通话时长:” + superPackage.getTalkTime()+“分钟” );
    System.out.println(“短信条数:” + superPackage.getSmsCount()+ “条” );
    System.out.println(“上网流量:” + superPackage.getFlow()/1024 + “,GB”);
    }
    if (cards.get(number).serPackage instanceof Netpackage) {
    Netpackage superPackage = (Netpackage)cards.get(number).serPackage;
    System.out.println(“您的卡号:” + number );
    //System.out.println(“通话时长:” + cards.get(number).realTalkTime );
    //System.out.println(“短信条数:” + superPackage.getSmsCount() );
    System.out.println(“上网流量:” + superPackage.getFlow()/1024 + “,GB”);
    }
    if (cards.get(number).serPackage instanceof TalkPackage) {
    TalkPackage superPackage = (TalkPackage)cards.get(number).serPackage;
    System.out.println(“您的卡号:” + number );
    System.out.println(“通话时长:” + cards.get(number).realTalkTime +“分钟” );
    System.out.println(“短信条数:” + superPackage.getSmsCount() + “条”);
    //System.out.println(“上网流量:” + superPackage.getFlow());
    }

    }

    //打印消费详单
    public void printAmountDetail(String number){
    System.out.println(“卡号:” + number + “用户名:”

    • cards.get(number).userName +",当前余额:" + cards.get(number).getMoney());
      }
      //打印消费信息
      public void prinConsumlnfo(String number) {
      File file = new File(“消费信息.txt”);
      try {
      file.createNewFile();
      } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
      }
      //Writer fileWriter = null;
      try(Writer fileWriter = new FileWriter(number + file);
      ) {
      /*
      * Set numberS= consumlnfos.keySet(); ArrayList< String> arrayList = new
      * ArrayList(); for (String string : numberS) { arrayList.add(string); }
      * List info = new ArrayList();
      /
      //储存指定卡的所有消费记录
      //现有消费列表中是否存在此卡号消费记录,
      boolean isExist =false;
      //String lengString ="";
      List infos= new ArrayList();
      for (String cousumlnfo : consumlnfos.keySet()) {
      if (cousumlnfo.equals(number)) {
      infos=consumlnfos.get(cousumlnfo);
      System.err.println(“我的标记”);
      isExist =true;
      }
      }
      if (isExist) {
      StringBuffer contentBuffer = new StringBuffer("
      *****"+ number +“消费记录” + “******\n”);
      contentBuffer.append(“序号\t类型\t数据\t(通话(分钟)/上网(MB)/短信(条)\n)”);
      for (int i = 0; i < infos.size(); i++) {
      Cousumlnfo cousumlnfo = infos.get(i);
      contentBuffer.append((i+1)+"\t"+cousumlnfo.getType()+
      “\t”+cousumlnfo.getConsumData()+"\n" );
      System.err.println(“我的标记2”);
      }
      fileWriter.write(contentBuffer.toString());
      fileWriter.flush();
      System.out.println(“消费记录打印完毕”);
      }else {
      System.out.println(“对不起,不存在此号码的消费记录,不能打印!”);
      }
      } catch (IOException e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
      }

    }

    //套餐变更
    public void changingPack(String number,int packNum){
    //如果剩余费用不够支持新的套餐费用
    if (cards.get(number).getMoney() < cards.get(number).getSerPackage().getPrice()) {
    System.out.println(“余额不足,请充值”);
    }else {
    cards.get(number).setRealTalkTime(0);
    cards.get(number).setRealFlow(0);
    cards.get(number).setRealSMSCount(0);
    cards.get(number).setSerPackage(createPack(packNum));
    cards.get(number).setMoney(cards.get(number).getMoney()-cards.get(number).getSerPackage().getPrice());
    System.out.println(“套餐更换完成”);
    cards.get(number).getSerPackage().shownlfo();
    }

    }

    //办理退网
    public void delCard(String number){
    System.out.println(“账户可退余额为:”+cards.get(number).getMoney());
    cards.get(number).setRealTalkTime(0);
    cards.get(number).setRealFlow(0);
    cards.get(number).setRealSMSCount(0);
    System.err.println("====账号删除");
    cards.remove(number);
    consumlnfos.remove(number);

    }

    //根据卡号和密码查看是否注册
    public boolean isExistCard(String number,String passWord) {
    Set numbers = cards.keySet();
    for (String string : numbers) {
    String searString = string;
    if (searString.equals(number) && (cards.get(searString).getPassWord().equals(passWord))) {
    return true;
    }
    }
    return false;
    }

    //根据卡号查验证是否注册
    public Boolean isExistCard(String number){
    Set numbers = cards.keySet();
    for (String string : numbers) {
    String searString = string;
    if (searString.equals(number)) {
    return true;
    }
    }
    return false;
    }

    //随机生成卡号
    public String createNumber() {
    Random random = new Random();
    boolean dis = false;
    String number = “”;
    int temp = 0;
    do {
    dis = false;//标志位重置为false,用于控制外层循环
    do {
    temp = random.nextInt(100000000);
    } while (temp < 10000000);
    //生成之前,前面加 139
    number = “139” + temp;

         //和现有用户的卡号比较,不能重复Set<String> cardNumder = cards.keySet();for (String cardNumders : cardNumder) {if (number.equals(cardNumders)) {dis =true;break;}}} while (dis);return number;
    

    }

    //生成指定个数卡号列表
    public String[] getNewNumbers(int count) {
    String[] num = new String[count];
    for (int i = 1; i < 10; i++) {
    try {
    num[i-1] = createNumber();
    System.out.print( i+"."+num[i-1] + “\t”);
    } catch (Exception e) {
    System.out.println(“用户注册异常了”);
    e.printStackTrace();
    }
    if (i%3==0) {
    System.out.println();
    }
    }
    return num;
    }

    //添加指定卡号的消费记录
    public void addConsuminfo(String number ,Cousumlnfo info) {
    if (consumlnfos.containsKey(number)) {
    consumlnfos.get(number).add(info);
    }else {
    List cousumlnfo =new ArrayList();
    try {
    cousumlnfo.add(info);
    } catch (Exception e) {
    System.out.println(e.getMessage());

            e.printStackTrace();}consumlnfos.put(number, cousumlnfo);}
    

    }

    //根据用户选择的套餐序号返回套餐对象
    public ServicePackage createPack(int packlf) {
    ServicePackage servicePackage = null;
    switch (packlf) {
    case 1:
    servicePackage = new TalkPackage();
    break;
    case 2:
    servicePackage = new Netpackage();
    break;
    case 3:
    servicePackage = new SuperPackage();
    break;

     default:break;}return servicePackage;
    

    }
    }
    /**

  • 接口 通话

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    /
    public interface CallServixe {
    public int call(int minCount,MobileCard card) throws Exception;
    //通话方法 minCount 通话时长 MobileCard 超出套餐内的通话时长需要消费那张卡的余额
    }
    /
    *

  • 上网 接口

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    /
    public interface NetService {
    public int netPlay(int flaw,MobileCard card) throws Exception;
    //flaw上网流量大小 MobileCard 超出流量后的收费
    }
    /
    *

  • 接口 短信

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    /
    public interface SendService {
    public int send(int count,MobileCard card) throws Exception;
    //count发送短信条数 MobileCard 超出后的收费
    }
    /
    *

  • 公共类

  • @author Chen HuiHong

  • @author 2020年6月7日{time}

  • @Tel 18073799961
    /
    public class Common {
    public static String dataFormat(double data) {
    DecimalFormat format = new DecimalFormat("#.0");
    return format.format(data);
    }
    public static double sub(double money ,double num) {
    return money-num;
    }
    }
    /
    *

  • 消费记录

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class Cousumlnfo {
    public String cardNumber;//卡号
    public String type;// 消费类型
    public int consumData;//消费数据

    public Cousumlnfo() {
    super();
    }
    public Cousumlnfo(String cardNumber, String type, int consumData) {
    super();
    this.cardNumber = cardNumber;
    this.type = type;
    this.consumData = consumData;
    }
    public String getCardNumber() {
    return cardNumber;
    }
    public void setCardNumber(String cardNumber) {
    this.cardNumber = cardNumber;
    }
    public String getType() {
    return type;
    }
    public void setType(String type) {
    this.type = type;
    }
    public int getConsumData() {
    return consumData;
    }
    public void setConsumData(int consumData) {
    this.consumData = consumData;
    }

}

  • 移动卡类

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class MobileCard {
    public String cardNumber;//卡号
    public String userName;//用户民
    public String passWord ;//密码
    public double consumAmount;//消费金额
    public double money;//账户余额
    public int realTalkTime ;//当月实际通话时长
    public int realSMSCount ;//当月实际发送短信条数
    public int realFlow;//当月实际上网流量
    public ServicePackage serPackage;//

    public String getCardNumber() {
    return cardNumber;
    }

    public void setCardNumber(String cardNumber) {
    this.cardNumber = cardNumber;
    }

    public String getUserName() {
    return userName;
    }

    public void setUserName(String userName) {
    this.userName = userName;
    }

    public String getPassWord() {
    return passWord;
    }

    public void setPassWord(String passWord) {
    this.passWord = passWord;
    }

    public double getConsumAmount() {
    return consumAmount;
    }

    public void setConsumAmount(double consumAmount) {
    this.consumAmount = consumAmount;
    }

    public double getMoney() {

     return money;
    

    }

    public void setMoney(double money) {
    this.money = money;
    }

    public int getRealTalkTime() {
    return realTalkTime;
    }

    public void setRealTalkTime(int realTalkTime) {
    this.realTalkTime = realTalkTime;
    }

    public int getRealSMSCount() {
    return realSMSCount;
    }

    public void setRealSMSCount(int realSMSCount) {
    this.realSMSCount = realSMSCount;
    }

    public int getRealFlow() {
    return realFlow;
    }

    public void setRealFlow(int realFlow) {
    this.realFlow = realFlow;
    }

    public ServicePackage getSerPackage() {
    return serPackage;
    }

    public void setSerPackage(ServicePackage serPackage) {
    this.serPackage = serPackage;
    }

    public void showMeg() {

    }

}
/**

  • 网虫套餐

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class Netpackage extends ServicePackage implements NetService{
    public int flow;//上网流量

    public Netpackage() {
    this.flow =3*1024;
    super.price = 68;
    }

    public int getFlow() {
    return flow;
    }

    public void setFlow(int flow) {
    this.flow = flow;

    }

    @Override
    public void shownlfo() {
    // TODO Auto-generated method stub
    super.shownlfo();
    System.out.println(“网虫套餐:”
    + “上网流量为:”+this.flow/1024 +“GB/月。”
    );
    }

    @Override
    //flaw上网流量大小 MobileCard 超出流量后的收费
    public int netPlay(int flaw, MobileCard card) throws Exception {
    int temp = flaw;
    for (int i = 0; i < flaw; i++) {
    if (this.flow- card.getRealFlow() >= 1) {
    //第一种情况:套餐剩余通话时长可以支持1分钟通话
    card.setRealFlow(card.getRealFlow() +1); //实际通话时长加1

       }else if (card.getMoney() >=0.1) {//第二种情况: 套餐通话时长已用完,账户余额可以支付1分钟通话,使用账户余额支付card.setRealFlow(card.getRealFlow() +1);//实际通话时长加1 //账户余额消费0.1元(一分钟额外电话)card.setMoney(Common.sub(card.getMoney(), 0.1));card.setConsumAmount(card.getConsumAmount() + 0.1);} else {temp = i;throw new Exception("本次已用流量" +i+"M,您的余额不足,请充值后在使用!");}}this.setFlow(this.getFlow()-temp);return temp;
    

    }

}
/**

  • 超人套餐

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class SuperPackage extends ServicePackage implements CallServixe,SendService,NetService{
    public int talkTime;//通话时长
    public int smsCount;//短信条数
    public int flow;//流量

    public SuperPackage() {
    this.talkTime = 200;
    this.smsCount = 50;
    this.flow = 1*1024;
    super.price=78;
    }

    public int getFlow() {
    return flow;
    }

    public void setFlow(int flow) {
    this.flow = flow;
    }

    public int getTalkTime() {
    return talkTime;
    }

    public void setTalkTime(int talkTime) {
    this.talkTime = talkTime;
    }

    public int getSmsCount() {
    return smsCount;
    }

    public void setSmsCount(int smsCount) {
    this.smsCount = smsCount;
    }

    @Override
    public void shownlfo() {
    // TODO Auto-generated method stub
    super.shownlfo();
    System.out.println(“超人套餐:通话时长为” + this.talkTime + “分钟/月,”
    + “短信条数为”+this.smsCount
    + “条/月,上网流量为:”+this.flow/1024 +“GB/月。”
    );
    }

    @Override
    //通话方法 minCount 通话时长 MobileCard 超出套餐内的通话时长需要消费那张卡的余额
    public int call(int minCount, MobileCard card) throws Exception {
    int temp = minCount;
    for (int i = 0; i < minCount; i++) {
    if (this.talkTime - card.getRealTalkTime() >= 1) {
    //第一种情况:套餐剩余通话时长可以支持1分钟通话
    card.setRealTalkTime(card.getRealTalkTime() +1); //实际通话时长加1

      }else if (card.getMoney() >=0.2) {//第二种情况: 套餐通话时长已用完,账户余额可以支付1分钟通话,使用账户余额支付card.setRealTalkTime(card.getRealTalkTime() +1);//实际通话时长加1 //账户余额消费0.2元(一分钟额外电话)card.setMoney(Common.sub(card.getMoney(), 0.2));card.setConsumAmount(card.getConsumAmount() + 0.2);} else {temp = i;throw new Exception("本次已通话" +i+"分钟,您的余额不足,请充值后在使用!");}}this.setTalkTime(this.getTalkTime()-temp);return temp;
    

    }

    @Override
    //count发送短信条数 MobileCard 超出后的收费
    public int send(int count, MobileCard card) throws Exception{
    int temp = count;
    for (int i = 0; i < count; i++) {
    if (this.smsCount- card.getRealSMSCount() >= 1) {
    //第一种情况:套餐剩余通话时长可以支持1分钟通话
    card.setRealSMSCount(card.getRealSMSCount() +1); //实际短信条数加1

         }else if (card.getMoney() >=0.1) {//第二种情况: 套餐通话时长已用完,账户余额可以支付1条短信,使用账户余额支付card.setRealSMSCount(card.getRealSMSCount() +1);//实际短信条数加1//账户余额消费0.1元(一条额外短信)card.setMoney(Common.sub(card.getMoney(), 0.1));card.setConsumAmount(card.getConsumAmount() + 0.1);} else {temp = i;throw new Exception("本次已发短信" +i+"条,您的余额不足,请充值后在使用!");}}this.setSmsCount(this.getSmsCount()-temp);return temp;
    

    }

    @Override
    //flaw上网流量大小 MobileCard 超出流量后的收费
    public int netPlay(int flaw, MobileCard card) throws Exception {
    int temp = flaw;
    for (int i = 0; i < flaw; i++) {
    if (this.flow- card.getRealFlow() >= 1) {
    //第一种情况:套餐剩余通话时长可以支持1分钟通话
    card.setRealFlow(card.getRealFlow() +1); //实际通话时长加1

       }else if (card.getMoney() >=0.1) {//第二种情况: 套餐通话时长已用完,账户余额可以支付1分钟通话,使用账户余额支付card.setRealFlow(card.getRealFlow() +1);//实际通话时长加1 //账户余额消费0.1元(一分钟额外电话)card.setMoney(Common.sub(card.getMoney(), 0.1));card.setConsumAmount(card.getConsumAmount() + 0.1);} else {temp = i;throw new Exception("本次已用流量" +i+"M,您的余额不足,请充值后在使用!");}}this.setFlow(this.getFlow()-temp);return temp;
    

    }

}
/**

  • 话痨套餐

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class TalkPackage extends ServicePackage implements CallServixe,SendService{
    public int talkTime;//通话时长
    public int smsCount;//短信条数

    public TalkPackage() {
    this.talkTime = 500;
    this.smsCount = 30;
    super.price = 58;
    }

    public int getTalkTime() {
    return talkTime;
    }

    public void setTalkTime(int talkTime) {
    this.talkTime = talkTime;
    }

    public int getSmsCount() {
    return smsCount;
    }

    public void setSmsCount(int smsCount) {
    this.smsCount = smsCount;
    }

    @Override
    public void shownlfo() {
    // TODO Auto-generated method stub
    super.shownlfo();
    System.out.println(“话痨套餐:通话时长为” + this.talkTime + “分钟/月,”
    + “短信条数为”+this.smsCount
    + “条/月。”
    );
    }

    @Override
    //count发送短信条数 MobileCard 超出后的收费
    public int send(int count, MobileCard card) throws Exception{
    int temp = count;
    for (int i = 0; i < count; i++) {
    if (this.smsCount- card.getRealSMSCount() >= 1) {
    //第一种情况:套餐剩余通话时长可以支持1分钟通话
    card.setRealSMSCount(card.getRealSMSCount() +1); //实际短信条数加1

      }else if (card.getMoney() >=0.1) {//第二种情况: 套餐通话时长已用完,账户余额可以支付1条短信,使用账户余额支付card.setRealSMSCount(card.getRealSMSCount() +1);//实际短信条数加1//账户余额消费0.1元(一条额外短信)card.setMoney(Common.sub(card.getMoney(), 0.1));card.setConsumAmount(card.getConsumAmount() + 0.1);} else {temp = i;throw new Exception("本次已发短信" +i+"条,您的余额不足,请充值后在使用!");}}this.setSmsCount(this.getSmsCount()-temp);return temp;
    

    }

    @Override
    //通话方法 minCount 通话时长 MobileCard 超出套餐内的通话时长需要消费那张卡的余额
    public int call(int minCount, MobileCard card) throws Exception{
    int temp = minCount;
    for (int i = 0; i < minCount; i++) {
    if (this.talkTime - card.getRealTalkTime() >= 1) {
    //第一种情况:套餐剩余通话时长可以支持1分钟通话
    card.setRealTalkTime(card.getRealTalkTime() +1); //实际通话时长加1

      }else if (card.getMoney() >=0.2) {//第二种情况: 套餐通话时长已用完,账户余额可以支付1分钟通话,使用账户余额支付card.setRealTalkTime(card.getRealTalkTime() +1);//实际通话时长加1 //账户余额消费0.2元(一分钟额外电话)card.setMoney(Common.sub(card.getMoney(), 0.2));card.setConsumAmount(card.getConsumAmount() + 0.2);} else {temp = i;throw new Exception("本次已通话" +i+"分钟,您的余额不足,请充值后在使用!");}}this.setTalkTime(this.getTalkTime()-temp);return temp;
    

    }

}
/**

  • 使用场景

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class Scene {
    public String type;//场景类型
    public int data ;//场景消费数据
    public String description;//场景描述

    public Scene() {
    super();
    }
    public Scene(String type, int data, String description) {
    super();
    this.type = type;
    this.data = data;
    this.description = description;
    }
    public String getType() {
    return type;
    }
    public void setType(String type) {
    this.type = type;
    }
    public int getData() {
    return data;
    }
    public void setData(int data) {

     this.data = data;
    

    }
    public String getDescription() {

     return description;
    

    }
    public void setDescription(String description) {

     this.description = description;
    

    }

}
/**

  • 抽取得公有属性和方法的接口 )品牌套餐类 父类

  • @author Chen HuiHong

  • @author 2020年6月6日{time}

  • @Tel 18073799961
    */
    public class ServicePackage {
    public double price;//套餐月资费

    public double getPrice() {
    return price;
    }

    public ServicePackage() {
    super();
    }

    public void shownlfo() {//显示信息

    }

}

运行效果为
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
2
*可选者卡号
1.13998648298 2.13951284793 3.13967113639
4.13994561375 5.13964815529 6.13994190607
7.13954211280 8.13972749893 9.13916332613
请选择卡号(输入1~9的序号)
2
1.话痨套餐 2.网虫套餐 3.超人套餐 请选择序号2
请输入姓名:橙橙
请输入密码:123456
请输入预存话费金额:
100
账户余额:100.0
注册成功:
卡号:13967113639用户名:橙橙,当前余额:32.0
网虫套餐:上网流量为:3GB/月。
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
3
*使用橙橙
请输入手机号:13967113639
上网,晚上手机在线看亮剑,看得过瘾,使用流量2GB,剩下的日子干瞪眼~~
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
5
*资费说明
品牌套餐 话痨套餐 网虫套餐 超人套餐
通话时长(分钟) 500mim 200mim
上网流量(GB) 3GB 1GB
超出通话:0.2元/分钟
超出短信:0.1元/条
超出流量:0.1元/M
短信条数(条) 30条 50条
资费(元/月) 58 68 78
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
1
*用户登录
请输入手机号:13967113639
请输入密码:123456
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
1
*本月账单查询

您的卡号:13967113639
套餐资费:68.0
合计==:68.00.0
账户余额:32.0

您的卡号:13967113639单月账单套餐资费:68.0元
合计:.0元 账户余额:32.0元
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
2
套餐余量查询
您的卡号:13967113639
上网流量:1,GB
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
3
打印消费详单
我的标记
消费记录打印完毕
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
我的标记2
4
套餐变更
请输入要变更的套餐类型:1.话痨套餐 2.网虫套餐 3.超人套餐 请选择序号3
余额不足,请充值
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
123
谢谢使用

**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
4
*话费充值
请输入手机号:13967113639
请输入充值金额:1000
账户余额:1032.0
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
3
*使用橙橙
请输入手机号:13967113639
上网 ,和女友微信视屏聊天,使用流量1GB
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
1
*用户登录
请输入手机号:13967113639
请输入密码:123456
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
4
*套餐变更
请输入要变更的套餐类型:1.话痨套餐 2.网虫套餐 3.超人套餐 请选择序号3
套餐更换完成
超人套餐:通话时长为200分钟/月,短信条数为50条/月,上网流量为:1GB/月。
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
1
*本月账单查询

您的卡号:13967113639
套餐资费:78.0
合计==:78.0102.39999999999846
账户余额:851.5999999999858

您的卡号:13967113639单月账单套餐资费:78.0元
合计:102.4元 账户余额:851.6元
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
2
套餐余量查询
您的卡号:13967113639
通话时长:200分钟
短信条数:50条
上网流量:1,GB
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
123
谢谢使用
**
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
3
*使用橙橙
请输入手机号:13967113639
短信 ,参与环境保护实施方案问卷调查,发送短信5条
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
3
*使用橙橙
请输入手机号:13967113639
短信 ,通知朋友换手机,发送短信50条
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
1
*用户登录
请输入手机号:13967113639
请输入密码:123465
**欢迎使用橙橙 移动业务大厅
1.用户登录 2.用户注册 3.使用橙橙 4.话费充值 5.资费说明 6.退出系统
请选择–
1
*用户登录
请输入手机号:13967113639
请输入密码:123456
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)
5
*办理退网
====账号删除
账户可退余额为:850.5999999999856
嗖嗖移动用户菜单
1.本月账单查询 2.套餐余量查询 3.打印消费详单 4.套餐变跟 5.办理退网 请输入(1~5选择功能,其他键返回上一级)

作业~嗖嗖移动业务大厅相关推荐

  1. java项目嗖嗖移动业务大厅项目报告_晋江市撰写节能评估报告的报告机构立项范本-文瑞...

    文瑞承接可行性研究报告.项目建议书.立项报告.资金申请报告.项目申请报告.项目实施方案.节能报告.评估报告.商业计划书.投标书等各类文案以及各行业甲.乙.丙级工程资质.晋江市撰写节能评估报告的报告机构 ...

  2. 嗖嗖移动业务大厅小项目

    package SOSO;/*** CallService** @author yaoxinxin* @version 1.0* @description 打电话接口* @date 2022/9/14 ...

  3. 嗖嗖移动业务大厅代码_移动云应用性能监控,掌控云时代的多变应用

    引言:据预测,2021年全球应用性能监控市场规模将达到51.63亿美元:中国应用性能监控行业市场规模将扩大至69.63亿元人民币,已经进入高速成长期. 在云时代 智能化使企业的应用管理日渐复杂 丰富的 ...

  4. java项目嗖嗖移动业务大厅项目报告_Java就业指导课程

    Java就业指导 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东 ...

  5. 使用java实现面向对象编程第十章嗖嗖移动业务大厅项目_ACCP6.0使用Java实现面向对象编程-第一章.ppt...

    ACCP6.0使用Java实现面向对象编程-第一章 练习--用类图设计Dog和Penguin类 需求说明: 运用面向对象思想抽象出Dog类和Penguin类,画出对应类图 根据类图编写Dog类和Pen ...

  6. 使用java实现面向对象编程第十章嗖嗖移动业务大厅项目_ACCP6.0 S2 使用Java实现面向对象编程 第一章...

    使用this调用成员方法 public void paly(int n){ health=health-n; this.print(); //this可以省略,直接调用print(): } 使用thi ...

  7. 华为数字化转型之道 实践篇 第七章 数字化作业:减少业务高能耗点

    第七章 数字化作业:减少业务高能耗点 企业创造价值的效率及所产生的效益,很大程度上取决于各个职能部门的循环往复的日常作业是否高效. 在数字时代,我们重新思考早已习以为常的作业模式,通过数字化转型,可以 ...

  8. 搜搜移动业务大厅项目类的结构_2020年SEM小搜投放指南:竞价小渠道如何把效果做到极致...

    在SEM中,推广的渠道主要是5个:百度.360.搜狗.神马和头条.百度,是最主要的渠道,在竞价圈常称大搜,后四者我们常称小搜. 5个搜索平台,在流量上,有非常大的差异.pc端,百度和360份额占比较多 ...

  9. java怎么编写嗖嗖手机_JAVA项目-嗖嗖移动

    importjava.io.IOException;importjava.util.Scanner;/*** 业务类*/ classSosoMgr { Scanner input= newScanne ...

最新文章

  1. Web设计和开发人员有用的15Chrome插件
  2. 是小厂全栈好,还是大厂专业工程师好?
  3. java知识回顾_Java7 –回顾
  4. a标签的href与onclick中使用js的区别
  5. java实现空心四边形_Java输入数值形成对应的平行四边形,正三角形,棱形,空心棱形...
  6. 彻底解决Eclipse的控制台console按钮非常小
  7. 赣州师范高等专科学校计算机网络技术,赣州师范高等专科学校2021年招生简章...
  8. cocos2d-x 2.0版本 自适应屏幕分辨率 .
  9. 微波网络插入反射系数与输入反射系数
  10. 爬虫_抓取51job招聘数据
  11. string.h 详解
  12. 反应堆Reactor模式
  13. Storm Control 风暴控制
  14. 用C语言实现菱形图案
  15. Python爬虫伪装,请求头User-Agent池,和代理IP池搭建使用
  16. HEIF 和 HEVC 研究
  17. codeforces 1197D. Yet Another Subarray Problem 动态规划
  18. 移动桌面位置,再也不怕C盘爆满!
  19. 爬取淘女郎前100页所有图片
  20. c语言float可以 取余吗,C语言fmod()函数:对浮点数取模(求余)

热门文章

  1. python中copy()和deepcopy()详解
  2. Windows中制作傻瓜式安装 Yosemite黑苹果教程。看完你就懂了会了
  3. 移动的一个比微软所有漏洞加起来都要严重的漏洞
  4. 我们一起学一学渗透测试——黑客应该掌握的Windows基础
  5. 节奏感:出色平面设计的必备要素
  6. 【平衡树】 [HNOI2012]永无乡
  7. Velocity中使用FCKeditor(FCKeditor for java)
  8. 计算折叠多少次纸能不低于珠穆朗玛峰
  9. 谐振电路的原理和作用
  10. CPLD与16C554在航空发动机参数采集器中的应用——转载