作业~嗖嗖移动业务大厅
/**
测试类 业务类
@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;
}
}
/**- cards.get(number).userName +",当前余额:" + cards.get(number).getMoney());
接口 通话
@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选择功能,其他键返回上一级)
作业~嗖嗖移动业务大厅相关推荐
- java项目嗖嗖移动业务大厅项目报告_晋江市撰写节能评估报告的报告机构立项范本-文瑞...
文瑞承接可行性研究报告.项目建议书.立项报告.资金申请报告.项目申请报告.项目实施方案.节能报告.评估报告.商业计划书.投标书等各类文案以及各行业甲.乙.丙级工程资质.晋江市撰写节能评估报告的报告机构 ...
- 嗖嗖移动业务大厅小项目
package SOSO;/*** CallService** @author yaoxinxin* @version 1.0* @description 打电话接口* @date 2022/9/14 ...
- 嗖嗖移动业务大厅代码_移动云应用性能监控,掌控云时代的多变应用
引言:据预测,2021年全球应用性能监控市场规模将达到51.63亿美元:中国应用性能监控行业市场规模将扩大至69.63亿元人民币,已经进入高速成长期. 在云时代 智能化使企业的应用管理日渐复杂 丰富的 ...
- 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 ...
- 华为数字化转型之道 实践篇 第七章 数字化作业:减少业务高能耗点
第七章 数字化作业:减少业务高能耗点 企业创造价值的效率及所产生的效益,很大程度上取决于各个职能部门的循环往复的日常作业是否高效. 在数字时代,我们重新思考早已习以为常的作业模式,通过数字化转型,可以 ...
- 搜搜移动业务大厅项目类的结构_2020年SEM小搜投放指南:竞价小渠道如何把效果做到极致...
在SEM中,推广的渠道主要是5个:百度.360.搜狗.神马和头条.百度,是最主要的渠道,在竞价圈常称大搜,后四者我们常称小搜. 5个搜索平台,在流量上,有非常大的差异.pc端,百度和360份额占比较多 ...
- java怎么编写嗖嗖手机_JAVA项目-嗖嗖移动
importjava.io.IOException;importjava.util.Scanner;/*** 业务类*/ classSosoMgr { Scanner input= newScanne ...
最新文章
- Web设计和开发人员有用的15Chrome插件
- 是小厂全栈好,还是大厂专业工程师好?
- java知识回顾_Java7 –回顾
- a标签的href与onclick中使用js的区别
- java实现空心四边形_Java输入数值形成对应的平行四边形,正三角形,棱形,空心棱形...
- 彻底解决Eclipse的控制台console按钮非常小
- 赣州师范高等专科学校计算机网络技术,赣州师范高等专科学校2021年招生简章...
- cocos2d-x 2.0版本 自适应屏幕分辨率 .
- 微波网络插入反射系数与输入反射系数
- 爬虫_抓取51job招聘数据
- string.h 详解
- 反应堆Reactor模式
- Storm Control 风暴控制
- 用C语言实现菱形图案
- Python爬虫伪装,请求头User-Agent池,和代理IP池搭建使用
- HEIF 和 HEVC 研究
- codeforces 1197D. Yet Another Subarray Problem 动态规划
- 移动桌面位置,再也不怕C盘爆满!
- 爬取淘女郎前100页所有图片
- c语言float可以 取余吗,C语言fmod()函数:对浮点数取模(求余)