精华内容
下载资源
问答
  • //二级菜单 do { System.out.println("*********欢迎使用嗖嗖移动业务大厅********"); System.out.println("1.用户登录"); System.out.println("2.用户注册"); System.out.println("3.使用嗖嗖"); ...

    第一次写的近千行的代码,记录一下
    欢迎大家一起交流学习,
    如果有疑惑的话,欢迎私信互相交流!
    案例覆盖的技能点
    1.封装,继承,多态,接口的使用。
    2.异常处理的合理运用。
    3.集合框架存储数据。
    4.I/O操作及序列化对文件的读写。

    源码:
    接口
    package sousouMobileservices;
    public interface CallService {
    public int call(int minCount,MobileCard card) throws Exception;
    }

    package sousouMobileservices;
    public interface NetService {
    public int netPlay(int flow,MobileCard card) throws Exception;
    }

    package sousouMobileservices;
    public interface SendService {
    public int send( int count,MobileCard card) throws Exception;
    }

    父类
    package sousouMobileservices;

    import java.io.Serializable;

    public abstract class ServicePackage implements Serializable {
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    public double price;
    public abstract void showinfo();

    }

    子类1
    package sousouMobileservices;

    public class TalkPackage extends ServicePackage implements SendService, CallService {
    private int talkTime;
    private int 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;
    }
    
    public TalkPackage(int talktime,int smscount,double price) {
    	this.talkTime = talktime;
    	this.price = price;
    	this.smsCount = smscount;
    }
    
    @Override
    public int call(int minCount, MobileCard card) throws Exception {//计算通话时间
    	TalkPackage talkPackage = (TalkPackage) card.getServicePackage();
    	int time = minCount;
    	for (int i = 0; i < minCount; i++) {
    		//套餐剩余通话时长大于一分钟
    		if (talkPackage.getTalkTime()-card.getRealTalkTime()>0) {
    			
    			card.setRealTalkTime(card.getRealTalkTime()+1);
    		}else if (card.getMoney()>=0.2) {
    			//账户余额大于0.2yuan
    			
    			card.setMoney(card.getMoney()-0.2);
    			card.setConsumAmount(card.getConsumAmount()+0.2);
    		}else {
    			time = i;
    			card.setMoney(time);  //因为抛出异常后,下面的语句不会执行,而返回值为零。所以可以通过setMongey暂存。
    			throw new Exception("本次通话"+time+"分钟,您的余额不足,请充值后再使用");
    		}			
    	}
    	return time;
    }
    
    @Override
    public int send(int count, MobileCard card) throws Exception {//计算发送信息
    	TalkPackage talkPackage = (TalkPackage) card.getServicePackage();
    	int time = count;
    	for (int i = 0; i < count; i++) {
    		if (talkPackage.getSmsCount()-card.getRealSMSCount()>0) {
    			
    			card.setRealSMSCount(card.getRealSMSCount()+1);				
    		}else if (card.getMoney()>=0.1) {
    			
    			card.setMoney(card.getMoney()-0.1);
    			card.setConsumAmount(card.getConsumAmount()+0.1);
    		}else {
    			time = i;
    			card.setMoney(time);
    			throw new Exception("本次发信息"+time+"条,您的余额不足,请充值后使用");
    		}			
    	}
    	return time;
    
    }
    
    @Override
    public void showinfo() {
    	System.out.println("话痨套餐:通话时长为500分钟/月,短信条数为30条/ 月");
    	
    }
    

    }

    子类2.
    package sousouMobileservices;

    public class SuperPackage extends ServicePackage implements CallService, SendService, NetService {
    private int talkTime; //通话时长
    private int smsCount;//短信条数
    private int 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;
    }
    
    public int getFlow() {
    	return flow;
    }
    
    public void setFlow(int flow) {
    	this.flow = flow;
    }
    
    public SuperPackage(int talktime,int smscount, int flow, double price) {
    	 this.talkTime = talktime;
    		this.price = price;
    		this.smsCount = smscount;
    		this.flow = flow;
    	
    }
    
    @Override
    public int netPlay(int flow, MobileCard card) throws Exception {
    	SuperPackage superPackage = (SuperPackage) card.getServicePackage();
    	int spend = flow*1024;
    	for (int i = 0; i < flow*1024; i++) {
    		if ((superPackage.getFlow())*1024-card.getRealFlow()>0) {
    			
    			card.setRealFlow(card.getRealFlow()+1);				
    		}else if (card.getMoney()>=0.1) {
    			
    			card.setMoney(card.getMoney()-0.1);
    			card.setConsumAmount(card.getConsumAmount()+0.1);
    		}else {
    			spend = i;
    			card.setMoney(spend);
    			throw new Exception("本次上网流量"+spend+"MB,您的余额不足,请充值后使用");
    		}
    		
    	}
    	return spend;
    
    }
    
    @Override
    public int send(int count, MobileCard card) throws Exception {
    	SuperPackage superPackage = (SuperPackage) card.getServicePackage();
    	int time = count;
    	for (int i = 0; i < count; i++) {
    		if (superPackage.getSmsCount()-card.getRealSMSCount()>0) {
    			
    			card.setRealSMSCount(card.getRealSMSCount()+1);				
    		}else if (card.getMoney()>=0.1) {
    			
    			card.setMoney(card.getMoney()-0.1);
    			card.setConsumAmount(card.getConsumAmount()+0.1);
    		}else {
    			time = i;
    			card.setMoney(time);
    			throw new Exception("本次发信息"+time+"条,您的余额不足,请充值后使用");
    		}
    		
    	}
    	return time;
    
    }
    
    @Override
    public int call(int minCount, MobileCard card) throws Exception {
    	SuperPackage superPackage = (SuperPackage) card.getServicePackage();
    	int time = minCount;
    	for (int i = 0; i < minCount; i++) {
    		//套餐剩余通话时长大于一分钟
    		if (superPackage.getTalkTime()-card.getRealTalkTime()>0) {
    			
    			card.setRealTalkTime(card.getRealTalkTime()+1);
    		}else if (card.getMoney()>=0.2) {
    			//账户余额大于0.2yuan
    			
    			card.setMoney(card.getMoney()-0.2);
    			card.setConsumAmount(card.getConsumAmount()+0.2);
    		}else {
    			time = i;
    			card.setMoney(time);
    			throw new Exception("本次通话"+time+"分钟,您的余额不足,请充值后再使用");
    		}
    		
    	}
    		return time;
    }
    
    @Override
    public void showinfo() {
    	
    	System.out.println("超人套餐:通话时长为200分钟/月,短信条数为50条/ 月,上网流量1GB/月");
    
    }
    

    }
    子类3
    package sousouMobileservices;
    //网虫套餐
    public class NetPackage extends ServicePackage implements NetService {
    private int flow ;
    public int getFlow() {
    return flow;
    }

    public void setFlow(int flow) {
    	this.flow = flow;
    }
    
    public NetPackage(int flow,double price) {
    	this.price = price;
    	this.flow = flow;
    }
    
    @Override
    public int netPlay(int flow, MobileCard card) throws Exception {
    	NetPackage netPackage = (NetPackage) card.getServicePackage();
    	int spend = flow*1024;
    	;
    	for (int i = 0; i < flow*1024; i++) {
    		if ((netPackage.getFlow())*1024-card.getRealFlow()>0) {
    			
    			card.setRealFlow(card.getRealFlow()+1);				
    		}else if (card.getMoney()>=0.1) {
    			
    			card.setMoney(card.getMoney()-0.1);
    			card.setConsumAmount(card.getConsumAmount()+0.1);
    		}else {
    			spend = i;
    			card.setMoney(spend);
    			throw new Exception("本次上网话费"+spend+"MB,您的余额不足,请充值后使用");
    		}
    		
    	}
    	return spend;
    
    }
    
    @Override
    public void showinfo() {
    	System.out.println("网虫套餐:上网流量3GB/月");
    
    }
    

    }

    一级菜单(main)
    package sousouMobileservices;

    //import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectOutputStream;
    //import java.io.OutputStreamWriter;
    import java.util.Scanner;

    //import com.alibaba.fastjson.JSON;

    public class Testmain {

    public static void main(String[] args) {
    	Scanner input = new Scanner(System.in);
    	CardUtil cardUtil = new CardUtil();//工具对象
    	SosoMgr sosoMgr = new SosoMgr();  //二级菜单
    		do {
    			System.out.println("*********欢迎使用嗖嗖移动业务大厅********");
    			System.out.println("1.用户登录");
    			System.out.println("2.用户注册");
    			System.out.println("3.使用嗖嗖");
    			System.out.println("4.话费充值");
    			System.out.println("5.资费说明");
    			System.out.println("6.退出系统");
    			int number;
    			do {                   //验证输入的值是否合法
    				if (input.hasNextInt()) {
    					number  = input.nextInt();
    					if (number<7&&number>=0) {
    						break;							
    					}
    					else {
    						System.out.println("您的输入有误,请重新输入");
    						input.next();							
    					}					
    				}
    				else {
    					System.out.println("您的输入有误,请重新输入");
    					input.next();
    				}
    			} while (true);
    			
    			switch (number) {
    				  case 1://登录功能
    					  System.out.println("请输入您的卡号");
    					  String numbers = input.next();
    					  System.out.println("请输入您的密码");
    					  String passWord = input.next();
    					  if (cardUtil.isExistCard(numbers, passWord)) {
    						  sosoMgr.cardMenu(cardUtil,numbers);
    						  break;
    					}else {
    						break;
    					}
    				
    						//break;
                	  case 2:
                		  MobileCard card = new MobileCard();
    				cardUtil.addCard(card);
                			break;
    				  case 3://使用嗖嗖
    					  System.out.println("请输入您的卡号");
    					  String numbers1 = input.next();
    					  if (cardUtil.isExistCard(numbers1)) {
    						  cardUtil.useSoso(numbers1);							
    					}
    					  	break;
    				  case 4://充值金额
    					 System.out.println("请输入充值卡号");
    					 String numbers3 = input.next();
    				cardUtil.chargeMoney(numbers3);
    						break;
    				  case 5://资费说明
    				cardUtil.showDescription();
    						break;
    						
    				  case 6:
    					  ObjectOutputStream objectOutputStream = null;
    				try {
    					objectOutputStream = new ObjectOutputStream(new FileOutputStream("F:\\课工场培训\\java学习\\workspace\\sousouMobileservices\\src\\sousouMobileservices\\message.txt"));
    				objectOutputStream.writeObject(cardUtil.cards);
    				objectOutputStream.flush();
    				} catch (FileNotFoundException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}finally {
    					if (objectOutputStream!=null) {
    						try {
    							objectOutputStream.close();
    						} catch (Exception e2) {
    							// TODO: handle exception
    						}
    					}
    				}	 
    				// String map = JSON.toJSONString( cardUtil.cards, true)						  
    					  System.out.println("欢迎再次使用,再见!");
    						System.exit(0);
    						break;
    			default:
    				break;
    			}
    			//input.close();
    		} while (true);
    		
    }
    

    }

    二级菜单
    package sousouMobileservices;

    import java.util.Scanner;

    public class SosoMgr {
    CardUtil cardUtil;
    public void cardMenu(CardUtil cardUtil,String numbers) {
    this.cardUtil = cardUtil;
    boolean isExit = true;
    Scanner input = new Scanner(System.in);
    do {
    System.out.println(“嗖嗖移动用户菜单”);
    System.out.println(“1.本月账单查询”);
    System.out.println(“2.套餐余量查询”);
    System.out.println(“3.打印消费详单”);
    System.out.println(“4.套餐变更”);
    System.out.println(“5.办理退网”);
    System.out.println(“请选择(输入1-5选择功能,其他键返回上一级:)”);
    String number =input.next();

    				switch (number) {
    					  case "1": // 查询本月账单
    					cardUtil.showAmountDetail(numbers);
    							break;
                    	  case "2"://套餐余量查询
    					cardUtil.showRemainDetail(numbers);
                    			break;
    					  case "3"://打印消费详单
    					cardUtil.printConsumInfo(numbers);	
    						  	break;
    					  case "4"://套餐变更
    					cardUtil.changingPack(numbers);
    							break;
    					  case "5":// 办理退网							  
    					cardUtil.delCard(numbers);
    						isExit = false;
    							break;
    				default :
    					isExit = false;
    				    break;
    				}
    				
    			} while (isExit);
    	
    		//input.close();
    	}
    

    }

    工具类
    package sousouMobileservices;

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.ObjectInputStream;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.text.DecimalFormat;
    //import java.nio.Buffer;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    //import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Scanner;

    //import javax.activation.MailcapCommandMap;

    //import org.omg.CosNaming.NamingContextExtPackage.StringNameHelper;

    public class CardUtil {
    public final static ServicePackage[] serive = new ServicePackage[3];//初始化套餐信息
    static {
    serive[0] = new TalkPackage(500,30,58);
    serive[1] = new SuperPackage(200, 50, 1, 78);
    serive[2] = new NetPackage(3, 68);

    }
    
    public final static Scene []scene = new Scene[6];   //初始化场景信息
    static {
    	scene[0] = new Scene("通话", 90, "问候客户,客户如此难缠,通话90分钟");
    	scene[1] = new Scene("通话",30 ,"询问妈妈身体状况,本地通话30分钟" );
    	scene[2] = new Scene("短信",5 ,"参与环境保护实施方案问卷调查,发送短信5条" );
    	scene[3] = new Scene("短信",50 ,"通知朋友手机换号,发送信息50条");
    	scene[4] = new Scene("上网",1 ,"和女友微信视频聊天,使用流量1GB");
    	scene[5] = new Scene("上网", 2,"晚上手机在线看韩剧,不留神睡着了!使用流量2GB");
    }
       // public ArrayList<ConsumInfo> consumInfos;
    	public Map<String , MobileCard> cards = new HashMap<String, MobileCard>();          //已注册的嗖嗖移动用户列表
    
    	public ArrayList<ConsumInfo>arrayList = new ArrayList<ConsumInfo>();
    	
    	public Map<String, ArrayList<ConsumInfo>> consumInfos =  new HashMap<String, ArrayList<ConsumInfo>>();//所有卡号的消费记录列表
    	
    	Scanner input = new Scanner(System.in);
    	@SuppressWarnings("unchecked")
    	public CardUtil() {//构造函数
    		// TODO Auto-generated constructor stub
    		ObjectInputStream objectInputStream =null;
    		try {
    			objectInputStream = new ObjectInputStream(new FileInputStream("F:\\课工场培训\\java学习\\workspace\\sousouMobileservices\\src\\sousouMobileservices\\message.txt"));
    		cards = (Map<String, MobileCard>) objectInputStream.readObject();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (ClassNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}finally {
    			if (objectInputStream!=null) {
    				try {
    					objectInputStream.close();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				
    			}
    		}
    		
    	}
    	
    	public static String dataFormat(double data) {   //double类型格式装换
    		DecimalFormat format = new DecimalFormat("#.0");
    		return format.format(data);
    	}
    

    // public void initScene() {
    // }

    // public Map<String, MobileCard> test() { //测试用
    // MobileCard aCard = new MobileCard();
    // aCard.setCardNumber(“123”);
    // aCard.setPassWord(“123”);
    // aCard.setUserName(“123”);
    // aCard.setServicePackage(serive[1]);
    // aCard.setConsumAmount(12);
    // aCard.setMoney(10);
    // cards.put(“123”, aCard);
    // return cards;
    // }
    public boolean isExistCard(String number,String passWord) {//根据卡号密码验证卡是否注册
    //cards = test();//测试用
    if (cards.containsKey(number)) {
    if (passWord.equals(cards.get(number).getPassWord())) {
    System.out.println(“登录成功”);
    return true;
    }else {
    System.out.println(“密码错误”);
    return false;
    }
    }
    else {
    System.out.println(“手机卡号错误”);
    return false;
    }
    }

    	public boolean isExistCard(String number) {//根据卡号验证卡是否注册
    		//cards = test();//测试用
    		if (cards.containsKey(number)) {
    			return true;
    		}else {
    			System.out.println("该手机号不存在");
    			return false;
    		}
    	}
    	
    	
    	public String creatNumber() {//生成随机卡号
    		System.out.println("*******可选择的卡号***********");
    		Random random = new Random();
    		String [] number = new String[9];
    		boolean isExist = true;     //标志位
    		int i = 1;
    		do {			
    		do { 
    		 int b  = (random.nextInt(90000000)+10000000);//产生一个随机数
    		 number[i-1] = "139"+b;                       //利用字符串拼接产生一个号码
    		if (!cards.containsKey(number[i-1])) {
    			
    			System.out.print(i+"."+number[i-1]+"\t");
    			isExist = false;				
    			if (i%3==0) {
    				System.out.println();
    			}
    			i++;
    		}	else {
    			isExist = true;
    		}			
    		} while (isExist);
    		} while (i!=10);
    		System.out.println("请选择卡号(1-9)");
    		int is;
    		do {
    			if (input.hasNextInt()) {
    				is = input.nextInt();
    				break;
    			}
    			else {
    				System.out.println("输入有误,请重新输入");
    				input.next();
    			}
    		} while (true);
    		return number[is-1];
    	}
    

    // public String[] getNewNumbers(int count) {//生成指定个数的卡号列表
    // return “a”;
    // }
    public void addCard(MobileCard card) {//注册新卡
    String number = creatNumber(); //选择的卡号
    System.out.println(“1.话痨套餐”+"\t"+“2.超人套餐”+"\t"+“3.网虫套餐,”+"\t"+“请选择套餐(输入序号):”);
    int order;
    do {
    if (input.hasNextInt()) {
    order = input.nextInt();
    if (order<4&&order>0) {
    break;
    }else {
    System.out.println(“没有该种套餐,请重新输入”);
    }
    }else {
    System.out.println(“输入错误指令,请重新输入”);
    input.next();
    }
    } while (true);
    card.setServicePackage(serive[order-1]);//选择对应套餐
    //card.getServicePackage().showinfo();
    System.out.println(“请输入姓名”);
    String name = input.next();
    System.out.println(“请输入密码”);
    String passwod = input.next();
    System.out.println(“请输入预存话费金额”);
    double money;
    do {
    do {
    if (input.hasNextDouble()) {
    money = input.nextDouble();
    break;
    }
    else {
    System.out.println(“输入有误,请重新输入”);
    input.next();
    }
    } while (true);

    	if (money>=card.getServicePackage().price) {
    		//设置消费金额和账户余额
    		card.setMoney(money-card.getServicePackage().price);
    		card.setConsumAmount(card.getConsumAmount()+card.getServicePackage().price);
    		break;
    	}else {
    		System.out.println("您预存的话费金额不足以支付本月固定套餐资费,请重新充值");
    	}
    	} while (true);
    	//初始化卡号信息
    	card.setCardNumber(number);
    	card.setUserName(name);
    	card.setPassWord(passwod);
    	
    	cards.put(number, card);  //存入集合
    	//显示卡号信息
    	System.out.println("注册成功!");
    	System.out.println("卡号:"+number+" 用户名:"+name+"当前余额:"+dataFormat(card.getMoney())+"元");
    	card.getServicePackage().showinfo();
    	
    	}
    	
    	public void showRemainDetail(String number) {//套餐余量查询
    		//cards = test();//测试用
    		int remainTalkTime;
    		int remainSmsCount;
    		int remainFlow;
    		 ServicePackage servicePackage = cards.get(number).getServicePackage();		
    			//ServicePackage servicePackage = ServicePackage.class.newInstance();//使用反射获取相应的套餐类
    		 System.out.println("***********套餐余量查询***********");
    		 System.out.println("您的卡号是 "+number+"套餐内剩余");
    			if (servicePackage instanceof TalkPackage) {
    				TalkPackage talkPackage =(TalkPackage) servicePackage;
    				remainSmsCount = talkPackage.getSmsCount()>cards.get(number).getRealSMSCount()?talkPackage.getSmsCount()-cards.get(number).getRealSMSCount():0;
    				remainTalkTime = talkPackage.getTalkTime()>cards.get(number).getRealTalkTime()?talkPackage.getTalkTime()-cards.get(number).getRealTalkTime():0;
    				System.out.println("通话时长"+remainTalkTime+"分钟");
    				System.out.println("短信条数"+remainSmsCount+"条");
    			}else if (servicePackage instanceof SuperPackage) {
    				SuperPackage superPackage = (SuperPackage) servicePackage;
    				remainSmsCount = superPackage.getSmsCount()>cards.get(number).getRealSMSCount()?superPackage.getSmsCount()-cards.get(number).getRealSMSCount():0;
    				remainTalkTime = superPackage.getTalkTime()>cards.get(number).getRealTalkTime()?superPackage.getTalkTime()-cards.get(number).getRealTalkTime():0;
    				remainFlow = superPackage.getFlow()>cards.get(number).getRealFlow()?superPackage.getFlow()-cards.get(number).getRealFlow():0;
    				System.out.println("通话时长"+remainTalkTime+"分钟");
    				System.out.println("短信条数"+remainSmsCount+"条");
    				System.out.println("上网流量"+remainFlow+"GB");
    			} else if (servicePackage instanceof NetPackage) {
    				NetPackage netPackage = (NetPackage) servicePackage;
    				remainFlow = netPackage.getFlow()>cards.get(number).getRealFlow()?netPackage.getFlow()-cards.get(number).getRealFlow():0;
    				System.out.println("上网流量"+remainFlow);
    			}		
    	}
    	
    	public void showAmountDetail(String number) {//本月账单查询
    		cards.get(number).showMeg();
    	}
    	
    	public void addConsumInfo(String number,ConsumInfo info) {//添加指定卡号的消费记录
    		//cards = test();//测试用
    		if (consumInfos.containsKey(number)) {
    			consumInfos.get(number).add(info);
    			System.out.println("成功添加一条消费记录");
    			}else {
    				arrayList.add(info);
    				consumInfos.put(number, arrayList);
    				System.out.println("不存在此卡的消费记录,已添加一条消费记录");
    			}
    	}
    	
    	public void useSoso(String number) {//使用嗖嗖
    		//cards = test();//测试用
    		ServicePackage servicePackage = cards.get(number).getServicePackage();
    		TalkPackage talkPackage;
    		SuperPackage superPackage ;
    		//NetPackage netPackage;
    		
    		Random random = new Random();
    		int a;
    		int use = 0;
    		
    		do {
    		a = random.nextInt(6);
    		switch (a) {
    		case 0:
    					
    		case 1:
    			//电话
    			if (servicePackage instanceof TalkPackage) {
    			 talkPackage = (TalkPackage) servicePackage;
    			 System.out.println(scene[a].getDescription());
    			 try {
    				use = talkPackage.call(scene[a].getData(), cards.get(number));
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}//调用call方法
    			 if (use==0) {
    				 use = (int)cards.get(number).getMoney();
    				 cards.get(number).setMoney(0);
    				 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    				
    			}else {
    				 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    			}			
    		}else if(servicePackage instanceof SuperPackage) {
    			 superPackage = (SuperPackage) servicePackage;
    			 System.out.println(scene[a].getDescription());
    			 try {
    				use = superPackage.call(scene[a].getData(), cards.get(number));
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			
    			 //addConsumInfo(number,scene[a].getType(),use);
    			 if (use==0) {
    				 use = (int)cards.get(number).getMoney();
    				 cards.get(number).setMoney(0);
    				 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    				
    			}else {
    				 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    			}	
    			 
    			 break;
    		}
    		else {
    			//该卡套餐不支持通话功能,重新生成随机数。
    			continue;
    		}
    			
    			break;
            case 2:
    			
    			
            case 3:     //短信
            	if (servicePackage instanceof TalkPackage) {
    			 talkPackage = (TalkPackage) servicePackage;
    			 System.out.println(scene[a].getDescription());
    			 try {
    				use = talkPackage.send(scene[a].getData(), cards.get(number));
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}//调用call方法
    			 if (use==0) {
    				 use = (int)cards.get(number).getMoney();
    				 cards.get(number).setMoney(0);
    				 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    				
    			}else {
    				 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    			}	
    		}else if(servicePackage instanceof SuperPackage) {
    			 superPackage = (SuperPackage) servicePackage;
    			 System.out.println(scene[a].getDescription());
    			 try {
    				use = superPackage.send(scene[a].getData(), cards.get(number));
    			} catch (Exception e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			 //addConsumInfo(number,scene[a].getType(),use);
    			 if (use==0) {
    				 use = (int)cards.get(number).getMoney();
    				 cards.get(number).setMoney(0);
    				 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    				
    			}else {
    				 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    			}	
    		}
    		else {
    			//该卡套餐不支持通话功能,重新生成随机数。
    			continue;
    		}
    			break;
    		case 4:
    			
    			
    		case 5://上网
    			if (servicePackage instanceof NetPackage) {
    				NetPackage netPackage2 = (NetPackage) servicePackage;
    				System.out.println(scene[a].getDescription());
    				try {
    					use = netPackage2.netPlay(scene[a].getData(),cards.get(number));
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    				 if (use==0) {
    					 use = (int)cards.get(number).getMoney();
    					 cards.get(number).setMoney(0);
    					 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    					
    				}else {
    					 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    				}	
    			}else if(servicePackage instanceof SuperPackage){
    	   				 superPackage = (SuperPackage) servicePackage;
    	   				 System.out.println(scene[a].getDescription());
    	   				 try {
    	   					use = superPackage.netPlay(scene[a].getData(), cards.get(number));
    	   				} catch (Exception e) {
    	   					// TODO Auto-generated catch block
    	   					e.printStackTrace();
    	   				} 
    	   		
    	   				 //addConsumInfo(number,scene[a].getType(),use);
    	   				 if (use==0) {
    						 use = (int)cards.get(number).getMoney();
    						 cards.get(number).setMoney(0);
    						 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    						
    					}else {
    						 addConsumInfo(number, new ConsumInfo(number, scene[a].getType(),use));
    					}	
    	   			}
    	   			else {
    	   				//该卡套餐不支持通话功能,重新生成随机数。
    	   				continue;
    	   			}
    			}				
    			break;						
    		}while(true);
    	}
    
    	public void printConsumInfo(String number) {//输出指定卡号消费记录
    		OutputStream outputStream;
    		BufferedWriter bufferedWriter ;
    		try {
    
    		 	if (consumInfos.containsKey(number)) {
    		 		int i =0;
    		 		if (consumInfos.get(number)!=null) {
    		 			 outputStream = new FileOutputStream("src/sousouMobileservices/"+number+"消费记录.txt");
    				     bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
    					Iterator<ConsumInfo>iterator = consumInfos.get(number).iterator();
    					while (iterator.hasNext()) {
    						ConsumInfo consumInfo = (ConsumInfo) iterator.next();
    						i++;
    						if (consumInfo.getType().equals("上网")) {
    							bufferedWriter.write(i+"."+consumInfo.getType()+consumInfo.getConsumData()+"MB");
    							bufferedWriter.write("\n");
    							bufferedWriter.flush();	
    						}else if (consumInfo.getType().equals("短信")) {
    							bufferedWriter.write(i+"."+consumInfo.getType()+consumInfo.getConsumData()+"条");
    							bufferedWriter.write("\n");
    							bufferedWriter.flush();	
    						}else {
    							bufferedWriter.write(i+"."+consumInfo.getType()+consumInfo.getConsumData()+"分钟");
    							bufferedWriter.write("\n");
    							bufferedWriter.flush();	
    						}						
    					}
    					System.out.println("消费记录打印完毕!");
    					bufferedWriter.close();
    					outputStream.close();
    				}
    		 		else {
    		 			System.out.println("对不起,不存在此号码的消费记录,不能打印!");
    				}
    			}else {
    				System.out.println("对不起,不存在此号码,不能打印!");
    			}
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    			
    	public void showDescription() {//资费说明
    		try {
    			InputStream inputStream = new FileInputStream("F:\\课工场培训\\java学习\\workspace\\sousouMobileservices\\src\\Service.txt");
    			BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
    			String line = bufferedReader.readLine();
    			while (line!=null) {
    				System.out.println(line);
    				line = bufferedReader.readLine();
    			}
    			bufferedReader.close();
    			inputStream.close();
    		} catch (FileNotFoundException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	
    	public void changingPack(String number) {//套餐变更
    		System.out.println("********套餐变更*********");
    		System.out.println("1.话痨套餐"+"\t"+"2.超人套餐"+"\t"+"3.网虫套餐,"+"\t"+"请选择套餐(输入序号):");
    		int digit ;
    		do {
    			if (input.hasNextInt()) {
    				digit = input.nextInt();
    				if (digit<4&&digit>0) {
    					break;
    				}else {
    					System.out.println("没有该种套餐,请重新输入");
    				}
    			}else {
    				System.out.println("输入错误指令,请重新输入");
    				input.next();
    			}
    		} while (true);
    		if (digit==1) {
    			if (cards.get(number).getServicePackage()instanceof TalkPackage) {
    				System.out.println("对不起,您已经是该卡套餐用户,无需更换!");
    			}else if (cards.get(number).getMoney()<58) {
    				System.out.println("对不起,您的余额不足以支付新套餐本月资费,请充值后在办理更换套餐业务!");
    			}else {
    				cards.get(number).setRealFlow(0);
    				cards.get(number).setRealTalkTime(0);
    				cards.get(number).setRealSMSCount(0);
    				cards.get(number).setServicePackage(serive[digit-1]);
    				cards.get(number).setMoney(cards.get(number).getMoney()-serive[digit-1].price);
    				cards.get(number).setConsumAmount(serive[digit-1].price);
    				System.out.println("套餐变更成功! 话痨套餐:通话时长500分钟/ 月,短信条数为30条/月,资费为58.0/月.");
    			}
    			
    		}else if (digit==2) {
    			if (cards.get(number).getServicePackage()instanceof SuperPackage) {
    				System.out.println("对不起,您已经是该卡套餐用户,无需更换!");
    			}else if (cards.get(number).getMoney()<78) {
    				System.out.println("对不起,您的余额不足以支付新套餐本月资费,请充值后在办理更换套餐业务!");
    			}else {
    				cards.get(number).setRealFlow(0);
    				cards.get(number).setRealTalkTime(0);
    				cards.get(number).setRealSMSCount(0);
    				cards.get(number).setServicePackage(serive[digit-1]);
    				cards.get(number).setMoney(cards.get(number).getMoney()-serive[digit-1].price);
    				cards.get(number).setConsumAmount(serive[digit-1].price);
    				System.out.println("套餐变更成功! 超人套餐:通话时长200分钟/ 月,上网流量1GB/月,短信条数为50条/月,资费为78.0/月.");
    			}	
    		}else {
    			if (cards.get(number).getServicePackage()instanceof NetPackage) {
    				System.out.println("对不起,您已经是该卡套餐用户,无需更换!");
    			}else if (cards.get(number).getMoney()<68) {
    				System.out.println("对不起,您的余额不足以支付新套餐本月资费,请充值后在办理更换套餐业务!");
    			}else {
    				cards.get(number).setRealFlow(0);
    				cards.get(number).setRealTalkTime(0);
    				cards.get(number).setRealSMSCount(0);
    				cards.get(number).setServicePackage(serive[digit-1]);
    				cards.get(number).setMoney(cards.get(number).getMoney()-serive[digit-1].price);
    				cards.get(number).setConsumAmount(serive[digit-1].price);
    				System.out.println("套餐变更成功! 网虫套餐:上网流量3GB/月,资费为68.0/月.");
    		}
    	}
    	}
    	public void chargeMoney(String number) {//话费充值
    		if (cards.containsKey(number)) {
    			System.out.println("请输入充值金额");
    			double money ;
    			do {
    				do {
    					if (input.hasNextDouble()) {
    						money = input. nextDouble();
    						break;
    					}else {
    						System.out.println("输入无效字符,请重新输入");
    						input.next();
    					}
    				} while (true);
    				//money = input.nextDouble();
    				if (money>=50) {
    					cards.get(number).setMoney(cards.get(number).getMoney()+money);
    					System.out.println("充值成功,当前话费余额为"+dataFormat(cards.get(number).getMoney())+"元");
    					break;
    				}else {
    					System.out.println("最少充值50元,请重新充值");
    				}
    			} while (true);		
    		}
    	}	
    	public void delCard(String number) {
    		System.out.println("办理退网");
    		//FileReader对象. fr.closefile.delete()。
    		File file = new File("src/sousouMobileservices/"+number+"消费记录.txt");
    		if(file.exists())    //删除要退网的为用户的文件
    		{
    			file.delete(); 
    		}
    		cards.remove(number);
    		System.out.println("卡号"+number+"办理退网成功!");
    		System.out.println("谢谢使用");
    		
    	}
    	public Map<String, MobileCard> exit() {
    		return cards;
    	}
    

    }

    package sousouMobileservices;

    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 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 sousouMobileservices;
    //场景
    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 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 double price;
    

    }
    package sousouMobileservices;

    import java.io.Serializable;

    public class MobileCard implements Serializable {
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    private String cardNumber; //卡号
    private String userName; //用户名
    private String passWord; //密码
    private ServicePackage servicePackage; //套餐
    private double consumAmount; //消费总额
    private double money; //剩余金额
    private int realTalkTime = 0; //当月通话时间
    private int realSMSCount = 0; //当月发送信息条数
    private int realFlow = 0; //当月使用流量
    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 getServicePackage() {
    return servicePackage;
    }
    public void setServicePackage(ServicePackage servicePackage) {
    this.servicePackage = servicePackage;
    }
    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 void showMeg() {

    		System.out.println("******本月账单查询**********");
    		System.out.println("您的卡号:"+getCardNumber()+",当月账单");
    		System.out.println("套餐资费:"+CardUtil.dataFormat(getServicePackage().price)+"元");
    		System.out.println("合计:"+CardUtil.dataFormat(getConsumAmount())+"元");
    		System.out.println("账户余额:"+CardUtil.dataFormat(getMoney())+"元");
        
    	}
    

    }

    通过项目获得的一些知识点。
    一.double型做除法时,一定要注意除数或者被除数一定要至少有一个为double型!!
    两个double型数据做操作,会有精度丢失 的情况。所以需要用到
    public static String dataFormat(double data) { //double类型格式装换
    DecimalFormat format = new DecimalFormat("#.0");
    return format.format(data);
    }
    二.opearate和romove都用System.in创建了Scanner,当opearate的Scanner还没有关闭,调用了remove,而remove中则是打开Scanner后关闭,这里间接地将System.in也关闭了,因为System.in是个静态流,所以引用其的Scanner对象内都是相同状态的。当操作后返回到opearate,这时再调用nextInt,在System.in已经关闭了情况下,不能读取到任何数据,就会产生 java.util.NoSuchElementException,即使是在两个不同的Scanner对象中调用System.in(两者hash值不一样)。

    三. a)序列化时,只对对象的状态进行保存,而不管对象的方法;
    b)当一个父类实现序列化,子类自动实现序列化,不需要显式实现Serializable接口;
    c)当一个对象的实例变量引用其他对象,序列化该对象时也把引用对象进行序列化;
    d)并非所有的对象都可以序列化

    展开全文
  • 实现嗖嗖移动业务大厅java代码实现嗖嗖移动业务大厅java代码
  • JAVA小项目 嗖嗖移动业务大厅 为什么要我写大于50个字节
  • 嗖嗖移动业务大厅Java初级控制台小程序
  • JavaOOP项目 - 嗖嗖移动业务大厅 项目目录结构 服务接口 通讯服务接口 package ServicePackage; //通讯服务 public interface CallService { int call(int minCount); } 短信服务接口 package Service...

    JavaOOP项目 - 嗖嗖移动业务大厅


    项目目录结构

    在这里插入图片描述


    服务接口

    • 通讯服务接口
    package ServicePackage;
    //通讯服务
    public interface CallService {
        int call(int minCount);
    }
    
    • 短信服务接口
    package ServicePackage;
    //短信服务
    public interface SendService {
        int sendMessage(int count);
    }
    
    
    • 网络服务接口
    package ServicePackage;
    //上网服务
    public interface NetService {
        int netPlay(int flow);
    }
    

    套餐类

    • 基本套餐类
    package ServicePackage;
    //套餐类
    public abstract class ServicePackage implements NetService,CallService,SendService{
        private String type;//套餐类型
        private double price;//资费
        private int flow;//流量
        private int talkTime;//通话时长
        private int smsCount;//短信条数
        int Sjs;//随机数
    
        public ServicePackage() { }
    
        public String getType() {
            return type;
        }
    
        void setType(String type) {
            this.type = type;
        }
    
        public double getPrice() {
            return price;
        }
    
        void setPrice(double price) {
            this.price = price;
        }
    
        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;
        }
    
        public int getSjs() {
            return Sjs;
        }
    
        public abstract void showInfo();//资费信息
    
        //生成使用数据
        public void showSjs(){
            Sjs =  (int)((Math.random()*9)+1);
        }
    
        @Override
        public int call(int minCount) {
            showSjs();
            System.out.println("打了个电话,使用了"+Sjs+"分钟通话时长");
            return minCount - Sjs;//返回使用后的剩余数据
        }
    
        @Override
        public int netPlay(int flow) {
            showSjs();
            System.out.println("上了个网,使用了"+Sjs+"G流量");
            return flow - Sjs;
        }
    
        @Override
        public int sendMessage(int count) {
            showSjs();
            System.out.println("发了一手短信,使用了"+Sjs+"条短信");
            return count - Sjs;
        }
    }
    
    • 网虫套餐
    package ServicePackage;
    //网虫套餐
    public class NetPackage extends ServicePackage implements NetService{
    
        public NetPackage(){
            setType("网虫套餐");//套餐类型
            setFlow(40);//流量
            setPrice(19);//费用
        }
    
        @Override
        public void showInfo() {
            System.out.println("套餐类型:" + getType());
            System.out.println("上网流量:" + getFlow() + "G/月");
            System.out.println("月租:" + getPrice() + "元/月");
        }
    
        @Override
        public int netPlay(int flow) {
            showSjs();
            System.out.println("网上冲浪看mm,使用了"+Sjs+"G流量");
            return flow - Sjs;
        }
    }
    
    • 话痨套餐
    package ServicePackage;
    //话痨套餐
    public class TalkPackage extends ServicePackage implements CallService,SendService{
    
        public TalkPackage() {
            setType("话痨套餐");//套餐类型
            setTalkTime(300);//通话时长
            setSmsCount(100);//短信条数
            setPrice(66);//资费信息
        }
    
        @Override
        public void showInfo() {
            System.out.println("套餐类型:" + getType());
            System.out.println("通话时长:" + getTalkTime() + "分钟/月");
            System.out.println("短信条数:" + getSmsCount() + "条/月");
            System.out.println("月租:" + getPrice() + "元/月");
        }
    
        @Override
        public int call(int minCount) {
            showSjs();
            System.out.println("和好老表唠了会嗑,使用了"+Sjs+"分钟通话时间");
            return minCount - Sjs;
        }
    
        @Override
        public int sendMessage(int count) {
            showSjs();
            System.out.println("给MZ发短信,使用了"+Sjs+"条短信");
            return count - Sjs;
        }
    }
    
    • 超人套餐
    package ServicePackage;
    //超人套餐
    public class SuperPackage extends ServicePackage implements CallService,NetService,SendService{
    
        public SuperPackage() {
            setType("超人套餐");//套餐类型
            setTalkTime(500);//通话时长
            setSmsCount(200);//短信条数
            setFlow(80);//流量
            setPrice(199);//资费信息
        }
    
        @Override
        public void showInfo() {
            System.out.println("套餐类型:" + getType());
            System.out.println("通话时长:" + getTalkTime() + "分钟/月");
            System.out.println("短信条数:" + getSmsCount() + "条/月");
            System.out.println("上网流量:" + getFlow() + "G/月");
            System.out.println("月租:" + getPrice() + "元/月");
        }
    
        @Override
        public int call(int minCount) {
            showSjs();
            System.out.println("和好老表唠了会嗑,使用了"+Sjs+"分钟通话时间");
            return minCount - Sjs;
        }
    
        @Override
        public int netPlay(int flow) {
            showSjs();
            System.out.println("网上冲浪看抖音,使用了"+Sjs+"G流量");
            return flow - Sjs;
        }
    
        @Override
        public int sendMessage(int count) {
            showSjs();
            System.out.println("给MZ发短信,使用了"+Sjs+"条短信");
            return count - Sjs;
        }
    }
    

    手机卡类

    package SosoMgr;
    
    import ServicePackage.ServicePackage;
    
    //手机卡,用户
    public class MobileCard {
        private String UserName;//用户名
        private String Password;//用户密码
        private String CardNum;//卡号
        private ServicePackage SerPackage;//套餐
        private double consumAmount;//累计消费金额
        private double money;//余额(可用)
        private int realTalkTime;//语言时长(可用)
        private int realSMSCount;//短信条数(可用)
        private int realFlow;//流量(可用)
    
        public MobileCard() {}
    
        public String getUserName() {
            return UserName;
        }
    
        public void setUserName(String userName) {
            UserName = userName;
        }
    
        public String getPassword() {
            return Password;
        }
    
        public void setPassword(String password) {
            Password = password;
        }
    
        public String getCardNum() {
            return CardNum;
        }
    
        public void setCardNum(String cardNum) {
            CardNum = cardNum;
        }
    
        public ServicePackage getSerPackage() {
            return SerPackage;
        }
    
        public void setSerPackage(ServicePackage serPackage) {
            SerPackage = serPackage;
        }
    
        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;
        }
    }
    

    消费信息

    package SosoMgr;
    
    //消费信息
    public class ConsumInfo {
        private String cardNumber;//卡号
        private String type;//套餐类型
        private String consumData;//消费数据
    
        public ConsumInfo() {}
    
        public ConsumInfo(String cardNumber, String type, String consumData) {
            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 String getConsumData() {
            return consumData;
        }
    
        public void setConsumData(String consumData) {
            this.consumData = consumData;
        }
    }
    

    注册系统

    package SosoMgr;
    
    import ServicePackage.ServicePackage;
    
    import java.util.*;
    
    //注册系统
    public class RegistSystem {
        private String CardNumber;//所选卡号
        private ServicePackage tcSP;//所选套餐
        private String UserName;//用户名
        private String Password;//用户密码
        private double money;//预存话费
    
        private RegistSystem(){}
    
        static MobileCard RegistSys(List<ServicePackage> SerPack){
            Scanner SR = CardUtil.SR;
            RegistSystem rs = new RegistSystem();
            System.out.println("******************可选择卡号******************");
            List<String> cards = new ArrayList<>(rs.cardSJ());//生成可用卡号
            for(int i = 0;i < cards.size();i++){//遍历可用卡号集
                System.out.print((i+1)+"、"+cards.get(i)+"\t");//输出可用卡号
                if((i+1)%3==0){//每打印三次后换行
                    System.out.print("\n");
                }
            }
            do{
                String Z_card = "[1-9]";
                System.out.print("请选择卡号(输入1-9的序号):");
                String xzCard = SR.next();//选择卡号序号
                if(xzCard.matches(Z_card)){
                    int xzCardI = Integer.parseInt(xzCard);
                    rs.CardNumber = cards.get(xzCardI-1);//获取对应序号的号码
                    break;
                }else{
                    System.out.println("输入错误,无此选项!");
                }
            }while(true);
    
            System.out.println("******************可选套餐******************");
            for(int i = 0;i < SerPack.size();i++){//遍历套餐集
                System.out.print((i+1)+"、"+SerPack.get(i).getType()+"\n");
            }
            do{
                String Z_card = "[1-"+ SerPack.size() +"]";
                System.out.print("请选择套餐:");
                String xzTaoCan = SR.next();//选择套餐
                if(xzTaoCan.matches(Z_card)){
                    int tcI = Integer.parseInt(xzTaoCan);
                    rs.tcSP = SerPack.get(tcI-1);//获取对应序号的套餐
                    break;
                }else{
                    System.out.println("输入错误,无此选项!");
                }
            }while(true);
            System.out.println("-----------------------------------------------");
            do{
                System.out.print("请设置姓名:");
                String Z_Name = "[\\D&&\\S]{2,6}";
                String userName = SR.next();//设置名字
                if(userName.matches(Z_Name)){
                    rs.UserName = userName;//保存名字
                    break;
                }else{
                    System.out.println("名字不符合规范!\n名字中不能含有数字,并大于2个不大于6个字符");
                }
            }while(true);
    
            do{
                System.out.print("请设置密码:");
                String Z_password = "\\S{6,16}";
                String password = SR.next();//设置密码
                if(password.matches(Z_password)){
                    rs.Password = password;//保存密码
                    break;
                }else{
                    System.out.println("密码不符合规范!\n密码要大于6位不大于16位");
                }
            }while(true);
    
            do{
                System.out.print("预存话费金额:");
                String Z_money = "\\d*";
                String S_money = SR.next();//输入存入话费
                if(S_money.matches(Z_money)){
                    double mon = Double.parseDouble(S_money);
                    if(mon > rs.tcSP.getPrice()){//判断存入话费是否大于所选套餐资费
                        rs.money = mon;//保存存入话费
                        break;
                    }else{
                        System.out.println("存入的话费必须大于套餐月租!");
                    }
                }else{
                    System.out.println("输入错误!请输入数字!");
                }
            }while(true);
    
            MobileCard mCard = rs.caedSet();//制作手机卡,并接收制作好的手机卡
            System.out.println("注册成功!\n卡号:"+mCard.getCardNum()
                    +" 、用户名:"+mCard.getUserName()
                    +" 、余额(已扣除月租):"+mCard.getMoney());//打印客户信息
            rs.tcSP.showInfo();//打印套餐信息
            return mCard;//返回制作完成的手机卡
        }
    
        //手机卡制作系统,将数据刻录入手机卡,并返回制作好的手机卡
        private MobileCard caedSet(){
            MobileCard mCard = new MobileCard();//获取初始(空白)手机卡
            mCard.setCardNum(CardNumber);//给手机卡设置号码
            mCard.setUserName(UserName);//给手机卡设置名字
            mCard.setPassword(Password);//给手机卡设置密码
            mCard.setSerPackage(tcSP);//给手机卡设置套餐
            //设置手机卡初始余额,扣除套餐月租
            double price = mCard.getSerPackage().getPrice();//获取手机卡套餐月租
            mCard.setMoney(money-price);//将月租扣除,并设置余额
            mCard.setConsumAmount(price);//记录已扣除费用
            mCard.setRealTalkTime(mCard.getSerPackage().getTalkTime());//设置手机卡初始语音时长
            mCard.setRealSMSCount(mCard.getSerPackage().getSmsCount());//设置手机卡初始短信条数
            mCard.setRealFlow(mCard.getSerPackage().getFlow());//设置手机卡初始流量
    
            //返回用户信息
            return mCard;
        }
    
        //卡号生成系统
        private Set cardSJ(){
            CardUtil cu = CardUtil.cuObject();//工具类对象
            Set<String> Cards = new HashSet<>();//可用卡号集
            for(int a = 0;a<9;a++){//生成9个可用号码
                String cardnum = "199";//初始卡号开头
                for(int i = 0;i<8;i++){//随机生成8位整数
                    cardnum += (int)(Math.random()*10);
                }
                boolean ja = false;
                if(!cu.cards.containsKey(cardnum)){//判断新生成的手机号是否已存在
                    ja = Cards.add(cardnum);//将手机号添加进集合
                }
                if(!ja){//若手机号添加失败,则重新进行添加
                    a--;
                }
            }
            return Cards;
        }
    }
    

    工具类

    package SosoMgr;
    
    import ServicePackage.*;
    import java.io.*;
    import java.util.*;
    
    //工具类
    public class CardUtil {
        public static Scanner SR = new Scanner(System.in);
        List<ServicePackage> SerPack = new ArrayList<>();//套餐集
        Map<String,MobileCard> cards = new HashMap<>();//手机卡集、手机号 对应 手机卡
        Map<String,List<ConsumInfo>> ConsumInfos = new HashMap<>();//消费信息集、手机号 对应 消费信息
        {
            //将套餐存入套餐集
            SerPack.add(new NetPackage());
            SerPack.add(new TalkPackage());
            SerPack.add(new SuperPackage());
        }
        private CardUtil(){}
        private static CardUtil cu = new CardUtil();//工具类对象
        public static CardUtil cuObject(){
            return cu;//返回工具类对象
        }
    
        //注册,将手机卡存入手机卡集
        void registCard(){
            MobileCard mCard = RegistSystem.RegistSys(SerPack);//启动注册系统,传入套餐集,并接收制作好的手机卡
            cards.put(mCard.getCardNum(),mCard);//将手机号与对应的手机卡存入集合
            //给手机号绑定消费记录集
            List<ConsumInfo> consumInfos = new ArrayList<>();//消费信息集
            ConsumInfos.put(mCard.getCardNum(),consumInfos);//将手机号与与消费信息集存入集合
        }
    
        //登录
        MobileCard LoginMenu(String monbileNumber){//传入手机号
            boolean Pcn = cards.containsKey(monbileNumber);//判断手机卡集中是否存在此手机号
            if(Pcn){
                MobileCard card = cards.get(monbileNumber);//获取指定手机号对应的手机卡
                System.out.print("请输入密码:");
                String passwd = SR.next();
                if(card.getPassword().equals(passwd)){
                    return card;//密码输入正确后返回对应手机卡
                }else{
                    System.out.println("密码错误!");
                }
            }else{
                System.out.println("此号码不存在!");
            }
            return null;
        }
    
        //充值话费
        public void InputMoney(String monbileNumber){
            if(cards.containsKey(monbileNumber)){//判断手机卡集中是否存在此手机号
                System.out.print("请输入充值金额:");
                double inputMoney = 0;
                try {
                    Scanner s = new Scanner(System.in);
                    inputMoney = s.nextDouble();
                    //s.close();
                }catch(Exception e){}
                if(inputMoney > 0){
                    MobileCard card = cards.get(monbileNumber);//获取指定手机号对应的手机卡
                    card.setMoney(card.getMoney() + inputMoney);//将充值金额加入余额
                    System.out.println("卡号:"+monbileNumber+"的用户,充值成功!\n余额:"+card.getMoney());
                }else{
                    System.out.println("充值失败!");
                }
            }else{
                System.out.println("此号码不存在!");
            }
        }
    
        //使用嗖嗖
        public void RunSoso(String monbileNumber){
            //调用功能传入剩余用量,使用功能后扣除使用量,返回剩余用量
            boolean Pcn = cards.containsKey(monbileNumber);//判断手机卡集中是否存在此手机号
            if(Pcn){
                MobileCard card = cards.get(monbileNumber);//获取传入手机号对应手机卡
                ServicePackage SerPac = card.getSerPackage();//获取手机卡的套餐
                if(card.getMoney() > 0){//判断是否还有余额
                    //记录消费信息
                    List<ConsumInfo> coninf = ConsumInfos.get(monbileNumber);//获取对应手机号的消费记录集
                    ConsumInfo Con = new ConsumInfo(monbileNumber,SerPac.getType(),"");
                    coninf.add(Con);
                    System.out.println("\t1.拨打电话");
                    System.out.println("\t2.发送短信");
                    System.out.println("\t3.网上冲浪");
                    System.out.println("**********************************");
                    System.out.print("请输入:");
                    String xzSo = SR.next();
                    switch(xzSo){
                        case "1":
                            int TalkTime = SerPac.call(card.getRealTalkTime());//调用通话方法,传入可用通话时长,返回使用后的时长
                            int T = SerPac.getSjs();//消耗的时长
                            if(TalkTime < 0){//判断是否还有剩余用量
                                double M = T * 0.2;//用超出的时长 乘以 每次超出1的费用 得出超出的费用
                                card.setConsumAmount(card.getConsumAmount() + M);//记录消费金额
                                card.setMoney(card.getMoney() - M);//用原有的钱扣除使用的钱,得出余额
                            }
                            card.setRealTalkTime(TalkTime);//更改使用后的时长
    
                            Con.setConsumData("号码:"+Con.getCardNumber()+" 套餐:"+Con.getType()+" 使用了电话功能 使用时长:"+T+"分钟");
                            break;
                        case "2":
                            int SMSCount = SerPac.sendMessage(card.getRealSMSCount());
                            int S = SerPac.getSjs();
                            if(SMSCount < 0){
                                double M = S * 0.1;
                                card.setConsumAmount(card.getConsumAmount() + M);//记录消费金额
                                card.setMoney(card.getMoney() - M);
                            }
                            card.setRealSMSCount(SMSCount);
    
                            Con.setConsumData("号码:"+Con.getCardNumber()+" 套餐:"+Con.getType()+" 使用了短信功能 使用条数:"+S+"条");
                            break;
                        case "3":
                            int Flow = SerPac.netPlay(card.getRealFlow());
                            int F = SerPac.getSjs();
                            if(Flow < 0){
                                double M = F * 3;
                                card.setConsumAmount(card.getConsumAmount() + M);//记录消费金额
                                card.setMoney(card.getMoney() - M);
                            }
                            card.setRealFlow(Flow);
    
                            Con.setConsumData("号码:"+Con.getCardNumber()+" 套餐:"+Con.getType()+" 使用了上网功能 使用流量:"+F+"G");
                            break;
                        default:
                            System.out.println("返回上一级...");
                    }
                }else{
                    System.out.println("余额不足!请尽快缴费!");
                }
            }else{
                System.out.println("此号码不存在!");
            }
        }
    
        //打印消费详单
        public void OutXF(String cardNum){
            List<ConsumInfo> Conl = ConsumInfos.get(cardNum);//获取手机号对应的套餐集
            if(!Conl.isEmpty()){
                File fi = new File("消费记录");
                fi.mkdirs();
                File f = new File(fi , cardNum +"消费记录单.txt");
                try {
                    Writer w = new FileWriter(f);
                    for(ConsumInfo i : Conl){
                        w.write(i.getConsumData()+"\n");
                        w.flush();//强制让输出流输出数据
                    }
                    System.out.println("打印成功,请在消费记录目录下查看详单");
                    w.close();
                } catch (IOException e) {
                    System.out.println("出错,打印失败!");
                }
            }else{
                System.out.println("暂无消费记录,无法打印!");
            }
        }
    
        //资费说明
        public void PriceInfo(){
            System.out.println("\n*****************资费说明*****************");
            for(ServicePackage ser : SerPack){
                ser.showInfo();
                System.out.println("-----------------------");
            }
            System.out.println("超出套餐计费:");
            System.out.println("通话时长:0.2元/分钟");
            System.out.println("短信条数:0.1元/条");
            System.out.println("上网流量:3元/G");
        }
    
        //手机号判断
        public Object[] cardNumIf(){
            Object[] StrBoo = new Object[2];//Object类型数组,储存手机号与布尔值
            String Z_cardNum = "[0-9]{11}";//11位并只能为0-9中的数字
            System.out.print("请输入手机卡号:");
            String cardNum = SR.next();
            if(cardNum.matches(Z_cardNum)){
                StrBoo[0] = cardNum;//存入手机号
                StrBoo[1] = true;
            }else{
                StrBoo[0] = "手机号必须为11位整数";
                StrBoo[1] = false;
            }
            return StrBoo;
        }
    }
    

    业务大厅

    package SosoMgr;
    
    import ServicePackage.ServicePackage;
    
    import java.util.Scanner;
    
    //嗖嗖移动业务大厅
    public class SosoMgr {
        Scanner SR = CardUtil.SR;
        CardUtil cu = CardUtil.cuObject();//工具类对象
        public static void main(String[] args) {
            SosoMgr sm = new SosoMgr();
            boolean FH_SouYie = false;//用于判断是否返回大厅首页
            do{
                FH_SouYie = sm.mainMenu();//启动主菜单
            }while(FH_SouYie);
            sm.SR.close();
        }
    
        //主菜单
        private boolean mainMenu() {
            System.out.println("\n******************欢迎使用嗖嗖移动业务大厅******************");
            System.out.println("\t1.用户登录");
            System.out.println("\t2.用户注册");
            System.out.println("\t3.使用嗖嗖");
            System.out.println("\t4.话费充值");
            System.out.println("\t5.资费说明");
            System.out.println("\t6.退出系统");
            System.out.println("*********************************************************");
            System.out.print("请选择:");
            String SY_XuanZe = SR.next();
            //首页选择
            switch (SY_XuanZe){
                case "1"://用户登录
                    Object[] StrBoo = cu.cardNumIf();
                    String Card_Ts = (String)StrBoo[0];
                    boolean bool = (boolean)StrBoo[1];
                    if(bool){
                        MobileCard card = cu.LoginMenu(Card_Ts);
                        if(card != null){
                            cardMenu(card);
                        }
                    }else{
                        System.out.println(Card_Ts);
                    }
                    return true;
                case "2"://用户注册
                    cu.registCard();//调用工具类中注册系统
                    return true;
                case "3"://使用嗖嗖
                    System.out.println("\n*****************使用嗖嗖*****************");
                    Object[] StrBoo3 = cu.cardNumIf();
                    String Card_Ts3 = (String)StrBoo3[0];
                    boolean bool3 = (boolean)StrBoo3[1];
                    if(bool3){
                        cu.RunSoso(Card_Ts3);
                    }else{
                        System.out.println(Card_Ts3);
                    }
                    return true;
                case "4"://话费充值
                    Object[] StrBoo4 = cu.cardNumIf();
                    String Card_Ts4 = (String)StrBoo4[0];
                    boolean bool4 = (boolean)StrBoo4[1];
                    if(bool4){
                        cu.InputMoney(Card_Ts4);
                    }else{
                        System.out.println(Card_Ts4);
                    }
                    return true;
                case "5"://资费说明
                    cu.PriceInfo();
                    return true;
                case "6"://退出系统
                    System.out.println("感谢您使用嗖嗖移动业务");
                    return false;
                default:
                    System.out.println("无此选项!");
                    return true;
            }
        }
    
        //登录菜单
        private void cardMenu(MobileCard card){
            boolean xzPD = false;
            String cardNum = card.getCardNum();//手机号
            String Uname = card.getUserName();//用户名
            do{
                System.out.println("*******嗖嗖移动用户菜单*******");
                System.out.println("\t1.本月账单查询");
                System.out.println("\t2.套餐余量查询");
                System.out.println("\t3.打印消费详单");
                System.out.println("\t4.套餐更变");
                System.out.println("\t5.办理退网");
                System.out.println("*****************************");
                System.out.print("请选择:");
                String loginXZ = SR.next();
                switch(loginXZ){
                    case "1":
                        System.out.println("******本月账单查询******");
                        System.out.println("卡号:" + cardNum + "的用户:" + Uname + "你好!");
                        System.out.println("当月账单:");
                        System.out.println("\t套餐资费:" + card.getSerPackage().getPrice() + "元");
                        System.out.println("\t累计消费:" + Double.valueOf(String.format("%.1f" , card.getConsumAmount())) + "元");
                        System.out.println("\t账户余额:" + Double.valueOf(String.format("%.1f",card.getMoney())) + "元");
                        xzPD = true;
                        break;
                    case "2":
                        System.out.println("******套餐余量查询******");
                        System.out.println("卡号:" + cardNum + "的用户:" + Uname + "你好!");
                        System.out.println("套餐内剩余(负数代表超出):");
                        System.out.println("\t通话时长:" + card.getRealTalkTime() + "分钟");
                        System.out.println("\t短信条数:" + card.getRealSMSCount() + "条");
                        System.out.println("\t可用流量:" + card.getRealFlow() + "G");
                        xzPD = true;
                        break;
                    case "3":
                        System.out.println("******打印消费详单******");
                        cu.OutXF(cardNum);
                        xzPD = true;
                        break;
                    case "4":
                        System.out.println("******套餐更变******");
                        for(int i = 0;i<cu.SerPack.size();i++){//遍历套餐集
                            System.out.print((i+1)+"、"+cu.SerPack.get(i).getType()+"  ");
                        }
                        System.out.println("\n********************");
                        System.out.print("请选择:");
                        String Z_card = "[1-"+ cu.SerPack.size() +"]";
                        String xzGBs = SR.next();
                        if(xzGBs.matches(Z_card)){
                            int xzGB = Integer.parseInt(xzGBs);
                            String YcardT = card.getSerPackage().getType();//获取现套餐类型
                            ServicePackage SerPac = cu.SerPack.get(xzGB-1);//获取所选套餐
                            if(card.getMoney() >= SerPac.getPrice()){//判断当前手机卡余额,是否可抵扣要更换套餐的月租
                                card.setSerPackage(SerPac);//更改套餐
                                card.setRealTalkTime((card.getRealTalkTime()<0?0:card.getRealTalkTime()) + card.getSerPackage().getTalkTime());//加入更改套餐的语音时长
                                card.setRealSMSCount((card.getRealSMSCount()<0?0:card.getRealSMSCount()) + card.getSerPackage().getSmsCount());//加入更改套餐的短信条数
                                card.setRealFlow((card.getRealFlow()<0?0:card.getRealFlow()) + card.getSerPackage().getFlow());//加入更改套餐的流量
                                card.setMoney(card.getMoney() - card.getSerPackage().getPrice());//扣除更改套餐的月租
                                System.out.println("更变套餐成功!" + YcardT + " --> " + card.getSerPackage().getType());
                            }else{
                                System.out.println("套餐更变失败!可用余额不足以抵扣月租");
                            }
                        }else{
                            System.out.println("无此套餐!");
                        }
                        xzPD = true;
                        break;
                    case "5":
                        System.out.println("******办理退网******");
                        cu.cards.remove(cardNum);//删除指定手机号与对应手机卡
                        System.out.println("卡号:"+cardNum+"的用户,办理退网成功!\n谢谢使用");
                        xzPD = false;
                        break;
                    default:
                        System.out.println("返回上级菜单...");
                        xzPD = false;
                }
            }while(xzPD);
        }
    }
    
    展开全文
  • Java 实现嗖嗖移动营业大厅。 嗖嗖移动业务大厅,自己写的,不是太完美,Java基础 面向对象 封装继承多态 if条件判断,switch 条件判断,for条件循环,while条件判断, 嗖嗖
  • Java就业指导想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以...

    Java就业指导

    想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内容写到你的简历中,当然更需要的是你在面试的时候向面试官展示这些专业技能。相信此文对正在寻觅Java程序员(Java工程师)职位的freshman以及希望成为中高级Java开发者的junior都会有所帮助。专业技能
    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。
    2.熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组 件以及MVC架构模式进行Java Web项目开发的经验。
    3.对Spring的IoC容器和AOP原理有深入了解,熟练的运用Spring框架管理各种Web组件及其依赖关系,熟练的使用Spring进行事务、日志、安全性等的管理,有使用Spring MVC作为表示层技术以及使用Spring提供的持久化支持进行Web项目开发的经验,熟悉Spring对其他框架的整合。
    4.熟练的使用Hibernate、MyBatis等ORM框架,熟悉Hibernate和MyBatis的核心API,对Hibernate的关联映射、继承映射、组件映射、缓存机制、事务管理以及性能调优等有深入的理解。
    5.熟练的使用HTML、CSS和JavaScript进行Web前端开发,熟悉jQuery和Bootstrap,对Ajax技术在Web项目中的应用有深入理解,有使用前端MVC框架(AngularJS)和JavaScript模板引擎(HandleBars)进行项目开发的经验。
    6.熟悉常用的关系型数据库产品(MySQL、Oracle),熟练的使用SQL和PL/SQL进行数据库编程。
    7.熟悉面向对象的设计原则,对GoF设计模式和企业应用架构模式有深入的了解和实际开发的相关经验,熟练的使用UML进行面向对象的分析和设计,有TDD(测试驱动开发)和DDD(领域驱动设计)的经验。
    8.熟悉Apache、NginX、Tomcat、WildFly、Weblogic等Web服务器和应用服务器的使用,熟悉多种服务器整合、集群和负载均衡的配置。
    9.熟练的使用产品原型工具Axure,熟练的使用设计建模工具PowerDesigner和Enterprise Architect,熟练的使用Java开发环境Eclipse和IntelliJ,熟练的使用前端开发环境WebStorm,熟练的使用软件版本控制工具SVN和Git,熟练的使用项目构建和管理工具Maven和Gradle。
    说明:上面罗列的这些东西并不是每一项你都要烂熟于心,根据企业招聘的具体要求可以做相应的有针对性的准备。我个人觉得前6项应该是最低要求,是作为一个Java开发者必须要具备的专业技能项目经验项目介绍
    本系统是X委托Y开发的用于Z的系统,系统包括A、B、C、D等模块。系统使用了Java企业级开发的开源框架E以及前端技术F。表示层运用了G架构,使用H作为视图I作为控制器并实现了REST风格的请求;业务逻辑层运用了J模式,并通过K实现事务、日志和安全性等功能,通过L实现缓存服务;持久层使用了M封装CRUD操作,底层使用N实现数据存取。整个项目采用了P开发模型。
    说明:上面的描述中,E通常指Spring(Java企业级开发的一站式选择);F最有可能是jQuery库及其插件或者是Bootstrap框架,当然如果要构建单页应用(SPA)最佳的方案是前端MVC框架(如AngularJS)和JavaScript模板引擎(如HandleBars);G显然是MVC(模型-视图-控制),最有可能的实现框架是Spring MVC,除此之外还有Struts 2、JSF以及Apache为JSF提供的MyFaces实现,可以使用JSP作为MVC中的V,也可使用模板引擎(如Freemarker和Velocity)来生成视图,还可以是各种文档或报表(如Excel和PDF等),而Servlet和自定义的控制器是MVC中的C,当然Spring MVC中提供了作为前端控制器的DispatcherServlet;J通常是事务脚本,K应该是AOP(面向切面编程)技术,L目前广泛使用的有memcached和Redis;M的选择方案很多,最有可能的是Hibernate和MyBatis,也可以两种技术同时运用,但通常是将增删改交给Hibernate来处理,而复杂的查询则由MyBatis完成,此外TopLink、jOOQ也是优秀的持久层解决方案;底层的数据存取传统上是使用关系型数据库,可以是MySQL、Oracle、SQLServer、DB2等,随着大数据时代的来临,也可以采用NoSQL(如MongoDB、MemBase、BigTable等)和其他大数据存取方案(如GFS、HDFS等);项目的开发模型P可以是瀑布模型、快速原型模型、增量模型、螺旋模型、喷泉模型、RAD模型等。项目开发流程
    1.可行性分析 >>> 可行性分析报告 / 项目开发计划书
    2.需求分析 >>> 需求规格说明书
    1.OOAD(用例图、时序图、活动图)
    2.界面原型:帮助理解需求、业务层设计时推导事务脚本
    3.设计 >>> 概要设计说明书/详细设计说明书
    1.抽取业务实体(领域对象):类图、E-R图(概念设计阶段)
    2.分层架构:确定各层的技术实现方案(具体到使用的框架、数据库服务器、应用服务器等)。业务层设计:事务脚本模式(事务:用户发送一次请求就是一个事务;脚本:一个方法或一个函数;事务脚本:把一次请求封装为一个方法或一个函数;事务脚本模式:一个事务开始于脚本的打开,终止于脚本的关闭)。业务层涉及的对象本有 三种类型:事务脚本类(封装了业务的流程)、数据访问对象( DAO,封装了持久化操作)、数据传输对象(DTO,封装了失血/贫血领域对象),三者之间的关系是事务脚本类组合(聚合)数据访问对象,这二者都依赖了数据传输对象
    3.正向工程(UML类图生成Java代码)和逆向工程(Java代码生成UML类图)
    4.数据库物理设计(ER图转换成表间关系图、建库和建表、使用工具插入测试数据)
    4.编码
    5.测试 >>> 测试报告 / 缺陷报告
    1.单元测试:对软件中的最小可测试单元进行检查和验证,在Java中是对类中的方法进行测试,可以使用JUnit工具来实施。
    2.集成测试:集成测试也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求组装成为子系统进行测试。
    3.系统测试:将已经确认的软件、硬件、外设、网络等元素结合在一起,进行信息系统的各种组装测试和确认测试,系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不符或与之矛盾的地方,从而提出更加完善的方案。
    4.验收测试:在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
    6.交付和维护 >>> 用户手册 / 操作手册项目管理
    版本控制:CVS/SVN/Git
    自动构建:Ant/Maven/Ivy/Gradle
    持续集成:Hudson/Jenkins系统架构
    负载均衡服务器:F5、A10
    应用服务器:
    HTTP服务器:Apache、NginX(HTTP、反向代理、邮件代理服务器)
    Servlet容器:Tomcat、Resin
    EJB容器:WildFly(JBoss Application Server)、GlassFish、Weblogic、Websphere
    数据库服务器:MySQL、Oracle第三方工具(插件)应用
    图表工具:基于jQuery的图表插件(如jQchart、Flot、Charted等)、Chart.js、Highcharts等。
    报表工具:Pentaho Reporting、iReport、DynamicReports等。
    文档处理:POI、iText等。
    工作流引擎:jBPM、OpenWFE、Snaker、SWAMP等。
    作业调度:Quartz、JobServer、Oddjob等。
    缓存服务:EhCache、memcached、SwarmCache等。
    消息队列:Open-MQ、ZeroMQ等。
    安全框架:Shiro、PicketBox等。
    搜索引擎:IndexTank、Lucene、ElasticSearch等。
    Ajax框架:jQuery、ExtJS、DWR等。
    UI插件:EasyUI、MiniUI等。
    富文本框:UEditor、CKEditor等。面试提问
    项目是为哪个公司开发的?项目的投入是多少?
    有多少人参与了项目开发?整个团队中,测试人员、开发人员、项目经理比例是多少?
    项目开发了多长时间?项目总的代码量有多少?你的代码量有多少?
    项目采用了怎样的开发模型或开发流程?项目的架构是怎样的?项目的技术选型是怎样的?
    你在项目中承担了怎样的职责?是否经常开会或加班?项目完成后有哪些收获或是经验教训?
    项目中最困难的部分是什么?如何解决团队开发时遇到的各种冲突?
    明:对于没有实际项目经验的,可以在前程无忧、智联招聘、拉勾网等网站上搜索招聘Java程序员的公司,找到他们的官方网站了解他们做的项目,查看项目的详细介绍,然后尝试完成其中一部分功能,最好请教一下高人看看自己的设计和代码是否恰当,这样相当于积累了一定的项目经验。面试题
    Java常见的面试题已经总结成《Java面试题集》、《Java面试题全集》以及《面试编程题拾遗》其他常见错误
    只在计算机上练习
    不做行为面试题演练
    不做模拟面试训练
    试图死记硬背答案
    不大声说出你的解题思路
    代码不够严谨
    不写测试代码
    轻言放弃面试时可以反问面试官的问题
    我注意到你们使用了X技术,请问你们是如何解决Y问题的?
    为什么你们的产品使用了X技术而不是Y技术?据我所知,X技术虽然有A、B、C等好处,但也存在D和E问题,而Y技术可以解决D和E问题。
    我对您说的X技术不是太熟悉,但我感觉它是一个不错的解决方案,您能多讲讲它的工作原理吗?
    你们团队是如何进行项目规划的?一周会有几次例会?每周的代码量大概是多少?
    就X问题我能想到的解决方案目前就只有Y了,请问您会怎么解决这个问题?录用谈判
    要理直气壮的提出具体的待遇要求
    开出比预期稍高的价码
    不要只盯着薪水(很多公司更愿意就薪水之外的条件做出让步)
    使用最合适的方法(可以尝试在电话或E-mail中谈判待遇)自我评价
    学习能力(搞IT行业的人需要不断的了解新的技术、工具和方法)
    团队意识(相比个人英雄主义,IT行业更倡导团队合作)
    抗压能力(很多IT企业的工作强度相对来说还是比较大的)

    本次课程推荐,黑马程序员免费视频教程,感兴趣的可以在上面找适合自己的教程学习~

    传智播客和黑马程序员全套视频教程免费下载_最热_第1页yun.itheima.com
    86a3e651417a34e05d181af1f9ecd5a1.png
    展开全文
  • 嗖嗖移动业务大厅

    万次阅读 多人点赞 2018-05-02 12:50:36
    import java.util.Scanner; import com.dzl.entityclass.MobileCard; import com.dzl.entityclass.ServicePackage; import com.dzl.utilitys.CardUtil; /** * 业务类 * @author Mr.微笑 * */...
    package com.dzl.biz;
    
    import java.util.Scanner;
    
    import com.dzl.entityclass.MobileCard;
    import com.dzl.entityclass.ServicePackage;
    import com.dzl.utilitys.CardUtil;
    
    /**
     * 业务类
     * @author Mr.微笑
     *
     */
    public class SosoMgr {
    	Scanner input=new Scanner(System.in);
    	//实例化工具类
    	CardUtil cardUtil=new CardUtil();
    	//实例化嗖嗖移动卡类
    	MobileCard mobileCard=new MobileCard();
    	
    	ServicePackage service= null;
    	
    	public static void main(String[] args) {
    		SosoMgr sosoMgr = new SosoMgr();
            sosoMgr.start();
    	}
    	
    	/**
    	 * 主菜单
    	 */
    	public void start() {
    		cardUtil.intitScene();  //调用初始化方法
    		boolean isEsc=true;  //循环操作
    		do {
    		System.out.println("*******************欢迎使用嗖嗖移动业务大厅*******************");
    		System.out.println("1.用户登录  2.用户注册  3.使用嗖嗖  4.话费充值  5.资费说明  6.退出系统");
    		System.out.print("请选择:");
    		int key=1;
    		try {
    			key = input.nextInt();
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			System.out.println("输入有误,请重新输入!");
    		}
    		switch (key) {
    		case 1:
    			cardMenu();
    			continue;
    		case 2:
    			registCard();
    			continue;
    		case 3:
    			System.out.println("执行使用嗖嗖功能");
    			System.out.println("请输入手机卡号:");
    			String number=input.next();
    			cardUtil.userSoso(number); 		//调用使用soso
    			continue;
    		case 4:
    			moneyRecharge();  //调用话费充值
    			continue;
    		case 5:
    			cardUtil.showDescription();
    //			System.out.println("");
    			continue;
    		case 6:
    			System.out.println("谢谢使用!");
    			break;
    		default:
    			System.out.println("输入有误,请重新输入!");
    			continue;
    		}
    	} while (isEsc); //判断是否循环
    }
    	/**
    	 * 话费充值方法
    	 */
    	public void moneyRecharge() {
    		System.out.println("请输入手机卡号:");
    		String strNum=input.next();
    			boolean is=cardUtil.isExistCard(strNum);
    			if (is) {
    			System.out.println("请输入充值余额:");
    			double strMoney=input.nextDouble();
    				cardUtil.chargeMoney(strNum,strMoney);
    				System.out.println("充值成功,当前话费余额为"+CardUtil.cards.get(strNum).getMoney()+"元");
    			}else {
    				System.out.println("手机输入有误,请重新输入手机号:");
    		}
    	}
    	
    	/**
    	 * 二级菜单
    	 */
    	public void cardMenu() {
    		System.out.println("请输入手机卡号:");
    		String numberMoney=input.next();
    		System.out.println("请输入密码:");
    		String pwd=input.next();
    		if (cardUtil.isExistCard(numberMoney,pwd)) {
    			System.out.println("登录成功");
    		}else {
    			return;
    		}
    		boolean isEsc=true;  //循环操作
    		do {
    		System.out.println("******嗖嗖移动用户菜单******");
    		System.out.println("1.本月账单查询");
    		System.out.println("2.套餐余量查询");
    		System.out.println("3.打印消费详单");
    		System.out.println("4.套餐变更");
    		System.out.println("5.办理退网");
    		System.out.print("请选择(输入1~5选择功能,其他键返回上一级):");
    		int key=1;
    		try {
    			key = input.nextInt();
    		} catch (Exception e) {
    			new	SosoMgr().start();
    		}
    		switch (key) {
    		case 1:
    			cardUtil.showAmountDetail(numberMoney);  //调用本月账单查询
    			continue;
    		case 2:
    			cardUtil.showRemainDetail(numberMoney);  //调用套餐余量查询
    			continue;
    		case 3:
    			cardUtil.printAmountDetail(numberMoney); //调用打印消费详单
    			continue;
    		case 4:
    			cardUtil.chargeingPack(numberMoney);
    			continue;
    		case 5:
    			cardUtil.delCard(numberMoney);		//办理退网
    			continue;
    		default:
    			isEsc = false;
    			new SosoMgr().start();
    			}
    		} while (isEsc); // 判断是否循环
    	}
    
    	/**
    	 * 用户注册流程
    	 */
    	public void registCard() {
    		System.out.println("************可选择的卡号************");
    		//通过超级循环遍历输出卡号
    		String[] cardNumbers = cardUtil.getNewNumber(9);
    		for (int i = 0; i <cardNumbers.length; i++) {
    			System.out.print((i+1)+":"+cardNumbers[i]+"\t");
    			if (2==i ||5==i||8==i) {
    				System.out.println();
    			}
    		}
    		System.out.println("请选择卡号(输入1~9的序号):");
    		int key = input.nextInt();
    		
    		if (key >= 1 && key <= 9) {
    			mobileCard.setCardNumber(cardNumbers[key - 1]);
    			System.out.println("1.话唠套餐  2.网虫套餐  3.超人套餐 , 请选择套餐(输入序号):");
    		} else {
    			System.out.print("输入错误!请输入(1~9)的整数:");
    		}
    		
    		boolean bol = true;
    	
    		int packageNum = input.nextInt();
    		while (bol) {
    			if (packageNum<=3 && packageNum>=1) {
    				service= cardUtil.createPackage(packageNum);
    				  mobileCard.setSerPackage(service);  //
    	            bol = false;
    			} else {
    				System.out.println("输入错误,请重新选择:");
    				packageNum = input.nextInt();
    			}
    		}
    		
            System.out.println("请输入姓名:");
            String userName =  input.next();
            System.out.println("请输入密码:");
            String passWord = input.next();
            System.out.println("请输入预存话费:");
            double money=input.nextInt();
            while (money<service.getPrice()) {
    			System.out.println("您预存话费金额不足以支付本月固定套餐资费,请重新充值:");
    			money=input.nextInt();
           }
            //当前输入的余额减去月租
            mobileCard.setMoney(money-service.getPrice());
            //注册新用户添加到集合
            MobileCard card=new MobileCard(mobileCard.getCardNumber(), userName, passWord,mobileCard.getSerPackage(),mobileCard.getMoney()); 
            cardUtil.addCard(card);
            card.showMeg();
    	}
    }
    

    package com.dzl.common;
    
    import java.text.DecimalFormat;
    
    /**
     * 公共类
     * @author Mr.微笑
     *
     */
    public class Common {
    	/**
    	 * double类型格式化方法
    	 * @param data
    	 * @return
    	 */
    	public static String dataFormat(double data) {
    		DecimalFormat format=new DecimalFormat("#0.00");
    		return format.format(data);
    	}
    	/**
    	 * 类型两数相减
    	 * @param sum1
    	 * @param sum2
    	 * @return
    	 */
    	public static double sub(double sum1, double sum2) {
    		return (sum1*10-sum2*10)/10;
    	}
    
    }
    

    package com.dzl.entityclass;
    /**
     * 实体:消费信息类
     * @author Mr.微笑 
     * 
     */
    public class ConsumInfo {
    	//卡号
    	private String number;
    	//消费类型
    	private String type;
    	//短信条数 上网(MB)
    	private int consumData;
    	
    	public String getNumber() {
    		return number;
    	}
    	public void setNumber(String number) {
    		this.number = number;
    	}
    	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 ConsumInfo(String number, String type, int note) {
    		this.number = number;
    		this.type = type;
    		this.consumData = note;
    	}
    	
    }
    

    package com.dzl.entityclass;
    /**
     * 实体:嗖嗖移动卡类
     * @author Mr.微笑 
     * 
     */
    public class MobileCard {
    	// 卡号
    	private String cardNumber;
    	// 用户名
    	private String userName;
    	//密码
    	private String passWord;
    	//所属套餐
    	private ServicePackage serPackage;
    	//当月消费金额
    	private double consumAmout;
    	//账户余额
    	private double money;
    	//当月实际通话时长
    	private int realTakTime;
    	//当月实际发送短信条数
    	private int realSMSCount;
    	//当月实际上网流量
    	private int realFlow;
     
    	public MobileCard(){}
    	/**
    	 * 有参构造
    	 * @param cardNumber  卡号
    	 * @param userName	  名字
    	 * @param passWord	密码	
    	 * @param serPackage	所属套餐
    	 * @param consumAmout	当月消费金额
    	 */
    	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;
    	}
    	/**
    	 *  初始化用户信息
    	 * @param cardNumber  卡号
    	 * @param userName	  名字
    	 * @param passWord	密码	
    	 * @param serPackage	所属套餐
    	 * @param consumAmout	当月消费金额
    	 * @param money 	账户余额
    	 * @param realTakTime	当月实际通话时长
    	 * @param realSMSCount	当月实际发送短信条数
    	 * @param realFlow	当月实际上网流量
    	 */
    	public MobileCard(String cardNumber, String userName, String passWord, ServicePackage serPackage,
    			double consumAmout, double money, int realTakTime, int realSMSCount, int realFlow) {
    		
    		this.cardNumber = cardNumber;
    		this.userName = userName;
    		this.passWord = passWord;
    		this.serPackage = serPackage;
    		this.consumAmout = consumAmout;
    		this.money = money;
    		this.realTakTime = realTakTime;
    		this.realSMSCount = realSMSCount;
    		this.realFlow = realFlow;
    	}
    	/**
    	 * 卡号
    	 * @return
    	 */
    	public String getCardNumber() {
    		return cardNumber;
    	}
    	/**
    	 * 卡号
    	 * @return
    	 */
    	public void setCardNumber(String cardNumber) {
    		this.cardNumber = cardNumber;
    	}
    	/**
    	 * 用户名
    	 * @return
    	 */
    	public String getUserName() {
    		return userName;
    	}
    	/**
    	 * 用户名
    	 * @return
    	 */
    	public void setUserName(String userName) {
    		this.userName = userName;
    	}
    	/**
    	 * 密码
    	 * @return
    	 */
    	public String getPassWord() {
    		return passWord;
    	}
    	/**
    	 * 密码
    	 * @return
    	 */
    	public void setPassWord(String passWord) {
    		this.passWord = passWord;
    	}
    	/**
    	 * 所属套餐
    	 * @return
    	 */
    	public ServicePackage getSerPackage() {
    		return serPackage;
    	}
    	/**
    	 * 所属套餐
    	 * @return
    	 */
    	public void setSerPackage(ServicePackage serPackage) {
    		this.serPackage = serPackage;
    	}
    	/**
    	 * 当月消费金额
    	 * @return
    	 */
    	public double getConsumAmout() {
    		return consumAmout;
    	}
    	/**
    	 * 当月消费金额
    	 * @return
    	 */
    	public void setConsumAmout(double consumAmout) {
    		this.consumAmout = consumAmout;
    	}
    	/**
    	 * 账户余额
    	 * @return
    	 */
    	public double getMoney() {
    		return money;
    	}
    	/**
    	 * 账户余额
    	 * @return
    	 */
    	public void setMoney(double money) {
    		this.money = money;
    	}
    	/**
    	 * 当月实际通话时长
    	 * @return
    	 */
    	public int getRealTakTime() {
    		return realTakTime;
    	}
    	/**
    	 * 当月实际通话时长
    	 * @return
    	 */
    	public void setRealTakTime(int realTakTime) {
    		this.realTakTime = realTakTime;
    	}
    	/**
    	 * 当月实际发送短信条数
    	 * @return
    	 */
    	public int getRealSMSCount() {
    		return realSMSCount;
    	}
    	/**
    	 * 当月实际发送短信条数
    	 * @return
    	 */
    	public void setRealSMSCount(int realSMSCount) {
    		this.realSMSCount = realSMSCount;
    	}
    	/**
    	 * 当月实际上网流量
    	 * @return
    	 */
    	public int getRealFlow() {
    		return realFlow;
    	}
    	/**
    	 * 当月实际上网流量
    	 * @param realFlow 上网流量
    	 */
    	public void setRealFlow(int realFlow) {
    		this.realFlow = realFlow;
    	}
    	/**
    	 * 嗖嗖移动卡信息
    	 */
    	public void showMeg() {
    		 System.out.println("卡号:"+this.getCardNumber()+"用户名:"+this.getUserName()+"当前余额:"+this.getMoney()+"元");
    		 this.serPackage.showInfo();
    	}
    }
    

    package com.dzl.entityclass;
    
    import com.dzl.interfaces.NetService;
    
    /**
     * 实体:网虫套餐类
     * @author Mr.微笑 
     * 
     */
    public class NetPackage extends ServicePackage implements NetService {
    	/**
    	 * 上网流量
    	 */
    	private int flow;
    	/**
    	 * 套餐月资费
    	 */
    	private double price;
    	/**
    	 * 无参构造  初始化
    	 */
    	public NetPackage() {
    		this.flow =3;
    		this.price = 68;
    	}
    	/**
    	 * 上网流量
    	 */
    	public int getFlow() {
    		return flow;
    	}
    	/**
    	 * 上网流量
    	 */
    	public void setFlow(int flow) {
    		this.flow = flow;
    	}
    	/**
    	 * 套餐月资费
    	 */
    	public double getPrice() {
    		return price;
    	}
    	/**
    	 * 套餐月资费
    	 */
    	public void setPrice(double price) {
    		this.price = price;
    	}
    	/**
    	 * 重写父类方法
    	 */
    	public void showInfo() {
    		System.out.println("网虫套餐:上网流量为:" + this.getFlow()
    				+ "GB/月," + "资费为:" + this.getPrice() + "元/月");
    	}
    	/**
    	 * @throws Exception 
    	 * 
    	 */
    	public int netPlay(int flow, MobileCard card) throws Exception {
    		int temp = flow;
            for(int i = 0; i < flow; i++){
                if(this.flow - card.getRealFlow() >= 1){
                    //第一种情况:流量剩余够 1 MB
                    card.setRealFlow(card.getRealFlow() + 1);
                }else if(card.getMoney() >= 0.1){
                    //第二种情况:套餐内流量已经用完,剩下话费够支付 1 MB的流量
                    card.setRealFlow(card.getRealFlow() + 1); //实际短信数加 1 条
                    //账户余额消费0.1元,(1MB流量)
                    card.setMoney(card.getMoney() - 0.1);
                    card.setConsumAmout(card.getConsumAmout() + 0.1);  //当月消费金额 + 0.1
                }else{
                    temp = i; //记录使用流量多少MB
                    throw new Exception("流量已经使用" + i + "MB,您的余额不足,请充值后再使用!");
                    //System.err.println("流量已经使用" + i + "MB,您的余额不足,请充值后再使用!");
                }
            }
            return temp;
    	}
    }
    

    package com.dzl.entityclass;
    /**
     * 实体:使用场景类
     * @author Mr.微笑 
     * 
     */
    public class Scene {
    	private String type; //场景类型
        private int data; //场景消费数据
        private String description; //场景描述
        public Scene() {
            super(); 
        }
        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;
        }
    
    }
    

    package com.dzl.entityclass;
    /**
     * 实体父类:品牌套餐类
     * @author Mr.微笑 
     * 
     */
    public abstract class ServicePackage {
    	//月资费
    	private double price;
    	/**
    	 * 月资费
    	 * @return 月资费
    	 */
    	public double getPrice() {
    		return price;
    	}
    	/**
    	 * 月资费
    	 * @param price 月资费
    	 */
    	public void setPrice(double price) {
    		this.price = price;
    	}
    	public abstract void showInfo();
    	
    }
    

    package com.dzl.entityclass;
    
    import com.dzl.interfaces.CallService;
    import com.dzl.interfaces.NetService;
    import com.dzl.interfaces.SendService;
    
    /**
     * 实体:超人套餐类
     * @author Mr.微笑 
     * 
     */
    public class SuperPackage extends ServicePackage implements CallService,SendService,NetService{
    	//通话时长
    	private int talkTime;
    	//短信条数
    	private int smsCount;
    	//上网流量
    	private int flow;
    	//套餐月资费
    	private double price;
    	
    	public SuperPackage() {
    		this.talkTime = 200;
    		this.smsCount = 50;
    		this.flow = 1;
    		this.price=78;
    	}
    	/**
    	 * 通话时长
    	 * @return
    	 */
    	public int getTalkTime() {
    		return talkTime;
    	}
    	/**
    	 * 通话时长
    	 * @return
    	 */
    	public void setTalkTime(int talkTime) {
    		this.talkTime = talkTime;
    	}
    	/**
    	 * 短信条数
    	 * @return
    	 */
    	public int getSmsCount() {
    		return smsCount;
    	}
    	/**
    	 * 短信条数
    	 * @return
    	 */
    	public void setSmsCount(int smsCount) {
    		this.smsCount = smsCount;
    	}
    	/**
    	 * 上网流量
    	 * @return
    	 */
    	public int getFlow() {
    		return flow;
    	}
    	/**
    	 * 上网流量
    	 * @return
    	 */
    	public void setFlow(int flow) {
    		this.flow = flow;
    	}
    	/**
    	 * 套餐月资费
    	 * @return
    	 */
    	public double getPrice() {
    		return price;
    	}
    	/**
    	 * 套餐月资费
    	 * @return
    	 */
    	public void setPrice(double price) {
    		this.price = price;
    	}
    	/**
    	 * 输出超人套餐信息
    	 */
    	public void showInfo() {
    		System.out.println("超人套餐:通话时长为"+this.getTalkTime()+"分钟/月,"
    				+ "短信条数为"+this.getSmsCount()+"条/月,上网流量为"
    				+this.getFlow()+"GB/月,资费"+this.getPrice()+"/月。");
    	}
    	
    	@Override
        //返回通话时长
        public int call(int minCount, MobileCard card) throws Exception{
            int temp = minCount;
            for(int i = 0; i < minCount; i++){
                if(this.talkTime - card.getRealTakTime() >= 1){
                    //第一种情况:套餐剩余通话时长可以支持1分钟通话
                    card.setRealTakTime(card.getRealTakTime() + 1);
                }else if(card.getMoney() >= 0.2){
                    //第二种情况:套餐通话时长已用完,账户余额可以支付1分钟通话,使用账户余额支付
                    card.setRealTakTime(card.getRealTakTime() + 1); //实际使用通话时长1分钟
                    //账户余额消费0.2元(1分钟 额外通话)
                    card.setMoney(card.getMoney() - 0.2);
                    card.setConsumAmout(card.getConsumAmout() + 0.2);  //当月消费金额 + 0.2
                }else{
                    temp = i; //记录实际通话分钟数
                    throw new Exception("本次已经通话" + i + "分钟,您的余额不足,请充值后再使用!");
                    //System.err.println("本次已经通话" + i + "分钟,您的余额不足,请充值后再使用!");
                }
            }
            return temp;
        }
    
        @Override
        //返回使用流量数
        public int netPlay(int flow, MobileCard card) throws Exception {
            int temp = flow;
            for(int i = 0; i < flow; i++){
                if(this.flow - card.getRealFlow() >= 1){
                    //第一种情况:流量剩余够 1 MB
                    card.setRealFlow(card.getRealFlow() + 1);
                }else if(card.getMoney() >= 0.1){
                    //第二种情况:套餐内流量已经用完,剩下话费够支付 1 MB的流量
                    card.setRealFlow(card.getRealFlow() + 1); //实际短信数加 1 条
                    //账户余额消费0.1元,(1MB流量)
                    card.setMoney(card.getMoney() - 0.1);
                    card.setConsumAmout(card.getConsumAmout() + 0.1);  //当月消费金额 + 0.1
                }else{
                    temp = i; //记录使用流量多少MB
                    throw new Exception("流量已经使用" + i + "MB,您的余额不足,请充值后再使用!");
                }
            }
            return temp;
        }
    
        @Override
        //返回实际发送短信条数
        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){
                    //第一种情况:套餐剩余短信数能够发送一个短信
                    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.setConsumAmout(card.getConsumAmout() + 0.1);  //当月消费金额 + 0.1
                }else{
                    temp = i; //记录发短信条数
                    throw new Exception("短信已经发送" + i + "条,您的余额不足,请充值后再使用!");
                }
            }
            return temp;
        }
    }
    

    package com.dzl.entityclass;
    
    import com.dzl.common.Common;
    import com.dzl.interfaces.CallService;
    import com.dzl.interfaces.SendService;
    
    /**
     * 实体:话唠套餐类
     * @author Mr.微笑 
     * 
     */
    public class TalkPackage extends ServicePackage implements CallService,SendService {
    	//通话时长
    	private int talkTime;
    	//短信条数
    	private int smsCount;
    	//套餐月资费
    	private double price;
    	
    	public TalkPackage() {
    		this.talkTime = 500;
    		this.smsCount = 30;
    		this.price=58;
    	}
    	/**
    	 * 通话时长
    	 * @return
    	 */
    	public int getTalkTime() {
    		return talkTime;
    	}
    	/**
    	 * 通话时长
    	 * @return
    	 */
    	public void setTalkTime(int talkTime) {
    		this.talkTime = talkTime;
    	}
    	/**
    	 * 短信条数
    	 * @return
    	 */
    	public int getSmsCount() {
    		return smsCount;
    	}
    	/**
    	 * 短信条数
    	 * @return
    	 */
    	public void setSmsCount(int smsCount) {
    		this.smsCount = smsCount;
    	}
    	/**
    	 * 套餐月资费
    	 * @return
    	 */
    	public double getPrice() {
    		return price;
    	}
    	/**
    	 * 套餐月资费
    	 * @return
    	 */
    	public void setPrice(double price) {
    		this.price = price;
    	}
    	/**
    	 * 输出话唠套餐信息
    	 */
    	public void showInfo() {
    		System.out.println("话唠套餐:通话时长为:" + this.getTalkTime() + "分钟/月,短信条数为:" 
    				+ this.getSmsCount() + "条/月,资费为:"
    				+ this.getPrice() + "元/月" );
    	}
    	
    	@Override
    	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){
                     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.setConsumAmout(card.getConsumAmout() + 0.1);  //当月消费金额 + 0.1
                 }else{
                     temp = i; //记录发短信条数
                     throw new Exception("短信已经发送" + i + "条,您的余额不足,请充值后再使用!");
                     //System.err.println("短信已经发送" + i + "条,您的余额不足,请充值后再使用!");
                 }
             }
             return temp;
    	}
    	@Override
    	public int call(int minCount, MobileCard card) throws Exception{
    		int temp=minCount;
    		for (int i = 0; i < minCount; i++) {
    			if (this.talkTime-card.getRealTakTime()>=1) {
    				card.setRealTakTime(card.getRealTakTime()+1);  //实际通话数据加1
    			}else if (card.getMoney()>=0.2) {
    				card.setRealTakTime(card.getRealTakTime()+1); // 实际通话时长1分钟
    				//账户余额消费0.2元(1分钟 额外通话)
    				card.setMoney(Common.sub(card.getMoney(),0.2));
    				card.setConsumAmout(card.getConsumAmout()+0.2);
    			}else {
    				temp=i;
    				throw new Exception("本次通话"+i+"分钟,您的余额不足,请充值后再使用!");
    			}
    		}
    		return temp;
    	}
    }
    

     package com.dzl.interfaces;
    
    import com.dzl.entityclass.MobileCard;
    
    /**
     * 服务接口
     * @author Mr.微笑
     *
     */
    public interface CallService {
    	/**
    	 * 通话
    	 * @param minCount
    	 * @param card
    	 * @return
    	 * @throws Exception 
    	 */
    	public	int call(int minCount,MobileCard card) throws Exception;
    }
    

    package com.dzl.interfaces;
    
    import com.dzl.entityclass.MobileCard;
    
    /**
     * 网络服务接口
     * @author Mr.微笑
     *
     */
    public interface NetService {
    	/**
    	 * 上网
    	 * @param flow
    	 * @param card
    	 * @return
    	 * @throws Exception 
    	 */
    	public int netPlay(int flow,MobileCard card) throws Exception;
    }
    

    package com.dzl.interfaces;
    
    import com.dzl.entityclass.MobileCard;
    
    /**
     * 发送服务接口
     * @author Mr.微笑
     *
     */
    public interface SendService {
    	/**
    	 * 短信
    	 * @param count
    	 * @param card
    	 * @return
    	 * @throws Exception 
    	 */
    	public int send(int count,MobileCard card) throws Exception;
    }
    

    package com.dzl.utilitys;
    
    import java.awt.SystemTray;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.Writer;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.Set;
    
    import com.dzl.common.Common;
    import com.dzl.entityclass.ConsumInfo;
    import com.dzl.entityclass.MobileCard;
    import com.dzl.entityclass.NetPackage;
    import com.dzl.entityclass.Scene;
    import com.dzl.entityclass.ServicePackage;
    import com.dzl.entityclass.SuperPackage;
    import com.dzl.entityclass.TalkPackage;
    import com.dzl.interfaces.CallService;
    import com.dzl.interfaces.SendService;
    
    /**
     * 工具类
     * 
     * @author Mr.微笑
     *
     */
    public class CardUtil {
    	Scanner input=new Scanner(System.in);
    	// 已注册嗖嗖移动用户列表
    	public static Map<String, MobileCard> cards = new HashMap<String, MobileCard>();
    	// 所有卡号的消费记录列表
    	public static Map<String, List<ConsumInfo>> consumInfos = new HashMap<String, List<ConsumInfo>>();
    	//使用场景列表
    	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 intitScene() {
    		MobileCard hl=new MobileCard("15815891967", "微笑", "123456", new TalkPackage(), 88, 100, 89, 88, 90); //话唠套餐
    		MobileCard wc=new MobileCard("12345678910", "微笑", "123456", new NetPackage(),99, 200, 200, 60, 20); //网虫套餐
    		MobileCard cr=new MobileCard("13812345678", "微笑", "123456", new SuperPackage(), 100, 300, 50, 20, 900); //超人套餐
    		
    		CardUtil.cards.put("15815891967", hl);  //添加到集合里
    		CardUtil.cards.put("12345678910", wc);  //添加到集合里
    		CardUtil.cards.put("13812345678", cr);  //添加到集合里
    		
    		ConsumInfo info=new ConsumInfo("12345678910", "电话", 500);
    		
    		List<ConsumInfo> list=new ArrayList<ConsumInfo>();
    		list.add(info);
    		consumInfos.put(info.getNumber(), list);
    		
    	}
    	
    	
    	
    	
    	/**
    	 * 注册新卡
    	 * 
    	 * @param card
    	 */
    	public void addCard(MobileCard card) {
    		cards.put(card.getCardNumber(), card);
    	}
    
    	/**
    	 * 话费充值
    	 * 
    	 * @param number
    	 * @param money
    	 */
    	public void chargeMoney(String number, double money) {
    		cards.get(number).setMoney(cards.get(number).getMoney()+money);
    	}
    
    	/**
    	 * 使用搜搜
    	 * 
    	 * @param number
    	 */
    	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=0;
    		int temp=0;	//记录个场景中实际消费
    		do {
    			ranNum=random.nextInt(6);
    			Scene scene=scenes.get(ranNum); //获取该序号所对应的场景
    			switch (ranNum) {
    			case 0:
    			case 1:
    				//序号为0或1为通话场景
    				//判断该卡所属套餐是否支持通话功能
    				if (pack instanceof CallService) {
    					//执行通话方法
    					System.out.println(scene.getDescription());
    					CallService callService=(CallService)pack;
    					try {
    						temp=callService.call(scene.getData(), card);
    					} catch (Exception e) {
    						e.printStackTrace();
    					}
    					//添加一条消费记录
    					addConsumInfo(number, new ConsumInfo(number, scene.getType(), temp));
    					break;
    				}else {
    					//如果该卡套餐不支持通话功能,则重新生成随机数选择其他场景
    					continue;
    				}
    			case 2:
    			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) {
    						e.printStackTrace();
    					}
    					//添加一条消费记录
    					addConsumInfo(number, new ConsumInfo(number, scene.getType(), temp));
    					break;
    				}else {
    					//如果该卡套餐不支持通话功能,则重新生成随机数选择其他场景
    					continue;
    				}
    			case 4:
    			case 5:
    				//判断该卡所属套餐是否支持上网功能
    				if (pack instanceof NetPackage) {
    					//执行上网方法
    					System.out.println(scene.getDescription());
    					NetPackage netPackage=(NetPackage)pack;
    					try {
    						temp=netPackage.netPlay(scene.getData(), card);
    					} catch (Exception e) {
    						e.printStackTrace();
    					}
    					//添加一条消费记录
    					addConsumInfo(number, new ConsumInfo(number, scene.getType(), temp));
    					break;
    				}else {
    					//如果该卡套餐不支持通话功能,则重新生成随机数选择其他场景
    					continue;
    				}
    			}
    			break;
    		} while (true);
    		
    	}
    
    	/**
    	 * 资费说明
    	 */
    	public void showDescription() {
    		 	FileReader fr = null;
    	        BufferedReader br = null;
    	        try {
    	            //创建一个FileReader对象
    	            fr = new FileReader("D:/MyFile/MyMobileBusinessLobby/src/com/file_txt/套餐资费说明.txt");
    	            //创建一个BufferedReader对象
    	            br = new BufferedReader(fr);
    	            //读取一行数据
    	            String line = null;
    	            while((line = br.readLine()) != null){
    	                System.out.println(line);
    	            }
    	        } catch (FileNotFoundException e) {
    	            // TODO Auto-generated catch block
    	            e.printStackTrace();
    	        } catch (IOException e) {
    	            // TODO Auto-generated catch block
    	            e.printStackTrace();
    	        }finally{
    	            try {
    	                if(br != null){
    	                    br.close();
    	                }
    	                if(fr != null){
    	                    fr.close();
    	                }
    	            } catch (IOException e) {
    	                // TODO Auto-generated catch block
    	                e.printStackTrace();
    	            }
    	        }
    	}
    
    	/**
    	 * 本月账单查询
    	 * 
    	 * @param number
    	 */
    	public void showAmountDetail(String number) {
    		StringBuffer meg = new StringBuffer();
    		MobileCard card=cards.get(number);	//要查询的卡
    		meg.append("您的卡号:"+card.getCardNumber()+"当月账单:\n");
    		meg.append("套餐资费:"+card.getSerPackage().getPrice()+"元\n");
    		meg.append("合计:"+Common.dataFormat(card.getConsumAmout())+"元\n");
    		meg.append("账号余额:"+Common.dataFormat(card.getMoney())+"元");
    		//显示本月消费详细信息
    		System.out.println(meg);
    	}
    
    	/**
    	 * 套餐余量查询
    	 * 
    	 * @param number
    	 */
    	public void showRemainDetail(String number) {
    		MobileCard card=cards.get(number);
    		int remainTalkTime;
    		int remainSmsCount;
    		double remainFlow;
    		StringBuffer meg=new StringBuffer();
    		meg.append("您的卡号是"+number+",套餐内剩余:\n");
    		ServicePackage pack=card.getSerPackage();
    		if (pack instanceof TalkPackage) {
    			//向下转型为话唠套餐对象
    			TalkPackage cardPack=(TalkPackage)pack;
    			//话唠套餐,查询套餐内剩余的通话时长和短信条数
    			remainTalkTime=cardPack.getTalkTime()>card.getRealTakTime()?cardPack.getTalkTime()
    					-card.getRealTakTime():0;
    			meg.append("通话时长:"+remainTalkTime+"分钟\n");
    			remainSmsCount=cardPack.getSmsCount()>card.getRealSMSCount()?cardPack.getSmsCount()
    					-card.getRealSMSCount():0;
    			meg.append("短信条数:"+remainSmsCount+"条");
    		}else if (pack instanceof NetPackage) {
    			//向下转型为网虫套餐的信息
    			NetPackage netPackage=(NetPackage)pack;
    			remainFlow=netPackage.getFlow()*1024>card.getRealFlow()?netPackage.getFlow()*1024
    					-card.getRealFlow():0;
    			meg.append("上网流量:"+Common.dataFormat(remainFlow/1024)+"GB");
    		}else {
    			SuperPackage superPackage=(SuperPackage)pack;
    			remainTalkTime=superPackage.getTalkTime()>card.getRealTakTime()?superPackage.getTalkTime()
    					-card.getRealTakTime():0;
    			meg.append("通话时长:"+remainTalkTime+"分钟\n");
    			remainSmsCount=superPackage.getSmsCount()>card.getRealSMSCount()?superPackage.getSmsCount()
    					-card.getRealSMSCount():0;
    			meg.append("短信条数:"+remainSmsCount+"条");
    			remainFlow=superPackage.getFlow()*1024>card.getRealFlow()?superPackage.getFlow()*1024
    					-card.getRealFlow():0;
    			meg.append("上网流量:"+Common.dataFormat(remainFlow/1024)+"GB");
    		} 
    		System.out.println(meg);
    	}
    
    	/**
         * 打印消费详单
         * @param number
         */
        public void printAmountDetail(String number){   
            Writer fileWriter = null;
            try {
                fileWriter = new FileWriter("D:/MyFile/MyMobileBusinessLobby/src/com/file_txt/consumes.txt");
                Set<String> numbers = consumInfos.keySet();
                Iterator<String> it = numbers.iterator();
                List<ConsumInfo> infos = new ArrayList<ConsumInfo>();
                infos = consumInfos.get(number);
                //存储指定卡的所有消费记录
                //现有消费列表中是否存在此卡号的消费记录,是:true 否:false
                boolean isExist = false;
                while(it.hasNext()){
                    String numberKey = it.next();
                    if(number.equals(numberKey)){
                        isExist = true;
                    }/*else{   //如果
                        isExist = false;
                    }*/
                    
                }
                
                if(isExist){
                    StringBuffer content = new StringBuffer("***********" + number + "消费记录************\n");
                    content.append("序号\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");
                        content.append((i + 1) + ".\t" + info.getType() + "\t" + info.getConsumData() + "\n");
                    }
                    fileWriter.write(content.toString());
                    fileWriter.flush();
                    System.out.println("消息记录打印完毕!");
                }else{
                    System.out.println("对不起,不存在此号码的消费记录,不能够打印!");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                try {
                    fileWriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    
    	/**
    	 * 套餐变更
    	 * 
    	 * @param number
    	 */
    	public void chargeingPack(String number) {
    		System.out.println("1.话唠套餐 2.网虫套餐 3.超人套餐 :请选择(序号):");
            int packNum = input.nextInt();
            switch(packNum){
            case 1:  //选择变更的套餐为话唠套餐
                if(cards.get(number).getSerPackage() instanceof TalkPackage){
                    System.out.println("对不起,您已经是该套餐用户,无需换套餐!");
                }else{
                    if(cards.get(number).getMoney() < cards.get(number).getSerPackage().getPrice()){//如果剩余费用不够支持新的套餐费用
                        System.out.println("对不起,您的的余额不足以支付新的套餐本月资费,请充值后再办理业务!");
                    }else{
                        cards.get(number).setRealSMSCount(0);
                        cards.get(number).setRealTakTime(0);
                        cards.get(number).setRealFlow(0);
                        cards.get(number).setSerPackage(createPackage(packNum));
                        System.out.println("套餐更换成功!" );
    //                    Common.talkPackage.showInfo();
                        createPackage(packNum).showInfo();
                    }
                }
                break;
            case 2: //选择变更的套餐为网虫套餐
                if(cards.get(number).getSerPackage() instanceof NetPackage){
                    System.out.println("对不起,您已经是该套餐用户,无需换套餐!");
                }else{
                    if(cards.get(number).getMoney() < cards.get(number).getSerPackage().getPrice()){//如果剩余费用不够支持新的套餐费用
                        System.out.println("对不起,您的的余额不足以支付新的套餐本月资费,请充值后再办理业务!");
                    }else{
                        cards.get(number).setRealSMSCount(0);
                        cards.get(number).setRealTakTime(0);
                        cards.get(number).setRealFlow(0);
                        cards.get(number).setSerPackage(createPackage(packNum));
                        System.out.println("套餐更换成功!" );
    //                    Common.netPackage.showInfo();
                        createPackage(packNum).showInfo();
                    }
                }
                break;
            case 3://选择变更的套餐为超人套餐
                if(cards.get(number).getSerPackage() instanceof SuperPackage){
                    System.out.println("对不起,您已经是该套餐用户,无需换套餐!");
                }else{
                    if(cards.get(number).getMoney() < cards.get(number).getSerPackage().getPrice()){//如果剩余费用不够支持新的套餐费用
                        System.out.println("对不起,您的的余额不足以支付新的套餐本月资费,请充值后再办理业务!");
                    }else{
                        cards.get(number).setRealSMSCount(0);
                        cards.get(number).setRealTakTime(0);
                        cards.get(number).setRealFlow(0);
                        cards.get(number).setSerPackage(createPackage(packNum));
                        System.out.println("套餐更换成功!" );
    //                    Common.superPackage.showInfo();
                        createPackage(packNum).showInfo();
                    }
                }
                break;
            }
    	}
    
    	/**
    	 * 办理退网
    	 * 
    	 * @param number
    	 */
    	public void delCard(String number) {
    		if (cards.containsKey(number)) {
    			cards.remove(number); //移除手机号
    			System.out.println("卡号:"+number+"办理退网成功!");
    			System.out.println("谢谢使用!");
    		}else {
    			System.out.println("手机号码输入有误!");
    		}
    	}
    
    	/**
    	 * 根据卡号和密码验证该卡是否验证
    	 * 
    	 * @param number
    	 * @param pwd
    	 * @return
    	 */
    	public boolean isExistCard(String number, String pwd) {
    		if (cards.containsKey(number)&&(cards.get(number).getPassWord().equals(pwd))) {
    				return true;
    		}
    		System.out.println("登录失败!");
    		return false;
    	}
    
    	/**
    	 * 根据卡号验证该卡是否验证  话费充值
    	 * 
    	 * @param number
    	 * @return
    	 */
    	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;
    	}
    
    	/**
    	 * 生成随机卡号
    	 * 
    	 * @return 随机卡号
    	 */
        public String createNumber(){
            Random random = new Random();
            //记录现有用户中是否存在此卡号用户  是:true  否:false
            boolean isExist = false;
            String number = "";
            int temp = 0;
            do{
                isExist = false;//标志位重置为false,用于控制外重循环
                //生成的随机数是8位,不能小于10000000,否则重新生成
                //回头重写这段代码,执行效率太低
                do{
                    temp = random.nextInt(100000000);
                }while(temp < 10000000);
                //生成之前,前面加“139”
                number = "139" + temp;
                //和现有用户的卡号比较,不能是重复的
                if(cards != null){ //价格判断 否则 下方的一句会报空指针异常
                    Set<String> cardNumbers = cards.keySet();
                    for(String cardNumber : cardNumbers){
                        if(number.equals(cardNumber)){
                            isExist = true;
                            break;
                        }
                    }
                }
            }while(isExist);
            return number;
        }
    
    	/**
    	 * 生成指定个数卡号列表
    	 * 
    	 * @param count
    	 * @return
    	 */
    	public String[] getNewNumber(int count) {
    		 String[] strs = new String[count];
    	        for (int i = 0; i < count; i++) {
    	            strs[i] = createNumber();  //通过随机生成给strs[i]赋值
    	        }
    	        return strs ;
    	}
    
    	/**
    	 * 添加指定卡号的消费记录
    	 * 
    	 * @param number
    	 * @param info
    	 */
    	public void addConsumInfo(String number, ConsumInfo info) {
    		if (consumInfos.containsKey(number)) {
    			consumInfos.get(number).add(info);
            }else{
                List<ConsumInfo> list = new ArrayList<ConsumInfo>();
                list.add(info);
                consumInfos.put(number, list);
            }
    	}
    
    	/**
    	 * 根据用户选择的套餐序列返回套餐对象
    	 * 
    	 * @param packId 套餐序列号
    	 * @return
    	 */
    	public ServicePackage createPackage(int packId) {
    		ServicePackage servicePackage=null;
    		switch (packId) {
    		case 1:
    			servicePackage=new TalkPackage();
    			break;
    		case 2:
    			servicePackage=new NetPackage();
    			break;
    		case 3:
    			servicePackage=new SuperPackage();
    			break;
    		default:
    			break;
    		}
    		return servicePackage;
    	}
    }
    

    展开全文
  • 本项目嗖嗖移动移动大厅提供了嗖嗖移动用户的常用功能,包括新用户注册、本月账单查询、套餐余量查询,打印消费详单,套餐变更,办理退网、话费充值、、查看消费记录、查看资费说明。另外,还可以模拟用户通话、上网...
  • 备案内容如下:一、建设:某某市覃怀办事处中州路与曹瑾路交叉路北二、建设主要内容:建设科目一500平米大厅,科目四500平米大厅,科目二800平米场地,科目三900平米场地,休息厅及餐厅1200平米,宿舍2500平米左右...
  • 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西,你可以把这些内容写...
  • 东莞市生态环境局办事大厅(窗口)业务将于2019年10月8日起可在市民服务中心政务大厅预约办理,现将有关事宜公告如下:一、时间2019年10月8日起,在市民服务中心政务大厅可预约以下业务,市民可根据自身情况选择在原...
  • (三)**市服务中心大厅智能化建设,运用当前主流的移动互联及物联网技术,通过智能化设备的集成应用,升级服务中心大厅,完成对服务中心大厅的软硬件升级工作。并与网上政务服务平台无缝对接,实现线上、线下政务服务...
  • 部分服务案例: 5吨轻型汽油环保设备,20吨轻型柴汽混合环保设备,外检设备,业务大厅设备场地设施并防安全设备。项目基本信息项目名称******项目代码******行业类别科学研究和技术服务业-专业技术服务业项目建设...
  • 嗖嗖移动营业大厅

    2018-04-09 21:35:28
    嗖嗖移动业务大厅,自己写的,不是太完美,Java基础 面向对象 封装继承多态 if条件判断,switch 条件判断,for条件循环,while条件判断,
  • 使用this调用成员方法 public void paly(int n){ health=health-n;this.print(); //this可以省略,直接调用print(); }使用this调用重载的构造方法,只能在构造方法中使用,必须是构造方法的第一条语句 public ...
  • 一、语言和环境 A、实现语言 Java B、环境要求 JDK 6.0、MyEclipse7.5、Oracle10g、PL/SQL Developer 二、功能要求 开发基于控制台的留言板系统。具体要求如下: (1)显示留言板系统主菜单,包括显示留言、添加留言和...
  • ACCP6.0使用Java实现面向对象编程-第一章练习——用类图设计Dog和Penguin类 需求说明: 运用面向对象思想抽象出Dog类和Penguin类,画出对应类图 根据类图编写Dog类和Penguin类 添加默认构造方法 完成时间:20分钟 ...
  • 今天给大家一个比较综合的项目:嗖嗖移动业务大厅。项目功能很多,概括的功能也很全面。吃透了这个项目,你的java基础部分已经非常棒了!!!一 、 项目概述技能要求 使用面向对象设计的思想 合理运用异常处理...
  • Java基础 面向对象 封装继承多态 if条件判断,switch 条件判断,for条件循环,while条件判断,
  • 嗖嗖移动项目

    2018-05-28 14:25:16
    JAVA小项目 嗖嗖移动业务大厅

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

java嗖嗖移动业务大厅

java 订阅