银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)
实例1:银行管理系统
从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及,计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功能的管理系统,该系统中各功能的介绍如下。
- 开户功能:用户在ATM机上根据提示“请输入姓名:”、“请输入身份证号:”、“请输入手机号:”依次输入姓名、身份证号、手机号、预存金额、密码等信息,如果开户成功,系统随机生成一个不重复的6位数字卡号。
- 查询功能:根据用户输入的卡号、密码查询卡中余额,如果连续3次输入错误密码,该卡号会被锁定。
- 取款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定;然后接收用户输入的取款金额,如果取款金额大于卡中余额或取款金额小于0,系统进行提示并返回功能页面。
- 存款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定,然后接收用户输入的取款金额,如果存款金额小于0,系统进行提示并返回功能页面。
- 转账功能:用户需要分别输入转出卡号与转入卡号,如果连续3次输入错误密码,卡号会被锁定。当输入转账金额后,需要用户再次确认是否执行转账功能;如果确定执行转账功能,转出卡与转入卡做相应金额计算;如果取消转账功能,则回退之前操作。
- 锁定功能:根据输入的卡号密码执行锁定功能,锁定之后该卡不能执行查询、取款、存款、转账等操作。
- 解锁功能:根据输入的卡号密码执行解锁功能,解锁后能对该卡执行查询、取款、存款、转账等操作。
- 存盘功能:执行存盘功能后,程序执行的数据会写入本地文件中。
- 退出功能:执行退出功能时,需要输入管理员的账户密码,如果输入的账号密码错误,则返回功能页面,如果输入的账号密码正确,则执行存盘并退出系统。
本实例要求编写程序,实现一个具有上述功能的银行管理系统。
实例目标
- 理解面向对象的思想
- 熟练地定义类
- 熟练地创建对象、访问类的成员
- 熟练使用构造方法
实例分析
实际生活中,银行管理系统在由银行工作人员打开时先显示欢迎界面,之后工作人员输入管理员账号与密码,银行管理系统被启动,启动后进入系统功能页面,可观察到该页面中展示了使用ATM机可办理的所有业务,包括开户(1)、查询(2)、取款(3)、存款(4)、转账(5)、锁定(6)、解锁(7)、退出(Q)等。用户可根据自己需求选择相应业务的编号,并按照提示完成相应的操作。
从以上模拟的过程中可知,要实现银行管理系统需要用到5种对象,分别是管理员、ATM机、银行卡、用户、银行管理系统。因此,我们需要设计5个类承担不同的职责,关于这些类的说明如下:
(1)银行管理系统类(HomePage):负责提供整个系统流程的相关操作,包括打印欢迎登录界面和功能界面、接收用户输入、保存用户数据等。
(2)ATM机类(ATM):负责处理系统中各个功能的相关操作,包括开户、查询、取款、存款、转账、锁定、解锁、退出功能。
(3)管理员类(Admin):负责提供检测管理员账号与密码、显示欢迎登录界面和功能界面的相关操作。
(4)用户类(User):负责提供用户对象的相关操作。
(5)银行卡(Card):负责提供银行卡对象的相关操作。
设计后的类结构如图1所示。
图1 类设计图
本实例中涉及到多个类,为保证程序具有清晰的结构,可以将每个类的相关代码分别放置到与其同名的.py文件中。
代码实现
本实例的具体实现过程如下所示。
(1)打开PyCharm工具,创建一个名为“银行管理系统”的文件夹。在该文件夹下创建5个.py文件,分别为admin.py、atm.py、card.py、user.py与“银行系统.py”,此时程序的目录结构如图2所示。
图2 目录结构
(2)按照图1的类设计图,在card.py文件中编写Car类的代码,具体如下所示。
class Card:
def __init__(self,cardId,cardPwd,money):
self.cardId = cardId
self.cardPwd = cardPwd
self.money = money
self.cardLock = False
(3)按照图1的类设计图,在user.py文件中编写User类的代码,具体如下所示。
class User:
def __init__(self, name, id, phone, card):
self.name = name
self.id = id
self.phone = phone
self.card = card
(4)按照图1的类设计图,在admin.py文件中编写Admin类的代码,具体如下所示。
class Admin:
adminU = '1' # 管理员的账号
adpwd = '1' # 管理员的密码
def printAdminView(self):
print("******************************************")
print("*** ***")
print("*** ***")
print("*** 欢迎登录银行系统 ***")
print("*** ***")
print("*** ***")
print("******************************************")
def printsysFunctionView(self):
print("***********************************************")
print("*** ***")
print("*** 1.开户(1) 2.查询(2) ***")
print("*** 3.取款(3) 4.存款(4) ***")
print("*** 5.转账(5) 6.锁定(6) ***")
print("*** 7.解锁(7) ***")
print("*** ***")
print("*** 退出(Q) ***")
print("*** ***")
print("***********************************************")
def adminOption(self):
adminInput = input("请输入管理员账户:")
if self.adminU != adminInput:
print("管理员账户输入错误......")
return -1
passwordInput = input("请输入密码:")
if self.adpwd != passwordInput:
print("输入密码有误......")
return -1
else:
print("操作成功,请稍后......")
return 0
(5)按照图1的类设计图,在atm.py文件中编写ATM类的代码。ATM是本实例的核心类,该类中包含所有与系统功能相关的方法。由于ATM类包含开户的功能,在实现这些功能时需要访问Card与User类的属性,而且这些类分别处于不同的py文件中,因此这里需提前使用import语句(下章会有相关介绍)导入Card和User类,此时便可以在ATM类中访问Card类与User类的属性,具体代码如下
from user import User
from card import Card
下面分别介绍ATM类的属性与方法。
- alluser属性
在ATM类的构造方法中添加属性alluser,具体代码如下。
class ATM:
def __init__(self, alluser):
self.alluser = alluser
- randomiCardId()方法
randomiCardId()方法的作用是在用户开户时生成随机银行卡号,该方法中需要借助random模块的函数生成随机数,也需要排除生成重复卡号的情况,具体代码如下。
import random
def randomiCardId(self): # 随机生成开户卡号
while True:
str_data = '' # 存储卡号
for i in range(6): # 随机生成6位卡号
ch = chr(random.randrange(ord('0'), ord('9') + 1))
str_data += ch
if not self.alluser.get(str): # 判断卡号是否重复
return str_data
- creatUser()方法
creatUser()方法用于为用户开设账户,在该方法中需要用户先根据提示信息依次输入姓名、身份证号、手机号、预存金额(必须大于0,否则提示“开户失败”),再连续输入两次银行卡的密码(必须一致,否则因开户失败重新回到功能界面),最后随机生成开户卡号,根据该卡号创建卡信息和用户信息,并将用户的信息存储到alluser中,具体代码如下。
def creatUser(self):
# 目标向用户字典中添加一个键值对(卡号、用户对象)
name = input("请输入姓名:")
Uid = input("请输入身份证号:")
phone = input("请输入手机号:")
prestMoney = float(input("请输入预存金额:"))
if prestMoney <= 0:
print("预存款输入有误,开户失败")
return -1
oncePwd = input("请输入密码:")
passWord = input("请再次输入密码:")
if passWord != oncePwd:
print("两次密码输入不同......")
return -1
print("密码设置成功,请牢记密码: %s " % passWord)
cardId = self.randomiCardId()
card = Card(cardId, oncePwd, prestMoney) # 创建卡
user = User(name, Uid, phone, card) # 创建用户
self.alluser[cardId] = user # 存入用户字典
print("您的开户已完成,请牢记开户账号: %s" % cardId)
- checkpwg ()方法
creatUser()方法用于核对用户输入的密码,且限定至多输入3次,超过三次则返回False,输入正确则返回True,具体代码如下。
def checkpwg(self, realPwd):
for i in range(3):
psd2 = input("请输入密码:")
if realPwd == psd2:
return True
print("密码输错三次,系统自动退出......")
return False
- lockCard ()方法
lockCard()方法用于在用户主要要求锁定银行卡,该方法中需要用户输入银行卡号,并将银行卡设为锁定状态,锁定失败的情况包括以下任一情况:若用户输入错误的银行卡号,则提示“此卡号不存在...锁定失败!”;若用户持有的银行卡已经处于锁定状态,则提示“该卡已经被锁定,无需再次锁定!”;若用户输入错误的密码,则提示“密码错误...锁定失败!!”。
def lockCard(self):
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
if not self.alluser.get(inptcardId):
print("此卡号不存在...锁定失败!")
return -1
if user.card.cardLock:
print("该卡已经被锁定,无需再次锁定!")
return -1
if not self.checkpwg(user.card.cardPwd): # 验证密码
print("密码错误...锁定失败!!")
return -1
user.card.cardLock = True
print("该卡被锁定成功!")
- searchUser ()方法
searchUser ()方法实现查询余额的功能,确保用户在发生存钱、取钱和转账行为之前能输入正确的银行卡号,以及银行卡处于非锁定状态,此时返回拥有该银行卡的用户,否则返回-1,具体代码如下。
def searchUser(self, base=1):
if base == 2:
inptcardId = input("请输入转出主卡号:")
elif base == 3:
inptcardId = input("请输入转入卡号:")
elif base == 1:
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
# 如果卡号不存在,下面代码就会执行
if not self.alluser.get(inptcardId):
print("此卡号不存在...查询失败!")
return -1
if user.card.cardLock:
print("该用户已经被锁定...请解卡后使用!")
return -1
if not self.checkpwg(user.card.cardPwd): # 验证密码
print("密码错误过多...卡已经被锁定,请解卡后使用!")
user.card.cardLock = True
return -1
if not base == 3: # 查询转入账户 不打印余额
print("账户: %s 余额: %.2f " % (user.card.cardId, user.card.money))
return user
- getMoney ()方法
getMoney ()方法实现用户使用银行管理系统取钱的功能,该方法中首先需调用searchUser ()方法根据用户输入的卡号返回拥有该卡的用户,然后处理用户输入不同金额的情况:若输入的金额低于银行卡余额,则将取款后的银行卡余额展示给用户,同时提示取款成功;若输入的金额高于银行卡余额,则提示用户信息并返回系统功能界面,具体代码如下。
def getMoney(self):
userTF = self.searchUser()
if userTF != -1:
if userTF.card.cardId != '':
inptMoney = float(input("请输入取款金额:"))
if inptMoney > int(userTF.card.money):
print("输入的金额大于余额,请先查询余额!")
return -1
userTF.card.money = float(userTF.card.money) – inptMoney
print("取款成功! 账户: %s 余额: %.2f " %
(userTF.card.cardId, userTF.card.money))
else:
return -1
- saveMoney ()方法
saveMoney()方法实现用户使用银行管理系统存钱的功能,与getMoney ()方法的功能类似,需要先查询银行卡的用户,查询结果无误后则需要用户输入要存入的金额:金额小于0提示错误信息,并返回到银行系统的功能界面;金额大于等于0则累加到银行卡的余额中,并向用户展示账户余额,具体代码如下。
def saveMoney(self):
userTF = self.searchUser()
if userTF != -1:
if not userTF.card.cardLock == True:
if userTF.card.cardId != '':
inptMoney = float(input("请输入要存入得金额:"))
if inptMoney < 0:
print("请输入正确金额")
else:
userTF.card.money += inptMoney
print("存款成功! 账户: %s 余额: %.2f " %
(userTF.card.cardId, userTF.card.money))
else:
return -1
- transferMoney ()方法
transferMoney ()方法实现用户向其它银行卡转账的功能,该方法中需先确保主卡用户和转入卡用户同时存在,再向用户提示要转入的金额进而判断:若主卡中的余额充足,将减少主卡中相应的金额,将增加转入卡中相应的金额;若主卡中的余额不足,则将为用户显示主卡余额,具体代码如下。
def transferMoney(self):
MasterTF = self.searchUser(base=2)
if (MasterTF == -1):
return -1
userTF = self.searchUser(base=3)
if (userTF == -1):
return -1
in_tr_Money = float(input("请输入转账金额:"))
if MasterTF.card.money >= in_tr_Money:
str = input("您确认要继续转账操作吗(y/n)?:")
if str.upper() == "Y":
MasterTF.card.money -= in_tr_Money
userTF.card.money += in_tr_Money
print("转账成功! 账户: %s 余额: %.2f " %
(MasterTF.card.cardId, MasterTF.card.money))
else:
print("转账失败,中止了操作")
else:
print("转账失败,余额不足! 账户: %s 余额: %.2f " %
(MasterTF.card.cardId, MasterTF.card.money))
- unlockCard ()方法
unlockCard ()方法实现解锁银行卡的功能,该方法中需要求用户先输入要解锁的银行卡号,再分别对不同的情况做处理:若用户输入错误的卡号,提示用户解锁失败的信息;若用户输入卡号的银行卡未被锁定,提示用户无需解锁;若用户输入错误的密码,提示用户解锁失败;其它情况则提示解锁成功,具体代码如下。
def unlockCard(self):
inptcardId = input("请输入您的卡号:")
user = self.alluser.get(inptcardId)
while 1:
if not self.alluser.get(inptcardId):
print("此卡号不存在...解锁失败!")
return -1
elif not user.card.cardLock:
print("该卡未被锁定,无需解锁!")
break
elif not self.checkpwg(user.card.cardPwd):
print("密码错误...解锁失败!!")
return -1
user.card.cardLock = False # 解锁
print("该卡 解锁 成功!")
break
(6)按照图7的类设计图,在“银行系统.py”文件中编写HomePage类的代码,具体如下所示。
from admin import Admin
from atm import ATM
import time
class HomePage:
def __init__(self):
self.allUserD = {} # 使用字典存储数据
self.atm = ATM(self.allUserD)
self.admin = Admin() # 管理员开机界面
def saveUser(self):
self.allUserD.update(self.atm.alluser)
print("数据存盘成功")
# 程序的入口
def main(self):
self.admin.printAdminView()
resL = self.admin.adminOption()
if not resL:
while True:
self.admin.printsysFunctionView()
option = input("请输入您的操作:")
if option not in ("1", "2", "3", "4", "5",
"6", "7", "S", "Q", "q"):
print("输入操作项有误,请仔细确认!")
time.sleep(1)
if option == "1": # 开户
self.atm.creatUser()
elif option == "2": # 查询
self.atm.searchUser()
elif option == "3": # 取款
self.atm.getMoney()
elif option == "4": # 存储
self.atm.saveMoney()
elif option == "5": # 转账
self.atm.transferMoney()
elif option == "6": # 锁定
self.atm.lockCard()
elif option == "7": # 解锁
self.atm.unlockCard()
elif option.upper() == "Q":
if not (self.admin.adminOption()):
self.saveUser()
print('退出系统')
return -1
(7)在“银行系统.py”文件中,创建HomePage类对象,调用main()函数,具体代码如下。
if __name__ == "__main__":
homepage = HomePage()
homepage.main()
至此,程序的全部功能全部实现。
代码测试
运行程序,在控制台输入管理员账户“1”和密码“1”的结果如下所示:
******************************************
*** ***
*** ***
*** 欢迎登录银行系统 ***
*** ***
*** ***
******************************************
请输入管理员账户:1
请输入密码:1
操作成功,请稍后......
***********************************************
*** ***
*** 1.开户(1) 2.查询(2) ***
*** 3.取款(3) 4.存款(4) ***
*** 5.转账(5) 6.锁定(6) ***
*** 7.解锁(7) ***
*** ***
*** 退出(Q) ***
*** ***
***********************************************
请输入您的操作:
开户功能的运行结果如下所示:
请输入您的操作:1
请输入姓名:小明
请输入身份证号:123456789
请输入手机号:188888
请输入预存金额:500
请输入密码:000000
请再次输入密码:000000
密码设置成功,请牢记密码: 000000
您的开户已完成,请牢记开户账号: 836095
存款功能的运行结果如下所示:
请输入您的操作:4
请输入您的卡号:836095
请输入密码:000000
账户: 836095 余额: 500.00
请输入要存入得金额:100000
存款成功! 账户: 836095 余额: 100500.00
取款功能的运行结果如下所示:
请输入您的操作:3
请输入您的卡号:836095
请输入密码:000000
账户: 836095 余额: 100500.00
请输入取款金额:5000
取款成功! 账户: 836095 余额: 95500.00
相关文章:

银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)
实例1:银行管理系统 从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及,计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功…...

【18】组合逻辑 - VL18 实现3-8译码器①
VL18 实现3-8译码器① 1 题目 【这题我的思路非常绝境】奈斯 !! 看真值表的思路:Yi所在列【0仅一个其余全1】,故【以0为对象求解】 观察发现:E3 E2_n E1_n = 100 时 是 译码的使能信号 ; 并且E3 E2_n E1_n为其他值时,都不使能译码 然后就很简单,没有仿真就成功了 2 代…...

2020蓝桥杯真题最长递增 C语言/C++
题目描述 在数列a_1 ,a_2,⋯,a_n 中,如果a_i <a_i1 <a_i2<⋯<a_j,则称 a_i至 a_j为一段递增序列,长度为 j−i1。 定一个数列,请问数列中最长的递增序列有多长。 输入描述 输入的第一行包含一个整数 n。 第二行包含…...
华为OD机试题 - 寻找连续区间(JavaScript)| 机考必刷
更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Cod…...

一次疲惫的调试--累了及时透气
原创 射频清茶 深山小老虎 2023-03-11 14:32发表于广东 收录于合集 #射频调试3个 #网分4个 #Wi-Fi 2个 进来透透气 道不尽红尘舍恋 诉不完人间恩怨 世世代代都是缘 喝着相同的水 留着相同的血 这条路漫漫又长远 红花当然配绿叶 这一辈子谁来陪 渺渺茫茫来又回 往日情景再…...

综合练习7 摄氏度转华氏温度(“\t“的使用,循环语句)
综合练习7 摄氏度转华氏温度 使用do…while循环,在控制台输入摄氏温度与华氏温度的对照表。 对照表从摄氏温度-30℃到50℃,每行间隔10℃,运行如下: 摄氏温度:-30℃ 华氏温度:-22.0℉ 摄氏温度:…...
AWS数据库总结
RDS – 联机事务处理OLTP(Online Transaction Processing),包括: SQL ServerOracleMySQL ServerPostgreSQLAuroraMariaDB非关系数据库DynamoDB数据仓库RedShift – 联机分析处理OLAP(Online Analytics Processing&…...

2个步骤就能批量给视频添加滚动字幕
现在很多小伙伴在剪辑视频的时候都会给自己的视频添加适配的字幕,但是有很多的视频想要添加一样的滚动字幕时,有一个能批量添加剪辑的工具非常重要,今天小编就给大家分享一个可以批量剪辑大量视频的工具,下面一起看看具体的操作步…...

PHP 的运行方式有哪些?
PHP本质上的运行方式可以分为两种: 基于命令行的基于PHP-FPM的 但实际上,PHP能做的事很多,很多场景下,不同的运行方式能让开发更方便,减轻各种工作。 测试开发 PHP内置了一个HTTP 的server。这意味着,很…...
Web学习3_JavaScript
1.1 JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type"module"></script>标签即可。 常见使用方式有以下几种: 直接在<script type"module"></script>标签内写JS代码。script type"modu…...
「MySQL基础」不可重复读和幻读的区别
「MySQL基础」不可重复读和幻读的区别 文章参考: 在数据库中不可重复读和幻读到底应该怎么分? 作者:暖猫Suki、普通熊猫 文章目录「MySQL基础」不可重复读和幻读的区别一、概述二、小结一、概述 正好在琢磨这个问题,也被搞得头昏…...

CorelDRAW2023最新版新增功能200多个新模板
CorelDRAW是一款平面矢量绘图排版软件,CorelDRAW运用涵盖企业VI设计,广告设计,包装设计,画册设计,海报、招贴设计,UI界面设计,网页设计,书籍装帧设计,插画设计࿰…...
springboot自定义日志以及行号正确展示
在开发springboot项目时,我们可能需要自定义日志实现。需要对slf4j的日志实现进行一次外层包装 这个很简单,按照org.slf4j.Logger方式定义一个类Logger类MyLogger。 让后实现MyLoggerImpl: public class MyLoggerImpl implements CoreLogge…...

【GAOPS055】verilog 乘法、除法和取余
乘法硬件原理 结论 可以将乘法A x B转为A的移位相加。 利用乘2n就是左移n位的特性乘2^n就是左移n位的特性乘2n就是左移n位的特性,将数拆分为2n2^n2n表示 思路1 原始列竖式计算方法ref例2.9 思路2 B总是可以拆分为:B(an2nan−12n−1...a121a020)B(…...

TCP UPD详解
文章目录TCP UDP协议1. 概述2. 端口号 复用 分用3. TCP3.1 TCP首部格式3.2 建立连接-三次握手3.3 释放连接-四次挥手3.4 TCP流量控制3.5 TCP拥塞控制3.6 TCP可靠传输的实现3.7 TCP超时重传4. UDP5.TCP与UDP的区别TCP UDP协议 1. 概述 TCP、UDP协议是TCP/IP体系结构传输层中的…...

金三银四、金九银十 面试宝典 MySQL面试题 超级无敌全的面试题汇总(超万字的面试题,让你的MySQL无可挑剔)
MySQL数据库 - 面试宝典 又到了 金三银四、金九银十 的时候了,是时候收藏一波面试题了,面试题可以不学,但不能没有!🥁🥁🥁 一个合格的 计算机打工人 ,收藏夹里必须有一份 MySQL 八…...

【Java】初识Java
Java和C语言有许多类似之处,这里就只挑不一样的点来说,所以会比较杂乱哈~ 目录 1.数据类型 2.输入与输出 2.1三种输出 2.2输入 2.3循环输入输出 //猜数字小游戏 //打印乘法口诀表 3.方法 //交换两个数(数组的应用) //模…...

JVM相关知识
JVM类加载过程类什么时候被加载什么情况下会发生栈内存溢出JVM内存模型常量池回收方法区垃圾回收流程圾收集算法分代收集理论标记-清除算法标记-复制算法标记-整理算法类加载过程 加载–验证–准备–解析–初始化–使用–卸载 加载:通过全类名获取类的二进制流…...

【LeetCode】剑指 Offer(21)
目录 题目:剑指 Offer 39. 数组中出现次数超过一半的数字 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 题目:剑指 Offer 40. 最小的k个数 -…...

线性求解器Ax=b的验证
文章目录前言Matrix MarketMatlab IORead dataWrite data测试C IORead and write dataDownload MatrixIO 代码下载参考网址前言 一般情况集成了一个线性求解器(Axb),我们需要验证其性能和精度,这时需要大量数据来做验证ÿ…...

TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...

归并排序:分治思想的高效排序
目录 基本原理 流程图解 实现方法 递归实现 非递归实现 演示过程 时间复杂度 基本原理 归并排序(Merge Sort)是一种基于分治思想的排序算法,由约翰冯诺伊曼在1945年提出。其核心思想包括: 分割(Divide):将待排序数组递归地分成两个子…...