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("套餐通话时长剩余不足!");}if (smsCount>0){System.out.println("套餐剩余信息:"+smsCount+"条");}else {System.out.println("信息剩余不足!");}}else {//网虫套餐NetPackage netPackage = (NetPackage) serPackage;int flow = netPackage.getFlow()-mobileCard.getRealFlow();if (flow>0){System.out.println("套餐流量剩余"+flow+"M");}else {System.out.println("套餐流量剩余不足!");}}}}
//    增加消费记录public void addConsumInfo(java.lang.String number,ConsumInfo consumInfo){
//        首先取出该号码对应的消费记录集合List<ConsumInfo> consumInfos = CardUtil.consunmIofos.get(number);
//        判断集合是否为空if(consumInfos==null){consumInfos=new ArrayList<>();}
//        添加消费记录consumInfos.add(consumInfo);CardUtil.consunmIofos.put(number,consumInfos);}
//    使用嗖嗖public void useSoso(java.lang.String number){
//        验证卡号if(!isExistCard(number)){System.out.println("当前卡号未注册,退出使用");return;}
//        获得卡对象MobileCard mobileCard = cards.get(number);
//        获得套餐ServicePackage serPackage = mobileCard.getSerPackage();
//        随机进入场景(0~5)Random random = new Random();int data = -1;Scene scene = null;do {int num = random.nextInt(6);scene = scenes.get(num);//        判断套餐是否可以消费此场景switch (num){
//            通话case 0:case 1:if(!(serPackage instanceof CallService)){
//                    重新随机场景continue;}CallService callService = (CallService)serPackage;try {data = callService.call(scene.getData(), mobileCard);} catch (Exception e) {e.printStackTrace();java.lang.String message = e.getMessage();data = Integer.valueOf(message.substring(message.indexOf("(") + 1, message.indexOf(")")));}System.out.println(scene.getDescription());System.out.println("实际通话时长:"+data);break;
//                    发短信case 2:case 3:if(!(serPackage instanceof SendService)){
//                    重新随机场景continue;}SendService sendService = (SendService)serPackage;try {data = sendService.send(scene.getData(), mobileCard);} catch (Exception e) {e.printStackTrace();java.lang.String message = e.getMessage();data = Integer.valueOf(message.substring(message.indexOf("(") + 1, message.indexOf(")")));}System.out.println(scene.getDescription());System.out.println("实际使用短信数量:"+data);break;
//                    上网case 4:case 5:if(!(serPackage instanceof NetService)){
//                    重新随机场景continue;}NetService netService = (NetService)serPackage;try {data = netService.netPlay(scene.getData(), mobileCard);} catch (Exception e) {e.printStackTrace();java.lang.String message = e.getMessage();data = Integer.valueOf(message.substring(message.indexOf("(") + 1, message.indexOf(")")));}System.out.println(scene.getDescription());System.out.println("实际使用的数据量:"+data);break;}break;}while (true);
//        添加消费记录
//        判断是否消费if(data>0){
//            创建消费记录对象ConsumInfo consumInfo = new ConsumInfo(number, scene.getType(), data);
//            添加消费记录addConsumInfo(number,consumInfo);}}
//    展示嗖嗖资费信息public void showDescription() throws IOException {
//        读取文件内容
//        通过Class对象可以获取相对路径上的文件流//方法一
//        通过相对资源路径读取,适应性强//InputStream resourceAsStream = CardUtil.class.getResourceAsStream("套餐资费说明.txt");//方法二
//        通过绝对路径读取,适应性差FileReader fileReader = new FileReader("C:\\JavaPro\\Collection\\src\\main\\java\\SOSO\\套餐资费说明.txt");BufferedReader bufferedReader = new BufferedReader(fileReader);
//        当内容不为空,读取内容while (bufferedReader.ready()){System.out.println(bufferedReader.readLine());}fileReader.close();bufferedReader.close();}
//    更改套餐public void changingPack(String number,String packNum){}
//    打印账单public void printConsumInfo(java.lang.String number) throws IOException {//        获得消费记录List<ConsumInfo> consumInfos = consunmIofos.get(number);
//        判断是否存在消费记录if(consumInfos==null||consumInfos.size() == 0){System.out.println("该号码不存在消费记录,不能打印!");return;}
//        创建文件流BufferedWriter bufferedWriter = null;try {File file = new File("C:\\JavaPro\\Collection\\consumInfos");if (!file.exists()){file.mkdir();}File file1 = new File(number + ".txt");FileWriter fileWriter = new FileWriter(file1);bufferedWriter = new BufferedWriter(fileWriter);bufferedWriter.write("********"+number+"消费记录*********\n");bufferedWriter.write("序号\t类型\t数据(通话(分钟)/上网(MB)/短信(条))\n");
//            循环遍历消费记录,依次写入文件for (int i = 0; i < consumInfos.size(); i++) {ConsumInfo consumInfo = consumInfos.get(i);bufferedWriter.write(i+1+".\t"+consumInfo.getType()+"\t"+consumInfo.getConsumData());}} catch (IOException e) {e.printStackTrace();}finally {bufferedWriter.close();}}
//    话费充值public void chargeMoney(String number, double money){}//    输入指定范围的数字public int inputNum(int start , int end){int re = -1;Scanner scanner = new Scanner(System.in);do {System.out.println("请输入"+start + "到"+end+"范围的数字");try {re = scanner.nextInt();if (re>=start&&re<=end){break;}else {System.out.println("数据范围错误!");}} catch (Exception e) {System.out.println("输入的为非法数字!");scanner.next();}}while (true);return re;}}
package SOSO;import com.sun.org.apache.xerces.internal.impl.xpath.XPath;/*** ConsumInfo** @author yaoxinxin* @version 1.0* @description* @date 2022/9/14 11:25*/
public class ConsumInfo {private String cardNumber;private String type;private int consumData;public ConsumInfo(String cardNumber, String type, int consumData) {this.cardNumber = cardNumber;this.type = type;this.consumData = consumData;}public ConsumInfo() {}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;}
}
package SOSO;import com.sun.javaws.security.AppContextUtil;/*** MobileCard** @author yaoxinxin* @version 1.0* @description 移动电话卡类* @date 2022/9/14 10:58*/
public class MobileCard {private String cardNumber;//电话号码private String userName;//姓名private String passWord;//密码private ServicePackage serPackage;//套餐private double consumerAmount;//充值金额private double money;//消费的钱private int realTalkTime;//通话时间private int realSMSCount;//信息数量private int realFlow;//流量public MobileCard(String cardNumber, String userName, String passWord, ServicePackage serPackage, double consumerAmount, double money, int realTalkTime, int realSMSCount, int realFlow) {this.cardNumber = cardNumber;this.userName = userName;this.passWord = passWord;this.serPackage = serPackage;this.consumerAmount = consumerAmount;this.money = money;this.realTalkTime = realTalkTime;this.realSMSCount = realSMSCount;this.realFlow = realFlow;}/*****/public void showMeg(){}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 ServicePackage getSerPackage() {return serPackage;}public void setSerPackage(ServicePackage serPackage) {this.serPackage = serPackage;}public double getConsumerAmount() {return consumerAmount;}public void setConsumerAmount(double consumerAmount) {this.consumerAmount = consumerAmount;}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;}@Overridepublic String toString() {return "MobileCard{" +"cardNumber='" + cardNumber + '\'' +", userName='" + userName + '\'' +", passWord='" + passWord + '\'' +", serPackage=" + serPackage +", consumerAmount=" + consumerAmount +", money=" + money +", realTalkTime=" + realTalkTime +", realSMSCount=" + realSMSCount +", realFlow=" + realFlow +'}';}
}
package SOSO;/*** NetPackage** @author yaoxinxin* @version 1.0* @description 网虫套餐* @date 2022/9/14 11:14*/
public class NetPackage extends ServicePackage implements NetService {private int flow = 3072 ;public NetPackage(double price) {super(price);}public NetPackage(int flow) {this.flow = flow;}public int getFlow() {return flow;}public void setFlow(int flow) { this.flow = flow; }@Overridepublic void showInfo() {super.showInfo();}@Overridepublic int netPlay(int flow, MobileCard card) throws Exception {for (int i = 0; i < flow; i++) {
//            首先判断套餐余量够,进行if(this.getFlow()>card.getRealFlow()){
//                操作 增加实际通话时间card.setRealFlow(card.getRealFlow()+1);}else if(card.getMoney()>=0.2){//            看余额够,进行card.setRealFlow(card.getRealFlow()+1);
//                操作金额
//                添加消费总额card.setConsumerAmount(card.getConsumerAmount()+0.1);
//                减少金额card.setMoney(card.getMoney() - 0.1);}else {
//                抛异常throw new Exception("本次使用流量("+i+")M,余额不足!请充值");}}return flow;}
}
package SOSO;/*** NetService** @author yaoxinxin* @version 1.0* @description 上网接口* @date 2022/9/14 11:08*/
public interface NetService {
//    准备上网使用的流量public int netPlay(int flow,MobileCard card) throws Exception;
}
package SOSO;/*** Scene** @author yaoxinxin* @version 1.0* @description* @date 2022/9/14 11:24*/
public class Scene {private String type;private int data;private String description;public Scene(String type, int data, String description) {this.type = type;this.data = data;this.description = description;}public Scene() {}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;}
}
package SOSO;/*** SendService** @author yaoxinxin* @version 1.0* @description 发消息接口* @date 2022/9/14 11:07*/
public interface SendService {public int send(int minCount,MobileCard mobileCard) throws Exception;
}
package SOSO;/*** ServicePackage** @author yaoxinxin* @version 1.0* @description* @date 2022/9/14 11:02*/
public class ServicePackage {private double price;/***显示*/public void showInfo(){}public ServicePackage(double price) {this.price = price;}public ServicePackage() {}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}
}
package SOSO;import java.io.IOException;
import java.util.Scanner;/*** SosoMag** @author yaoxinxin* @version 1.0* @description* @date 2022/9/14 12:05*/
public class SosoMag {public static Scanner input = new Scanner(System.in);/*** 展示二级菜单*/public static void showSecondMenu(java.lang.String number){CardUtil cardUtil = new CardUtil();do{System.out.println("------------------欢迎使用嗖嗖移动大厅----------------");System.out.println("1.本月账单查询"+"\t"+"2.套餐余量查询"+"\t"+"3.打印消费详情");System.out.println("4.套餐变更"+"\t"+"5.办理退网");System.out.println("请选择(输入1-5)");int opt = cardUtil.inputNum(1,6);switch (opt){case 1:System.out.println("==本月账单查询==");cardUtil.showAmountDetail(number);continue;case 2:System.out.println("==套餐余量查询==");cardUtil.showRemainDetail(number);continue;case 3:System.out.println("==打印消费详情==");try {cardUtil.printConsumInfo(number);} catch (IOException e) {e.printStackTrace();}continue;case 4:System.out.println("==套餐变更==");continue;case 5:System.out.println("==办理退网==");continue;default:break;}break;}while(true);}/*** 注册方法*/public static void reg(){CardUtil cardUtil = new CardUtil();
//        随机产生9个号码String[] newNumbers = cardUtil.getNewNumbers(9);for (int i = 0; i < newNumbers.length; i++) {System.out.print(i+1+"."+newNumbers[i]+"\t");if ((i+1)%3==0){System.out.println();}}
//        调用输入数字的方法int num = cardUtil.inputNum(1, 9);//将拿到的电话号码作为keyString newNumber = newNumbers[num - 1];System.out.println("您选择的电话号码为:"+newNumber);System.out.println("-----------------------------------");System.out.println("1.话痨套餐  2.网虫套餐  3.超人套餐");System.out.println("请选择您的套餐(输入序号):");int numService = input.nextInt();
//                    调用工具类中的选择套餐方法ServicePackage aPackage = cardUtil.getPackage(numService);System.out.print("请输入姓名:");String name = input.next();System.out.print("请输入密码:");String pwd = input.next();//将开户金额与套餐所需金额做对比,如果开户金额不足,提示用户重新输入int phonePay = 0;System.out.println("请输入花费预存金额:");phonePay = input.nextInt();while (phonePay<aPackage.getPrice()){System.out.println("您预存的金额不足以支付本月固定套餐资费,请重新充值:");int i = input.nextInt();phonePay+=i;}System.out.println("注册成功! 卡号"+newNumber+"\t用户名:"+name+"\t当前余额:"+(phonePay-aPackage.getPrice())+"元.");//新建Mobile对象,作为ValueMobileCard mobileCard = new MobileCard(newNumber, name, pwd,aPackage,phonePay,0,0,0,0);//调用方法,将注册的用户数据存到Map中cardUtil.addCard(mobileCard);}/*** 登录方法*/private static void login() {System.out.println("请输入手机号:");String number = input.next();System.out.println("请输入密码:");String pwd = input.next();
//        判断登录CardUtil cardUtil = new CardUtil();boolean existCard = cardUtil.isExistCard(number, pwd);if(existCard){//调用方法展示二级菜单showSecondMenu(number);}else {System.out.println("登陆失败!");}}/*** 主方法* @param args* @throws IOException*/public static void main(String[] args) throws IOException {CardUtil cardUtil = new CardUtil();while (true){System.out.println("------------------欢迎使用嗖嗖移动大厅----------------");System.out.println("1.用户登录"+"\t"+"2.用户注册"+"\t"+"3.使用嗖嗖");System.out.println("4.话费充值"+"\t"+"5.资费说明"+"\t"+"6.退出系统");System.out.println("请选择您的需求");int opt = new CardUtil().inputNum(1,6);switch (opt){case 1:System.out.println("==用户登录==");//调用判断用户是否存在的方法login();continue;case 2:System.out.println("==注册用户==");System.out.println("******可选择的卡号******");//注册新用户reg();break;case 3:System.out.println("=使用嗖嗖=");System.out.println("请输入手机号:");String next = input.next();cardUtil.useSoso(next);break;case 4:System.out.println("=话费充值=");break;case 5:System.out.println("账单");MobileCard mobileCard = new MobileCard("12345678901", "刘备", "123456", new SuperPackage(500, 30, 50), 100, 80, 100, 10, 0);ServicePackage serPackage = mobileCard.getSerPackage();SuperPackage superPackage = (SuperPackage)serPackage;try {int call = superPackage.call(50, mobileCard);int i = superPackage.netPlay(50, mobileCard);int send = superPackage.send(500000, mobileCard);} catch (Exception e) {e.printStackTrace();
//                        获得异常消息String message = e.getMessage();
//                        字符串转数字,将消费数据单独提取int data = Integer.valueOf(message.substring(message.indexOf("(") + 1, message.indexOf(")"))) ;System.out.println(data);}System.out.println(mobileCard);break;case 6:System.out.println("tui");System.exit(0);break;}}}}
package SOSO;/*** SuperPackage** @author yaoxinxin* @version 1.0* @description 超人套餐* @date 2022/9/14 11:12*/
public class SuperPackage extends ServicePackage implements SendService,NetService , CallService{private int talkTime = 200;private int smsCount = 50 ;private int flow = 1024;public SuperPackage(double price) {super(price);}@Overridepublic int send(int send,MobileCard card) throws Exception {for (int i = 0; i < send; i++) {
//            首先判断套餐余量够,进行if(this.getSmsCount()>card.getRealSMSCount()){
//                操作 增加实际通话时间card.setRealSMSCount(card.getRealSMSCount()+1);}else if(card.getMoney()>=0.2){//            看余额够,进行card.setRealSMSCount(card.getRealSMSCount()+1);
//                操作金额
//                添加消费总额card.setConsumerAmount(card.getConsumerAmount()+0.1);
//                减少金额card.setMoney(card.getMoney() - 0.1);}else {
//                抛异常throw new Exception("本次使用短信("+i+")条,余额不足!请充值");}}return send;}@Overridepublic int netPlay(int flow, MobileCard card) throws Exception{for (int i = 0; i < flow; i++) {
//            首先判断套餐余量够,进行if(this.getFlow()>card.getRealFlow()){
//                操作 增加实际通话时间card.setRealFlow(card.getRealFlow()+1);}else if(card.getMoney()>=0.2){//            看余额够,进行card.setRealFlow(card.getRealFlow()+1);
//                操作金额
//                添加消费总额card.setConsumerAmount(card.getConsumerAmount()+0.1);
//                减少金额card.setMoney(card.getMoney() - 0.1);}else {
//                抛异常throw new Exception("本次使用流量("+i+")M,余额不足!请充值");}}return flow;}//    打电话如何计费
//    minCount准备通话的时间@Overridepublic int call(int minCount,MobileCard card) throws Exception {
//        获得该电话卡的套餐//SuperPackage superPackage = (SuperPackage)card.getSerPackage();
//        采用循环,以一分钟为最小结算单位for (int i = 0; i < minCount; i++) {
//            首先判断套餐余量够,进行if(this.getTalkTime()>card.getRealTalkTime()){
//                操作 增加实际通话时间card.setRealTalkTime(card.getRealTalkTime()+1);}else if(card.getMoney()>=0.2){//            看余额够,进行card.setRealTalkTime(card.getRealTalkTime()+1);
//                操作金额
//                添加消费总额card.setConsumerAmount(card.getConsumerAmount()+0.2);
//                减少金额card.setMoney(card.getMoney() - 0.2);}else {
//                抛异常throw new Exception("本次通话("+i+")分钟,余额不足!请充值");}}return minCount;}/****/public void showInfo(){}public SuperPackage(int talkTime, int smsCount, int flow) {this.talkTime = talkTime;this.smsCount = smsCount;this.flow = flow;}public SuperPackage() {}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;}public int getFlow() {return flow;}public void setFlow(int flow) {this.flow = flow;}}
package SOSO;/*** TalkPackage** @author yaoxinxin* @version 1.0* @description 话痨套餐* @date 2022/9/14 11:04*/
public class TalkPackage extends ServicePackage implements CallService , SendService{private int talkTime = 500;private int smsCount = 30;public TalkPackage(double price) {super(price);}public void showInfo(){}public TalkPackage(int talkTime, int smsCount) {this.talkTime = talkTime;this.smsCount = smsCount;}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;}@Overridepublic int call(int minCount, MobileCard card) throws Exception {
//        获得该电话卡的套餐//SuperPackage superPackage = (SuperPackage)card.getSerPackage();
//        采用循环,以一分钟为最小结算单位for (int i = 0; i < minCount; i++) {
//            首先判断套餐余量够,进行if(this.getTalkTime()>card.getRealTalkTime()){
//                操作 增加实际通话时间card.setRealTalkTime(card.getRealTalkTime()+1);}else if(card.getMoney()>=0.2){//            看余额够,进行card.setRealTalkTime(card.getRealTalkTime()+1);
//                操作金额
//                添加消费总额card.setConsumerAmount(card.getConsumerAmount()+0.2);
//                减少金额card.setMoney(card.getMoney() - 0.2);}else {
//                抛异常throw new Exception("本次通话("+i+")分钟,余额不足!请充值");}}return minCount;}@Overridepublic int send(int send, MobileCard card) throws Exception {for (int i = 0; i < send; i++) {
//            首先判断套餐余量够,进行if(this.getSmsCount()>card.getRealSMSCount()){
//                操作 增加实际通话时间card.setRealSMSCount(card.getRealSMSCount()+1);}else if(card.getMoney()>=0.2){//            看余额够,进行card.setRealSMSCount(card.getRealSMSCount()+1);
//                操作金额
//                添加消费总额card.setConsumerAmount(card.getConsumerAmount()+0.1);
//                减少金额card.setMoney(card.getMoney() - 0.1);}else {
//                抛异常throw new Exception("本次使用短信("+i+")条,余额不足!请充值");}}return send;}
}
套餐类型:话唠套餐
通话时长:200分钟
短信条数:50条
月资费:58元
——————————————
套餐类型:网虫套餐
上网流量:5GB
月资费:68元
——————————————
套餐类型:超人套餐
通话时长:200分钟
短信条数:100条
上网流量:1GB
月资费:78元
——————————————
超出套餐计费:
通话时长:0.2元/分钟
短信条数:0.1元/条
上网流量:0.1元/M

嗖嗖移动业务大厅小项目相关推荐

  1. 作业~嗖嗖移动业务大厅

    /** 测试类 业务类 @author Chen HuiHong @author 2020年6月6日{time} @Tel 18073799961 */ public class TestSosoMg ...

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

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

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

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

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

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

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

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

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

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

  7. Java EE---使用Spring框架创建Market小项目

    通过Spring的IoC和DI思想创建一个小项目便于理解spring 题目: 1.使用Spring IOC/DI 模拟某超市管理功能,程序设计涉及: (1)Product类(商品类):含id(商品编号 ...

  8. python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统

    原标题:Python小项目:快速开发出一个简单的学生管理系统 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: ...

  9. python小项目案例-Python小项目:快速开发出一个简单的学生管理系统

    本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...

最新文章

  1. 将 SQL Server 存储过程用于数据访问
  2. 刷脸背后,卷积神经网络的数学原理原来是这样的
  3. 对于电单车同学们提出的改动建议
  4. 转载:【OpenCV入门教程之四】 ROI区域图像叠加初级图像混合 全剖析
  5. Node+Vue实现对数据的增删改查
  6. protobufjs 命令执行_protobufjs简单使用
  7. 虚拟机打不开,提示“此主机不支持虚拟化实际模式”的解决方法。
  8. LIRe 源代码分析 6:检索(ImageSearcher)[以颜色布局为例]
  9. libuv 与 libev 的对比
  10. 百度网盘加速下载(pc端)
  11. nginx 常见错误码_Nginx启动常见错误及解决方法
  12. sqlite3读取一页的数据
  13. [附源码]计算机毕业设计校园运动会管理系统Springboot程序
  14. 《时代》杂志:元宇宙将如何塑造我们的未来?
  15. 小学计算机课第二课堂活动总结,小学课外活动总结范文_2020小学第二课堂工作总结精选...
  16. 国内的服务器的优势就是,国产芯片服务器的优势是什么
  17. DDD第3篇 - 事件风暴
  18. Linux 防火墙策略——APF
  19. Excel 技巧百例:数据透视表的排序
  20. vue 强制刷新子组件

热门文章

  1. GEE(7):GEE插件Open Earth Engine extension提高效率
  2. Installation Installing SDKMAN
  3. numeric比较大小 数据库_SQL数据库中Numeric(10,2)是什么意思?
  4. 8000字前端性能优化技巧总结!(全面)
  5. 关于流程图设计,你需要Get的几点必备知识
  6. bzoj 3653 [湖南集训]谈笑风生
  7. python的函数导入方法
  8. 《Metasploit魔鬼训练营》环境搭建与前两章经历体会
  9. java 调试sql server_sql server 如何调试存储过程
  10. STL mismatch算法