嗖嗖移动业务大厅小项目
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
嗖嗖移动业务大厅小项目相关推荐
- 作业~嗖嗖移动业务大厅
/** 测试类 业务类 @author Chen HuiHong @author 2020年6月6日{time} @Tel 18073799961 */ public class TestSosoMg ...
- java项目嗖嗖移动业务大厅项目报告_晋江市撰写节能评估报告的报告机构立项范本-文瑞...
文瑞承接可行性研究报告.项目建议书.立项报告.资金申请报告.项目申请报告.项目实施方案.节能报告.评估报告.商业计划书.投标书等各类文案以及各行业甲.乙.丙级工程资质.晋江市撰写节能评估报告的报告机构 ...
- java项目嗖嗖移动业务大厅项目报告_Java就业指导课程
Java就业指导 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东 ...
- 使用java实现面向对象编程第十章嗖嗖移动业务大厅项目_ACCP6.0使用Java实现面向对象编程-第一章.ppt...
ACCP6.0使用Java实现面向对象编程-第一章 练习--用类图设计Dog和Penguin类 需求说明: 运用面向对象思想抽象出Dog类和Penguin类,画出对应类图 根据类图编写Dog类和Pen ...
- 使用java实现面向对象编程第十章嗖嗖移动业务大厅项目_ACCP6.0 S2 使用Java实现面向对象编程 第一章...
使用this调用成员方法 public void paly(int n){ health=health-n; this.print(); //this可以省略,直接调用print(): } 使用thi ...
- 嗖嗖移动业务大厅代码_移动云应用性能监控,掌控云时代的多变应用
引言:据预测,2021年全球应用性能监控市场规模将达到51.63亿美元:中国应用性能监控行业市场规模将扩大至69.63亿元人民币,已经进入高速成长期. 在云时代 智能化使企业的应用管理日渐复杂 丰富的 ...
- Java EE---使用Spring框架创建Market小项目
通过Spring的IoC和DI思想创建一个小项目便于理解spring 题目: 1.使用Spring IOC/DI 模拟某超市管理功能,程序设计涉及: (1)Product类(商品类):含id(商品编号 ...
- python小项目实例流程-Python小项目:快速开发出一个简单的学生管理系统
原标题:Python小项目:快速开发出一个简单的学生管理系统 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: ...
- python小项目案例-Python小项目:快速开发出一个简单的学生管理系统
本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 教师信息的管理 学生信息的管理 根据A ...
最新文章
- 将 SQL Server 存储过程用于数据访问
- 刷脸背后,卷积神经网络的数学原理原来是这样的
- 对于电单车同学们提出的改动建议
- 转载:【OpenCV入门教程之四】 ROI区域图像叠加初级图像混合 全剖析
- Node+Vue实现对数据的增删改查
- protobufjs 命令执行_protobufjs简单使用
- 虚拟机打不开,提示“此主机不支持虚拟化实际模式”的解决方法。
- LIRe 源代码分析 6:检索(ImageSearcher)[以颜色布局为例]
- libuv 与 libev 的对比
- 百度网盘加速下载(pc端)
- nginx 常见错误码_Nginx启动常见错误及解决方法
- sqlite3读取一页的数据
- [附源码]计算机毕业设计校园运动会管理系统Springboot程序
- 《时代》杂志:元宇宙将如何塑造我们的未来?
- 小学计算机课第二课堂活动总结,小学课外活动总结范文_2020小学第二课堂工作总结精选...
- 国内的服务器的优势就是,国产芯片服务器的优势是什么
- DDD第3篇 - 事件风暴
- Linux 防火墙策略——APF
- Excel 技巧百例:数据透视表的排序
- vue 强制刷新子组件
热门文章
- GEE(7):GEE插件Open Earth Engine extension提高效率
- Installation Installing SDKMAN
- numeric比较大小 数据库_SQL数据库中Numeric(10,2)是什么意思?
- 8000字前端性能优化技巧总结!(全面)
- 关于流程图设计,你需要Get的几点必备知识
- bzoj 3653 [湖南集训]谈笑风生
- python的函数导入方法
- 《Metasploit魔鬼训练营》环境搭建与前两章经历体会
- java 调试sql server_sql server 如何调试存储过程
- STL mismatch算法