package SouSou;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
/**
* 工具类
*
* @author 雷飞
*
*/
public class CardUtil {
Scanner in = new Scanner(System.in);
MobileCard moc = new MobileCard();
Map<String, MobileCard> cards = new HashMap<String, MobileCard>();
Map<String, List<ConsumInfo>> consumInfo = new HashMap<String, List<ConsumInfo>>();
List<Scene> scenelist = new ArrayList<Scene>();
List<ConsumInfo> listcon = new ArrayList<ConsumInfo>();
// 初始化手机卡信息
public void init() {
MobileCard card1 = new MobileCard("666", "张三", "123", new TalkPackage(), 80.0, 20.0);
MobileCard card2 = new MobileCard("13956824146", "张二", "123", new SuperPackage(), 80.0, 20.0);
MobileCard card3 = new MobileCard("13978963214", "张三", "123", new NetPackage(), 80.0, 20.0);
cards.put("666", card1);
cards.put("13956824146", card2);
cards.put("13978963214", card3);
}
// 初始化场景
public void initScene() {
scenelist.add(new Scene("通话", 90, "问候客户,谁知其如此难缠 通话90分钟"));
scenelist.add(new Scene("短信", 50, "通知朋友手机换号,发送短信50条"));
scenelist.add(new Scene("短信", 5, "参与环境保护实施方案问卷调查 发送短信5条"));
scenelist.add(new Scene("上网", 1024, "与朋友视频通话,使用流量1GB"));
scenelist.add(new Scene("通话", 30, "与朋友打电话,通话30分钟"));
scenelist.add(new Scene("上网", 2048, "使用手机看视频,使用流量2GB"));
}
// 判断账号密码是否输入正确
public boolean isExistCard(String number, String passWord) {
if (cards.containsKey(number) && passWord.equals(cards.get(number).getPassword())) {
return true;
} else {
return false;
}
}
// 判断手机号是否注册过
public boolean isExistCard(String number) {
if (cards.containsKey(number)) {
return false;
} else {
return true;
}
}
// 随机生成一个手机号
public String createNumber() {
StringBuffer sb = new StringBuffer("139");
sb.append((int) (Math.random() * (10000000 - 99999999) + 99999999));
String number = sb.toString();
return number;
}
// 随机生成一组手机号
public String[] getNewNumbers(int count) {
String[] newnumber = new String[count];
for (int i = 0; i < count;) {
String newnumber1 = createNumber();
if (isExistCard(newnumber1)) {
newnumber[i] = newnumber1;
i++;
} else {
continue;
}
}
int a = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print((a + 1) + "、" + newnumber[a++] + "\t");
}
System.out.println();
}
return newnumber;
}
// 用户注册
public void addCard(MobileCard card) {
System.out.println("------可选择的卡号------");
String[] num = getNewNumbers(9);
System.out.println("请选择卡号:");
int cardid;
while (true) {
cardid = in.nextInt();
if (cardid > 0 && cardid < 10) {
card.setCardNumber(num[cardid - 1]);
break;
} else {
continue;
}
}
System.out.println("1、话痨套餐 2、网虫套餐 3、超人套餐,请选择套餐(输入序号):");
int taoid;
while (true) {
taoid = in.nextInt();
switch (taoid) {
case 1:
card.setSerPakage(new TalkPackage());
break;
case 2:
card.setSerPakage(new NetPackage());
break;
case 3:
card.setSerPakage(new SuperPackage());
break;
default:
System.out.println();
continue;
}
break;
}
System.out.println("请输入姓名:");
card.setUserWord(in.next());// 为MobileCard属性赋值
System.out.println("请输入密码:");
card.setPassword(in.next());
System.out.println("请输入预存话费金额:");
int moneys = 0;
int money1 = 0;
while (true) {
money1 = in.nextInt();
switch (taoid) {
case 1:
moneys = 58;
break;
case 2:
moneys = 68;
break;
case 3:
moneys = 78;
break;
}
if (money1 >= moneys) {
card.setMoney(money1 - moneys);
break;
} else {
System.out.println("您预存的话费金额不足以支付本月固定套餐资费,请重新充值:");
continue;
}
}
cards.put(num[cardid - 1], card);
card.showMeg();
cards.get(card.getCardNumber()).getSerPakage().showInfo();
}
// 办理退网
public void delCard(String number) {
cards.remove(number);
System.out.println("卡号" + number + "办理退网成功");
}
// 套餐余量查询
public void showRemainDetail(String number) {
MobileCard card = cards.get(number);
int smscount = 0;
int flow = 0;
int time = 0;
if (card.getSerPakage() instanceof TalkPackage) {
TalkPackage type = (TalkPackage) card.getSerPakage();
if (type.getTalkTime() > card.getRealTalkTime()) {
time = type.getTalkTime() - card.getRealTalkTime();
} else {
time = 0;
}
if (type.getSmsCount() > card.getRealSMSCount()) {
smscount = type.getSmsCount() - card.getRealSMSCount();
} else {
smscount = 0;
}
}
if (card.getSerPakage() instanceof SuperPackage) {
SuperPackage type = (SuperPackage) card.getSerPakage();
if (type.getTalkTime() > card.getRealTalkTime()) {
time = type.getTalkTime() - card.getRealTalkTime();
} else {
time = 0;
}
if (type.getSmsCount() > card.getRealSMSCount()) {
smscount = type.getSmsCount() - card.getRealSMSCount();
} else {
smscount = 0;
}
if (type.getFlow() > card.getRealFlow()) {
flow = type.getFlow() - card.getRealFlow();
} else {
flow = 0;
}
}
if (card.getSerPakage() instanceof NetPackage) {
NetPackage type = (NetPackage) card.getSerPakage();
if (type.getFlow() > card.getRealFlow()) {
flow = type.getFlow() - card.getRealFlow();
} else {
flow = 0;
}
}
System.out.println("您的卡号是" + card.getCardNumber() + "套餐内剩余");
System.out.println("通话时长:" + time);
System.out.println("短信条数:" + smscount);
System.out.println("上网流量:" + flow);
}
// 本月账单查询
public void showAmountDetail(String number) {
System.out.println("------本月账单查询------");
MobileCard card = cards.get(number);
System.out.println("您的卡号是:" + number + "当月账单:");
System.out.println("套餐资费" + card.getSerPakage().getPrice());
System.out.println("合计" + (card.getConsumAmount() + card.getSerPakage().getPrice()));
System.out.println("账户余额" + card.getMoney());
}
// 添加消费清单
public void addConsumInfo(String number, ConsumInfo info) {
listcon.add(info);
consumInfo.put(number, listcon);
}
// 使用嗖嗖
public void useSoso(String number) {
MobileCard card1 = cards.get(number);// 获取Map集合中的键值获取手机卡对象
ServicePackage pack = card1.getSerPakage();// 获得套餐对象
int temp = 0;
do {
int ran = (int) (Math.random() * 6);
Scene scene = scenelist.get(ran);
switch (ran) {
case 0:
case 4:
if (pack instanceof ICallService) {
// 输出场景信息
System.out.println(scene.getDescription());
// 将套餐对象强转为接口类型
ICallService callservice = (ICallService) pack;
// 调用打电话的方法,保存返回打了多长时间到temp中
try {
temp = callservice.call(scene.getData(), card1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 添加一条消费记录
addConsumInfo(number, new ConsumInfo(number, scene.getDescription(), temp));
break;
} else {
continue;
}
case 1:
case 2:
if (pack instanceof ISendService) {
System.out.println(scene.getDescription());
ISendService callservice = (ISendService) pack;
try {
temp = callservice.send(scene.getData(), card1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();