soso移动大厅

嗖嗖移动业务大厅

1. 项目需求

中国移动,中国联通,中国电信是国内3大通信运营商,每个运营商都提供了不同的品牌套餐来应对不同的用户群,比如北京移动主要有全球通,神州行,动感地带等3大品牌套餐,每种套餐的内容和费用不同,嗖嗖移动是一个假定的通信运营商,提供了话痨套餐,网虫套餐,超人套餐,各种套餐所包含的服务内容及费用如下表:

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

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

  • 超出的通话: 0.2元/分

  • 超出的短信:0.1元/条

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

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

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

2. 项目使用的技术

  • 面向对象的思想

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

  • 异常处理的合理使用

  • 集合框架的使用

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

  • MySQL数据

  • JDBC操作数据库

3.项目需求分析

3.1 实体类和接口

  • 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 description

  • RechargeRecord(充值记录类)

    • amount 充值金额

  • rechargeDate 充值日期

  • cardNumber 卡号

使用嗖嗖

功能分析

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

序号服务类型描述
0通话问候客户,谁知其如此难缠,通话90分钟
1通话询问妈妈身体状况,本地通话30分钟
2短信参与环境保护实施方案问卷调查,发送短信5条
3短信同时朋友本人已换手机号码,发送短信50条
4上网和女朋友微信视频聊天,使用流量1GB
5上网晚上手机在线追剧,一不留神睡着了,使用流量2GB

2) 模拟消费,进入场景之后,将按场景的描述要求消费套餐余量,如果套餐余量不足,则需要按套餐外的费用规则扣费,成功消费后,添

嗖嗖移动部分代码
package com.dao;

import com.entity.MobileCard;
import com.service.NetSevice;

/**
 * 网虫套餐(子类)
 */
public class NetPackage extends ServicePacKage implements NetSevice {
    /*
     *上网流量
     * 费用68
     */
    public int talkTime = 0;
    public int smsCount = 0;
    public int flow = 3027;

    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/月。");
    }


    @Override
    public 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.money -= 0.1;
                card.consumAmount+=0.1;
            }else {
                temp=i;
                throw new Exception("本次上网"+i+"分钟,余额不足,请充值");
            }
        }
        //关闭
        return temp;
    }
}

加一条消费记录

数据库代码

/*
SQLyog Ultimate v12.08 (64 bit)
MySQL - 5.7.20 : Database - soso
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`soso` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin */;

USE `soso`;

/*Table structure for table `tb_card` */

DROP TABLE IF EXISTS `tb_card`;

CREATE TABLE `tb_card` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `cardNumber` char(11) COLLATE utf8mb4_bin NOT NULL COMMENT '鎵嬫満鍙风爜',
  `status` int(1) DEFAULT '0' COMMENT '鐘舵??: 0:鍙敤 1:绂佺敤',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_card` (`cardNumber`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

/*Data for the table `tb_card` */

insert  into `tb_card`(`id`,`cardNumber`,`status`) values (1,'13652363333',1),(2,'15812346677',1),(3,'18890985868',1),(4,'13677478866',1),(5,'13666557788',1),(6,'13612476521',0),(7,'13609087438',0),(8,'13689011047',0),(9,'13698674344',0),(10,'13678239812',0),(11,'13677411438',0);

/*Table structure for table `tb_consuminfo` */

DROP TABLE IF EXISTS `tb_consuminfo`;

CREATE TABLE `tb_consuminfo` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `card_number` char(11) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '鎵嬫満鍙风爜',
  `type` varchar(50) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '娑堣垂绫诲瀷',
  `consum_data` int(11) DEFAULT NULL COMMENT '娑堣垂鏁版嵁',
  `consume_date` datetime DEFAULT NULL COMMENT ' 娑堣垂鏃ユ湡',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

/*Data for the table `tb_consuminfo` */

insert  into `tb_consuminfo`(`id`,`card_number`,`type`,`consum_data`,`consume_date`) values (6,'15812346677','閫氳瘽',90,'2022-09-13 22:10:44'),(7,'15812346677','鐭俊',5,'2022-09-13 22:12:04'),(12,'18890985868','鐭俊',5,'2022-09-14 11:06:54'),(13,'13652363333','鐭俊',50,'2022-09-14 11:15:18');

/*Table structure for table `tb_mobole_card` */

DROP TABLE IF EXISTS `tb_mobole_card`;

CREATE TABLE `tb_mobole_card` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `card_number` char(11) COLLATE utf8mb4_bin NOT NULL COMMENT '鎵嬫満鍙风爜',
  `username` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT '鐢ㄦ埛鍚?',
  `password` varchar(20) COLLATE utf8mb4_bin NOT NULL COMMENT '瀵嗙爜',
  `ser_package` int(11) NOT NULL COMMENT '鎵?灞炲椁?',
  `money` double(7,2) DEFAULT NULL COMMENT '璐︽埛浣欓',
  `status` int(1) DEFAULT '0' COMMENT '鐘舵??:0:姝e父 1:鍐荤粨',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

/*Data for the table `tb_mobole_card` */

insert  into `tb_mobole_card`(`id`,`card_number`,`username`,`password`,`ser_package`,`money`,`status`) values (1,'13677478866','zhangsan','123',1,10.00,0),(2,'13666557788','lisi','123456',3,10.00,1),(6,'13652363333','寮犱笁','123',2,21.00,0),(7,'15812346677','鏉庡洓','123456',1,10.00,0),(8,'18890985868','鐜嬩簲','123',2,31.50,0);

/*Table structure for table `tb_monthly_consumption_records` */

DROP TABLE IF EXISTS `tb_monthly_consumption_records`;

CREATE TABLE `tb_monthly_consumption_records` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `card_number` char(11) COLLATE utf8mb4_bin NOT NULL COMMENT '鎵嬫満鍙风爜',
  `consum_amount` double(7,2) DEFAULT '0.00' COMMENT '褰撴湀娑堣垂閲戦',
  `real_talk_time` int(11) DEFAULT '0' COMMENT '褰撴湀瀹為檯閫氳瘽鏃堕暱(鍗曚綅:鍒嗛挓)',
  `real_SMS_count` int(11) DEFAULT '0' COMMENT '褰撴湀瀹為檯鍙戦?佺煭淇℃潯鏁?',
  `real_flow` int(11) DEFAULT '0' COMMENT '褰撴湀瀹為檯涓婄綉娴侀噺',
  `consume_date` date DEFAULT NULL COMMENT '鏃ユ湡',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

/*Data for the table `tb_monthly_consumption_records` */

insert  into `tb_monthly_consumption_records`(`id`,`card_number`,`consum_amount`,`real_talk_time`,`real_SMS_count`,`real_flow`,`consume_date`) values (1,'13677478866',0.00,590,80,0,'2022-09-01'),(12,'15812346677',0.00,90,5,0,'2022-09-01'),(13,'13677478866',10.00,650,50,0,'2022-08-01'),(17,'18890985868',0.00,0,0,0,'2022-09-01'),(18,'13652363333',5.00,0,50,0,'2022-09-01');

/*Table structure for table `tb_recharge_record` */

DROP TABLE IF EXISTS `tb_recharge_record`;

CREATE TABLE `tb_recharge_record` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `amount` double(7,2) NOT NULL COMMENT '鍏呭?奸噾棰?',
  `recharge_date` datetime DEFAULT NULL COMMENT '鍏呭?兼椂闂?',
  `card_number` char(11) COLLATE utf8mb4_bin NOT NULL COMMENT '鎵嬫満鍙?',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

/*Data for the table `tb_recharge_record` */

insert  into `tb_recharge_record`(`id`,`amount`,`recharge_date`,`card_number`) values (1,50.00,'2022-08-30 18:19:28','13666557788'),(5,100.00,'2022-09-09 17:04:05','13652363333'),(6,100.00,'2022-09-09 17:10:05','15812346677'),(7,100.00,'2022-09-13 15:51:50','18890985868');

/*Table structure for table `tb_scene` */

DROP TABLE IF EXISTS `tb_scene`;

CREATE TABLE `tb_scene` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `type` varchar(30) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '鍦烘櫙绫诲瀷',
  `data` int(11) DEFAULT NULL COMMENT '鍦烘櫙娑堣垂鏁版嵁',
  `description` varchar(200) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '鍦烘櫙鎻忚堪',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

/*Data for the table `tb_scene` */

insert  into `tb_scene`(`id`,`type`,`data`,`description`) values (1,'閫氳瘽',90,'闂?欏鎴?,璋佺煡鍏跺姝ら毦缂?,閫氳瘽90鍒嗛挓'),(2,'閫氳瘽',30,'璇㈤棶濡堝韬綋鐘跺喌,鏈湴閫氳瘽30鍒嗛挓'),(3,'鐭俊',5,'鍙備笌鐜淇濇姢瀹炴柦鏂规闂嵎璋冩煡,鍙戦?佺煭淇?5鏉?'),(4,'鐭俊',50,'鍛婅瘔鏈嬪弸鏈汉宸叉崲鎵嬫満鍙风爜,鍙戦?佺煭淇?50鏉?'),(5,'涓婄綉',1024,'鍜屽コ鏈嬪弸寰俊瑙嗛鑱婂ぉ,浣跨敤娴侀噺1GB'),(6,'涓婄綉',2048,'鏅氫笂鎵嬫満鍦ㄧ嚎杩藉墽,涓?涓嶇暀绁炵潯鐫?浜?,浣跨敤娴侀噺2GB');

/*Table structure for table `tb_serpackage` */

DROP TABLE IF EXISTS `tb_serpackage`;

CREATE TABLE `tb_serpackage` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `talk_time` int(11) DEFAULT NULL COMMENT '閫氳瘽鏃堕暱',
  `sms_count` int(11) DEFAULT NULL COMMENT '鐭俊鏉℃暟',
  `price` double(7,2) DEFAULT NULL COMMENT '濂楅鏈堣祫璐?',
  `flow` int(11) DEFAULT NULL COMMENT '涓婄綉娴侀噺',
  `type` int(11) DEFAULT NULL COMMENT '濂楅绫诲瀷',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

/*Data for the table `tb_serpackage` */

insert  into `tb_serpackage`(`id`,`talk_time`,`sms_count`,`price`,`flow`,`type`) values (1,600,100,58.00,0,1),(2,0,0,68.00,20480,2),(3,300,50,78.00,10240,3);

/*Table structure for table `tb_serpackage_type` */

DROP TABLE IF EXISTS `tb_serpackage_type`;

CREATE TABLE `tb_serpackage_type` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '涓婚敭',
  `name` varchar(50) COLLATE utf8mb4_bin NOT NULL COMMENT '濂楅绫诲瀷鍚嶇О',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

/*Data for the table `tb_serpackage_type` */

insert  into `tb_serpackage_type`(`id`,`name`) values (1,'璇濈棬濂楅'),(2,'缃戣櫕濂楅'),(3,'瓒呬汉濂楅');

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值