做网站做软件怎么赚钱吗如何做网站长尾关键词布局
一、项目介绍
1、项目背景:
该项目旨在模拟真实的移动业务大厅,。用户可以注册新卡、查询账单、管理套餐、充值话费、打印消费记录等功能。同时,项目还模拟了用户使用场景,如通话、上网、发短信等,并根据套餐规则进行相应的扣费和消费记录。
2、项目目标:
开发一个名为“嗖嗖移动业务大厅”的系统,为用户提供以下功能:
- 用户管理: 用户注册、登录、退网。
 - 套餐管理: 查询套餐余量、变更套餐、打印消费详情。
 - 账单管理: 查询本月账单、充值话费。
 - 消费模拟: 模拟用户通话、上网、发送短信等场景,并记录消费信息。
 - 其他功能: 查看资费说明、退出系统。
 
3、项目技术:
- 面向对象: 使用面向对象的思想设计类和接口,实现封装、继承和多态。
 - 异常处理: 合理使用异常处理机制,提高程序的健壮性。
 - 集合框架: 使用集合框架存储和管理数据。
 - I/O 操作: 实现文件的写入操作,保存消费记录。
 - 数据库: 使用 MySQL 数据库存储用户信息、消费记录等数据,并通过 JDBC 进行数据库操作。
 
4、项目功能:
- 用户登录/注册: 用户可以输入手机号和密码登录系统,或者注册新用户。
 - 使用嗖嗖: 系统随机模拟用户进行通话、上网、发送短信等操作,并记录消费信息。
 - 本月账单查询: 查询当前用户的套餐费用、实际消费金额和账户余额。
 - 套餐余量查询: 查询当前用户的套餐余量,包括通话时长、上网流量和短信条数。
 - 打印消费详情: 将用户的消费记录写入文件,并打印出来。
 - 套餐变更: 用户可以根据需要变更套餐类型。
 - 办理退网: 用户可以注销手机卡并退出系统。
 - 话费充值: 用户可以给手机卡充值话费。
 - 查看资费说明: 查看嗖嗖移动提供的所有套餐的资费说明。
 补充功能:
- 查询余额:用户可以输入手机号进行查询余额操作。
 - 在线小说阅读:用户登录之后可进入二级菜单进行在线小说阅读操作
 - 相册:用户登录之后可查看相册中的照片
 
5、项目实现:
项目使用 Java 语言开发,通过JDBC操作 MySQL 数据库对数据“增、删、改、查”。项目代码结构清晰,功能完善,能够满足用户的基本需求。
为了让大家更好的了解到这个项目,我将展示出该项目的效果图;
一级菜单界面和功能展示:

注册功能展示:



使用嗖嗖功能展示



查询余额效果展示:

话费充值功能展示:

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

可以正常使用;
资费说明效果图展示:

登录展示:


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

本月账单查询功能展示:

套餐余量查询:

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

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


相册效果展示:

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

套餐变更功能展示:


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

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


效果展示完毕(^_^)
二、技术实现
1、Java面向对象技术
1. 封装:
- 数据库连接封装: 将数据库连接信息(如 URL、用户名、密码)封装在
 DataSource或DBConnection类中,方便管理和复用。- 数据库操作封装: 将 SQL 语句和数据库操作(如增删改查)封装在方法中,提高代码的可读性和可维护性。
 - 结果集封装: 将查询结果封装在
 ResultSet对象中,方便获取和处理数据。
2. 继承:
- JDBC 接口继承: JDBC 提供了一系列接口,如
 Connection、Statement、ResultSet等,实现了对数据库操作的抽象。开发者可以通过继承这些接口,创建自己的数据库操作类,实现更灵活的功能。- 异常处理继承: 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(选电话号码表)
|   序号  |   字段名  |   长度  |   要求  |   备注  | |||
|   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%左右甚至更少,但是我不能保证我的代码绝对正确,我的思路就是答案,但我能保证,我的嗖嗖移动业务大厅的主要功能都基本可以正常使用;希望我的项目对在做嗖嗖移动业务大厅项目的你有所帮助;
每个人的想法都不一样,你自己的项目才是最棒的;下面我将我的项目分享给大家,仅做参考;
