嗖嗖移动业务大厅项目总结

目录

1.项目难点

1.用户注册

2.使用嗖嗖

2.项目出现的问题

1.缺少参数造成程序运行错误

2.在调用数据库时使用别名造成程序运行错误

3.功能缺失

3.完成项目的收获


1.项目难点

1.1用户注册

思路分析:

首先查询数据库卡号表,将没有注册过的卡号在idea显示出来。其次查询数据库套餐表和套餐费用表,将可供选择的套餐和费用展示出来,接着填写用户个人信息以及预存话费,如果预存话费不够则不能注册。

 public void regist() throws CardNmberAndPasswordException {
        System.out.println("*****可选择的卡号*****");
        String sql1 = "SELECT id,cardNumber,STATUS FROM tb_card WHERE STATUS=0";
        List<Card> list1 = JDBCUtil.executeQuery(sql1, Card.class);
        for (int i = 0; i < list1.size(); i++) {
            System.out.print((i + 1) + "." + list1.get(i).getCardNumber() + "\t");
            if ((i + 1) % 3 == 0)
                System.out.println();
        }
        System.out.println("请选择你的卡号: ");
        int index = sc.nextInt();
        while (index < 1 || index > list1.size()) {
            System.out.println("卡号不存在");
        }
        cardNum = list1.get(index - 1).getCardNumber();
        String sql2 = "SELECT id,NAME FROM tb_serpackage_type";
        List<SerpackageType> list2 = JDBCUtil.executeQuery(sql2, SerpackageType.class);
        for (int i = 0; i < list2.size(); i++) {
            System.out.print((i + 1) + "." + list2.get(i).getName() + "\t");
        }
        System.out.println("请选择你的套餐:");
        int  type = sc.nextInt();
        while (type < 1 || type > list2.size()) {
            System.out.println("没有该套餐");
            type = sc.nextInt();
        }
        System.out.println("请输入你的姓名:");
        username = sc.next();
        System.out.println("请输入你的密码:");
        password = sc.next();
        System.out.println("请输入你预存的话费:");
        double amount = sc.nextDouble();
        String sql3 = "SELECT id,talk_time talkTime,sms_count smsCount,price,flow," +
                "TYPE FROM tb_serpackage";
        List<Serpackage> list3 = JDBCUtil.executeQuery(sql3, Serpackage.class);
        //获取套餐月资费 price
        price = list3.get(type - 1).getPrice();
        while (amount <= 0 || amount< price) {
            System.out.println("您预存话费不足以支付本月套餐费用,请重新输入");
            amount = sc.nextDouble();
        }
        money = amount - price;
        System.out.println("注册成功!" + "卡号:" + cardNum + "," + "用户名:" + username + "," + "当前余额:" + money);
        serPackage = list3.get(type - 1).getType();
        String sql4 = "UPDATE tb_card SET STATUS =1 WHERE cardNumber=?";
        String sql5 = "insert into tb_mobole_card values (?,?,?,?,?,?,?)";
        String sql6 = "insert into tb_monthly_consumption_records values (?,?,?,?,?,?,?)";
        status = JDBCUtil.executeUpdate(sql4, cardNum);
        JDBCUtil.executeUpdate(sql5, id, cardNum, username, password, serPackage, money, status);
        JDBCUtil.executeUpdate(sql6, id, cardNum, 0, 0, 0, 0, DateUtil.getCurrentMonthFirstDay());
        System.out.println(list2.get(type-1).getName() + "通话时长" + list3.get(type - 1).getTalkTime() + "分钟/月");

    }

1.2.使用嗖嗖

思路分析:使用嗖嗖一共有6个具体场景,分为3大类(上网,通话,短信),每个卡号套餐都有各自对应的功能。首先我们查询电话的套餐类型,对应使用场景,在使用之前我们先判断卡里的余额是否为正,卡里有钱时我们才能使用,当我们使用超出套餐余量时,就会扣除相应的费用,当卡里余额不足时就会禁止使用。

 String sqlmc1 = "SELECT card_number cardnumber,username,PASSWORD,ser_package serPackage,money,STATUS" +
                " FROM tb_mobole_card WHERE card_number=?";
        List<MoboleCard> listmc1 = JDBCUtil.executeQuery(sqlmc1, MoboleCard.class, mlist.get(0).getCardNumber());
        money = listmc1.get(0).getMoney();
        if(money<=0){
            System.out.println("【友情提示】:您的余额不足,请充值后使用!");
            MoboleCardDaoImpl mcdi=new MoboleCardDaoImpl();
                mcdi.dorecharge();
                scene(mlist);

        }else {
        String sqlmcr1 = "SELECT card_number cardNumber,consum_amount consumAmount,real_talk_time realTalkTime,\n" +
                "real_SMS_count realSMSCount,real_flow realFlow,consume_date consumeDate\n" +
                "FROM tb_monthly_consumption_records WHERE card_number=?";
        List<MonthlyConsumptionRecords> listmcr1 = JDBCUtil.executeQuery(sqlmcr1, MonthlyConsumptionRecords.class,
                mlist.get(0).getCardNumber());
        realTalkTime = listmcr1.get(0).getRealTalkTime();
        realSMSCount = listmcr1.get(0).getRealSMSCount();
        realFlow = listmcr1.get(0).getRealFlow();
        consumAmount = listmcr1.get(0).getConsumAmount();

套餐3代码

String sqlsc3 = "select type,data,description from tb_scene where type = ? or type = ? or type = ?";
                    List<Scene> listsc3 = JDBCUtil.executeQuery(sqlsc3, Scene.class, "通话", "短信", "上网");
                    int index3 = r.nextInt(listsc3.size());
                    type = listsc3.get(index3).getType();
                    data = listsc3.get(index3).getData();
                    String sqlci5 = "INSERT INTO tb_consuminfo VALUES (?,?,?,?,?)";
                    JDBCUtil.executeUpdate(sqlci5, id, mlist.get(0).getCardNumber(), type, data, consumeDate);
                    String sqlci6 = "SELECT card_number cardNumber,type,consum_data consumData,consume_date consumeDate" +
                            " FROM tb_consuminfo WHERE card_number=? and type=?";
                    List<Consuminfo> listci6 = JDBCUtil.executeQuery(sqlci6, Consuminfo.class, mlist.get(0).getCardNumber(), type);
                    consumData = listci6.get(listci6.size() - 1).getConsumData();
                    switch (type) {
                        case "上网":
                            realFlow = realFlow + consumData;
                            if(realFlow>10240){
                                consumAmount = (realFlow - 10240) * 0.1;
                                System.out.println("您的流量不够,已扣除相应费用");
                            }else {
                                consumAmount=0;
                            }
                            break;
                        case "短信":
                            realSMSCount = realSMSCount + consumData;
                            if (realSMSCount > 50) {
                                consumAmount = (realSMSCount - 50) * 0.1;
                                System.out.println("您的短信条数不够,已扣除相应费用");
                            } else {
                                consumAmount = 0;
                            }
                            break;
                        case "通话":
                            realTalkTime = realTalkTime + consumData;
                            if (realTalkTime > 300) {
                                consumAmount = (realTalkTime - 300) * 0.2;
                                System.out.println("您的通话时长不足,已扣除相应费用");
                            } else {
                                consumAmount = 0;
                            }
                            break;
                    }
                    money=money-consumAmount;
                    String sqlmcr6 = "UPDATE tb_monthly_consumption_records SET consum_amount=?,real_talk_time=?,real_SMS_count=?,real_flow=?," +
                            "consume_date=? WHERE card_number=?";
                    JDBCUtil.executeUpdate(sqlmcr6,consumAmount,realTalkTime, realSMSCount, realFlow, DateUtil.getCurrentMonthFirstDay(), mlist.get(0).getCardNumber());
                    String sqlmc4=" UPDATE tb_mobole_card SET money=? WHERE card_number=?";
                    JDBCUtil.executeUpdate(sqlmc4,money,mlist.get(0).getCardNumber());
                    System.out.println(listsc3.get(index3).getDescription());
                    break;

2.项目出现的问题

2.1.缺少参数造成程序运行错误

错误代码

 String sql = "select id,card_number cardNumber,username,password,ser_package serPackage,money,\n" +
                "status from tb_mobole_card where card_number=? " + "and password=?";
        List<MoboleCard> mlist = JDBCUtil.executeQuery(sql, MoboleCard.class);

正确代码

 String sql = "select id,card_number cardNumber,username,password,ser_package serPackage,money,\n" +
                "status from tb_mobole_card where card_number=? " + "and password=?";
        List<MoboleCard> mlist = JDBCUtil.executeQuery(sql, MoboleCard.class, cardNumber, password);

2.2.在调用数据库时使用别名造成程序运行错误

错误代码

 String sql = "select id,card_number cardNumber,username,password,ser_package serPackage,money,\n" +
                "status from tb_mobole_card where cardNumber=? " + "and password=?";
        List<MoboleCard> mlist = JDBCUtil.executeQuery(sql, MoboleCard.class, cardNumber, password);

正确代码

 String sql = "select id,card_number cardNumber,username,password,ser_package serPackage,money,\n" +
                "status from tb_mobole_card where card_number=? " + "and password=?";
        List<MoboleCard> mlist = JDBCUtil.executeQuery(sql, MoboleCard.class, cardNumber, password);

以上两种错误在编译时都不会报错,但是在运行时会报错,这也就导致了在找bug时很难发现问题,需要特别注意。

2.3.功能缺失

在实现注册功能时没有充分理解项目功能的需求,从而注册成功后没有显示全套餐的具体信息给用户。

改正后的代码

System.out.println(list2.get(type-1).getName() + "通话时长" + list3.get(type - 1).getTalkTime() + "分钟/月");
        System.out.println(list2.get(type-1).getName() + "短信条数" + list3.get(type - 1).getSmsCount() + "条/月");
        System.out.println(list2.get(type-1).getName() + "上网流量" + list3.get(type - 1).getFlow() + "MB/月");

这样就能将套餐详情完全展示出来

3.完成项目的收获

在经历了一周时间的代码编写,我收获到了很多。这是通过自己的努力实现的第一个项目,同时也将是我程序生涯的开头。这个项目作为我们java部分的总结训练,内容覆盖全面,涉及广泛,其中涉及到了数据库的知识,包括增删查改。还有JDBC操作数据库。还用到了java中的属性,方法,集合,接口,随机数,if语句,switch语句,while循环等,涉及到的知识面相当广泛。在我一开始写的时候根本不知道这些如何去使用,知识的理解程度不够,进度相对于其他人也慢了一些。在编写的过程中也出现了一些结构上的问题,并且重新去组织思路,还有一些标点符号的错误,最难写的就是命名,命名不规范对于自己查看代码也非常困难。在完成了这个项目之后,我对于命名的感悟也得到了提升。总的来说,这次项目经历让我收获颇丰。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值