java项目之soso移动业务业务大厅项目

目录

一. 项目需求

二、项目使用的技术

三、项目实现

1. 菜单显示页面,以及登录

2. 用户注册​编辑

3. 本月账单查询​编辑

4. 套餐余量查询​编辑

5. 添加和打印消費清单​编辑

6. 使用嗖嗖

7. 办理退网​编辑

8 套餐变更​编辑​编辑

9. 话费充值​编辑

10.查看资费说明

四、项目重点

1.数据库的连接

2.数据库事务的处理

3.项目分层

五、重点代码

1.soso移动用户业务实现类

2.界面视图类


一. 项目需求
 

嗖嗖移动是一个假定的通信运营商,提供了话痨套餐,网虫套餐,超人套餐,各种套餐所包含的服务内容及费用如下表:

品牌套餐话痨套餐网虫套餐超人套餐
通话时长(分钟)6000300
上网流量02010
短信条数(条)100050
费用(元/月)586878

如实际使用中超出套餐内包含的通话时长,短信条数和上网流量,则按一下规则计费:

  • 超出的通话: 0.2元/分

  • 超出的短信:0.1元/条

  • 超出的上网流量:0.1元/MB

本任务实现的"嗖嗖移动业务大厅"提供了嗖嗖移动用户的常用功能,包括新用户注册,本月账单查询,套餐余量查询,打印消费详情,套餐变更,办理退网,话费充值,查看消费记录,查看话费说明等功能.另外,还可以模拟用户通话,上网,发送短信的场景进行相应的扣费并记录消费信息.各功能介绍如下表:

菜单级别功能描述
主菜单用户登录输入正确的手机号码和密码进入二级菜单列表
主菜单用户注册录入信息并开卡,用户输入的信息包括:选择卡号,选择套餐类型,输入用户名和密码,预存话费金额(预存话费金额必须满足以支付所选套餐的一个月的费用)
主菜单使用嗖嗖输入正确的手机号码和密码之后,随机进入本号码所属套餐可以支持的一个场景,消费套餐余量或者话费余额,并记录消费信息.当话费余额不足时,抛出异常提醒用户充值
主菜单话费充值输入正确的用户名和密码之后,可为该卡号充值
主菜单资费说明提供各品牌套餐所包含的通话时长,上网流量,短信条数,月费用等
主菜单退出系统提出本系统
二级菜单本月账单查询可查询该卡号的套餐费用,实际消费金额,账户余额
二级菜单套餐余量查询可查询该卡号的套餐余量
二级菜单打印消费详情输入正确的卡号和密码后,可打印当前卡号用户的消费详单, 使用输出流把用户信息输出到文件
二级菜单套餐变更可变更为其他套餐类型,变更后话费余额需减去变更后的套餐费用,余额不足时需要给出信息提示,套餐变更后重新统计卡中实际消费数据以及当月消费金额
二级菜单办理退网输入正确的卡号和密码后,可以从已注册的号码列表中删除本号码,并退出系统

二、项目使用的技术

  • 面向对象的思想

  • 封装,继承,多态,接口的使用

  • 异常处理的合理使用

  • 集合框架的使用

  • I/O 操作实现对文件的写

  • MySQL数据

  • JDBC操作数据库

三、项目实现

1. 菜单显示页面,以及登录

卡号或密码错误:

卡号被禁用:

登录成功:

2. 用户注册

3. 本月账单查询

4. 套餐余量查询

5. 添加和打印消費清单

如果没有消费记录:

6. 使用嗖嗖

功能分析

1) 模拟嗖嗖用户使用卡的过程,选择该功能后,输入当前卡号,通过验证后,可随机进入如下表的6个场景,要求所进入的场景的服务类型是该卡所属套餐支持的(如网虫套餐只能进入服务类型为"上网"的场景)

序号服务类型描述
0通话问候客户,谁知其如此难缠,通话90分钟
1通话询问妈妈身体状况,本地通话30分钟
2短信参与环境保护实施方案问卷调查,发送短信5条
3短信同时朋友本人已换手机号码,发送短信50条
4上网和女朋友微信视频聊天,使用流量1GB
5上网晚上手机在线追剧,一不留神睡着了,使用流量2GB
  1. 模拟消费,进入场景之后,将按场景的描述要求消费套餐余量,如果套餐余量不足,则需要按套餐外的费用规则扣费,成功消费后,添加一条消费记录

如果消费失败:

7. 办理退网

8 套餐变更

9. 话费充值

10.查看资费说明

查看嗖嗖移动大厅中所有的套餐的资费说明

四、项目重点

1.数据库的连接

因为本项目,涉及数据库的查询,修改等,所以必须成功连接上数据库。在本项目中使用JDBC操作MySQL数据库。

2.数据库事务的处理

在某些业务中涉及多张表的同时修改,插入的事务处理。需要通过封装的JdbcUtil工具类进行事务的开启,提交等功能。

3.项目分层

本项目对项目的各个部分功能进行分层处理,bean层封装实体类,dao层进行数据获取和修改,service进行业务处理等。

五、重点代码

1.soso移动用户业务实现类

package com.fs.service.impl;

import com.fs.bean.*;
import com.fs.dao.*;
import com.fs.dao.impl.*;
import com.fs.service.MoboleCardService;
import com.fs.util.JdbcUtil;

import java.util.Calendar;
import java.util.Date;
import java.sql.SQLException;

public class MoboleCardServiceImpl implements MoboleCardService {
    private MoboleCardDao dao = new MoboleCardDaoImpl();
    private CardDao cardDao = new CardDaoImpl();
    private ConsuminfoDao consuminfoDao = new ConsuminfoDaoImpl();
    private MonthlyConsumptionRecordsDao monthlyConsumptionRecordsDao
            =new MonthlyConsumptionRecordsDaoImpl();
    private SerPackageDao serPackageDao = new SerPackageDaoImpl();
    private RechargeRecordDao rechargeRecordDao = new RechargeRecordDaoImpl();

    @Override
    public String login(String cardNumber, String password) {
        try {
            MoboleCard moboleCard =  dao.findMoboleCardByCardNumber(cardNumber);
            if(moboleCard == null){
                return  "账号未注册!";
            }
            if(!moboleCard.getPassword().equals(password)){
                return "密码错误!";
            }
            if(moboleCard.getStatus() == 1){
                return  "账号已冻结!";
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return "登录成功!";
    }

    @Override
    public String register(MoboleCard moboleCard) {
        boolean value = false;
        try {
            JdbcUtil.beginTransaction();
            boolean result = dao.addMoboleCard(moboleCard);
            if(result){
               value = cardDao.updateCardStatus(moboleCard.getCard_number(),1);
            }
            JdbcUtil.commitTransaction();
        } catch (SQLException throwables) {
            try {
                JdbcUtil.rollBackTransaction();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }
        return value ? "注册成功!":"注册失败!";
    }

    @Override
    public MoboleCard findMoleInfoByCardNumber(String cardNumber) {
        try {
            return dao.findMoboleCardByCardNumber(cardNumber);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public boolean useSoso(String cardNumber, Scene scene, double money) {

        try {
            //开启事务
            JdbcUtil.beginTransaction();
            //添加消费记录
            Consuminfo consuminfo = new Consuminfo();
            consuminfo.setCard_number(cardNumber);
            consuminfo.setType(scene.getType());
            consuminfo.setConsum_data(scene.getData());
            consuminfo.setConsume_date(new Date());
            consuminfoDao.addConsuminfo(consuminfo);
            //修改月消费记录,没有则插入
            Calendar cl = Calendar.getInstance();
            int year = cl.get(Calendar.YEAR);
            int month = cl.get(Calendar.MONTH);
            MonthlyConsumptionRecords records =
                    monthlyConsumptionRecordsDao.findCardNumberMonthlyRecord(cardNumber.trim(),year,month+1);
            if(records == null){
                records = new MonthlyConsumptionRecords();
                records.setCard_number(cardNumber);
                records.setConsum_amount(serPackageDao.findSerPackageByCardNumber(cardNumber).getPrice()+money);
                records.setConsume_date(new Date());
                if(scene.getType().equals("通话")){
                    records.setReal_talk_time(scene.getData());
                }
                if(scene.getType().equals("上网")){
                    records.setReal_flow(scene.getData());
                }
                if(scene.getType().equals("短信")){
                    records.setReal_SMS_count(scene.getData());
                }
                monthlyConsumptionRecordsDao.addMonthlyRecord(records);
            }else {
               records.setConsum_amount(records.getConsum_amount()+money);
               if(scene.getType().equals("通话")){
                    records.setReal_talk_time(records.getReal_talk_time()+ scene.getData());
               }
               if(scene.getType().equals("上网")){
                    records.setReal_flow(records.getReal_flow() + scene.getData());
               }
               if(scene.getType().equals("短信")){
                    records.setReal_SMS_count(records.getReal_SMS_count()+ scene.getData());
               }
               records.setConsume_date(new Date());
               monthlyConsumptionRecordsDao.updateMonthlyRecord(records);
            }
            //修改账户余额
            MoboleCard moboleCard = dao.findMoboleCardByCardNumber(cardNumber);
            moboleCard.setMoney(moboleCard.getMoney()-money);
            dao.updateMoboleCard(moboleCard);
            JdbcUtil.commitTransaction();
            return true;
        } catch (SQLException throwables) {
            try {
                JdbcUtil.rollBackTransaction();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }
        return false;
    }

    @Override
    public boolean exitNetWork(String cardNumber) {
        try {
            JdbcUtil.beginTransaction();
            dao.deleteMoboleCardByCardNumber(cardNumber);
            cardDao.updateCardStatus(cardNumber,0);
            JdbcUtil.commitTransaction();
            return true;
        } catch (SQLException throwables) {
            try {
                JdbcUtil.rollBackTransaction();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }
        return false;
    }

    @Override
    public String serPackageChange(String carNumber,SerPackage serPackage) {
        try {
            JdbcUtil.beginTransaction();
            MoboleCard moboleCard = dao.findMoboleCardByCardNumber(carNumber);
            if(moboleCard.getSer_package() == serPackage.getId()){
                JdbcUtil.commitTransaction();
                return "您已是该套餐用户,无需更换!";
            }
            moboleCard.setSer_package(serPackage.getId());
            if(moboleCard.getMoney()-serPackage.getPrice() < 0){
                JdbcUtil.commitTransaction();
                return "余额不足,请充值后变量套餐变更业务!";
            }
            moboleCard.setMoney(moboleCard.getMoney()-serPackage.getPrice());
            //修改套餐信息
            dao.updateMoboleCard(moboleCard);

            //插入消费记录
            Consuminfo consuminfo = new Consuminfo();
            consuminfo.setCard_number(carNumber);
            consuminfo.setConsume_date(new Date());
            consuminfo.setConsum_data((int)(serPackage.getPrice()));
            consuminfo.setType("套餐变更");
            consuminfoDao.addConsuminfo(consuminfo);

            //修改月消费信息
            Calendar cl = Calendar.getInstance();
            int year = cl.get(Calendar.YEAR);
            int month = cl.get(Calendar.MONTH);
            MonthlyConsumptionRecords records =
                    monthlyConsumptionRecordsDao.findCardNumberMonthlyRecord(carNumber,year,month+1);
            if(records == null){
                 records = new MonthlyConsumptionRecords();
                 records.setCard_number(carNumber);
                 records.setConsum_amount(serPackage.getPrice());
                 records.setConsume_date(new Date());

                 monthlyConsumptionRecordsDao.addMonthlyRecord(records);
            }else {
                records.setConsum_amount(records.getConsum_amount()+serPackage.getPrice());
                records.setConsume_date(new Date());
                monthlyConsumptionRecordsDao.updateMonthlyRecord(records);
            }
            JdbcUtil.commitTransaction();
            return  "变更成功!";
        } catch (SQLException throwables) {
            try {
                JdbcUtil.rollBackTransaction();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }
        return "未知错误,变更失败!";
    }

    @Override
    public String moneyPay(String cardNumber, double money) {
        try {
            JdbcUtil.beginTransaction();
            MoboleCard moboleCard = dao.findMoboleCardByCardNumber(cardNumber);
            moboleCard.setMoney(moboleCard.getMoney()+money);
            //修改移动用户信息
            dao.updateMoboleCard(moboleCard);
            //插入消费记录
            RechargeRecord rechargeRecord  = new RechargeRecord();
            rechargeRecord.setAmount(money);
            rechargeRecord.setCard_number(cardNumber);
            rechargeRecord.setRecharge_date(new Date());
            rechargeRecordDao.addRechargeRecord(rechargeRecord);
            JdbcUtil.commitTransaction();
            return "充值成功,卡上余额:"+moboleCard.getMoney()+"元!";
        } catch (SQLException throwables) {
            try {
                JdbcUtil.rollBackTransaction();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            throwables.printStackTrace();
        }
        return "充值失败!";
    }
}

2.界面视图类

package com.fs.view;

import com.fs.bean.*;
import com.fs.service.*;
import com.fs.service.impl.*;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.List;
import java.util.Scanner;

public class SosoView {

    private static MonthlyConsumptionRecordsService monthlyConsumptionRecordsService
            = new MonthlyConsumptionRecordsServiceImpl();
    private static CardService cardService = new CardServiceImpl();
    private static SerPackageService serPackageService = new SerPackageServiceImpl();
    private static MoboleCardService moboleCardService = new MoboleCardServiceImpl();
    private static ConsuminfoService consuminfoService = new ConsuminfoServiceImpl();
    private static SceneService sceneService = new SceneServiceImpl();
    //当前登录的卡号
    private static ThreadLocal<String> currentCard = new ThreadLocal<>();


    public static void mainMenu(){
        boolean flag = true;
        while(flag){
            Scanner input = new Scanner(System.in);
            System.out.println("***************欢迎使用嗖嗖移动用户大厅***************");
            System.out.println("1.用户登录         2.用户注册        3.使用嗖嗖       ");
            System.out.println("4.话费充值         5.资费说明        6.退出系统       ");
            System.out.println("请选择:");
            String select = input.next();
            switch (select){
                case "1":
                    login();
                    break;
                case "2":
                    register();
                    break;
                case "3":
                    sosoMobole();
                    break;
                case "4":
                    moneyPay();
                    break;
                case "5":
                    serPackagePrint();
                    break;
                case "6":
                    flag = false;
                    System.out.println("********感谢您使用搜搜移动业务大厅,再见!********");
                    break;
                default:
                    System.out.println("输入错误,无此选项请重新输入!");
                    break;
            }
        }
    }


    public static void register(){
        MoboleCard moboleCard = new MoboleCard();
        while(true){
            Scanner input = new Scanner(System.in);
            System.out.println("***************     可选择的卡号     ***************");
            List<Card> cardList = cardService.findAllIsOk();
            for(int i = 0 ; i < cardList.size();i++){
                System.out.println((i+1)+"."+cardList.get(i).getCardNumber());
            }
            System.out.println("***************    请选择你的卡号    ***************");
            if(!input.hasNextInt()){
                System.out.println("输入错误,请重新输入");
                continue;
            }
            int select = input.nextInt();
            if(select < 0  || select > cardList.size()){
                System.out.println("序号错误,请重新输入");
                continue;
            }
            //注册卡号
            Card card = cardList.get(select-1);
            //设置手机号
            moboleCard.setCard_number(card.getCardNumber());
            //获取所有套餐
            List<SerPackage> serPackageList = serPackageService.findAllSerPackage();
            for(int i = 0 ; i < serPackageList.size();i++){
                System.out.print((i+1)+"."+serPackageList.get(i).getName());
            }
            System.out.println("***************    请选择你的套餐    ***************");
            if(!input.hasNextInt()){
                System.out.println("输入错误,请重新输入");
                continue;
            }
            select = input.nextInt();
            if(select < 0  || select > serPackageList.size()){
                System.out.println("序号错误,请重新输入");
                continue;
            }
            //所选套餐
            SerPackage serPackage = serPackageList.get(select-1);
            //设置套餐
            moboleCard.setSer_package(serPackage.getId());
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入姓名:");
            moboleCard.setUsername(scanner.nextLine());

            System.out.println("请输入密码:");
            moboleCard.setPassword(scanner.nextLine());

            System.out.println("请输入预存话费金额:");
            if(!input.hasNextDouble()){
                System.out.println("输入错误,请重新输入");
                continue;
            }
            double money = input.nextDouble();
            if(money < serPackage.getPrice()){
                System.out.println("您预存话费不足以支付本月的套餐资费,请重新输入!");
                continue;
            }
            moboleCard.setMoney(money-serPackage.getPrice());
            moboleCard.setStatus(0);
            //调用业务方法完成注册
            System.out.println(moboleCardService.register(moboleCard));
            System.out.println("卡号:"+moboleCard.getCard_number());
            System.out.println("用户名:"+moboleCard.getUsername());
            System.out.println("当前余额:"+moboleCard.getMoney());
            System.out.println(serPackage.getName()+serPackage.getTalk_time()+"分钟/月");
            return;
        }
    }

    public static void login(){
        Scanner input = new Scanner(System.in);
        System.out.println("请输入手机号:");
        String cardNumber = input.nextLine();
        System.out.println("请输入密码:");
        String password = input.nextLine();
        String message = moboleCardService.login(cardNumber,password);
        System.out.println("【友情提示】:"+message);
        if("登录成功!".equals(message)){
            currentCard.set(cardNumber);
            userMenu();
        }
    }


    public static void userMenu(){
        while(true){
            Scanner input = new Scanner(System.in);
            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 select = input.next();
            switch (select){
                case "1":
                    selectCurrentMonthRecord();
                    break;
                case "2":
                    serPackageSurplus();
                    break;
                case "3":
                    printConsumInfo();
                    break;
                case "4":
                    serPackageChange();
                    break;
                case "5":
                    exitNetWork();
                    break;
                default:
                    return;
            }
        }
    }


    public static void serPackageSurplus(){
        String cardNumber = currentCard.get();
        //查询该账号对应套餐
        SerPackage serPackage =  serPackageService.findSerPackageByCardNumber(cardNumber);
        //查询该账号该月消费信息
        Calendar cl  = Calendar.getInstance();
        //获取年月信息
        int year = cl.get(Calendar.YEAR);
        int month = cl.get(Calendar.MONTH) + 1;
        MonthlyConsumptionRecords  monthlyConsumptionRecords =  monthlyConsumptionRecordsService.findCardNumberMonthlyRecord(cardNumber,year,month);
        System.out.println("*********套餐余量查询**********");
        System.out.println("您的卡号是"+cardNumber+",套餐内剩余:");
        int talk_time = serPackage.getTalk_time() - monthlyConsumptionRecords.getReal_talk_time();
        if(talk_time < 0 ){
            talk_time = 0;
        }
        System.out.println("通话时长:"+talk_time+"分钟");
        int sms_count = serPackage.getSms_count() - monthlyConsumptionRecords.getReal_SMS_count();
        if(sms_count < 0 ){
            sms_count = 0;
        }
        System.out.println("短信条数:"+sms_count+"条");
        int flow = serPackage.getFlow()-monthlyConsumptionRecords.getReal_flow();
        if(flow < 0 ){
            flow = 0;
        }
        System.out.println("套餐流量:"+flow+"GB");
    }


    public static void selectCurrentMonthRecord(){
        //获取当前登录的卡号
        String cardNumber = currentCard.get();
        Calendar cl  = Calendar.getInstance();
        //获取年月信息
        int year = cl.get(Calendar.YEAR);
        int month = cl.get(Calendar.MONTH) + 1;
        MonthlyConsumptionRecords  monthlyConsumptionRecords =  monthlyConsumptionRecordsService.findCardNumberMonthlyRecord(cardNumber,year,month);
        if(monthlyConsumptionRecords == null){
            System.out.println("【友情提示】:尚未生成当前卡号的月消费账单信息!");
            return;
        }
        //根据卡号查询套餐
        SerPackage serPackage =  serPackageService.findSerPackageByCardNumber(cardNumber);
        System.out.println("您的卡号:"+cardNumber+",当月账单:");
        System.out.println("套餐资费:"+serPackage.getPrice());
        System.out.println("合计:"+(serPackage.getPrice()+monthlyConsumptionRecords.getConsum_amount()));
        //根据卡号查询嗖嗖移动的用户信息
        MoboleCard moboleCard = moboleCardService.findMoleInfoByCardNumber(cardNumber);
        System.out.println("账户余额:"+moboleCard.getMoney());
    }

    public static void printConsumInfo(){
        while(true){
            System.out.println("***********消费详细查询***********");
            System.out.println("请输入本年需要查询的月份(1-12):");
            Scanner input = new Scanner(System.in);
            if(!input.hasNextInt()){
                System.out.println("【友情提示】:输入错误,请重新输入!");
                continue;
            }
            int month = input.nextInt();
            if(month <= 0 || month > 12){
                System.out.println("【友情提示】:超出范围,请重新输入!");
                continue;
            }
            String cardNumber = currentCard.get();
            List<Consuminfo> consuminfoList = consuminfoService.findmMonthConsuminfoByCardNumber(cardNumber,month);
            if(consuminfoList == null || consuminfoList.size() == 0){
                System.out.println("【友情提示】:对不起,不存在该卡号"+month+"月消费记录!");
                return;
            }
            System.out.println("序号\t类型\t数据\t日期");
            for(int i = 0 ; i < consuminfoList.size();i++){
                Consuminfo consuminfo = consuminfoList.get(i);
                String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(consuminfo.getConsume_date());
                System.out.println((i+1)+"\t"+consuminfo.getType()+"\t"+consuminfo.getConsum_data()+"\t"+date);
            }
        }
    }

    private static void sosoMobole(){
        System.out.println("请输入手机卡号:");
        Scanner input = new Scanner(System.in);
        String cardNumber = input.next();
        //根据手机卡号,查看该卡号的套餐
        SerPackage serPackage = serPackageService.findSerPackageByCardNumber(cardNumber);
        //获取所有场景信息
        List<Scene> sceneList = sceneService.findAllScene();
        int type = -1;
        if(serPackage.getName().equals("话痨套餐")){
            type = (int)(Math.random()*4);
        }
        if(serPackage.getName().equals("网虫套餐")){
            type = (int)Math.round(Math.random())+4;
        }
        if(serPackage.getName().equals("超人套餐")){
            type = (int)(Math.random()*6);
        }
        double money = sceneAccount(cardNumber,type);
        //查询账户余额是否足够
        MoboleCard moboleCard = moboleCardService.findMoleInfoByCardNumber(cardNumber);
        if(money > moboleCard.getMoney()){
            System.out.println("【友情提示】:您的余额不足,请充值后使用!");
            return;
        }
        if(moboleCardService.useSoso(cardNumber,sceneList.get(type),money)){
            System.out.println(sceneList.get(type).getDescription());
        }else{
            System.out.println("【友情提示】:未知错误,消费失败");
        } ;
    }


    /*计算场景消费金额*/
    public static double sceneAccount(String  cardNumber, int type) {
        //根据手机卡号,查看该卡号的套餐
        SerPackage serPackage = serPackageService.findSerPackageByCardNumber(cardNumber);
        //获取所有场景信息
        List<Scene> sceneList = sceneService.findAllScene();
        Calendar cl = Calendar.getInstance();
        int year = cl.get(Calendar.YEAR);
        int month = cl.get(Calendar.MONTH)+1;
        //当月消费信息查询出来
        MonthlyConsumptionRecords monthlyConsumptionRecords =
                monthlyConsumptionRecordsService.findCardNumberMonthlyRecord(cardNumber, year, month);
        //当月没有消费记录
        if(monthlyConsumptionRecords == null){
            monthlyConsumptionRecords = new MonthlyConsumptionRecords();
        }
        //场景
        Scene scene = null;
        //场景产生的费用
        double money = 0;

        switch (type) {
            case 0:
            case 1:
                scene = sceneList.get(type);
                //总的通话时长是否超出套餐以外
                if (monthlyConsumptionRecords.getReal_talk_time() > serPackage.getTalk_time()) {
                    //消费费用
                    money = 0.2 * scene.getData();
                } else {
                    if (scene.getData() + monthlyConsumptionRecords.getReal_talk_time() > serPackage.getTalk_time()) {
                        money = (scene.getData() + monthlyConsumptionRecords.getReal_talk_time()
                                - serPackage.getTalk_time()) * 0.2;
                    }
                }
                break;
            case 2:
            case 3:
                scene = sceneList.get(type);
                //总的短信是否超出套餐以外
                if (monthlyConsumptionRecords.getReal_SMS_count() > serPackage.getSms_count()) {
                    //消费费用
                    money = 0.1 * scene.getData();
                } else {
                    if (scene.getData() + monthlyConsumptionRecords.getReal_SMS_count() > serPackage.getSms_count()) {
                        money = (scene.getData() + monthlyConsumptionRecords.getReal_SMS_count()
                                - serPackage.getSms_count()) * 0.1;
                    }
                }
                break;
            case 4:
            case 5:
                scene = sceneList.get(type);
                //总的流量是否超出套餐以外
                if (monthlyConsumptionRecords.getReal_flow() > serPackage.getFlow()) {
                    //消费费用
                    money = 0.1 * scene.getData();

                } else {
                    if (scene.getData() + monthlyConsumptionRecords.getReal_flow() > serPackage.getFlow()) {
                        money = (scene.getData() + monthlyConsumptionRecords.getReal_flow()
                                - serPackage.getFlow()) * 0.1;
                    }
                }
                break;
        }
        return  money;

    }
    

    /*办理退网*/
    private  static void exitNetWork(){
        String cardNumber = currentCard.get();
        System.out.println("***********办理退网***********");
        if(moboleCardService.exitNetWork(cardNumber)){
            System.out.println("【友情提示】:卡号"+cardNumber+"办理退网成功!");
        }else{
            System.out.println("【友情提示】:卡号"+cardNumber+"办理退网失败!");
        }
    }

    /*套餐变更*/
    public static void serPackageChange(){
        //获取当前登录的用户
        String cardNumber = currentCard.get();
        while(true){
            System.out.println("***********套餐变更***********");
            List<SerPackage> serPackageList = serPackageService.findAllSerPackage();
            for(int i = 0 ; i < serPackageList.size();i++){
                System.out.print((i+1)+"."+serPackageList.get(i).getName()+"\t");
            }
            System.out.println();
            System.out.println("请选择(序号):");
            Scanner input = new Scanner(System.in);
            if(!input.hasNextInt()){
                System.out.println("【友情提示】:输入错误,请重新输入!");
                continue;
            }
            int index = input.nextInt();
            if(index < 0 || index >= serPackageList.size()){
                System.out.println("【友情提示】:选择错误,请重新输入!");
                continue;
            }
            String msg = moboleCardService.serPackageChange(cardNumber,serPackageList.get(index-1));
            System.out.println("【友情提示】:"+msg);
            break;
        }
    }


    /*话费充值*/
    public static void moneyPay(){
        while(true){
            System.out.println("************话费充值*************");
            Scanner input = new Scanner(System.in);
            System.out.println("请输入充值卡号:");
            String cardNumber = input.next();
            System.out.println("请输入充值金额:");
            if(!input.hasNextDouble()){
                System.out.println("【友情提示】:输入错误,请重新输入!");
                continue;
            }
            double money = input.nextDouble();
            if(money <= 0){
                System.out.println("【友情提示】:输入错误,请重新输入!");
                continue;
            }
            String msg = moboleCardService.moneyPay(cardNumber,money);
            System.out.println("【友情提示】:"+msg);
            break;
        }
    }

    /*资费说明*/
    public static void serPackagePrint(){
        System.out.println("************套餐说明************");
        System.out.println("序号\t套餐名称\t通话时长(分/月)\t短信条数(条/月)\t上网流量(GB/月)");
        List<SerPackage> serPackageList = serPackageService.findAllSerPackage();
        for(int i = 0 ; i < serPackageList.size();i++){
            SerPackage serPackage = serPackageList.get(i);
            System.out.println((i+1)+"\t"+serPackage.getName()+"\t"+serPackage.getTalk_time()
                    +"\t"+serPackage.getSms_count()+"\t"+(serPackage.getFlow()/1024));
        }
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值