嗖嗖移动业务大厅——功能分析

5 篇文章 0 订阅
4 篇文章 0 订阅
该博客详细介绍了移动通信系统的主要功能,包括用户登录、注册、充值、套餐变更、消费记录查询等操作。在登录和注册过程中,涉及到异常处理和数据验证。系统还实现了话费余额管理,当余额不足时提醒用户充值,并提供了账单查询、套餐余量查询和消费详情打印等功能。此外,还讨论了代码规范和数据库操作技巧。
摘要由CSDN通过智能技术生成
菜单级别功能描述
主菜单用户登录

输入正确的手机号码和密码进入二级菜单列表

通过select语句,方法传入cardNumber和password,使用工具类的executeQuery(),如果返回的list集合==null 或 为空集合,则抛出异常“卡号或密码错误”;如果返回的list集合的第一个的状态为禁用状态,则抛出异常“该号码已被禁用”。自定义异常LoginException继承exception, 打印异常信息。

null和isEmpty()的区别?

null用于判断有没有这个集合对象,判断list这个对象有没有被实例化;

isEmpty()用于判断集合内容是否为空,判断list里是否有元素。

主菜单用户注册

录入信息并开卡,用户输入的信息包括:选择卡号,选择套餐类型,输入用户名和密码,预存话费金额(预存话费金额必须满足以支付所选套餐的一个月的费用)

查出状态为正常(0)的可用卡号,三个一行打印。

使用常量 NORMAL_MOBOLECARD_STATUS 代替魔鬼数字

魔鬼数字:即难以被理解的且没有注释的常量(0、1这种)表示某个有意义的参数来使用。

三个一行:如果(i+1) % 3 ==0 打印换行符

选择卡号的序号与集合的下标不一样 序号-1 = 集合下标

套餐序号同理

充值:根据套餐id查询套餐价格,判断充值金额是否大于等于套餐价格,

如果大于,添加记录到mobileCard表、consumeInfo表,并且修改card表的状态为禁用。

如果小于,提示重新输入。 while (money<price)

主菜单使用嗖嗖

输入正确的手机号码和密码之后,随机进入本号码所属套餐可以支持的一个场景,消费套餐余量或者话费余额,并记录消费信息.当话费余额不足时,抛出异常提醒用户充值

随机使用情景模式:查询Scene表,使用随机数获取list下标

int index = new Random().nextInt(scenes.size());

Random()产生的随机数在 [0, 1)

通过输入的卡号查询卡的是否存在或是否被禁用,若为正常,通过该卡的套餐type查找Serpackage表,获取套餐信息。

根据卡号、当前的年和月查询查找MonthlyConsumptionRecords表,得到卡的月消费记录。如果为空,添加都为0的数据,获取当前月份的第一天给consumeDate属性赋值。
//得到当前月的第一天的日期
public static Date getFirstDayDate(){
    //得到当前系统日期
    Calendar c = Calendar.getInstance();
    //设置天为1
    c.set(Calendar.DATE,1);
    //返回
    return c.getTime();
}
添加后,重新通过时间和卡号查询数据库,给对象赋值得到id。因为数据库id为自增的,对象没有id。

根据场景类型计算对应卡的能使用的数据的最大值,通过场景类型判断区别。如:随机场景类型为“通话”, 计算卡的最大通话时间。

最大通话时间= 套餐余额(套餐总值-月已消费)+money/规则计费(每分钟0.2元)

设置月消费记录的通话总计
最后判断,如果最大通话时间大于场景使用数据,将最大通话时间和原本的已消费时间的和赋给月消费记录对象;如果小于,将场景使用数据和已消费时间的和赋值。
mcRecord.setRealTalkTime(data > max?(max+talkTime):(data+talkTime));//原本有的+新花的
目的是给月消费记录表累加数据。

判断是否超出可用的最大值,如果超出,打印提示“请充值后再使用。”

修改三个表
添加消费记录,更新ConsumInfo表,设置消费数据为本次消费实际数据

修改移动卡表
        如果套餐剩余数量大于实际使用数量:
                 消费金额= (实际使用数量-套餐剩余数量)*计费;
                 修改卡的余额=(原来的余额-消费金额)
        如果小于:消费金额= 0;卡的余额不变

修改月记录表,修改当月消费金额 = (这次花的+原本花过的)

最后打印消费场景

主菜单话费充值

输入正确的用户名和密码之后,可为该卡号充值

查找mobile卡是否存在,输入充值金额,修改mobile卡的余额,添加充值记录到tb_recharge_record

主菜单资费说明

提供各品牌套餐所包含的通话时长,上网流量,短信条数,月费用等

select 资费套餐表 返回list集合 遍历打印

显示套餐名和资费情况(待开发 表连接查询返回的对象是?)

主菜单退出系统

退出本系统

System.exit(0);

二级菜单本月账单查询

可查询该卡号的套餐费用,实际消费金额,账户余额

实际消费金额 = 套餐资费+消费金额(月消费记录表)

账户余额:mobile表的money

二级菜单套餐余量查询

可查询该卡号的套餐余量

用套餐类-月消费记录类  (套餐通话时长-实际通话时长)

套餐通话时长=通过mobileCard的serPackage查找serpackage表中的数据

剩余通话时长=套餐类的talkTime- cardNumber为xxx的月消费记录的realTalkTime

如果剩余的数据小于0 设置剩余数据=0

二级菜单打印消费详情

输入正确的卡号和密码后,可打印当前卡号用户的消费详单, 使用输出流把用户信息输出到文件

输入本年需要查询的月份  查找ConsumInfo表 

格式指定月份  大于等于10 ”10月“ 小于10  补0  ”08月“

public static String formatMonth(int month){
    return month >= 10 ? month +"" : "0"+month;
}

得到今年某月
String timeStr = DateUtil.getCurrentYear()+"-"+DateUtil.formatMonth(month)+"%";
//返回当前系统的年
public static int getCurrentYear(){
    Calendar c = Calendar.getInstance();
    return c.get(Calendar.YEAR);
}

如果返回值不为空,打印信息;如果为空,提示“不存在此号码此月的记录”

输出到文件

将打印的信息拼接到StringBuffer上,创建文件夹,创建文件名为“卡号 月份的消费记录”的文件,用字符输出流打印,每次调用方法,都是覆盖文件原有内容写入。

二级菜单套餐变更

可变更为其他套餐类型,变更后话费余额需减去变更后的套餐费用,余额不足时需要给出信息提示,套餐变更后重新统计卡中实际消费数据以及当月消费金额

查找套餐类型表,显示所有套餐名称,用户进行选择,输入序号,通过序号-1得到套餐id,通过套餐id查找套餐表的资费,判断用户选择的套餐是否是目前的套餐。如果是,提示”无需更改“;如果不是,判断用户money是否大于等于套餐资费。如果不够,提示”请充值“;如果够,修改表:

修改mobileCard 的ser_package、修改money = money-资费 

UPDATE tb_mobile_card set ser_package = ?, money = ? where card_number = ?

二级菜单办理退网

输入正确的卡号和密码后,可以从已注册的号码列表中删除本号码,并退出系统

修改card表中的status,在mobile卡中删除。或修改mobile卡的状态为禁用

DELETE FROM tb_mobile_card where card_number = ?

添加退网记录表 定时器(待开发)

写代码的规范

命名规范:数据库列名:单词与单词直接 _  ; 数据库表名:tb_user ;对象属性名:小驼峰

分层 业务逻辑梳理  要有注释

pojo的对象的属性类型必须为包装类 如 Integer 

写方法时注意空指针问题 用if或抛异常处理

sql语句避免出现*

相同的代码学会写工具类 使用工具类的增删改查方法 如何实现表连接

设置全局变量可减少代码重复参数 如mobileCard

Date源码:

public Date() {

         this(System.currentTimeMillis());

}

如果仅仅是需要毫秒数,那么完全可以使用System.currentTimeMillis()去代替new Date()

自增

alter table question_info auto_increment = 1; # 自增从删除后的列的最大值后
 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值