第一次写的近千行的代码,记录一下
欢迎大家一起交流学习,
如果有疑惑的话,欢迎私信互相交流!
案例覆盖的技能点
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.2yuancard.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.2yuancard.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 stubObjectInputStream 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 blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally {if (objectInputStream!=null) {try {objectInputStream.close();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.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 blocke.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 blocke.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 blocke.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 blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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 blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.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嗖嗖移动业务大厅相关推荐

  1. 作业~嗖嗖移动业务大厅

    /** 测试类 业务类 @author Chen HuiHong @author 2020年6月6日{time} @Tel 18073799961 */ public class TestSosoMg ...

  2. java项目嗖嗖移动业务大厅项目报告_Java就业指导课程

    Java就业指导 想要成为合格的Java程序员或工程师到底需要具备哪些专业技能,面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东 ...

  3. java项目嗖嗖移动业务大厅项目报告_晋江市撰写节能评估报告的报告机构立项范本-文瑞...

    文瑞承接可行性研究报告.项目建议书.立项报告.资金申请报告.项目申请报告.项目实施方案.节能报告.评估报告.商业计划书.投标书等各类文案以及各行业甲.乙.丙级工程资质.晋江市撰写节能评估报告的报告机构 ...

  4. 使用java实现面向对象编程第十章嗖嗖移动业务大厅项目_ACCP6.0使用Java实现面向对象编程-第一章.ppt...

    ACCP6.0使用Java实现面向对象编程-第一章 练习--用类图设计Dog和Penguin类 需求说明: 运用面向对象思想抽象出Dog类和Penguin类,画出对应类图 根据类图编写Dog类和Pen ...

  5. 使用java实现面向对象编程第十章嗖嗖移动业务大厅项目_ACCP6.0 S2 使用Java实现面向对象编程 第一章...

    使用this调用成员方法 public void paly(int n){ health=health-n; this.print(); //this可以省略,直接调用print(): } 使用thi ...

  6. 嗖嗖移动业务大厅代码_移动云应用性能监控,掌控云时代的多变应用

    引言:据预测,2021年全球应用性能监控市场规模将达到51.63亿美元:中国应用性能监控行业市场规模将扩大至69.63亿元人民币,已经进入高速成长期. 在云时代 智能化使企业的应用管理日渐复杂 丰富的 ...

  7. 嗖嗖移动业务大厅小项目

    package SOSO;/*** CallService** @author yaoxinxin* @version 1.0* @description 打电话接口* @date 2022/9/14 ...

  8. 基于Java的五子棋游戏大厅的设计与实现

    技术:Java等 摘要: 游戏软件是当今世界发展最迅速,最有影响力,最有潜力与活力的领域之一。游戏软件深受广大青年人喜爱,而且在发达国家中老年人也有大部分喜欢游戏的,因此游戏软件在很大程度上给予绝大部 ...

  9. java农产品查询系统_基于java的农产品销售系统的设计与实现论文.docx

    基于java的农产品销售系统的设计与实现论文.docx 分类号_______________ 密级________________ UDC _______________ 学号_毕业设计(论文)论文题 ...

  10. 电子招投标java代码_基于jsp的招投标业务管理-JavaEE实现招投标业务管理 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的招投标业务管理, 该项目可用各类java课程设计大作业中, 招投标业务管理的系统架构分为前后台两部分, 最终实现在 ...

最新文章

  1. 赖江山:生态学研究都在用哪些R包?
  2. Jquery之编辑不可修改
  3. 机器学习算法如何应用于控制_将机器学习算法应用于NBA MVP数据
  4. 电脑软件:推荐5款实用的效率软件,每一款都爱不释手!
  5. laravel 验证用户是否登陆显示不同内容
  6. Errors reported here must be corrected before the service can be started.
  7. QT5::总结篇 QWidget
  8. 谈谈图书馆座位管理系统今日崩溃
  9. 转发电子通信类期刊投稿攻略
  10. class和style绑定
  11. 电视剧的收视排行榜(Python)
  12. fMRI Tutorial:FSL处理功能核磁共振数据
  13. keplergl,一款超炫的地理数据可视化神器!
  14. Typora中(Markdown语法)在符号的上方添加符号或文字
  15. 流量监控服务器应该位置在哪里,搭建cacti流量监控服务器.pdf
  16. ApacheCN 翻译活动进度公告 2019.4.15
  17. Qt+百度API实现人脸对比寻找明星脸
  18. STL 标准模板库详细
  19. 2020年开局流年不利,苏宁的“到家经济”能管用吗?
  20. IPFS 服务的Python API参考

热门文章

  1. LCR电桥测试仪测量原理 | LCR测试仪使用概要
  2. java输出long最大值_Java调用long的最大值和最小值
  3. 一到十二月英文 音标 简写
  4. 计算机软考集成项目管理工程师,计算机软考系统集成项目管理工程师
  5. 营业执照编码验证规则(15位和18位)
  6. java String字符串去除()里的内容
  7. 【Golang】家庭收支记账软件
  8. 计算机网络物理层之宽带接入技术
  9. jvm学习——jvm内存区域
  10. Direct-X学习笔记--三维摄像机