嗖嗖移动业务大厅项目(源码+下载+注释全)

鉴于很多同学找我要源码,特意将源码放在了微信公众号上面,直接就可以下载获取源码,还能获得很多我亲自整理的学习笔记,欢迎关注公众号——苍何之旅,点击下方的菜单栏““嗖嗖源码””
“”

源码下载:点我下载

package info;
/** 消费记录* @author 苍何*/
public class ConsumInfo {public String cardNumber;public String type;//类型(童话、短信、上网)public int consumDate;//当前消费量 public ConsumInfo() {}public ConsumInfo(String cardNumber, String type, int consumDate) {super();this.cardNumber = cardNumber;this.type = type;this.consumDate = consumDate;}
}
`
package info;import myPackage.ServicePackage;/** 卡号类* @author 苍何*/
public class MobileCard {public String cardNumble;//卡号public String uesrName;//姓名public String passWord;//密码public ServicePackage setPackage;//选择的套餐public double consumAmount;//消费金额=套餐费+实际消费金额public double money;//当前余额=充值钱数-consumAmount(消费金额)public int realTalkTime;//通话时长public int realSMSCount;//短信条数public int realFlow;//流量public MobileCard() {}public MobileCard(String cardNumble, String uesrName, String passWord,ServicePackage setPackage, double consumAmount, double money,int realTalkTime, int realSMSCount, int realFlow) {super();this.cardNumble = cardNumble;this.uesrName = uesrName;this.passWord = passWord;this.setPackage = setPackage;this.consumAmount = consumAmount;this.money = money;this.realTalkTime = realTalkTime;this.realSMSCount = realSMSCount;this.realFlow = realFlow;}public void showMeg() {System.out.println("卡号:" + this.cardNumble + "   用户名:" + this.uesrName + "  当前余额:" + this.money+"元");}}         
package info;import java.util.Random;/** 使用场景* @author 苍何*/
public class Scene {public String type;//场景类型public int data;//场景消费数据public String description;//场景描述public Scene() {super();}public Scene(String type, int data, String description) {super();this.type = type;this.data = data;this.description = description;}
}
package myPackage;import info.MobileCard;
import Service.NetSevice;/** 网虫套餐* @author 苍何*/
public class NetPackage extends ServicePackage implements NetSevice {/** 上网流量3GB(3*1024M) * 资费68元*/public int talkTime = 0;public int smsCount = 0;public int flow=3072;public NetPackage() {super();super.price=68;}public NetPackage(int talkTime, int smsCount, int flow) {super();this.talkTime = talkTime;this.smsCount = smsCount;this.flow = flow;}public void showInfo() {System.out.println("网虫套餐:上网流量为3GB/月,资费为68.0元/月。");}@Overridepublic int netPlay(int flow, MobileCard card)throws Exception {int temp=flow;for(int i=0;i<flow;i++){if(this.flow-card.realFlow>=1){card.realFlow++;}else if(card.money>=0.1){card.realFlow++;//账户余额增加0.1元,消费金额也增加0。1card.money-=0.1;card.consumAmount+=0.1;}else{temp=i;throw new Exception("本次上网"+i+"分钟,您的余额不足,请充值后再使用!");}}return temp;}
}
package myPackage;/** 套餐类(父类)* @author 苍何*/
public abstract class ServicePackage {//套餐月资费public double price;//显示套餐信息public abstract void showInfo();
}
package myPackage;import info.MobileCard;
import Service.CallService;
import Service.NetSevice;
import Service.SendService;/** 超人套餐* @author 苍何*/
public class SuperPackage extends ServicePackage implements CallService,SendService,NetSevice{/** 通话时长200分钟* 上网流量1024MB* 短信50条* 资费78元*/public int talkTime=200;public int smsCount=50;public int flow=1024;public SuperPackage(){super();super.price=78;}public SuperPackage(int talkTime, int smsCount, int flow) {super();this.talkTime = talkTime;this.smsCount = smsCount;this.flow = flow;}public void showInfo() {System.out.println("超人套餐:通话时长为200分钟/月,上网流量为1GB/月,短信条数为50条/月,资费为78.0元/月。");}public int send(int count, MobileCard card) throws Exception{int temp=count;for(int i=0;i<count;i++){if(this.smsCount-card.realSMSCount>=1){card.realSMSCount++;}else if(card.money>=0.1){card.realSMSCount++;//账户余额增加0.1元,消费金额也增加0。1card.money-=0.1;card.consumAmount+=0.1;}else{temp=i;throw new Exception("本次发短信"+i+"分钟,您的余额不足,请充值后再使用!");}}return temp;}@Overridepublic int call(int miniCount, MobileCard card) throws Exception {int temp=miniCount;for(int i=0;i<miniCount;i++){if(this.talkTime-card.realTalkTime>=1){card.realTalkTime++;}else if(card.money>=0.2){card.realTalkTime++;//账户余额增加0.2元,消费金额也增加0。2card.money-=0.2;card.consumAmount+=0.2;}else{temp=i;throw new Exception("本次通话"+i+"分钟,您的余额不足,请充值后再使用!");}}return temp;}@Overridepublic int netPlay(int flow, MobileCard card)throws Exception {int temp=flow;for(int i=0;i<flow;i++){if(this.flow-card.realFlow>=1){card.realFlow++;}else if(card.money>=0.1){card.realFlow++;//账户余额增加0.1元,消费金额也增加0。1card.money-=0.1;card.consumAmount+=0.1;}else{temp=i;throw new Exception("本次上网"+i+"分钟,您的余额不足,请充值后再使用!");}}return temp;}}
package myPackage;import info.MobileCard;
import Service.CallService;
import Service.SendService;/** 话唠套餐* @author 苍何*/
public class TalkPackage extends ServicePackage implements CallService,SendService{/** 通话时长500分钟* 短信30条* 资费58*/public int talkTime=500;//通话时长public int smsCount=30;//短信public int flow=0;//上网public TalkPackage() {super();super.price=58;}public TalkPackage(int talkTime, int smsCount, int flow) {super();this.talkTime = talkTime;this.smsCount = smsCount;this.flow = flow;}public void showInfo() {System.out.println("话唠套餐:通话时长为500分钟/月,短信条数为30条/月,资费为58.0元/月。");}public int send(int count, MobileCard card)throws Exception {int temp=count;for(int i=0;i<count;i++){if(this.smsCount-card.realSMSCount>=1){card.realSMSCount++;}else if(card.money>=0.1){card.realSMSCount++;//账户余额增加0.1元,消费金额也增加0。1card.money-=0.1;card.consumAmount+=0.1;}else{temp=i;throw new Exception("本次发短信"+i+"分钟,您的余额不足,请充值后再使用!");}}return temp;}@Overridepublic int call(int miniCount, MobileCard card) throws Exception{int temp=miniCount;for(int i=0;i<miniCount;i++){if(this.talkTime-card.realTalkTime>=1){card.realTalkTime++;}else if(card.money>=0.2){card.realTalkTime++;//账户余额增加0.2元,消费金额也增加0。2card.money-=0.2;card.consumAmount+=0.2;}else{temp=i;throw new Exception("本次通话"+i+"分钟,您的余额不足,请充值后再使用!");}}return temp;}
}
package Service;import info.MobileCard;/** 打电话(接口)* @author 苍何*/
public interface CallService {/*** 套餐内通话免费* 套餐外通话每分钟0.2元* 超出电话余额抛出异常提示余额不足* @param miniCount* @param card* @throws Exception */public  int call(int miniCount,MobileCard card) throws Exception;
}
package Service;import info.MobileCard;/** 上网(接口)* @author 苍何*/
public interface NetSevice {/*** 套餐内上网流量免费* 套餐外每MB0.1元* 余额不足抛出异常提示余额不足* @return * @throws Exception */public int netPlay(int flow,MobileCard card) throws Exception;}
package Service;import info.MobileCard;public interface SendService {/*** 套餐内短信免费* 套餐外短信每条1毛* 余额不足抛出异常* @author 苍何* @return */public  int send(int count,MobileCard card)throws Exception;
}
package start;import java.util.Scanner;/** 管理类* @author 苍何*/
public class Manage {/*** 启动(主菜单)*/public void start(){Scanner input = new Scanner(System.in);Util util = new Util();boolean iscontinue = true;// 是否继续do {System.out.println();System.out.println("*************欢迎使用嗖嗖移动业务大厅***************");System.out.println("1.用户登录   2.用户注册   3.使用嗖嗖   4.话费充值  5.资费说明  6.退出系统");System.out.print("请选择:");int option = input.nextInt();switch (option) {case 1:util.login();break;case 2:util.signIn();break;case 3:util.uesSoso();break;case 4:util.addPayMoney();break;case 5:util.ziFei();break;case 6:System.out.println("欢迎您下次继续使用!");iscontinue=false;break;default:System.out.println("输入有误!请重新输入");break;}} while (iscontinue);}}
package start;public class Start {/*** 启动系统* @author 苍何*/public static void main(String[] args) {Manage manage=new Manage();manage.start();}}
package start;import info.ConsumInfo;
import info.MobileCard;
import info.Scene;import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;
import java.text.DecimalFormat;
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 Service.CallService;
import Service.NetSevice;
import Service.SendService;import myPackage.NetPackage;
import myPackage.ServicePackage;
import myPackage.SuperPackage;
import myPackage.TalkPackage;/** 业务类(工具类)* @author 苍何*/
public class Util {private static final ServicePackage TalkPackage = null;private static final ServicePackage NetPackage = null;private static final ServicePackage SuperPackage = null;Scanner input = new Scanner(System.in);ServicePackage sp;MobileCard card = new MobileCard();// map集合储存卡号信息,并通过卡号查到对应的姓名等信息Map<String, MobileCard> map = new HashMap<String, MobileCard>();// 所有卡号的消费记录列表Map<String, List<ConsumInfo>> consumInfo = new HashMap<String, List<ConsumInfo>>();// 储存一个卡号的所有消费记录用list集合List<ConsumInfo> list = new ArrayList<ConsumInfo>();// 储存场景列表Map<Integer, Scene> scenes = new HashMap<Integer, Scene>();// 构造6个使用场景Scene scene0 = new Scene("通话", 90, "问候客户,怎知其如此慢,通话90分钟");Scene scene1 = new Scene("通话", 600, "给老婆打电话,问问工作和生活情况,通话600分钟");Scene scene2 = new Scene("短信", 7, "给10086发短信查询相关业务,发送短信7条");Scene scene3 = new Scene("短信", 40, "给妈妈发短信问最近身体状况,发送短信40条");Scene scene4 = new Scene("上网", 2048, "用手机在线观看视频,使用流量2GB");Scene scene5 = new Scene("上网", 1024, "和老婆语音童话,通宵一晚,使用流量1GB");/*** 用户数据初始化*/public void initData() {// 初始化三张手机卡,并添加进集合MobileCard card1 = new MobileCard("13979387057", "大大", "1234",new TalkPackage(), 68, 32, 200, 20, 300);// 话痨套餐MobileCard card2 = new MobileCard("13979387058", "发阿萨德", "12345",new NetPackage(), 78, 22, 100, 10, 3000);// 网虫套餐MobileCard card3 = new MobileCard("13979387059", "当阿萨德", "123456",new SuperPackage(), 88, 12, 200, 20, 500);// 超人套餐map.put("13979387057", card1);map.put("13979387058", card2);map.put("13979387059", card3);// 消费记录初始化ConsumInfo info = new ConsumInfo("13979387057", "通话", 200);list.add(info);consumInfo.put("13979387057", list);}/*** 产生随机的电话号码,返回数组*/public String[] getNum(int count) {// 传入产生几个随机的电话号码String[] nums = new String[9];String number = null;for (int i = 0; i < count; i++) {// count代表循环count次,产生count个随机号码number = "139";// 定义电话号码以139开头Random random = new Random();// 定义random,产生随机数for (int j = 0; j < 8; j++) {// 生成0~9 随机数number += random.nextInt(9);}nums[i] = number;}return nums;}/*** 注册*/public void signIn() {System.out.println("*****可选择的卡号*****");String[] nums = getNum(9);// 产生9个随机号码// 遍历数组for (int i = 0; i < nums.length; i++) {System.out.print((i + 1) + "、" + nums[i] + "\t");// 保证每一行只显示三个号码if ((i + 1) % 3 == 0) {System.out.println();}}System.out.print("请选择卡号(输入1~9的序号):");int cardChose = input.nextInt();if (cardChose < 1 || cardChose > 9) {System.out.println("输入错误!");} else if (!map.containsKey(nums[cardChose - 1])) {card.cardNumble = nums[cardChose - 1];} else {System.out.println("对不起,此号码已被注册,请重新选择");}System.out.print("1.话唠套餐  2.网虫套餐  3.超人套餐,  请选择套餐(输入序号):");int packageChose = input.nextInt();System.out.print("请输入姓名:");card.uesrName = input.next();System.out.print("请输入密码:");card.passWord = input.next();System.out.print("请输入预存话费金额:");double pay = input.nextInt();switch (packageChose) {case 1:sp = new TalkPackage();break;case 2:sp = new NetPackage();break;case 3:sp = new SuperPackage();break;default:System.out.println("输入有误!");break;}card.setPackage = sp;card.consumAmount = sp.price;card.money = pay - card.consumAmount;// 判断存入的金额是否够叫月租费,如果不够交要循坏让其充值金额。直到金额符合标准方可while (card.money < 0) {System.out.print("您预存的话费金额不足以支付本月固定套餐资费,请重新充值:");pay = input.nextInt();card.money = pay - card.consumAmount;}// 将信息放入集合map.put(card.cardNumble, card);if (map.containsKey(card.cardNumble)) {card.showMeg();sp.showInfo();System.out.println("注册成功!");} else {System.out.println("注册失败,请重新注册!");}}/*** 登陆*/public void login() {System.out.print("请输入手机卡号:");String yourNumber = input.next();System.out.print("请输入密码:");String yourPassWord = input.next();if (map.containsKey(yourNumber)) {if (map.get(yourNumber).passWord.equals(yourPassWord)) {boolean flag = true;// 循环标记do {System.out.println();System.out.println("*****嗖嗖移动用户菜单*****");System.out.print("1.本月账单查询\n2.套餐余量查询\n3.打印消费详单\n4.套餐变更\n5.办理退网\n请选择(输入1~5选择功能,其他键返回上一级):");int functionChose = input.nextInt();switch (functionChose) {case 1:// 本月账单查询showAmountDetail(yourNumber);break;case 2:// 套餐余量查询showRemaiDetail(yourNumber);break;case 3:// 打印消费详单printAmountDetail(yourNumber);break;case 4:// 套餐变更changePackage(yourNumber);break;case 5:// 办理退网delateCard(yourNumber);break;default:// 退出二级菜单flag = false;break;}} while (flag);} else {System.out.println("密码输入错误!");}} else {System.out.println("对不起,您输入的信息有误,无法登录!");}}/*** 当月账单查询*/public void showAmountDetail(String yourNumber) {// 本月账单查询System.out.println();System.out.println("*****本月账单查询******");System.out.println("您的卡号:" + yourNumber + ",当月账单:");System.out.println("套餐资费:" + sp.price + "元");System.out.println("合计:" + dataFormat(map.get(yourNumber).consumAmount)+ "元");System.out.println("账户余额:" + dataFormat(map.get(yourNumber).money)+ "元");}/*** 套餐余量查询*/public void showRemaiDetail(String yourNumber) {System.out.println();System.out.println("*****套餐余量查询******");System.out.println("您的卡号:" + yourNumber + ",套餐内剩余:");StringBuffer meg = new StringBuffer();int remainTalkTime;int remainSmsCount;int remainFlow;if (map.get(yourNumber).setPackage instanceof TalkPackage) {TalkPackage cardPackage = (TalkPackage) (map.get(yourNumber).setPackage);// 若是话痨套餐,若套餐内通话时间比实际通话时间大。则用套餐内通话时间-实际通话时间。否则返回0.remainTalkTime = cardPackage.talkTime > map.get(yourNumber).realTalkTime ? cardPackage.talkTime- card.realTalkTime: 0;meg.append("童话时长:" + remainTalkTime + "分钟\n");remainSmsCount = cardPackage.smsCount > map.get(yourNumber).realSMSCount ? cardPackage.smsCount- map.get(yourNumber).realSMSCount: 0;meg.append("短信条数:" + remainSmsCount + "条\n");} else if (map.get(yourNumber).setPackage instanceof NetPackage) {NetPackage cardPackage = (NetPackage) (map.get(yourNumber).setPackage);remainFlow = cardPackage.flow > map.get(yourNumber).realFlow ? cardPackage.flow- map.get(yourNumber).realFlow: 0;meg.append("上网流量:" + remainFlow + "M\n");} else if (map.get(yourNumber).setPackage instanceof SuperPackage) {SuperPackage cardPackage = (SuperPackage) (map.get(yourNumber).setPackage);remainTalkTime = cardPackage.talkTime > map.get(yourNumber).realTalkTime ? cardPackage.talkTime- map.get(yourNumber).realTalkTime: 0;meg.append("童话时长:" + remainTalkTime + "分钟\n");remainSmsCount = cardPackage.smsCount > map.get(yourNumber).realSMSCount ? cardPackage.smsCount- map.get(yourNumber).realSMSCount: 0;meg.append("短信条数:" + remainSmsCount + "条\n");remainFlow = cardPackage.flow > map.get(yourNumber).realFlow ? cardPackage.flow- map.get(yourNumber).realFlow: 0;meg.append("上网流量:" + remainFlow + "M\n");}System.out.println(meg);}/*** 打印消费详单*/public void printAmountDetail(String yourNumber) {Set<String> numbles = consumInfo.keySet();// 获取所有的消费记录map集合中的号码// 遍历set集合,判断次卡号是否存在消费记录Iterator<String> it = numbles.iterator();// 判断消费列表中是否有此卡的消费记录boolean isExist = false;// false不存在while (it.hasNext()) {String numbleKey = it.next();if (numbleKey.equals(yourNumber)&& consumInfo.get(yourNumber).size() != 0) {isExist = true;}}// 如果存在此卡消费记录,则打印,不存在则说明if (isExist) {StringBuffer brf = new StringBuffer("*******" + yourNumber+ "消费记录*******\n");brf.append("序号\t类型\t数据(通话(分钟)/上网(M)/短信(条)\n");List<ConsumInfo> infos = consumInfo.get(yourNumber);// 遍历消费记录列表for (int i = 0; i < infos.size(); i++) {brf.append((i + 1) + "\t" + infos.get(i).type + "\t"+ infos.get(i).consumDate + "\n");}// 采用字符输出流打印Writer os = null;BufferedWriter bw = null;try {os = new FileWriter("消费记录.txt");bw = new BufferedWriter(os);bw.write(brf.toString());bw.flush();System.out.println("消费记录打印完毕!");} catch (IOException e) {e.printStackTrace();} finally {try {bw.close();os.close();} catch (IOException e) {e.printStackTrace();}}} else {System.out.println("对不起,不存在此卡的消费记录,不能打印!");}}/*** 套餐变更*/public void changePackage(String yourNumber) {boolean isCoreact = true;// 标记,套餐是否正确变更System.out.print("1.话唠套餐  2.网虫套餐  3.超人套餐,  请重新选择套餐(输入序号):");int optionrevie = input.nextInt();switch (optionrevie) {case 1:sp = new TalkPackage();if (map.get(yourNumber).setPackage instanceof TalkPackage) {System.out.println("您已是此套餐,无需变更!");} else {map.get(yourNumber).setPackage = TalkPackage;System.out.println("套餐更改成功!");}break;case 2:sp = new NetPackage();if (map.get(yourNumber).setPackage instanceof NetPackage) {System.out.println("您已是此套餐,无需变更!");} else {map.get(yourNumber).setPackage = NetPackage;System.out.println("套餐更改成功!");}break;case 3:sp = new SuperPackage();if (map.get(yourNumber).setPackage instanceof SuperPackage) {System.out.println("您已是此套餐,无需变更!");} else {map.get(yourNumber).setPackage = SuperPackage;System.out.println("套餐更改成功!");}break;default:System.out.println("请输入正确的序号!");break;}}/*** 办理退网*/public void delateCard(String yourNumber) {// 加个判断防止用户手误输入错误System.out.print("您确定注销此手机号码吗?Y/N:");String chouseyes = input.next();if (chouseyes.equalsIgnoreCase("Y")) {map.remove(yourNumber);System.out.println("您已成功注销该手机号!");}}/*** 使用嗖嗖*/public void uesSoso() {// 将初始化的场景放入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);System.out.print("请输入手机卡号:");String yourNumber = input.next();System.out.print("请输入密码:");String yourPassWord = input.next();if (map.containsKey(yourNumber)) {if (map.get(yourNumber).passWord.equals(yourPassWord)) {card = map.get(yourNumber);ServicePackage pack = card.setPackage;Random random = new Random();int ranNum = 0;int temp = 0;// 记录每个场景中的实际消费boolean iscontinued = true;// 停下do {ranNum = random.nextInt(6);// 随机产生0-5的随机数Scene scene = scenes.get(ranNum);// 随机产生的一个值对应一个场景sceneswitch (ranNum) {case 0:case 1:// 判断卡所属的套餐是否有打电话的功能if (pack instanceof CallService) {System.out.println(scene.description);try {temp = ((CallService) pack).call(scene.data,card);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}// 添加一条消费记录list.add(new ConsumInfo(yourNumber, scene.type,temp));iscontinued = false;break;} else {// 如果该卡套餐不支持通话功能,则重新生成随机数选择其他场景continue;}case 2:case 3:// 判断卡所属的套餐是否有发短信的功能if (pack instanceof SendService) {System.out.println(scene.description);try {temp = ((SendService) pack).send(scene.data,card);} catch (Exception e) {e.printStackTrace();}// 添加一条消费记录list.add(new ConsumInfo(yourNumber, scene.type,temp));iscontinued = false;break;} else {// 如果该卡套餐不支持发短信功能,则重新生成随机数选择其他场景continue;}case 4:case 5:// 判断卡所属的套餐是否有上网的功能if (pack instanceof NetSevice) {System.out.println(scene.description);try {temp = ((NetSevice) pack).netPlay(scene.data,card);} catch (Exception e) {e.printStackTrace();}// 添加一条消费记录list.add(new ConsumInfo(yourNumber, scene.type,temp));iscontinued = false;break;} else {// 如果该卡套餐不支持上网功能,则重新生成随机数选择其他场景continue;}}System.out.println("添加一条消费记录!");consumInfo.put(yourNumber, list);} while (iscontinued);} else {System.out.println("密码输入错误!");}} else {System.out.println("对不起,您输入的信息有误,无法登录!");}}/*** 话费充值*/public void addPayMoney() {System.out.print("请输入您要充值的手机号码:");String yourNumber = input.next();System.out.print("请输入您要充值手机号码的密码:");String yourPassWord = input.next();if (map.containsKey(yourNumber)) {if (map.get(yourNumber).passWord.equals(yourPassWord)) {System.out.print("请输入您要充值的金额:");double payMoney = input.nextDouble();map.get(yourNumber).money += payMoney;System.out.println("话费充值成功,您当前话费余额" + map.get(yourNumber).money+ "元");} else {System.out.println("密码输入错误!");}} else {System.out.println("对不起,您输入的信息有误,无法登录!");}}/*** 资费说明*/public void ziFei() {System.out.println();InputStream is = null;InputStreamReader isr = null;BufferedReader br = null;try {is = new FileInputStream("资费说明.txt");isr = new InputStreamReader(is, "GBK");br = new BufferedReader(isr);String info =null;while((info=br.readLine())!=null){System.out.println(info);}} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {br.close();isr.close();is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}/*** 数学计算科学计数法转换格式(保留两位小数的方法)*/public String dataFormat(double data) {DecimalFormat format = new DecimalFormat("##.00");return format.format(data);}/*** 两位数相减保留一位小数的方法*/public double sub(double num1, double num2) {return (num1 * 10 - num2 * 10) / 10;}
}
*****资费说明******
套餐类型:话唠套餐
通话时长:200分钟
短信条数:50条
月资费:58元
——————————————
套餐类型:网虫套餐
上网流量:5GB
月资费:68元
——————————————
套餐类型:超人套餐
通话时长:200分钟
短信条数:100条
上网流量:1GB
月资费:78元
——————————————
超出套餐计费:
通话时长:0.2元/分钟
短信条数:0.1元/分钟
上网流量:0.1元/分钟
*******13948368681消费记录*******
序号  类型  数据(通话(分钟)/上网(M)/短信(条)
1   短信  40
2   通话  600
3   通话  0

``欢迎来我的GitHub下载源码,是开源免费的!
鉴于有些同学找不到我的项目在GitHub位置,直接点击此链接就可以下载,这样下载:https://github.com/freestylefly/SOSO

顺便帮忙点击一波关注哈,万分感谢:

GitHub如果你不熟悉,可以点击这个:
https://blog.csdn.net/qq_43270074/article/details/83445607


本文章已同步至我的GitHub仓库:Javastudy,期待您的加入

嗖嗖移动业务大厅(源码下载+注释全 值得收藏)相关推荐

  1. Android13源码下载及全编译流程

    一.源码下载 1.1.配置要求 官方推荐配置请参考:https://source.android.google.cn/docs/setup/start/requirements?hl=zh-cn,重点 ...

  2. PHP小程序多商户商城系统源码下载(免费全开源)_三勾商城开源版

    三勾商城是开发友好的微信小程序商城,框架支持SAAS,支持发布 iOS + Android + 公众号 + H5 + 各种小程序(微信/支付宝/百度/头条/QQ/钉钉/淘宝)等多个平台,不可多得的二开 ...

  3. 详细讲解Linux内核源码内存管理(值得收藏)

    Linux的内存管理是一个非常复杂的过程,主要分成两个大的部分:内核的内存管理和进程虚拟内存.内核的内存管理是Linux内存管理的核心,所以我们先对内核的内存管理进行简介. 一.物理内存模型 物理内存 ...

  4. C语言实现中国象棋(Qt实现界面,源码下载,详细注释,易移植)

    前言:中国象棋的规则很多人都懂,用C语言做一个中国象棋游戏,其要点是怎么把抽象的规则变成形象.具体的代码.本项目提供详细的实现思路,源码附带大量的注释说明,源码逐步地实现了每一种棋类的走棋规则.吃棋规 ...

  5. 2017最新鑫众游戏大厅源码架设和全套手机版运营级别源码下载

    一. 源码包编译安装部署web服务器 1.安装nginx必须的依赖包 [root@test01 ~]# yum -y install gcc openssl-devel pcre-devel zlib ...

  6. 关于C#KTV项目斜体样式源码带注释下载

    关于C#KTV项目斜体样式源码带注释下载 带尺寸的图片: 前端样式![Alt] 居中的图片: 后端登录 KTV 代码片. /// <summary>/// 定时器事件/// </su ...

  7. uniapp - 【全端兼容】实现保存视频到手机相册功能,将 mp4 在线视频下载并存储到用户的手机中,uniapp App h5 小程序将视频文件下载保存(详细示例源码及注释一键复制,开箱即用!)

    效果图 在uniapp开发中,实现安卓苹果app.h5网页网站.小程序保存视频到相册功能,点击保存按钮后下载视频并将其存储到用户的手机相册中,完整示例源码及注释,新手小白开箱即用! 直接复制代码,稍微 ...

  8. 神兽大厅源码搭建SLB最佳实践

    一.SLB概念 负载均衡(Server Load Balancer)是将访问流量根据转发策略分发到后端多台云服务器(Elastic Compute Service,简称 ECS)的流量分发控制服务. ...

  9. 产线数字化软件源码_软件生产线技术、开源软件声明、源码下载地址

    软件生产线技术.开源软件声明.源码下载地址 软件生产线指生产软件的软件,先利用建模工具软件用图解的形式给出应用系统的系统模型,之后自动生成应用系统可执行程序,自动完成建立应用系统的工作.它能有效提高应 ...

  10. android源码下载方法 批量下载 基于windows os

    安装win版的Gitbash, 在这里 http://msysgit.googlecode.com/files/Git-1.6.0.2-preview20080923.exe. 选择默认安装路径(否则 ...

最新文章

  1. 自建WIN10 FTP无法访问的解决方法
  2. 枚举IHTMLDocument2中所有IFRAME的内容
  3. 08-R包那么多,怎么才能快速找到自己需要的包呢?
  4. VMware虚拟机安装CentOS6.4、部署web项目全过程(设置固定IP、安装JDK、Tomcat、Redis、部署项目)...
  5. oracle取字段第三位字符,oracle截取字符串(截取某个字符前面的字符串)
  6. 计算机平面设计考试试题及答案,最新国家开放大学电大专科《计算机平面设计(1)》网络课形考任务1及任务2答案...
  7. speedoffice(Word)文档中如何插入图片
  8. 2013年12月新四六级翻译相关词汇汇总
  9. oracle的日期时间转换日期,oracle 的时间日期转换函数
  10. windows用虚拟机vmWare安装黑苹果及注意事项
  11. 辉芒微IO单片机FT60F023-RB方案MCU开发
  12. 大学三方协议约定的服务器,大学生签订三方协议要注意
  13. 【C++】关于char * tempbuffer = new char[100];
  14. C++:在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加 “#include “stdafx.h“”?
  15. 电子采购平台解决方案:构建企业采购管理系统业务架构、应用场景
  16. cocos2d-x动画加速与减速
  17. 计算机绘图培训心得,计算机绘图实习工作总结
  18. Android代码修改SIM的PIN码,中兴U970如何修改SIM卡或UIM卡的PIN码
  19. 福建省计算机二级试题,福建省高等学校计算机等级考试(二级C语言)选择题试题库.doc...
  20. Java生成树状结构返回结果

热门文章

  1. 在ThinkPHP5.0打造一个专属短信接口
  2. 准备计算机二级c语言需要多久,计算机二级自学需要准备多久
  3. 自己退出微信小程序开发者权限
  4. Win10系统打开共享文件提示没有权限使用网络资源怎么处理?
  5. Win密钥.Win7旗舰版
  6. 鸿蒙系统充电慢,数据线充电慢怎么解决
  7. 小游戏 版本提交审核, 资质提交审核指引
  8. MSN的聊天记录在哪里找到?
  9. MSDOS(MBR)和GPT磁盘分区表
  10. 手持小电风扇原理图挂脖小风扇电路图