嗖嗖移动业务大厅(JDBC)

news2024/9/25 5:24:19

一、项目介绍

1、项目背景

        该项目旨在模拟真实的移动业务大厅,。用户可以注册新卡、查询账单、管理套餐、充值话费、打印消费记录等功能。同时,项目还模拟了用户使用场景,如通话、上网、发短信等,并根据套餐规则进行相应的扣费和消费记录。

2、项目目标:

        开发一个名为“嗖嗖移动业务大厅”的系统,为用户提供以下功能:

  • 用户管理: 用户注册、登录、退网。
  • 套餐管理: 查询套餐余量、变更套餐、打印消费详情。
  • 账单管理: 查询本月账单、充值话费。
  • 消费模拟: 模拟用户通话、上网、发送短信等场景,并记录消费信息。
  • 其他功能: 查看资费说明、退出系统。

3、项目技术:

  • 面向对象: 使用面向对象的思想设计类和接口,实现封装、继承和多态。
  • 异常处理: 合理使用异常处理机制,提高程序的健壮性。
  • 集合框架: 使用集合框架存储和管理数据。
  • I/O 操作: 实现文件的写入操作,保存消费记录。
  • 数据库: 使用 MySQL 数据库存储用户信息、消费记录等数据,并通过 JDBC 进行数据库操作。

4、项目功能:

  1. 用户登录/注册: 用户可以输入手机号和密码登录系统,或者注册新用户。
  2. 使用嗖嗖: 系统随机模拟用户进行通话、上网、发送短信等操作,并记录消费信息。
  3. 本月账单查询: 查询当前用户的套餐费用、实际消费金额和账户余额。
  4. 套餐余量查询: 查询当前用户的套餐余量,包括通话时长、上网流量和短信条数。
  5. 打印消费详情: 将用户的消费记录写入文件,并打印出来。
  6. 套餐变更: 用户可以根据需要变更套餐类型。
  7. 办理退网: 用户可以注销手机卡并退出系统。
  8. 话费充值: 用户可以给手机卡充值话费。
  9. 查看资费说明: 查看嗖嗖移动提供的所有套餐的资费说明。

补充功能:

  1. 查询余额:用户可以输入手机号进行查询余额操作。
  2. 在线小说阅读:用户登录之后可进入二级菜单进行在线小说阅读操作
  3. 相册:用户登录之后可查看相册中的照片

5、项目实现:

        项目使用 Java 语言开发,通过JDBC操作 MySQL 数据库对数据“增、删、改、查”。项目代码结构清晰,功能完善,能够满足用户的基本需求。

为了让大家更好的了解到这个项目,我将展示出该项目的效果图;

 一级菜单界面和功能展示:

注册功能展示: 

 使用嗖嗖功能展示

 查询余额效果展示:

 话费充值功能展示:

 充值后查看使用嗖嗖功能能否正常使用:

可以正常使用;

 资费说明效果图展示:

 登录展示:

        在这里的登录有一个功能,当手机号欠费状态时,也会提示登录失败,由于我这里账号处于正常状态所以不作演示;

 二级菜单界面和功能展示:

本月账单查询功能展示:

 套餐余量查询:

 打印消费详单展示(部分):

 学富五车(在线阅读)效果图展示:

 相册效果展示:

备注:本人真实照片 ,不处

 套餐变更功能展示:

参考下图资费说明,套餐已经变更为超人套餐; 

 退网效果展示(退网后直接返回第一菜单,而且登录失败,账号不能使用):

 效果展示完毕(^_^)

二、技术实现

1、Java面向对象技术

1. 封装

  • 数据库连接封装: 将数据库连接信息(如 URL、用户名、密码)封装在 DataSource 或 DBConnection 类中,方便管理和复用。
  • 数据库操作封装: 将 SQL 语句和数据库操作(如增删改查)封装在方法中,提高代码的可读性和可维护性。
  • 结果集封装: 将查询结果封装在 ResultSet 对象中,方便获取和处理数据。

2. 继承

  • JDBC 接口继承: JDBC 提供了一系列接口,如 ConnectionStatementResultSet 等,实现了对数据库操作的抽象。开发者可以通过继承这些接口,创建自己的数据库操作类,实现更灵活的功能。
  • 异常处理继承: JDBC 异常类继承自 SQLException,开发者可以自定义异常类,扩展异常处理功能。

3. 多态

  • 数据库连接池: 使用 DataSource 接口的实现类,可以创建数据库连接池,实现数据库连接的复用,提高性能。
  • 结果集处理: 使用 ResultSetMetaData 接口获取结果集的元数据,可以根据不同的数据类型进行处理。

4. 接口

  • JDBC 接口定义: JDBC 接口定义了数据库操作的标准,方便开发者进行数据库编程。
  • 数据库驱动实现: 数据库驱动实现了 JDBC 接口,提供对特定数据库的操作功能。

5. 其他作用

  • 对象关系映射 (ORM): 使用面向对象技术可以将数据库表映射为 Java 对象,简化数据库操作。
  • 数据库连接池管理: 使用面向对象技术可以创建数据库连接池管理类,实现数据库连接的创建、管理和回收。
  • 数据库事务管理: 使用面向对象技术可以创建数据库事务管理类,实现事务的开始、提交和回滚。

2、JDBC操作技术(三层架构思想)

1. 数据库连接

  • JDBC 提供了连接数据库的标准方法,例如 DriverManager.getConnection(),方便开发者建立与数据库的连接。

2. 数据库操作

  • JDBC 提供了执行 SQL 语句的方法,例如 Statement.execute()PreparedStatement.executeUpdate() 等,方便开发者对数据库进行增删改查操作。
  • JDBC 提供了结果集处理的方法,例如 ResultSet.next()ResultSet.getString() 等,方便开发者获取查询结果。

3. 数据类型转换

  • JDBC 提供了数据类型转换的方法,例如 ResultSet.getInt()ResultSet.getString() 等,方便开发者将数据库中的数据转换为 Java 数据类型。

4. 事务管理

  • JDBC 提供了事务管理的方法,例如 Connection.setAutoCommit(false)Connection.commit()Connection.rollback() 等,方便开发者控制事务的提交和回滚。

5. 数据库连接池

  • JDBC 可以与数据库连接池技术结合使用,提高数据库连接的效率和性能。

3、MySQL数据库创建

1. 数据存储

  • MySQL 存储了大量数据,包括用户信息、订单信息、商品信息等。
  • 开发者可以使用 JDBC 连接到 MySQL 数据库,并对其进行增删改查操作,从而实现对数据的存储和管理。

2. 数据查询

  • 开发者可以使用 JDBC 执行 SQL 查询语句,从 MySQL 数据库中获取所需的数据。
  • JDBC 提供了 ResultSet 对象来存储查询结果,方便开发者进行处理和分析。

3. 数据更新

  • 开发者可以使用 JDBC 执行 SQL 更新语句,修改 MySQL 数据库中的数据。
  • 例如,可以使用 PreparedStatement.executeUpdate() 方法更新用户信息、订单状态等。

4. 事务管理

  • 开发者可以使用 JDBC 进行事务管理,确保数据库操作的原子性、一致性、隔离性和持久性。
  • 例如,可以使用 Connection.setAutoCommit(false) 开启事务,使用 Connection.commit() 提交事务,使用 Connection.rollback() 回滚事务。

4、集合框架

  • ResultSet 对象是 JDBC 中用于存储查询结果的类,它本身实现了 Iterable 接口,可以直接用于循环遍历。
  • 开发者可以使用集合框架将 ResultSet 中的数据封装到 List、Set 或 Map 等集合中,方便后续处理和分析。
  • 例如,可以将查询结果封装到 List 集合中,然后使用 for-each 循环遍历每个元素,或者使用 Stream API 进行处理。

5、I/O流

  • 开发者可以使用 IO 流实现文件上传和下载功能,例如使用 FileInputStream 和 FileOutputStream 读写文件数据,并使用 JDBC 执行 SQL 语句将文件数据写入数据库或从数据库中读取文件数据。

三、系统设计

为了方便大家更能清晰的梳理项目,我用图片的形式展示项目系统设计:

 具体的工具使用方法将在后面代码中展示;

四、数据库设计

Tb_Card(选电话号码表)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

Id

Int

主键,自增

主键

1

CardNumber

char

11

唯一,关联

电话号码

2

status

Int

2

默认0

0可选1不可选

状态

tb_serpackage_type(套餐类型)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

Id

Int

11

主键,自增

Id

2

name

varchar

50

NULL

套餐类型名称

3

type

Int(2)

6

NULL

套餐类型

tb_serpackage(套餐)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

Id

Int

主键,自增

Id

2

talk_time

Int

6

NULL

通话时长

3

sms_count

Int

6

NULL

短信条数

5

flow

Int

6

NULL

上网流量

4

price

Double

7,2

NULL

套餐月资费

6

type

Int(2)

6

NULL

套餐类型

Tb_Mobole_Card(嗖嗖移动卡表)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

Id

Int

主键,自增

Id

2

card_number

char

11

外键,关联,唯一

手机号码

3

ser_package

Int

2

外键关联tb_serpackage

所属套餐

4

Username

Vachar

11

用户名

5

Password

Vachar

12

密码

7

Money

double

7,2

0

账户余额

8

status

Int

1

0

0-正常,1-冻结

状态

Tb_monthly_consumption_records(月消费记录表)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

Id

Int

主键,自增

Id

2

card_number

char

11

外键,关联,唯一

手机号码

3

Consum_Amount

Int

2

0

所属套餐

4

Real_Talk_Time

int

6

0

当月实际通话时长

5

Real_SMSCount

int

6

0

当月实际发送短信条数

6

Real_Flow

Int

6

0

当月实际上网流量

7

ConsumeDate

Date

消费日期

tb_recharge_record(充值记录)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

Id

Int

主键,自增

Id

2

card_number

char

11

外键,关联,唯一

手机号码

3

amount

double

7,2

充值金额

4

recharge_date

date

6

 NULL

充值时间

tb_consuminfo(消费记录)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

Id

Int

主键,自增

Id

2

card_number

char

11

关联,唯一

手机号码

3

type

varchar

50

Null

消费类型

4

consum_data

int

6

 NULL

消费数据

5

consume_date

date

Null

消费日期

tb_scene(模拟场景)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

Id

Int

主键,自增

Id

2

type

char

30

NULL

场景类型

3

data

Int

6

NULL

场景类型序号

4

description

Double

7,2

NULL

场景描述

 tb_novel(小说图片地址)

序号

字段名

数据类型

长度

是否为null

默认值

要求

备注

1

id

Int

11

主键

id

2

path

varchar

60

小说照片地址

五、难点分析

        对于整个项目,我认为最有难度的就是使用soso了;因为他涉及到的SQL语句比较多,逻辑结构也比较复杂;

        下面我将用思维导图对使用嗖嗖这个功能进行分析;

 图片链接(我把图片放到了SM.MS图床上面):https://sm.ms/image/SiV1q5ncKvI7PuH

请结合流程图分析代码;

6、结语

        在嗖嗖移动大厅的编写过程中,我遇到了很多错误,经过我将近俩天时间的修改,将bug的数量降低到了5%左右甚至更少,但是我不能保证我的代码绝对正确,我的思路就是答案,但我能保证,我的嗖嗖移动业务大厅的主要功能都基本可以正常使用;希望我的项目对在做嗖嗖移动业务大厅项目的你有所帮助;

        每个人的想法都不一样,你自己的项目才是最棒的;下面我将我的项目分享给大家,仅做参考;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975949.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AutoCAD ObjectArx二次开发(二) 关于程序入口的介绍

在上一章节中,我们介绍了环境搭建和程序插件的加载,基本的编程模板(框架)已经准备就绪。接下来,我们将开始编写自己的业务逻辑。ARX开发的核心在于将自定义函数注册到库中,并通过指定的调用命令来实现功能。…

【论文解读|Data Intelligence】 Large Knowledge Model: Perspectives and Challenges

论文链接:Large Knowledge Model: Perspectives and Challenges (sciengine.com) 来源: Data Intelligence 论文介绍: 文章简述了人类语言和世界知识的紧密关系,对比了语言模型和知识图谱在表示和处理人类知识方面的优缺点&…

Candance Allegro 入门教程笔记:PCB封装库的组成元素

文章目录 一、PCB封装库的组成元素二、使用Padstack Edictor制作封装焊盘引脚三、PCB Editor软件创建贴片封装(STM32F103T8U6 QFN36 为例)1.引入库2.读入数据 一、PCB封装库的组成元素 一般来说,针对于Allegro软件,完整的封装是由…

blender里的辉光

cycle的辉光, 点开支持后期效果 eevee的辉光,直接点bloom就行。 eevee的透明

GORM更新操作(Save、Update、Updates)

在 Go 语言的 Web 开发中,GORM 是一个广泛使用的 ORM (Object-Relational Mapping) 框架。它提供了一种流畅的方式来处理数据库的交互,其中包括记录的更新操作。GORM中的更新操作主要是update、updates、save这几种 操作前的准备工作:声明模…

C语言进阶版第五课—函数递归

文章目录 1. 什么是函数递归2. 函数递归的思想3. 函数递归的限制4. 函数递归练习4.1 n的阶乘4.2 按照顺序打印一个整数的每一位4.3 自定义函数不允许创建变量,求字符串长度 1. 什么是函数递归 函数递归就是函数自己调用自己 图片中的函数test(&#xff0…

Monaco 使用 TypeDefinitionProvider

Monaco 中的 TypeDefinitionProvider 和 ImplementationProvider、DefinitionProvider 类似,右键点击变量名称,现在 “选择转到类型定义”, 跳到指定位置。 通过 registerTypeDefinitionProvider 添加 TypeDefinitionProvider 处理方法 实现…

力扣SQL50 按日期分组销售产品 group_concact

Problem: 1484. 按日期分组销售产品 👨‍🏫 参考题解 select sell_date, count(distinct product) num_sold,group_concat(distinct product order by productseparator ,) products from activities group by sell_date

度量与增长——OrionX AI算力管理工具的企业价值解读

从科学计算到人工智能,从AI模型开发到AI模型训练,从双精度到半精度,从OPENGL到CUDA,GPU都扮演着关键角色。本文主要从运维的人员的角度出发,来探讨GPU使用过程中遇到的管理问题和创新性解决办法。 GPU的管理和监控 相…

《电容-排容》

节省电路板空间:将多个电容集成在一个封装里,减小了占用的电路板面积。 便于安装和布线:提高生产效率和电路布局的便利性。 一致性较好:由于是同一批次生产,各电容的性能参数较为一致。 【参数】品牌,封…

网络云相册实现--nodejs后端+vue3前端

目录 主页面 功能简介 系统简介 api 数据库表结构 代码目录 运行命令 主要代码 server apis.js encry.js mysql.js upload.js client3 index.js 完整代码 主页面 功能简介 多用户系统,用户可以在系统中注册、登录及管理自己的账号、相册及照片。 每…

Maven实战(四)- 生命周期和插件

Maven实战(四)- 生命周期和插件 文章目录 Maven实战(四)- 生命周期和插件1.何为生命周期2.生命周期2.1.Clean生命周期2.1.Default生命周期2.3.Site生命周期 3.Maven插件3.1.插件目标3.2.插件绑定3.2.1.内置插件3.2.2.自定义插件 4…

算法学习day28

一、寻找右区间(二分法) 题意:题目很容易理解 但是转换为二分法有点晦涩 给你一个区间数组 intervals ,其中 intervals[i] [starti, endi] ,且每个 starti 都 不同 。区间 i 的 右侧区间 可以记作区间 j ,并满足 startj > e…

gptpdf深度解析:开源文档处理技术全攻略

目录 一、引言二、gptpdf 是什么?三、gptpdf 的功能特性1. 精准的 PDF 元素解析能力2. 对复杂文档结构的处理示例3. 高效的处理速度4. 低成本的优势 四、gptpdf 应用场景1. 学术研究与文献处理2. 企业文档管理3. 软件开发中的文档转换 五、gptpdf 代码示例1. 基本的…

【Vue3】组件通信之v-model

【Vue3】组件通信之v-model 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的…

图像梯度与几种算子

“滤波器”也可以称为“卷积核”,“掩膜”,“算子”等。 1、Sobel算子 Sobel算子是一个33的卷积核,利用局部差分寻找边缘,计算得到梯度的近似值。x和y方向的Sobel算子分别为: 梯度有方向,对于一个图像&a…

电子元器件—三极管(一篇文章搞懂电路中的三极管)(笔记)(面试考试必备知识点)

三极管的定义及工作原理 1. 定义 三极管(Transistor)是一种具有三层半导体材料(P-N-P 或 N-P-N)构成的半导体器件,用于信号放大、开关控制和信号调制等应用。三极管有三个引脚:发射极(Emitter…

SpringBoot智慧旅游在线平台的设计与实现(源码+论文+部署讲解等)

博主介绍:✌全网粉丝10W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLM…

从地铁客流讲开来:地铁客运量特征

1.数据来源 数据来源:MetroWatch地铁观察 | 地铁客流量数据 在做城市地铁客流数据的整理及可视化这块其实国内已经有很多大牛一直在做无偿免费的更新,其中覆盖多城市且每日更新数据的主要有两个:一个是地铁数据库 | 地铁客流量查询 (metrod…

数字农业农村云平台整体规划建设方案PPT

数字农业农村云平台的规划建设方案是一个全面而复杂的项目,涉及到多个方面的整合与创新。根据搜索结果,以下是一些关键点: 资料下载方式,请看每张图片右下角信息 1. 组织领导与政策支持:加强组织领导,确保…