嗖嗖移动业务大厅(JDBC)
一、项目介绍
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%左右甚至更少,但是我不能保证我的代码绝对正确,我的思路就是答案,但我能保证,我的嗖嗖移动业务大厅的主要功能都基本可以正常使用;希望我的项目对在做嗖嗖移动业务大厅项目的你有所帮助;
每个人的想法都不一样,你自己的项目才是最棒的;下面我将我的项目分享给大家,仅做参考;
相关文章:
嗖嗖移动业务大厅(JDBC)
一、项目介绍 1、项目背景: 该项目旨在模拟真实的移动业务大厅,。用户可以注册新卡、查询账单、管理套餐、充值话费、打印消费记录等功能。同时,项目还模拟了用户使用场景,如通话、上网、发短信等,并根据套餐规则进行相应的扣费…...
大学生编程入门指南:如何从零开始?
人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 编程语言选择 📚 1. Python 2. JavaScript 3. Java 4. C/C 如何选择适合自己的编程语言&a…...
如何基于欧拉系统完成数据库的安装
一、安装 当我们直接进行安装软件包时,会提示有冲突,此时,我们应该这样来解决 使用rpm命令 [rootlocalhost yum.repos.d]# rpm -qa | grep selinux使用 rpm命令卸载以下两个软件包 [rootlocalhost yum.repos.d]# rpm -e selinux-policy-3…...
防御笔记第九天(持续更新)
注意:攻击可能只是一个点,而防御需要全方面进行。 1.IAE引擎 2.DPI DPI ----深度包检测 --- 针对完整的数据包,进行内容的识别和检测 3.基于特征字的检测技术 4,基于应用网关的检测技术 基于应用网关的检测技术 --- 有些应用控…...
html+css+js前端作业和平精英6个页面页面带js
htmlcssjs前端作业和平精英6个页面页面带js 下载地址 https://download.csdn.net/download/qq_42431718/89595600 目录1 目录2 项目视频 htmlcssjs前端作业和平精英6个页面带js 页面1 页面2 页面3 页面4 页面5 页面6...
详解基于百炼平台及函数计算快速上线网页AI助手
引言 在当今这个信息爆炸的时代,用户对于在线服务的需求越来越趋向于即时性和个性化。无论是寻找产品信息、解决问题还是寻求建议,人们都期望能够获得即时反馈。这对企业来说既是挑战也是机遇——如何在海量信息中脱颖而出,提供高效且贴心的…...
【TVM 教程】在 CUDA 上部署量化模型
更多 TVM 中文文档可访问 →Apache TVM 是一个端到端的深度学习编译框架,适用于 CPU、GPU 和各种机器学习加速芯片。 | Apache TVM 中文站 作者:Wuwei Lin 本文介绍如何用 TVM 自动量化(TVM 的一种量化方式)。有关 TVM 中量化的…...
使用 continue 自定义 AI 编程环境
一直在使用github 的 copilot 来编程,确实好用,对编码效率有很大提升。 但是站在公司角度,因为它只能对接公网(有代码安全问题)。另外,它的扩展能力也不强,无法适配公司特定领域的知识库&#x…...
谷粒商城实战笔记-118-全文检索-ElasticSearch-进阶-aggregations聚合分析
文章目录 一,基本概念主要聚合类型 二,实战1,搜索 address 中包含 mill 的所有人的年龄分布以及平均年龄,但不显示这些人的详情2,按照年龄聚合,并且请求每个年龄的平均薪资 Elasticsearch 的聚合࿰…...
ansible,laas,pass,sass
ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于 paramiko 开发的,并且基于模块化工作…...
【开源分享】PHP在线提交工单源码|工单管理系统源码 (附源码搭建教程)
一、设备报修工作内容 1.工单管理:设备报修系统可以将设备故障统计为工单并对工单进行汇总管理。将工单数据进行归类,将故障分类进行查看、统计、分析等等。 2.设备状态:工单可通过用户上报设备状态数据进行查看,维修工程师在维…...
【深入探秘Hadoop生态系统】全面解析各组件及其实际应用
深入探秘Hadoop生态系统:全面解析各组件及其实际应用 引言 在大数据时代,如何高效处理和存储海量数据成为企业面临的重大挑战。根据Gartner的统计,到2025年,全球数据量将达到175泽字节(ZB),传…...
Flink DataStream API编程入门
目录 什么是数据流 Flink程序的剖析 获取执行环境 加载/创建初始数据 指定对该数据的转换 指定把计算结果放在哪里 触发程序执行 案例 Flink中的数据流(DataStream)程序是在数据流上实现转换(transformations)的常规程序(例如,过滤,更新状态,定义窗口,…...
案例分享|Alluxio在自动驾驶数据闭环中的应用
分享嘉宾: 孙涛 - 中汽创智智驾工具链数据平台开发专家 关于中汽创智: 中汽创智科技有限公司(以下简称“中汽创智”)由中国一汽、东风公司、南方工业集团、长安汽车和南京江宁经开科技共同出资设立。聚焦智能底盘、新能动力、智…...
为什么选择 Baklib 而不是 Salesforce 进行知识库管理
对于希望管理其产品和服务的在线文档或知识库以支持其客户和员工的组织来说,市场上有太多的平台和工具。知识库通过向客户和员工提供重要信息来帮助组织提高生产力。这大致分为客户关系管理或客户服务。 很少有平台能够为销售、客户服务等提供一套服务。Salesforce…...
【C++11】解锁C++11新纪元:深入探索Lambda表达式的奥秘
📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:C11右值引用 🌹🌹期待您的关注 🌹🌹 ❀C11 📒1. 可变参数模板…...
c语言排序(2)
前言 在上一篇文章,我们学习了插入排序,选择排序以及交换排序中的冒泡排序,接下来我们继续学习交换排序、归并排序以及非比较排序。 1. 快速排序 快速排序是交换排序的一种,它的基本思想:任取待排序序列中的某元素作…...
vue3+ts+element plus开源框架基础
Vue 3、TypeScript 和 Element Plus 的结合为现代前端应用开发提供了强大的支持。以下是关于这三者结合的基础介绍: 1. Vue 3 Vue 3 是一个流行的开源JavaScript框架,用于构建用户界面和单页面应用。它带来了许多新特性和改进,包括…...
RabbitMQ快速入门(MQ的概念、安装RabbitMQ、在 SpringBoot 项目中集成 RabbitMQ )
文章目录 1. 补充知识:同步通讯和异步通讯1.1 同步通讯1.2 异步通讯 2. 同步调用的缺点2.1 业务耦合2.2 性能较差2.3 级联失败 3. 什么情况下使用同步调用4. 异步调用5. 异步调用的优点和缺点5.1 异步调用的优点5.1.1 解除耦合,拓展性强5.1.2 无需等待&a…...
Linux文件与目录管理命令 ls cp rm mv使用方法
Linux文件与目录的管理基本上包括:显示属性、复制、删除、移动文件与目录等,由于文件与目录的管理不仅重要而且操作频繁,所以本文列举一些常用的管理命令。 如需了解路径的概念及目录的基本操作,可参考【Linux】路径的概念及目录的…...
KubeSphere 部署的 Kubernetes 集群使用 GlusterFS 存储实战入门
转载:KubeSphere 部署的 Kubernetes 集群使用 GlusterFS 存储实战入门 知识点 定级:入门级 GlusterFS 和 Heketi 简介 GlusterFS 安装部署 Heketi 安装部署 Kubernetes 命令行对接 GlusterFS 实战服务器配置(架构1:1复刻小规模生产环境,…...
elasticsearch源码分析-08Serch查询流程
Serch查询流程 查询请求Rest路由注册也是在actionModule中 //查询操作 registerHandler.accept(new RestSearchAction());Override public List<Route> routes() {return unmodifiableList(asList(new Route(GET, "/_search"),new Route(POST, "/_searc…...
【协作提效 Go - gin ! swagger】
什么是swagger Swagger 是一个用于设计、构建、记录和使用 RESTful Web 服务的工具集。它的主要作用包括: API 文档生成:Swagger 可以自动生成详细的 API 文档,包括每个端点的请求和响应格式、参数、状态码等。这使得开发者和用户可以轻松理…...
栈和队列——3.滑动窗口最大值
力扣题目链接 给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。 示例: 输入:nums[1,3,-1,-3,5,3,6,7],k 3 …...
嵌入式智能手表开发系列文章之开篇
不好意思,朋友们,我回来了。想想已经断更了好久了。在这段断更的日子里。开拓了个新领域,不搞android 产品,而是去搞嵌入式智能手表啦。 接下来我会用几篇文章来介绍下我对这个领域的看法体会,以及我自己所负责领域的…...
24.8.2数据结构|双链表
双链表 1、定义结构:2个指针域、数据域 2、初始化:创建一个含有N个结点的带头结点双链表head (双链表头结点的前驱与和尾节点的后继与置为空) 3、求表长:返回双链表head的长度 4、取元素:取出双链表head中…...
RabbitMQ高级特性 - 事务消息
文章目录 RabbitMQ 事务消息概述实现原理代码实现不采用事务采用事务 RabbitMQ 事务消息 概述 RabbitMQ 的 AMQP 协议实现了事务机制,允许开发者保证消息的发送和接收时原子性的,也就是说,要么消息全都发送成功,要么全都发送失败…...
leetcode:心算挑战
题目: 心算项目的挑战比赛中,要求选手从N张卡牌中选出cnt张卡牌,若这cnt张卡牌数字总和为偶数,则选手成绩「有效」且得分为cnt张卡牌数字总和。给定数组cards和cnt,其中cards[i]表示第i张卡牌上的数字。 请帮参赛选手计…...
docker部署java项目(war包方式)
场景描述:java项目war包,在开发开电脑上使用dockerfile构建镜像,上传镜像到客户服务器中使用docker加载docker镜像,然后部署。 目录 一、本地环境安装 docker git 二、服务器环境安装 docker 三、构建docker镜像(win系统) 四、注意事项 (1)系统架构 (2)使…...
jsp 自定义taglib
一、简介 我们在javaWeb开发中,经常会用到jsp的taglib标签,有时候并不能满足我们的实际需要,这就需要我们自定义taglib标签, 二、开发步骤 1、编写control方法,继承BodyTagSupport 2、定义zdytaglib.tld标签文件 3、…...
南沙做网站公司/网络营销ppt案例
2018-11-06 Ubuntu上开启Apache Rewrite功能的方法 Ubuntu上开启Apache Rewrite功能的方法 本文介绍ubuntn系统中开启apache的urlrewrite功能的方法。 在Windows上开启Apache的urlRewrite非常简单,因为apache的用户配置都是放在http.conf文件中,要开启Re…...
竞价单页制作教程/seo排名第一的企业
横向来看,日、韩车系对于机油粘度的要求的确是比同时代的德、美系要低一些。纵向来看,全世界的车用机油粘度也的确呈现低粘度发展趋势。这是为什么呢?首先随着技术的进步发动机的加工工艺越来越高,零部件的配合间隙越来越小,有这…...
重庆seo海洋qq/seo综合查询站长工具关键词
最近看PCL中的SHOT描述子文献时,遇到 四线性插值(quadrilinear interpolation),蒙了,全是跟spherical相关的词组: interpolation on normal cosines interpolation on azimuth interpolation on elevation…...
做亚马逊产品测评的网站/制定营销推广方案
浮动引起的问题: 1.父元素高度坍塌。 2.后面非浮动元素跟随其后。破坏了页面布局。 html: <div class"test">前面的元素</div> <div class"parent"><div class"child1">左浮动</div><div class&quo…...
汽车音响网站建设/广州新闻播报
PopupWindow与PopupMenu的用法 (Blog)[马克飞象|Markdown|Android] PopupWindow与PopupMenu的用法 PopupMenuPopupWindow PopupWindow和PopupMenu的功能都是为了弹出一个窗体,不过PopupMenu的功能比较单一,而PopupWindow更强。 PopupMenu <menu xml…...
网站建设分为那几个模块/seozou是什么意思
如果你在周末、有WIFI的房间里不知道做什么,不如学下Python吧。有了它,你可以什么都不需要! 基础需求篇:温饱与空虚 躺着赚钱 一位匿名知乎网友爆料用Python写了自动化交易程序,2年躺着赚了200万!相当于普通…...