基于Java的嗖嗖移动大厅

基于Java的嗖嗖移动大厅

一、展示效果

效果展示
需求分析:

  1. 面向对象思想;
  2. 集合框架的使用;
  3. 接口的使用;
  4. JDBC连接数据库;

二、整体架构

**客户端:**

三、具体实现

1、编写db.properties文件,用于配置数据库连接信息。存储数据库连接的详细信息,如驱动程序类名、URL、用户名和密码等。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/soso?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf8&useSSL=false
jdbc.username=数据库名
jdbc.password=数据库密码

注意:

我的数据库是8.0,因此额外设置了参数(5.0不需要设置):allowPublicKeyRetrieval=true&

2、实体类与接口

  • Card(电话号码类)
    • cardNumber 卡号
    • status 状态
  • MoboleCard(嗖嗖移动卡类)
    • cardNumber 卡号
    • username 用户名
    • password 密码
    • serPackage 所属套餐
    • money 账户余额
    • status 状态
  • monthlyConsumptionRecords(月消费记录类)
    • cardNumber 卡号
    • consumAmount 当月消费金额
    • realTalkTime 当月实际通话时长
    • realSMSCount 当月实际发送短信条数
    • realFlow 当月实际上网流量
    • consumeDate 消费日期
  • SerPackage(套餐类)
    • talkTime 通话时长
    • smsCount 短信条数
    • price 套餐月资费
    • flow 上网流量
    • type 套餐类型
  • SerPackageType(套餐类型类)
    • name 套餐名称
  • ConsumInfo(消费信息类)
    • cardNumber 卡号
    • type 消费类型
    • consumData 消费数据
    • consumeDate 消费日期
  • Scene(使用场景类)
    • type 场景类型
    • data 场景消费数据
    • description 场景说明
  • RechargeRecord(充值记录类)
    • amount 充值金额
    • rechargeDate 充值日期
    • cardNumber 卡号

3、功能实现
SosoApp:

public class SosoApp {
    public  static String  loginCardNumber = null; //保存当前登录的用户的手机号码
    private SoSoService soSoService = new SoSoService();
    public static void main(String[] args) {
        new SosoApp().ShowFirstMenu();
    }

    /**
     * 显示一级菜单方法
    */
    public void ShowFirstMenu(){
        System.out.println("********************欢迎使用嗖嗖移动业务大厅!!!********************");
        System.out.println("1.用户登录\t2.用户注册\t3.使用嗖嗖\t4.话费充值\t5.资费说明\t6.申请解冻\t7.退出系统");
        System.out.print("请选择数字进行操作:");
        Scanner input = new Scanner(System.in);
        int choose = input.nextInt();
        switch (choose){
            case 1://登录
                MoboleCard currentUser = soSoService.login();
                loginCardNumber = currentUser.getCardNumber();
                if (currentUser != null){
                    //显示二级菜单
                    ShowSecondMenu();
                }else{ //登录失败
                    //显示一级菜单
                    ShowFirstMenu();
                }
                break;
            case 2://注册
                soSoService.register();
                //显示一级菜单
                ShowFirstMenu();
                break;
            case 3://使用嗖嗖
                soSoService.useSoso();
                ShowFirstMenu();
                break;
            case 4://话费充值
                soSoService.recharge();
                ShowFirstMenu();
                break;
            case 5://资费说明
                soSoService.description();
                ShowFirstMenu();
                break;
            case 6://申请解冻
                soSoService.applyThawing();
                ShowFirstMenu();
                break;
            case 7://退出系统
                soSoService.exitSystem();
                break;
            default:
                System.out.println("【错误提示】:没有该选项,请重新输入");
                //回调
                ShowFirstMenu();
                break;
        }
    }

    /**
     * 二级菜单
     */
    public void  ShowSecondMenu(){
        System.out.println("********************嗖嗖移动用户菜单********************");
        System.out.println("1.本月账单查询\n2.套餐余量查询\n3.打印消费详单\n4.套餐变更\n5.办理退网\n6.修改密码");
        System.out.print("请选择数字进行操作(输入1~6选择功能,其他键返回上一级):");
        Scanner input = new Scanner(System.in);
        int choose = input.nextInt();
        switch(choose){
            case 1:
                soSoService.queryCurrMonthRecord();
                ShowSecondMenu();
                break;
            case 2:
                soSoService.queryBalance();
                ShowSecondMenu();
                break;
            case 3:
                soSoService.printlist();
                ShowFirstMenu();
                break;
            case 4:
                soSoService.changeSerpackage();
                ShowSecondMenu();
                break;
            case 5:
                soSoService.handlenetwork();
                ShowFirstMenu();
                break;
            case 6:
                soSoService.changepassword();
                ShowSecondMenu();
                break;
            default:
                //返回上级菜单
                ShowFirstMenu();
                break;
        }
    }
}

SoSoService:

public class SoSoService {
    Scanner input = new Scanner(System.in);
    //1.登录
    public MoboleCard login() {
        System.out.println("******************************用户登录******************************");
        System.out.println("请输入手机卡号:");
        String cardNo = input.next();
        System.out.println("请输入密码:");
        String password = input.next();

        //调用dao层类的方法
        MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
        MoboleCard moboleCard = moboleCardDao.queryByCardNo(cardNo);

        if (moboleCard == null) {//没有该手机号
            System.out.println("【友情提示】:卡号或密码错误!");
        } else {//有该手机号码
            //判断密码
            if (!moboleCard.getPassword().equals(password)) {
                System.out.println("【友情提示】:卡号或密码错误!");
            } else if (moboleCard.getStatus().intValue() == SystemConstant.MOBOLE_STATUS_FREEZE) { //冻结状态  1: 魔法数字, 可读性差, 容易出错,  使用常量替换
                // public static final
                System.out.println("【友情提示:】该手机号码已冻结,请联系工作人员!");
                System.exit(0);
            } else {
                return moboleCard;
            }
        }
        return null;
    }

    //2.用户注册
    public void register(){
        System.out.println("******************************用户注册******************************");
        //显示可用的卡
        System.out.println("******************************可选的卡号******************************");
        CardDao cardDao = new CardDaoImpl();
        List<Card> cards = cardDao.queryByStatus(SystemConstant.CARD_STATUS_NORMAL);
        for (int i = 0; i < cards.size(); i++) {
            System.out.print((i+1)+"."+cards.get(i).getCardNumber()+"\t");
            if ((i+1)%3 == 0) {
                System.out.println();
            }
        }
        System.out.println();
        //选择卡
        System.out.print("请选择您心仪的卡号:");
        int cardIndex = input.nextInt();
        Card card = cards.get(cardIndex - 1);

        //显示所有套餐
        SerpackageTypeDao serpackageTypeDao = new SerpackageTypeDaoImpl();
        List<SerpackageType> serpackageTypes = serpackageTypeDao.queryAll();
        for (int i = 0; i < serpackageTypes.size(); i++) {
            System.out.println((i+1)+"."+serpackageTypes.get(i).getName()+"\t");
        }
        //选择套餐
        System.out.print("\n请选择套餐:");
        int serpackageTypeIndex = input.nextInt();
        SerpackageType serpackageType = serpackageTypes.get(serpackageTypeIndex-1);

        //根据套餐类型查询套餐明细
        SerpackageDao serpackageDao = new SerpackageDaoImpl();
        Serpackage serpackage = serpackageDao.queryByType(serpackageType.getId());

        System.out.print("请输入姓名:");
        String name = input.next();
        System.out.print("请输入密码:");
        String pwd = input.next();
        double  money;
        do{
            System.out.print("请输入预存话费金额:");
            money  = input.nextDouble();
            if(money < serpackage.getPrice() ){
                System.out.println("您预存的话费不足以支付本月套餐资费,请重新输入!");
            }
        }while (money < serpackage.getPrice() );

        //往用户卡添加一条记录
        MoboleCard moboleCard = new MoboleCard();
        moboleCard.setCardNumber(card.getCardNumber());
        moboleCard.setPassword(pwd);
        moboleCard.setSerPackage(serpackageType.getId());
        moboleCard.setStatus(SystemConstant.MOBOLE_STATUS_NORMAL);
        moboleCard.setUsername(name);
        moboleCard.setMoney(money - serpackage.getPrice() );

        MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
        moboleCardDao.insert(moboleCard);

        //修改卡的状态
        card.setStatus(SystemConstant.CARD_STATUS_FREEZE);
        cardDao.update(card);

        //往充值记录表添加一条充值记录
        RechargeRecord rechargeRecord = new RechargeRecord();
        rechargeRecord.setAmount(money);
        rechargeRecord.setRechargeDate(new Date());
        rechargeRecord.setCardNumber(card.getCardNumber());

        RechargeRecordDao rechargeRecordDao = new RechargeRecordDaoImpl();
        rechargeRecordDao.insert(rechargeRecord);

        System.out.println("【友情提示】:注册成功!!!");
        System.out.println("您的卡的基本信息如下:");
        System.out.println("卡号:"+moboleCard.getCardNumber()+",用户名:"+moboleCard.getUsername()+",当前余额:"+moboleCard.getMoney()+"元");
        System.out.println("套餐信息:");
        System.out.println(serpackageType.getName()+"通话时长:"+serpackage.getTalkTime()+"分钟/月");
    }

    //3.使用嗖嗖
    public void useSoso(){
        System.out.println("******************************使用嗖嗖******************************");
        System.out.print("请输入手机卡号:");
        String cardNumber = input.next();
        //根据手机卡号查询用户卡信息
        MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
        MoboleCard moboleCard = moboleCardDao.queryByCardNo(cardNumber);
        if (moboleCard == null) {//卡号不存在
            System.out.println("【错误提示】:该卡号不存在,请重新输入!!!");
            useSoso();
        }else if (moboleCard.getStatus().intValue() == SystemConstant.MOBOLE_STATUS_FREEZE) {//卡号存在但处于冻结状态
            System.out.println("【错误提示】:该卡号已被冻结,请联系工作人员!!!");
            applyThawing();
        }else{
            //查询卡的套餐
            SerpackageDao serpackageDao = new SerpackageDaoImpl();
            Serpackage serpackage = serpackageDao.queryById(moboleCard.getSerPackage());

            //查询所有场景
            SceneDao sceneDao = new SceneDaoImpl();
            List<Scene> scenes = sceneDao.queryAll();

            //随机一个场景
            Random random = new Random();
            int index = random.nextInt(scenes.size());
            Scene scene = scenes.get(index);

            //根据手机号码与日期查询卡当月月消费情况
            MonthlyConsumptionRecordsDao mcrDao = new MonthlyConsumptionRecordsDaoImpl();
            Date firstDay = DateUtil.getFirstDayDate(new Date());
            MonthlyConsumptionRecords mcr = mcrDao.queryCurrentMonthRecprdByCardNo(cardNumber,firstDay);
            if (mcr == null) {//如果没有月消费记录
                //初始化该卡当月消费记录
                mcr = new MonthlyConsumptionRecords();
                mcr.setCardNumber(cardNumber);
                mcr.setRealFlow(0);
                mcr.setConsumAmount(0.0);
                mcr.setRealTalkTime(0);
                mcr.setRealSmsCount(0);
                mcr.setConsumeDate(firstDay);
                //保存到数据
                mcrDao.insert(mcr);
                //再查询一次,保证得到新添加的月消费记录有id
                mcr = mcrDao.queryCurrentMonthRecprdByCardNo(cardNumber,firstDay);
            }

            //计算卡里的剩余余量
            String type = "";//场景类型
            int free = 0;//套餐中时长剩余量
            if (scene.getType().equals("通话")) {
                //计算通话的余量
                type = "通话";
                free = serpackage.getTalkTime() - mcr.getRealTalkTime();

                //更新月记录表中使用的通话时长:月记录表中原有数据+场景本次使用时长
                mcr.setRealTalkTime(mcr.getRealTalkTime() + scene.getData());
            } else if (scene.getType().equals("短信")) {
                //计算短信的余量
                type = "短信";
                free = serpackage.getSmsCount() - mcr.getRealSmsCount();

                //更新月记录表中使用的短信时长
                mcr.setRealSmsCount(mcr.getRealSmsCount() + scene.getData());
            }else if (scene.getType().equals("上网")) {
                //计算上网的余量
                type = "上网";
                free = serpackage.getFlow() - mcr.getRealFlow();

                //更新月记录表中上网情况
                mcr.setRealFlow(mcr.getRealFlow() + scene.getData());
            }

            //计算额外消费金额
            double cost = 0.0;
            //判断余量是否大于0:大于0则有余量,否则没有
            if (free <= 0) {//没有余量
                cost = calcCost(type,scene.getData());
            }else {//有余量,但余量不足以支撑本次使用)
                if (free - scene.getData() < 0) {
                    cost = calcCost(type,scene.getData() - free);
                }
            }

            //修改月消费记录:原本的金额+本次消费金额
            mcr.setConsumAmount(mcr.getConsumAmount() + cost);
            //保存到数据库
            mcrDao.update(mcr);

            //修改用户卡余额:原有话费-本次消费金额
            if (cost > 0) {
                moboleCard.setMoney(moboleCard.getMoney() - cost);
                //保存到数据库
                moboleCardDao.update(moboleCard);
            }

            //往消费记录表中添加一条新的数据
            Consuminfo consuminfo = new Consuminfo();
            consuminfo.setCardNumber(cardNumber);
            consuminfo.setType(type);
            consuminfo.setConsumeData(scene.getData());
            consuminfo.setConsumeDate(new Date());

            //保存到数据库
            ConsuminfoDao consuminfoDao = new ConsuminfoDaoImpl();
            consuminfoDao.insert(consuminfo);

            //打印消费信息
            System.out.println(scene.getDescription());
        }
    }

    /**
     * 计算消费金额
     * @param  type: 消费类型
     * @param num: 数量
     * @return
     */
    private double calcCost(String type, int num){
        double cost = 0.0;
        if(type.equals("通话")){
            cost = 0.2 * num;
        }else if(type.equals("短信")){
            cost = 0.1 *  num;
        }else if(type.equals("上网")){
            cost = 0.1 *  num;
        }
        return cost;
    }

    //4.话费充值
    public void recharge(){
        System.out.println("******************************话费充值******************************");
        System.out.print("请选择您要充值的卡号:");
        String cardNumber = input.next();

        MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
        MoboleCard moboleCard = moboleCardDao.queryByCardNo(cardNumber);

        if (moboleCard == null) {
            System.out.println("【错误提示】:该手机号不存在,请重新输入!!!");
            recharge();
        }else{
            System.out.print("请输入您需要充值的金额:");
            double money = input.nextDouble();
            if (money < 0) {
                System.out.println("【错误提示】:充值金额必须为正数!!!");
                recharge();
            }else{
                Double balance = moboleCardDao.queryByCardNo(cardNumber).getMoney();

                //往用户卡添加一条记录,修改money的值
                moboleCard.setMoney(money + balance);
                moboleCard.setCardNumber(cardNumber);
                moboleCardDao.update(moboleCard);

                //往充值记录表添加一条充值记录
                RechargeRecord rechargeRecord = new RechargeRecord();
                rechargeRecord.setAmount(money);
                rechargeRecord.setRechargeDate(new Date());
                rechargeRecord.setCardNumber(cardNumber);

                RechargeRecordDao rechargeRecordDao = new RechargeRecordDaoImpl();
                rechargeRecordDao.insert(rechargeRecord);

                System.out.println("【友情提示】:充值成功!\n卡上余额:"+(money+balance));
            }
        }
    }

    //5.资费说明
    public void description(){
        System.out.println("******************************资费说明******************************");
        System.out.println("序号\t\t套餐名称\t\t通话时长(分/月)\t短信条数(条/月)\t上网流量(MB/月)");

        SerpackageDao s = new SerpackageDaoImpl();
        SerpackageTypeDao st = new SerpackageTypeDaoImpl();

        for (int i = 0; i < st.queryByAll().size(); i++) {
            System.out.println(st.queryByAll().get(i).getId()+"\t\t"+st.queryByAll().get(i).getName()+"\t\t"+s.queryAll().get(i).getTalkTime()+"\t\t\t\t"
                    +s.queryAll().get(i).getSmsCount()+"\t\t\t\t"
                    +s.queryAll().get(i).getFlow());
        }
    }

    //6.申请解冻
    public void applyThawing() {
        System.out.println("******************************申请解冻******************************");
        System.out.print("请输入手机号:");
        String cardNo = input.next();
        //在数据库中查找手机号
        MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
        MoboleCard mc = moboleCardDao.queryByCardNo(cardNo);
        if (cardNo.equals(mc.getCardNumber())) {//手机号存在数据库中
            System.out.print("请输入密码:");
            String pwd = input.next();
            if (pwd.equals(mc.getPassword())) {//密码正确
                mc.setStatus(SystemConstant.MOBOLE_STATUS_NORMAL);
                moboleCardDao.updateStatus(mc);
                System.out.println("【友情提示】:申请成功!!!");
                login();
            }else{//密码错误
                System.out.println("【错误提示】:密码错误,请确认后重新输入!!!");
                applyThawing();
            }
        }else{//手机号不存在数据库中
            System.out.println("【错误提示】:该用户不存在!!!");
            exitSystem();
        }
    }

    //7.退出系统
    public void exitSystem() {
        System.out.println("感谢使用嗖嗖移动业务大厅,正在为您退出系统...");
        System.out.println("退出系统成功!!!");
        System.exit(0);
    }


    //二级菜单
    //1.本月账单查询
    public void queryCurrMonthRecord(){
        System.out.println("******************************本月账单查询******************************");
        //查询当前登录的手机号码对应的MoboleCard对象
        MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
        MoboleCard moboleCard = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);

        //查询套餐
        SerpackageDao serpackageDao = new SerpackageDaoImpl();
        Serpackage serpackage = serpackageDao.queryById(moboleCard.getSerPackage());

        MonthlyConsumptionRecordsDao mcrDao = new MonthlyConsumptionRecordsDaoImpl();
        MonthlyConsumptionRecords mcr = mcrDao.queryCurrentMonthRecprdByCardNo(SosoApp.loginCardNumber,DateUtil.getFirstDayDate(new Date()));

        System.out.println("您的卡号: "+moboleCard.getCardNumber()+",当月账单:");
        System.out.println("套餐资费: "+ serpackage.getPrice()+"元");
        double total = serpackage.getPrice();//合计
        if (mcr != null) {
            total += mcr.getConsumAmount();
        }
        System.out.println("合计: "+total+"元");
        System.out.println("账户余额: "+moboleCard.getMoney());
        if (moboleCard.getMoney() < 0) {
            System.out.println("【友情提示】:您的号码已欠费,请尽快充值!!!");
        }
    }

    //2.套餐余额查询
    public void queryBalance(){
        System.out.println("******************************套餐余额查询******************************");
        //查询当前登录的手机号码对应的MoboleCard对象
        MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
        MoboleCard moboleCard = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);

        //查询套餐
        SerpackageDao serpackageDao = new SerpackageDaoImpl();
        Serpackage serpackage = serpackageDao.queryById(moboleCard.getSerPackage());

        MonthlyConsumptionRecordsDao mcrDao = new MonthlyConsumptionRecordsDaoImpl();
        MonthlyConsumptionRecords mcr = mcrDao.queryCurrentMonthRecprdByCardNo(SosoApp.loginCardNumber,DateUtil.getFirstDayDate(new Date()));

        //计算余量
        int talkTime = serpackage.getTalkTime();
        int smsCount = serpackage.getSmsCount();
        int flow = serpackage.getFlow();
        if(mcr != null){
            talkTime = talkTime - mcr.getRealTalkTime() > 0?talkTime - mcr.getRealTalkTime():0;
            smsCount = smsCount - mcr.getRealSmsCount() > 0?smsCount - mcr.getRealSmsCount():0;
            flow = flow - mcr.getRealFlow() >0 ?flow - mcr.getRealFlow():0 ;
        }

        System.out.println("您的卡号: "+moboleCard.getCardNumber()+",套餐内剩余:");
        System.out.println("通话时长: "+talkTime);
        System.out.println("短信条数: "+smsCount);
        System.out.println("上网流量: "+flow/1024+"GB");
    }

    //3.添加和打印消费者清单
    public void printlist(){
        System.out.println("******************************打印消费清单******************************");

        System.out.print("请输入本年需要查询的月份(1~12):");
        int month = input.nextInt();
        int year = DateUtil.getYear(new Date());

        //查询所有客户信息
        ConsuminfoDao consuminfoDao = new ConsuminfoDaoImpl();
        List<Consuminfo> consuminfos = consuminfoDao.queryByCardNo(SosoApp.loginCardNumber,year,month);

        if (consuminfos.size() == 0) {
            System.out.println("【友情提示】:对不起,不存在本卡号"+month+"月消费记录!!!");
        }else{
            System.out.println("序号\t\t类型\t\t数据\t\t日期");
            for (int i = 0; i < consuminfos.size(); i++) {
                System.out.printf("%-8s%-7s%-8s%-25s",(i+1),consuminfos.get(i).getType(),consuminfos.get(i).getConsumeData(),consuminfos.get(i).getConsumeDate());
                System.out.println();
            }
        }
    }

    //4.套餐变更
    public void changeSerpackage() {
        System.out.println("******************************套餐变更******************************");
        //1.查询所有的套餐类型
        SerpackageTypeDao serpackageTypeDao = new SerpackageTypeDaoImpl();
        List<SerpackageType> serpackageTypes = serpackageTypeDao.queryAll();

        //2.根据当前登录的手机号码, 查询当前用户卡信息
        MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
        MoboleCard moboleCard = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);

        //3.用户选择套餐类型
        //根据用户套餐明细id查询套餐明细
        SerpackageDao serpackageDao = new SerpackageDaoImpl();
        Serpackage serpackage = serpackageDao.queryById(moboleCard.getSerPackage());

        //根据用户现在的套餐明细得到套餐类型
        SerpackageType serpackageType = serpackageTypes.stream()
                .filter(stype -> stype.getId().intValue() == serpackage.getType().intValue())
                .collect(Collectors.toList()).get(0);

        System.out.println("***************套餐变更***************");
        System.out.println("您现在的套餐:" + serpackageType.getName());
        //输出所有套餐
        for (int i = 0; i < serpackageTypes.size(); i++) {
            System.out.print((i + 1) + "." + serpackageTypes.get(i).getName() + "\t");
        }
        System.out.print("\n请输入对应数字更换套餐:");
        int choose = input.nextInt();
        //4.判断用户选择的套餐是否是用户卡现在套餐,如果是,提示,
        if (serpackageTypes.get(choose - 1).equals(serpackageType)) {
            System.out.println("【友情提示:】您已经是该套餐用户,无需更换!!!");
            System.out.println("感谢使用嗖嗖移动业务大厅,正在为您退出系统...");
            System.exit(0);
        } else {
            //5.如果不是,根据用户选择的套餐类型,查询对应的套餐明细
            Serpackage chooseSerpackage = serpackageDao.queryByType(serpackageTypes.get(choose - 1).getId());
            //6.判断用户卡的余额是否满足该套餐的月租, 如果不满足, 提示
            if (moboleCard.getMoney().doubleValue() < chooseSerpackage.getPrice().doubleValue()) {
                System.out.println("【友情提示:】对不起,您的余额不足以支付新套餐本月资费,请充值后办理变更套餐业务!!!");
                recharge();
                changeSerpackage();
            } else {
                //7.如果满足, 更换套餐, 修改用户卡信息(套餐,余额)
                moboleCard.setSerPackage(chooseSerpackage.getId());
                moboleCard.setMoney(moboleCard.getMoney() - chooseSerpackage.getPrice());
                moboleCardDao.update(moboleCard);
                //8.打印用户新套餐的明细
                System.out.println("【友情提示:】更换套餐成功!" + serpackageTypes.get(choose - 1).getName()
                        + ":通话时长:" + chooseSerpackage.getTalkTime() + "分钟/月,短信条数:"
                        + chooseSerpackage.getSmsCount() + "条/月,上网流量:"
                        + chooseSerpackage.getFlow() / 1024 + "GB/月,月租:"
                        + chooseSerpackage.getPrice() + "元/月");
            }

        }
    }

    //5.办理退网
    public void handlenetwork(){
        System.out.println("******************************办理退网******************************");
        System.out.println("是否确定办理退网(Y/N)?");
        String choose = input.next();
        if (choose.equals("Y")) {
            CardDao cardDao = new CardDaoImpl();
            Card card = cardDao.queryByCardNo(SosoApp.loginCardNumber);
            //修改卡的状态
            card.setStatus(SystemConstant.CARD_STATUS_NORMAL);
            cardDao.update(card);

            //删除用户表的信息
            MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
            MoboleCard moboleCard = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);
            moboleCardDao.deleteById(moboleCard.getCardNumber());
            System.out.println("【友情提示】:卡号"+moboleCard.getCardNumber()+"办理退网成功!!!");
        }else{
            System.out.println("感谢使用嗖嗖移动业务大厅,正在为您退出系统...");
            System.exit(0);
        }
    }

    //6.修改密码
    public void changepassword() {
        System.out.println("******************************修改密码******************************");
        System.out.print("是否确定修改密码(Y/N)?");
        String choose = input.next();
        if (choose.equals("Y")) {//确定修改密码
            System.out.print("请输入原密码:");
            String psw = input.next();
            MoboleCardDao moboleCardDao = new MoboleCardDaoImpl();
            MoboleCard mc = moboleCardDao.queryByCardNo(SosoApp.loginCardNumber);
            if (psw.equals(mc.getPassword())) {//原密码正确
                System.out.print("请输入新密码:");
                String password = input.next();
                if (password.equals(psw)) {//原密码与新密码一致
                    System.out.println("【错误提示】:新密码不能与原密码一致,请确认后重新输入!!!");
                    changepassword();
                }else{
                    System.out.print("请确认新密码:");
                    String passwords = input.next();
                    if (password.equals(passwords)) {//两次输入的新密码一致
                        //更新数据库中的密码
                        mc.setPassword(password);

                        //保存到数据库
                        moboleCardDao.updatePwd(mc);
                        System.out.println("【友情提示】:卡号"+mc.getCardNumber()+"修改密码成功!!!");
                        System.out.println("请重新登录...");
                        login();
                    }else{
                        System.out.println("【错误提示】:两次输入的密码不一致,请确认后重新输入!!!");
                        changepassword();
                    }
                }
            }else{
                System.out.println("【错误提示】:密码错误,请确认后重新输入!!!");
                changepassword();
            }
        }else{
            System.out.println("感谢使用嗖嗖移动业务大厅,正在为您退出系统...");
            System.exit(0);
        }
    }

}

四、总结

1、编写JDBC的sql语句时要列名需要取别名,因为数据库命名是使用下划线连接,而Java使用的是小驼峰命名法,不取别名执行sql语句时会报异常(空指针异常)。
在这里插入图片描述
在这里插入图片描述
2、消费记录从每月1号开始记录,所以日期格式要转换成年月日(yyyy-MM-dd)
在这里插入图片描述

五、完整代码

链接:https://pan.baidu.com/s/1mgUM3L0IWUlg0NAQzpTrSw
提取码:wmj5

  • 22
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值