当前位置: 首页 > news >正文

银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

实例1:银行管理系统

从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及,计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功能的管理系统,该系统中各功能的介绍如下。

  1. 开户功能:用户在ATM机上根据提示“请输入姓名:”、“请输入身份证号:”、“请输入手机号:”依次输入姓名、身份证号、手机号、预存金额、密码等信息,如果开户成功,系统随机生成一个不重复的6位数字卡号。
  2. 查询功能:根据用户输入的卡号、密码查询卡中余额,如果连续3次输入错误密码,该卡号会被锁定。
  3. 取款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定;然后接收用户输入的取款金额,如果取款金额大于卡中余额或取款金额小于0,系统进行提示并返回功能页面。
  4. 存款功能:首先根据用户输入的卡号、密码显示卡中余额,如果连续3次输入错误密码,该卡号会被锁定,然后接收用户输入的取款金额,如果存款金额小于0,系统进行提示并返回功能页面。
  5. 转账功能:用户需要分别输入转出卡号与转入卡号,如果连续3次输入错误密码,卡号会被锁定。当输入转账金额后,需要用户再次确认是否执行转账功能;如果确定执行转账功能,转出卡与转入卡做相应金额计算;如果取消转账功能,则回退之前操作。
  6. 锁定功能:根据输入的卡号密码执行锁定功能,锁定之后该卡不能执行查询、取款、存款、转账等操作。
  7. 解锁功能:根据输入的卡号密码执行解锁功能,解锁后能对该卡执行查询、取款、存款、转账等操作。
  8. 存盘功能:执行存盘功能后,程序执行的数据会写入本地文件中。
  9. 退出功能:执行退出功能时,需要输入管理员的账户密码,如果输入的账号密码错误,则返回功能页面,如果输入的账号密码正确,则执行存盘并退出系统。

本实例要求编写程序,实现一个具有上述功能的银行管理系统。

实例目标

  1. 理解面向对象的思想
  2. 熟练地定义类
  3. 熟练地创建对象、访问类的成员
  4. 熟练使用构造方法

实例分析

实际生活中,银行管理系统在由银行工作人员打开时先显示欢迎界面,之后工作人员输入管理员账号与密码,银行管理系统被启动,启动后进入系统功能页面,可观察到该页面中展示了使用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类的属性与方法。

  1. alluser属性

在ATM类的构造方法中添加属性alluser,具体代码如下。

class ATM:

    def __init__(self, alluser):

        self.alluser = alluser

  1. 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

  1. 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)

  1. checkpwg ()方法

creatUser()方法用于核对用户输入的密码,且限定至多输入3次,超过三次则返回False,输入正确则返回True,具体代码如下。

def checkpwg(self, realPwd):

    for i in range(3):

        psd2 = input("请输入密码:")

        if realPwd == psd2:

            return True

    print("密码输错三次,系统自动退出......")

    return False

  1. 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("该卡被锁定成功!")

  1. 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

  1. 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

  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

  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))

  1. 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&#xff1a;银行管理系统 从早期的钱庄到现如今的银行&#xff0c;金融行业在不断地变革&#xff1b;随着科技的发展、计算机的普及&#xff0c;计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功…...

【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 中&#xff0c;如果a_i <a_i1 <a_i2<⋯<a_j&#xff0c;则称 a_i至 a_j为一段递增序列&#xff0c;长度为 j−i1。 定一个数列&#xff0c;请问数列中最长的递增序列有多长。 输入描述 输入的第一行包含一个整数 n。 第二行包含…...

华为OD机试题 - 寻找连续区间(JavaScript)| 机考必刷

更多题库,搜索引擎搜 梦想橡皮擦华为OD 👑👑👑 更多华为OD题库,搜 梦想橡皮擦 华为OD 👑👑👑 更多华为机考题库,搜 梦想橡皮擦华为OD 👑👑👑 华为OD机试题 最近更新的博客使用说明本篇题解:寻找连续区间题目输入输出示例一输入输出说明示例二输入输出Cod…...

一次疲惫的调试--累了及时透气

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

综合练习7 摄氏度转华氏温度(“\t“的使用,循环语句)

综合练习7 摄氏度转华氏温度 使用do…while循环&#xff0c;在控制台输入摄氏温度与华氏温度的对照表。 对照表从摄氏温度-30℃到50℃&#xff0c;每行间隔10℃&#xff0c;运行如下&#xff1a; 摄氏温度&#xff1a;-30℃ 华氏温度&#xff1a;-22.0℉ 摄氏温度&#xff1a;…...

AWS数据库总结

RDS – 联机事务处理OLTP&#xff08;Online Transaction Processing&#xff09;&#xff0c;包括&#xff1a; SQL ServerOracleMySQL ServerPostgreSQLAuroraMariaDB非关系数据库DynamoDB数据仓库RedShift – 联机分析处理OLAP&#xff08;Online Analytics Processing&…...

2个步骤就能批量给视频添加滚动字幕

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

PHP 的运行方式有哪些?

PHP本质上的运行方式可以分为两种&#xff1a; 基于命令行的基于PHP-FPM的 但实际上&#xff0c;PHP能做的事很多&#xff0c;很多场景下&#xff0c;不同的运行方式能让开发更方便&#xff0c;减轻各种工作。 测试开发 PHP内置了一个HTTP 的server。这意味着&#xff0c;很…...

Web学习3_JavaScript

1.1 JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type"module"></script>标签即可。 常见使用方式有以下几种&#xff1a; 直接在<script type"module"></script>标签内写JS代码。script type"modu…...

「MySQL基础」不可重复读和幻读的区别

「MySQL基础」不可重复读和幻读的区别 文章参考&#xff1a; 在数据库中不可重复读和幻读到底应该怎么分&#xff1f; 作者&#xff1a;暖猫Suki、普通熊猫 文章目录「MySQL基础」不可重复读和幻读的区别一、概述二、小结一、概述 正好在琢磨这个问题&#xff0c;也被搞得头昏…...

CorelDRAW2023最新版新增功能200多个新模板

CorelDRAW是一款平面矢量绘图排版软件&#xff0c;CorelDRAW运用涵盖企业VI设计&#xff0c;广告设计&#xff0c;包装设计&#xff0c;画册设计&#xff0c;海报、招贴设计&#xff0c;UI界面设计&#xff0c;网页设计&#xff0c;书籍装帧设计&#xff0c;插画设计&#xff0…...

springboot自定义日志以及行号正确展示

在开发springboot项目时&#xff0c;我们可能需要自定义日志实现。需要对slf4j的日志实现进行一次外层包装 这个很简单&#xff0c;按照org.slf4j.Logger方式定义一个类Logger类MyLogger。 让后实现MyLoggerImpl&#xff1a; public class MyLoggerImpl implements CoreLogge…...

【GAOPS055】verilog 乘法、除法和取余

乘法硬件原理 结论 可以将乘法A x B转为A的移位相加。 利用乘2n就是左移n位的特性乘2^n就是左移n位的特性乘2n就是左移n位的特性&#xff0c;将数拆分为2n2^n2n表示 思路1 原始列竖式计算方法ref例2.9 思路2 B总是可以拆分为&#xff1a;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数据库 - 面试宝典 又到了 金三银四、金九银十 的时候了&#xff0c;是时候收藏一波面试题了&#xff0c;面试题可以不学&#xff0c;但不能没有&#xff01;&#x1f941;&#x1f941;&#x1f941; 一个合格的 计算机打工人 &#xff0c;收藏夹里必须有一份 MySQL 八…...

【Java】初识Java

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

JVM相关知识

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

【LeetCode】剑指 Offer(21)

目录 题目&#xff1a;剑指 Offer 39. 数组中出现次数超过一半的数字 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 40. 最小的k个数 -…...

线性求解器Ax=b的验证

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

java 事件处理机制 观察者模式

事件处理机制有三个要素事件、事件源、事件监听与java的对应关系如下事件事件源事件监听javaclassjava.util.EventObjectjava.util.EventObject 的 source 属性interfacejava.util.EventListener观察者模式又被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&…...

使用 HTML5 轻松验证表单插件

下载:https://download.csdn.net/download/mo3408/87559594 效果图: 当您通过表单从人们那里收集信息时,必须应用某种验证。如果不这样做,可能会导致客户流失、数据库中的垃圾数据甚至网站的安全漏洞。从历史上看,构建表单验证一直很痛苦。在服务器端,全栈框架会为您处理…...

【Error: ImagePullBackOff】Kubernetes中Nginx服务启动失败排查流程

❌pod节点启动失败&#xff0c;nginx服务无法正常访问&#xff0c;服务状态显示为ImagePullBackOff。 [rootm1 ~]# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-f89759699-cgjgp 0/1 ImagePullBackOff 0 103…...

九龙证券|直逼1.5万亿!A股融资余额创年内新高,青睐这些行业和个股

2023年以来&#xff0c;A股商场震动重复&#xff0c;商场走势整体先扬后抑&#xff0c;各路资金看法纷歧&#xff0c;但数据显现&#xff0c;融资客在此期间整体持续净买入&#xff0c;未受到商场动摇的明显冲击&#xff0c;融资余额日前已迫临1.5万亿元&#xff0c;创出年内新…...

【JavaScript】36_正则表达式

正则表达式 正则表达式 正则表达式用来定义一个规则通过这个规则计算机可以检查一个字符串是否符合规则 或者将字符串中符合规则的内容提取出来 正则表达式也是JS中的一个对象&#xff0c; 所以要使用正则表达式&#xff0c;需要先创建正则表达式的对象 new RegExp() 可以…...

参考 | 辨别真假笔记本三星内存条 (ddr4)

参考 | 辨别真假笔记本三星内存条 (ddr4) 文章目录参考 | 辨别真假笔记本三星内存条 (ddr4)1. 三星内存条标签纸上编码的含义2. 三星内存颗粒上编码的含义3. 辨别内容参考1. 三星内存条标签纸上编码的含义 内存条贴张上面有两串值得注意的编码, 其中编码的具体意义参考三星官方…...

JavaScript Math(算数)对象

Math&#xff08;算数&#xff09;对象的作用是&#xff1a;执行常见的算数任务。在线实例round()如何使用 round()。random()如何使用 random() 来返回 0 到 1 之间的随机数。max()如何使用 max() 来返回两个给定的数中的较大的数。&#xff08;在 ECMASCript v3 之前&#xf…...

MyBatis里面用了多少种设计模式?

在MyBatis的两万多行的框架源码中&#xff0c;使用了大量的设计模式对工程架构中的复杂场景进行解耦&#xff0c;这些设计模式的巧妙使用是整个框架的精华。经过整理&#xff0c;大概有以下设计模式&#xff0c;如图1所示。图101类型&#xff1a;创建型模式▊ 工厂模式SqlSessi…...

第三十二周精华分享(2023.02.27-2023.03.06)

本帖是知识星球各类问答以及文章精华沉淀区&#xff0c;而知识星球相关资源沉淀则在置顶帖的「资源沉淀」中。 学计算机的都应该知道有个局部性原理&#xff0c;其实局部性原理在很多场合都适用&#xff0c;比如80%的圈友的痛点或者疑惑其实都集中在一些固定的方面或者问题上&…...

数学建模资料整理

数学建模中有三类团队&#xff1a; 第一类&#xff1a;拿到题目&#xff0c;讨论&#xff0c;然后建模手开始建模&#xff0c;编程手开始处理数据&#xff0c;写作手开始写作。 第二类&#xff1a;拿到题目&#xff0c;团内大佬&#xff0c;开始建模&#xff0c;然后编程&#…...

php 爬取网站所有链接/站内优化主要从哪些方面进行

本文件包含一个风力发电机模型。 This file contains a wind turbine model. 该模型包括塔架、机舱和叶片的三维力学模型&#xff08;用Simscape Multibody建模&#xff09;&#xff0c;液压变桨致动器&#xff0c;电偏航致动器&#xff0c;一个简单的发电机和电网模型。 It…...

建设一个网站首先需要什么条件/天津网站建设技术外包

题面 先把每个串反着插进$Trie$树 每个节点的子树内&#xff0c;可能有一些节点是某些字符串的开头 每个节点挂一棵权值线段树&#xff0c;记录这些节点对应的原来字符串的编号 查询的时候在线段树上二分即可 为了节省空间&#xff0c;使用线段树合并 1 #include <vector>…...

网站首页做很多个关键词/搜索引擎优化关键词的处理

我对python还很陌生&#xff0c;但我已经了解了它的基本原理以及它的主要工作原理。我一直在尝试为服务器安装一个Django框架&#xff0c;这样它就可以承载一个网页。在 基本上&#xff0c;这里的问题是当我运行以下命令时&#xff1a;python3 -V 我得到输出 ^{pr2}$ 但出于某些…...

成都网站建设服务密需湖南岚鸿案例/简述什么是百度竞价排名

无损连接分解的形式定义如下&#xff1a;设R是一个关系模式&#xff0c;F是R上的一个函数依赖(FD)集。R分解成数据库模式δ{R1,……,Rk}。如果对R中每一个满足F的关系r都有下式成立&#xff1a; 那么称分解δ相对于F是“无损连接分解”&#xff0c;否则称为“损失连接分解”。其…...

企业网站排名要怎么做/百度优化关键词

引言 组件化就是基于可重用的目的&#xff0c;将一个大的软件系统按照分离关注点的形式&#xff0c;拆分成多个独立的组件。 组件的出现是为了解决全局工程中有很多重复代码的问题&#xff0c;是为了复用&#xff0c;而且划分力度是相对较小的模块。组件化的另一个目的是为了解…...

wordpress代购网站主题/微信小程序怎么做店铺

前言 这次练习的靶机是vulnhub平台下的DC系列靶机第四台&#xff0c;下载地址为https://www.vulnhub.com/entry/dc-4,313/。该靶机的难度系数为简单&#xff0c;拿下该靶机的关键就是需要收集信息&#xff0c;最终目的是获取root权限。 虚拟机配置 这次采用的网络连接模式依…...