java-se项目--嗖嗖移动

系统概述:实现嗖嗖移动业务大厅
“嗖嗖移动”为继移动、联通、电信后的第四大通信运营商,现需实现其官网的部分功能,如下:
用户注册
用户登录
话费充值
资费说明
本月账单查询
套餐余量查询
打印消费详单
套餐变更
办理退网
用户模拟消费,包括通话、上网、发短信
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

	//通话接口
	public interface CallService {
public abstract int call(int minCount,MobileCard card);

public int getSmsCount() {
	return smsCount;
}
//上网接口
public interface NetService {
public abstract int  netPlay(int flow,MobileCard  card);

//短信接口
public interface SendService {
public abstract int sent(int count,MobileCard card);

public class ConsumInfo {
private String cardNumber;  //卡号
private String type;  //消费类型:通话、发短信、上网
private int consumData;   //消费数据   通话:分钟   发短信:条   上网:MB
public ConsumInfo(){}
public ConsumInfo(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;
}	
public class TalkPackage extends ServicePackage implements CallService,
	SendService {
private int talkTime; // 通话时长(分钟)
private int smsCount; // 短信条数(条)
public int getTalkTime() {
	return talkTime;
}
public void setTalkTime(int talkTime) {
	this.talkTime = talkTime;
}




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

public TalkPackage() {
	//套餐数据初始化
	this.talkTime = 500;
	this.smsCount = 30;
	this.price = 58.0;
}

public TalkPackage(int talkTime, int smsCount) {
	super();
	this.talkTime = talkTime;
	this.smsCount = smsCount;
}

/**
 * 显示套餐详情
 */
public void showInfo() {
	System.out.println("话唠套餐:通话时长为" + this.talkTime + "分钟/月,短信条数为"
			+ this.smsCount + "条/月,资费为" + this.price + "元/月。");
}

public int call(int minCount, MobileCard card){
	int temp = minCount;
    for(int i = 0; i < minCount; i++){
        if(this.talkTime - card.getRealTalkTime() >= 1){
            //第一种情况:套餐剩余通话时长可以支持1分钟通话
            card.setRealTalkTime(card.getRealTalkTime() + 1);
        }else if(card.getMoney() >= 0.2){
            //第二种情况:套餐通话时长已用完,账户余额可以支付1分钟通话,使用账户余额支付
            card.setRealTalkTime(card.getRealTalkTime() + 1); //实际使用通话时长1分钟
            //账户余额消费0.2元(1分钟 额外通话)
            card.setMoney(card.getMoney() - 0.2);
            card.setConsumAmount(card.getConsumAmount() + 0.2);  //当月消费金额 + 0.2
        }else{
            temp = i; //记录实际通话分钟数
            System.out.println("本次已经通话" + i + "分钟,您的余额不足,请充值后再使用!");
        }
    }
    return temp;
}
@Override
public int sent(int count, MobileCard card) {
	int temp = count;
    for(int i = 0; i < count; i++){
        if(this.smsCount - card.getRealSMSCount() >= 1){
            //第一种情况:套餐剩余短信数能够发送一个短信
            card.setRealSMSCount(card.getRealSMSCount() + 1);
        }else if(card.getMoney() >= 0.1){
            //第二种情况:套餐内短信已经用完,剩下话费能够允许发一条短信
            card.setRealSMSCount(card.getRealSMSCount() + 1); //实际短信数加 1 条
            //账户余额消费0.1元,(一条短信)
            card.setMoney(card.getMoney() - 0.1);
            card.setConsumAmount(card.getConsumAmount() + 0.1);  //当月消费金额 + 0.1
        }else{
            temp = i; //记录发短信条数
            System.out.println("短信已经发送" + i + "条,您的余额不足,请充值后再使用!");
        }
    }
    return temp;
}



   



public class SuperPackage extends ServicePackage implements CallService,
SendService,NetService {
private int talkTime;   //通话时长(分钟)
private int smsCount;   //短信条数(条)
private int flow;  //上网流量(MB)
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;
}

public SuperPackage(){
	//套餐数据初始化
	this.talkTime = 200;
	this.smsCount = 50;
	this.flow = 1*1024;  
	this.price = 78.0;
}
@Override
public void showInfo() {
	System.out.println("超人套餐:通话时长为"+this.talkTime+"分钟/月,短信条数为"+this.smsCount+"条/月,上网流量为"+this.flow/1024+"GB/月。");
}


/**
 * 提供上网服务
 */
public int netPlay(int flow, MobileCard card) {
	int temp = flow;
	for(int i=0;i<flow;i++){
		if(this.flow-card.getRealFlow()>=1){
			//第一种情况:套餐剩余流量可以支持使用1M流量			
			card.setRealFlow(card.getRealFlow()+1); //实际使用流量加1MB				
		}else if(card.getMoney()>=0.1){
			//第二种情况:套餐流量已用完,账户余额可以支付1M流量,使用账户余额支付
			card.setRealFlow(card.getRealFlow()+1); //实际使用流量加1MB
			card.setMoney(card.getMoney()-0.1); //账户余额消费0.1元(1M流量费用)
			card.setConsumAmount(card.getConsumAmount() + 0.1);
		}else{
			temp = i;
			System.out.println("本次已使用流量"+i+"MB,您的余额不足,请充值后再使用!");
		}
	}
	return temp;
}

/**
 * 提供通话服务
 */
public int call(int minCount, MobileCard card){
	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分钟 
			card.setMoney(card.getMoney()-0.2); //账户余额消费0.2元(1分钟额外通话)
			card.setConsumAmount(card.getConsumAmount() + 0.2);
		}else{
			temp = i; //记录实现通话分钟数
			System.out.println("本次已通话"+i+"分钟,您的余额不足,请充值后再使用!");				
		}
	}
	return temp;
}


@Override
public int sent(int count, MobileCard card) {
	int temp = smsCount;
	for(int i=0;i<smsCount;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); 
			card.setMoney(card.getMoney()-0.1); //账户余额消费0.1元(1条短信费用)
			card.setConsumAmount(card.getConsumAmount() + 0.1);
		}else{
			temp = i;
			System.out.println("本次已发送短信"+i+"条,您的余额不足,请充值后再使用!");
		}
	}
	return temp;
}





public class NetPackage extends ServicePackage implements NetService {
private int flow; // 上网流量(MB)
public NetPackage() {
    //套餐数据初始化
	this.flow = 1024 * 3;
	this.price = 68.0;
}

public NetPackage(int flow) {
	super();
	this.flow = flow;
}

public int getFlow() {
	return flow;
}

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



@Override
public void showInfo() {
	System.out.println("网虫套餐:上网流量是" + flow / 1024 + "GB/月,月资费是"
			+ this.price + "元/月。");
}

/**
 * 提供上网服务
 */
public int netPlay(int flow, MobileCard card) {
	int temp = flow;
	for(int i=0;i<flow;i++){
		if(this.flow-card.getRealFlow()>=1){
			//第一种情况:套餐剩余流量可以支持使用1M流量			
			card.setRealFlow(card.getRealFlow()+1); //实际使用流量加1MB				
		}else if(card.getMoney()>=0.1){
			//第二种情况:套餐流量已用完,账户余额可以支付1M流量,使用账户余额支付
			card.setRealFlow(card.getRealFlow()+1); //实际使用流量加1MB
			card.setMoney(card.getMoney()-0.1); //账户余额消费0.1元(1M流量费用)
			card.setConsumAmount(card.getConsumAmount() + 0.1);
		}else{
			temp = i;
			System.out.println("本次已使用流量"+i+"MB,您的余额不足,请充值后再使用!");
		}
	}
	return temp;
}
public abstract class ServicePackage {	
protected double price;  //套餐月资费(元)
 
public double getPrice() {
	return price;
}

public void setPrice(double price) {
	this.price = price;
}

//显示套餐数据
public abstract void showInfo();
public class Scene {
private String type;  //场景消费类型
private int data;  //消费数据
private String description;//场景描述

public Scene(){}
public Scene(String type,int data,String description){
	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;
}
public class MobileCard {
private String cardNumber;  //卡号
private String username;    //用户名
private String password;    //密码
private ServicePackage serPackage;  //所属套餐
private double consumAmount;//当月消费金额
private double money;       //账户余额
private int realTalkTime;   //当月实际通话时长
private int realSMSCount;   //当月实际发送短信条数
private int realFlow;       //当月实际上网流量

public MobileCard() {
}

public MobileCard(String cardNumber, String username, String password, ServicePackage serPackage, double money) {
    this.cardNumber = cardNumber;
    this.username = username;
    this.password = password;
    this.serPackage = serPackage;
    this.money = money;
}

public MobileCard(String cardNumber, String username, String password, ServicePackage serPackage, double consumAmount, double money, int realTalkTime, int realSMSCount, int realFlow) {
    this.cardNumber = cardNumber;
    this.username = username;
    this.password = password;
    this.serPackage = serPackage;
    this.consumAmount = consumAmount;
    this.money = money;
    this.realTalkTime = realTalkTime;
    this.realSMSCount = realSMSCount;
    this.realFlow = realFlow;
}

//卡号
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 getMoney() {
    return money;
}
public void setMoney(double money) {
    this.money = money;
}

//当月消费金额
public double getConsumAmount() {
    return consumAmount;
}
public void setConsumAmount(double consumAmount) {
    this.consumAmount = consumAmount;
}

//当月实际通话时长
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 void showMsg(){
    System.out.println("卡号:"+this.cardNumber+",用户名:"+this.username+",当前余额:"+this.money+"元");
    this.serPackage.showInfo();
}


public class CardUtil {
Scanner input = new Scanner(System.in);
//用户列表
public static Map<String,MobileCard> cards = new HashMap<>();
//卡号消费记录列表
public static Map<String, List<ConsumInfo>> consumInfos = new HashMap<>();
//使用场景列表
Map<Integer, Scene> scenes = new HashMap<Integer, Scene>();
Scene scene0 = new Scene("通话", 90, "问候客户,谁知其如此难缠,通话90分钟");
Scene scene1 = new Scene("通话", 30, "询问妈妈身体状况,本地通话30分钟");
Scene scene2 = new Scene("短信", 5, "参与环境保护实施方案问卷调查,发送短信5条");
Scene scene3 = new Scene("短信", 50, "通知朋友手机换号,发送短信50条");
Scene scene4 = new Scene("上网", 1024, "和女朋友用微信视频聊天,使用流量1GB");
Scene scene5 = new Scene("上网", 2 * 1024, "晚上手机在线看韩剧,不留神睡着啦!使用2GB");


/**
 * 初始化
 * */
public void initScene(){
    //话唠
    MobileCard ss = new MobileCard("13939663177", "张三", "123456", new TalkPackage(), 88, 100, 89, 88, 90); //话唠套餐
    //网虫
    MobileCard mm = new MobileCard("13939663177", "李四", "123456", new NetPackage(),99, 200, 200, 60, 20); //网虫套餐
    //超级
    MobileCard yy = new MobileCard("13939663177", "王五", "123456", new SuperPackage(), 100, 300, 50, 20, 900); //超人套餐

    //添加到集合中
    CardUtil.cards.put(ss.getCardNumber(),ss);
    CardUtil.cards.put(mm.getCardNumber(),mm);
    CardUtil.cards.put(yy.getCardNumber(),yy);

    ConsumInfo info = new ConsumInfo(mm.getCardNumber(),"电话",500);
    List<ConsumInfo> list = new ArrayList<>();
    list.add(info);
    CardUtil.consumInfos.put(info.getCardNumber(),list);
}

/**
 * 根据卡号和密码验证该卡是否注册:
 * */
public boolean isExistCard(String number,String passWord){
    Set<String> numbers = cards.keySet();
    Iterator<String> it = numbers.iterator();
    while (it.hasNext()){
        String searchNum = it.next();
        if(searchNum.equals(number) && (cards.get(searchNum)).getPassword().equals(passWord)){
            return true;
        }
    }
    return false;
}

/**
 * 根据卡号,验证该卡是否注册
 * */
public boolean isExistCard(String number){
    Set<String>	numbers=cards.keySet();
    Iterator<String> iterator=numbers.iterator();
    while (iterator.hasNext()) {
        String str=iterator.next();
        if (str.equals(number))
            return true;
    }
    return false;
}

/**
 * 生成随机卡号
 * */
public String createNumber(){
    String zhi = "1234567890";
    String alphas = "139";
    Random rand = new Random();
    // 8位数字
    for (int i = 0; i < 8; i++) {
    	//charAt() 方法可返回指定位置的字符。
        alphas += zhi.charAt(rand.nextInt(10));//nextInt创建一个0~9的随机数字
    }
    return alphas;
}

/**
 * 生成指定个数的卡号列表
 * */
public ArrayList<String> getNewNumber(int count){
    ArrayList<String> list = new ArrayList<>();
    for(int j = 1; j <= count; j++){
        String kaHao = createNumber();
        System.out.print(j+"."+kaHao+"\t");
        list.add(kaHao);
        if(j%3 == 0){
            System.out.println();
        }
    }
    return list;
}

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

/**
 * 办理退网
 * */
public void delCard(String number){
    if (cards.containsKey(number)) {
        cards.remove(number); //移除手机号
        System.out.println("卡号:"+number+"办理退网成功!");
        System.out.println("谢谢使用!");
    }else {
        System.out.println("手机号码输入有误!");
    }
}
/**
 * 套餐余额查询
 * */
public void showRemainDetail(String number){
    MobileCard card = null;//要查询的卡
    int remainTalkTime;
    int remainSmsCount;
    int remainFlow;
    StringBuffer meg = new StringBuffer();
    card = cards.get(number);
    meg.append("您的卡号是"+number+",套餐内剩余:\n");
    ServicePackage pack = card.getSerPackage();
    System.out.println("话费:"+card.getMoney());
    if(pack instanceof TalkPackage){
        //向下转型为话唠对象
        TalkPackage cardPack = (TalkPackage)pack;
        //话唠套餐,查询套餐内剩余的通话时长和短信条数
        remainTalkTime = cardPack.getTalkTime() > card.getRealTalkTime() ?
                cardPack.getTalkTime() - card.getRealTalkTime() : 0;
        meg.append("通话时长:"+ remainTalkTime +"分钟\n");
        remainSmsCount = cardPack.getSmsCount() > card.getRealSMSCount() ?
                cardPack.getSmsCount() - card.getRealSMSCount() : 0;
        meg.append("短信条数:"+remainSmsCount+"条");
    }else if(pack instanceof NetPackage){
        //向下转型为网虫套餐对象
        NetPackage cardPack = (NetPackage)pack;
        //网虫套餐:查询套餐内剩余的上网流量
        remainFlow = cardPack.getFlow() > card.getRealFlow() ?
                cardPack.getFlow() - card.getRealFlow() : 0;
        meg.append("上网流量:"+(remainFlow * 1.0 /1024)+"GB");
    }else if(pack instanceof SuperPackage){
        //向下转型为超人套餐对象
        SuperPackage cardPack = (SuperPackage)pack;
        //超人套餐:查询套餐内剩余的通话时长,短信条数,上网流量
        remainTalkTime = cardPack.getTalkTime() > card.getRealTalkTime() ?
                cardPack.getTalkTime() - card.getRealTalkTime() : 0;
        meg.append("通话时长:"+ remainTalkTime +"分钟\n");
        remainSmsCount = cardPack.getSmsCount() > card.getRealSMSCount() ?
                cardPack.getSmsCount() - card.getRealSMSCount() : 0;
        meg.append("短信条数:"+remainSmsCount+"条\n");
        remainFlow = cardPack.getFlow() > card.getRealFlow() ?
                cardPack.getFlow() - card.getRealFlow() : 0;
        meg.append("上网流量:"+(remainFlow * 1.0 /1024)+"GB");
    }
    System.out.println(meg);
}

/**
 * 本月账单查询
 * */
public void showAmountDetail(String number){
    MobileCard card;//要查询的卡
    StringBuffer meg = new StringBuffer();
    card = cards.get(number);
    meg.append("您的卡号:"+card.getCardNumber()+",当月账单:\n");
    meg.append("套餐资费:"+card.getSerPackage().getPrice()+"元\n");
    meg.append("合计:"+(card.getConsumAmount())+"元\n");
    meg.append("账户余额:"+(card.getMoney())+"元");
    //显示本月消费详情信息
    System.out.println(meg);
}

/**
 * 添加指定卡号的消费记录
 * */
public void addConsumInfo(String number,ConsumInfo info){
    if (consumInfos.containsKey(number)) { //若存在指定的键映射的“键值对”,则返回true
        consumInfos.get(number).add(info);
    }else {
        List<ConsumInfo> list = new ArrayList<ConsumInfo>();
        list.add(info);
        consumInfos.put(number, list);
    }
}

/**
 * 使用嗖嗖
 * */
public void userSoso(String number){
    //添加场景Map集合的键值对
    scenes.put(0,scene0);
    scenes.put(1,scene1);
    scenes.put(2,scene2);
    scenes.put(3,scene3);
    scenes.put(4,scene4);
    scenes.put(5,scene5);
    MobileCard card = cards.get(number);//获取此卡对象
    ServicePackage pack = card.getSerPackage();//获取此卡套餐
    Random random = new Random();
    int ranNum;
    int temp = 0;//记录各场景中实际消费数据
    do{
        ranNum = random.nextInt(6);//生成0~5之间的随机数
        Scene scene = scenes.get(ranNum);
        switch (ranNum){
            //序号为0或1为通话场景
            case 0:
            case 1:
                //判断该卡所属套餐是否支持通话功能
                if(pack instanceof CallService){
                    //执行通话方法
                    System.out.println(scene.getDescription());
                    CallService callSevice = (CallService)pack;
                        temp = callSevice.call(scene.getData(),card);
                    //添加一条消费记录
                    addConsumInfo(number,new ConsumInfo(number,scene.getType(),temp));
                    System.out.println("添加了一条消费记录");
                    break;
                }else{
                    //如果该卡套餐不支持通话功能,则重新生成随机数选择其他场景
                    continue;
                }
            case 2:
            case 3:
                //判断该卡所属套餐是否支持短信功能
                if(pack instanceof SendService){
                    //执行通话方法
                    System.out.println(scene.getDescription());
                    SendService sendService = (SendService)pack;
                    temp = sendService.sent(scene.getData(), card);
                    
                    //添加一条消费记录
                    addConsumInfo(number,new ConsumInfo(number,scene.getType(),temp));
                    System.out.println("添加了一条消费记录");
                    break;
                }else{
                    //如果该卡套餐不支持短信功能,则重新生成随机数选择其他场景
                    continue;
                }
            case 4:
            case 5:
                //判断该卡所属套餐是否支持上网功能
                if(pack instanceof NetService){
                    //执行通话方法
                    System.out.println(scene.getDescription());
                    NetService netService = (NetService)pack;
                    temp = netService.netPlay(scene.getData(),card);
                    //添加一条消费记录
                    addConsumInfo(number,new ConsumInfo(number,scene.getType(),temp));
                    System.out.println("添加了一条消费记录");
                    break;
                }else{
                    //如果该卡套餐不支持上网功能,则重新生成随机数选择其他场景
                    continue;
                }
        }
        break;
    }while(true);

}

/**
 * 资费说明
 * */
public void showDescription(){
    FileReader fr = null;
    BufferedReader br = null;
    try{
        fr = new FileReader("D:\\软件\\java\\资费.txt");
        br = new BufferedReader(fr);
        String line = br.readLine();
        while(line != null){
            System.out.println(line);
            line = br.readLine();
        }
    }catch(FileNotFoundException e){
        e.printStackTrace();
    }catch(IOException e) {
        e.printStackTrace();
    }finally {
        try{
            if(fr != null){
                fr.close();
            }
            if(br != null){
                br.close();
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }
}

/**
 * 套餐更变
 * */
public void changingPack(String number,int packNum){
    MobileCard card = cards.get(number);
    switch (packNum){
        //话唠套餐
        case 1:
            if(card.getSerPackage() instanceof TalkPackage){
                System.out.println("对不起,您已经是该套餐用户,无法更换!");
            }else{
                Bian(card,packNum);
            }
            break;
        //网虫套餐
        case 2:
            if(card.getSerPackage() instanceof NetPackage){
                System.out.println("对不起,您已经是该套餐用户,无法更换!");
            }else{
                Bian(card,packNum);
            }
            break;
        //超人套餐
        case 3:
            if(card.getSerPackage() instanceof SuperPackage){
                System.out.println("对不起,您已经是该套餐用户,无法更换!");
            }else{
                Bian(card,packNum);
            }
            break;
    }
}
/**
 * //套餐更变(附属)
 * */
public void Bian(MobileCard card,int packNum){//套餐更变(附属)
    //如果剩余费用不够支持新的套餐费用
    if(card.getMoney() < card.getSerPackage().getPrice()){
        System.out.println("余额不足,请充值!");
    }else{
        card.setRealTalkTime(0);
        card.setRealSMSCount(0);
        card.setRealFlow(0);
        card.setSerPackage(createPack(packNum));
        card.setMoney(card.getMoney() - card.getSerPackage().getPrice());
        System.out.println("套餐更换成功!");
        createPack(packNum).showInfo();
    }
}

/**
 * 话费充值
 * */
public void chargeMoney(String number,double money){
    cards.get(number).setMoney(cards.get(number).getMoney()+money);
}

/**
 * 打印消费详单
 * */
public void printAmountDetail(String number){
    Set<String> numbers = consumInfos.keySet();
    Iterator<String> it = numbers.iterator();
    List<ConsumInfo> infos = new ArrayList<>();//存储指定卡所有消费记录
    boolean isExit = false;//现有消费记录中是否存在此卡号消费记录,是:true;不是:false
    while (it.hasNext()){
    	if(it.next().equals(number)){
    		infos = consumInfos.get(number);
    		isExit = true;
    		break;
    	}
    }
    if(isExit){
    	System.out.println("序号\t类型\t数据(通话(条)/上网(MB)/短信(条))\n");
    	for (int i = 0; i < infos.size(); i++) {
    		ConsumInfo info = infos.get(i);
    		System.out.println((i+1)+".\t"+info.getType()+"\t"+info.getConsumData()+"\n");
    	}	
    	System.out.println("消费记录打印完毕");
    }else{
    	System.out.println("对不起,不存在此号码的消费记录,不能打印!");
    }
        
}

/**
 * 根据用户选择的套餐序号返回套餐对象
 * */
public ServicePackage createPack(int packId){
    ServicePackage servicePackage = null;
    do {
        if(packId == 1){
            servicePackage = new TalkPackage();
            break;
        }else if(packId == 2){
            servicePackage = new NetPackage();
            break;
        }else if(packId == 3){
            servicePackage = new SuperPackage();
            break;
        }else{
            System.out.println("对不起,没有该选项!");
            continue;
        }
    }while(true);
    return servicePackage;


public class Menu {
Scanner input = new Scanner(System.in);
CardUtil cu = new CardUtil();
public static void main(String[] args){
	Menu menu = new Menu();
	menu.Menu1();
	System.out.println("谢谢使用!");
}
MobileCard mc = new MobileCard();
public void Menu1() {
	cu.initScene();  //信息初始化
    do{
        System.out.println("1.用户登录   2.用户注册   3.使用嗖嗖   4.话费充值  5.资费说明  6.退出系统");
        System.out.print("请输入:");
        int value = input.nextInt();
        switch (value){
            case 1:
                System.out.println("用户登录-->");
                Menu2();//二级菜单
                continue;
            case 2:
            	Change();
                continue;
            case 3:
                System.out.println("使用嗖嗖-->");
                System.out.println("请输入手机卡号:");
                String number=input.next();
                cu.userSoso(number);
                continue;
            case 4:
                System.out.println("话费充值-->");
                System.out.print("请输入您的手机号:");
                String phine = input.next();
                System.out.print("请输入要充值的金额:");
                double je = input.nextDouble();
                boolean flag = cu.isExistCard(phine);
                if(flag){
                    cu.chargeMoney(phine,je);
                    System.out.println("充值成功,当前的话费为:"+cu.cards.get(phine).getMoney()+"元");
                }else{
                    System.out.println("您输入的手机号有误!");
                }
                continue;
            case 5:
                System.out.println("资费说明-->");
                cu.showDescription();
                continue;
            case 6:
                System.out.println("感谢您的的使用,欢迎下次光临!");
                System.exit(1);
                break;
            default:
                System.out.println("对不起,没有该选项!");
                break;
        }
        break;
    }while (true);
}

public void Menu2(){
	System.out.print("请输入手机卡号:");
    String phine = input.next();
    System.out.print("请输入卡号密码:");
    String phinePwd = input.next();
    if(cu.isExistCard(phine,phinePwd)){
        System.out.println("登录成功!");
    }else{
        System.out.println("用户名或密码错误!");
        return;
    }
    do{
        System.out.println("**********嗖嗖移动用户菜单**********");
        System.out.println("1.本月账单查询\t2.套餐余额查询\t3.打印消费详单\t4.套餐更变\t5.办理退网");
        System.out.println("请选择(输入1~5选择功能,其他键返回上一级):");
        int zhi = input.nextInt();
        switch (zhi){
            case 1:
                System.out.println("***>>本月账单查询");
                cu.showAmountDetail(phine);
                continue;
            case 2:
                System.out.println("***>>套餐余额查询");
                cu.showRemainDetail(phine);
                continue;
            case 3:
                System.out.println("***>>打印消费详单");
                cu.printAmountDetail(phine);
                continue;
            case 4:
                System.out.println("***>>套餐更变");
                System.out.print("1.话唠套餐\t2.网虫套餐\t3.超人套餐,请选择套餐(输入序号):");
                int num = input.nextInt();
                cu.changingPack(phine,num);
                continue;
            case 5:
                System.out.println("***>>办理退网");
                cu.delCard(phine);
                continue;
            default:
                System.out.println("***>>已返回!");
                new Menu().Menu1();
                break;
        }
    }while(true);
}
public void Change() {
	// TODO Auto-generated method stub
	System.out.println("*****用户注册*****");
    System.out.println("******可选的卡号******");
    ArrayList<String> list = cu.getNewNumber(9);
    System.out.print("请选择卡号(输入1~9的序号):");
    int xuHao = input.nextInt();
    String number = list.get(xuHao-1); //卡号
    int Hao;
    ServicePackage servicePackage = null;
    System.out.println("1.话唠套餐 2.网虫套餐 3.超人套餐,请选择套餐(输入序号):");
    Hao = input.nextInt();
    switch(Hao){
    	case 1:
    		servicePackage = cu.createPack(Hao);
    		break;
    	case 2:
    		servicePackage = cu.createPack(Hao);
    		break;
    	case 3:
    		servicePackage = cu.createPack(Hao);
    		break;
    	default:
    		System.out.println("序号输入错误,请重新输入");
    		Hao = input.nextInt();
    }
    mc.setSerPackage(servicePackage);

    System.out.print("请输入姓名:");
    String name = input.next();
    System.out.print("请输入密码:");
    String pwd = input.next();
    System.out.print("请输入预存话费金额:");
    int YC = input.nextInt();
    while (YC < servicePackage.getPrice()){
    	System.out.print("您预存的话费余额不足以支付本月固定套餐资费,请重新充值:");
        YC = input.nextInt();
    }
    mc.setMoney(YC - servicePackage.getPrice());

    MobileCard card = new MobileCard(number,name,pwd,mc.getSerPackage(),mc.getMoney());
    cu.addCard(card);
    System.out.print("注册成功!");
    card.showMsg();
}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java嗖嗖移动业务大厅项目中,序列化操作是指将对象转换为字节流的过程,以便在网络传输或存储到磁盘中使用。该项目中可能会用到序列化的地方有以下几个方面: 1. 网络传输:项目中可能需要将一些对象通过网络传输给其他服务或客户端。这时候可以使用序列化将对象转换为字节流,在网络传输过程中传输字节流,接收方再将字节流反序列化为对象进行处理。 2. 缓存:为了提高系统的性能,项目中可能会使用缓存技术来存储一些频繁读取的数据。这时候可以将这些数据对象序列化后存储到缓存中,下次需要读取的时候直接反序列化获取对象,避免了频繁的数据库读取操作。 3. 持久化:项目中可能会需要将对象永久性地存储到磁盘中,以保证数据的持久性。这时候可以将对象序列化后写入文件,下次需要读取的时候再将文件反序列化为对象进行操作。 在Java中,序列化操作可以通过实现Serializable接口来实现。该接口是一个标记接口,只需要在要序列化的类中加入implements Serializable即可。同时,需要注意的是需要使用ObjectOutputStream类将对象序列化为字节流,使用ObjectInputStream类将字节流反序列化为对象。 总结起来,Java嗖嗖移动业务大厅项目中的序列化操作主要用于网络传输、缓存、持久化等场景。通过实现Serializable接口,并使用相关的类进行序列化和反序列化操作,可以方便地实现对象的转换和传输,提高系统的性能和数据的持久化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值