python银行系统

文章目录

基于python的银行系统

  • 经考察,银行的主要功能需求主要包括开户、查询、存款、取款、转账、改密、锁定、解锁、补卡、销户。这些功能常用于自动取款机中,用户只需按相对应的关键字就可以启动相应的功能。本文基于python实现
  1. 开户:开户需要用户输入个人信息,包括姓名、身份证、电话号码、设置密码,然后系统会自动为用户生成随机的银行卡号,初始的金额为0,处于未锁定状态。
  2. 查询:查询的主要是指查询用户的可用余额,用户可以打印详细的凭单
  3. 存款:存款指用户把现金存入银行卡,可分为活期存款和定期存款,两者的利息计算方法是不一样的,用户可以打印详细的存款凭单。
  4. 取款:取款指用户从银行账户把钱取出,包括活期取款和定期取款,两者的利息计算不一样,所以要分类,可以打印凭单。
  5. 转账:从一个账户把金额转到另一个账户,需要转账人输入双方的账户,可以打印凭单。
  6. 改密:修改密码主要是防止一些用户会忘记自己的账户密码,或者是想定期修改密码而设定的选项,用户由于忘记了密码,所以只需要输入银行卡号、身份证号和手机号、然后收到短信验证码验证就可证明。但是本系统由于没有设置验证码功能,所以只实现了由旧密码修改新密码,未实现验证码修改。
  7. 锁定:锁定功能一般用在两处,第一处为当用户输入密码错误连续超过三次后就会自动锁定账户,第二处为用户人为锁定,目的在于确保账户的安全。
  8. 解锁:解锁功能不会自动启动,需要持卡人到银行申请,需要输入银行账号和密码,还要身份证。
  9. 补卡:补卡功能一般用于持卡人银行卡丢失或者想换一张卡,但是又不想更换信息,因此需要这一补卡功能,该功能还可用于当持卡人忘记密码而补办银行卡。
  10. 注销:该功能主要用于当持卡人不想要该账户,就可选择该功能注销账户,包括注销在账户的个人信息,注销银行卡内的信息,不过在此之前用户可以选择把余额取出来才可以销户,否则销户失败。
    银行功能图
  • 实现方法主要包括三个部分,第一是界面类,第二是功能类,第三是备份类

1、主界面

import time
from bank_system import function

Function = function.Function()

class Main(object):
    def run(self):
        while True:
            print("正在跳转至主界面,请稍后", end="")
            for i in range(5):
                print(".", end="", flush=True)
                time.sleep(0.4)
            print("")
            self.UI()
            number = input("请输入您要选择的功能编号:")
            if number not in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'q']:
                print("请输入正确的编码!")
            if number == "0":
                Function.create_user()
            elif number == "1":
                Function.query()
            elif number == "2":
                Function.deposit()
            elif number == "3":
                Function.withdrawal()
            elif number == "4":
                Function.transfer()
            elif number == "5":
                Function.change_password()
            elif number == "6":
                Function.lock()
            elif number == "7":
                Function.unlock()
            elif number == "8":
                Function.reapply()
            elif number == "9":
                Function.destory()
            elif number == "q":
                print("正在退出系统,请稍后", end=" ")
                for i in range(6):
                    print(".", end=" ", flush=True)
                    time.sleep(0.5)
                break

    def UI(self):
        print("*****************************************************")
        print("**             欢迎进入--白菜--招商银行           **")
        print("**       开户(0)                       查询(1)     **")
        print("**       存款(2)                       取款(3)     **")
        print("**       转账(4)                       改密(5)     **")
        print("**       锁定(6)                       解锁(7)     **")
        print("**       补卡(8)                       销户(9)     **")
        print("**                       退出(q)                   **")
        print("*****************************************************")

if __name__ == "__main__":
    Main().run()

2、功能实现

  • 接下来就是一步一步去实现这些功能了,这里需要调用数据库,因此需要改动数据库的名称和密码为你自己的
import pymysql
import random
import time

db = pymysql.connect(host="localhost", port=3306, user='root', password='564445', db='bank_system', charset='utf8')
cursor = db.cursor()


class Function(object):
    # 开户(0)
    def create_user(self):
        print("\n-------------开户(0)-------------")
        name = input("请输入您的姓名:")
        idCard = int(input("请输入您的身份证号码:"))
        phone = input("请输入您的电话号码:")
        cardnumber = self.create_card_number()
        password = self.set_password()
        if password == -1:
            print("创建失败!")
            print("即将返回主界面!")
            return -1
        mysql1 = "insert into user values(%s, %s, %s, %s)"
        cursor.execute(mysql1, (name, idCard, phone, cardnumber))
        db.commit()
        # 0表示卡没有被锁, 1表示卡被锁了
        mysql2 = "insert into card values(%s, %s, %s, %s, %s)"
        cursor.execute(mysql2, (cardnumber, password, 0, 0, 0))
        db.commit()
        print("尊敬的 %s 用户,您好!您的账户已创建成功!您的卡号是:%s" % (name, cardnumber))
        print("即将返回主界面!")

    # 随机生成6位卡号
    def create_card_number(self):
        while True:
            cardnumber = ""
            for i in range(6):
                cardnumber += str(random.randrange(0, 10))
            cursor.execute("select * from card where cardnumber = %s", cardnumber)
            card = cursor.fetchone()
            if card is None:
                return cardnumber

    # 设置密码
    def set_password(self):
        for i in range(4):
            password1 = input("请输入您的密码:")
            password2 = input("请再次输入您的密码:")
            if password1 == password2:
                return password1
            if i == 3:
                return -1
            print("对不起,您两次输入的密码不一致,请重新输入!")

    # 查询(1)
    def query(self):
        print("\n-------------查询(1)-------------")
        cardnumber = input("请输入您的卡号:")
        cursor.execute("select * from card where cardnumber = %s", cardnumber)
        card = cursor.fetchone()
        if card is None:
            print("对不起, 您输入的卡号有误!")
            print("即将返回主界面!")
        elif card[3] == '1':
            print("对不起,您的银行卡已被锁定!")
            print("即将返回主界面!")
        else:
            cursor.execute("select * from user where cardnumber = %s", cardnumber)
            data = cursor.fetchone()
            cnt = 0
            for i in range(3):
                password = input("请您输入密码:")
                if password == card[1]:
                    print("尊敬的 ", data[0], " 用户您好!")
                    print("您的余额为:", card[2])
                    de = input("是否打印明细表? 是(y/Y), 否(f/F):")
                    if de == 'y' or de == 'Y':
                        print(" -----------------------------------------------------------------------")
                        print("                        徐艺铭--招商银行 查询凭单                      ")
                        print("                                                                       ")
                        print("     余额:%s                                                          " % card[2])
                        print("     账户名:%s                                                        " % data[0])
                        print("     账号:%s                                                          " % card[0])
                        print("     日期:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                        print("     开户行:******支行                                                ")
                        print("     编号:", random.randint(10000000000, 99999999999), "              ")
                        print("                                                                       ")
                        print(" -----------------------------------------------------------------------")
                    elif de == 'f' or de == 'F':
                        print("", end="")
                    break
                else:
                    cnt += 1
                    if cnt == 3:
                        p = '1'
                        cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                        db.commit()
                        print("您的银行卡已被锁定!")
                        print("即将返回主界面!")
                        return 0
                    else:
                        print("密码输入错误,请重新输入!")

    # 存款(2)
    def deposit(self):
        print("\n-------------存款(2)-------------")
        dec = input("定期存款按(d),活期存款按(h):")
        if dec == "h":
            cardnumber = input("请输入您的银行卡号:")
            cursor.execute("select * from card where cardnumber = %s", cardnumber)
            card = cursor.fetchone()
            if card is None:
                print("对不起,您输入的卡号有误!")
                print("即将返回主界面!")
                return -1
            cursor.execute("select * from user where cardnumber = %s", cardnumber)
            data = cursor.fetchone()
            if card[3] == '1':
                print("对不起,您的银行卡已被锁,无法存款!")
                print("即将返回主界面!")
                return -1
            cnt = 0
            save_money = ""
            for i in range(6):
                password = input("请输入您的密码:")
                if password == card[1]:
                    print("尊敬的 ", data[0], " 用户您好!")
                    for j in range(4):
                        save_money = input("请输入您要存入的金额:")
                        if not save_money.isdigit():
                            if j == 3:
                                return 0
                            print("您输入的不是数字,请输入数字:")
                            continue
                        elif save_money.isdigit():
                            break
                    if float(save_money) < 0:
                        print("对不起,您输入的金额有误")
                        continue
                    money = str(float(card[2]) + float(save_money))
                    cursor.execute("update card set money = %s where cardnumber = %s", (money, cardnumber))
                    db.commit()
                    print("恭喜您!存款成功,当前账户可用余额为:%s 元" % money)
                    de = input("是否打印明细表? 是(y/Y), 否(f/F):")
                    if de == 'y' or de == 'Y':
                        print(" -----------------------------------------------------------------------")
                        print("                      徐艺铭--招商银行 汇款取款凭单                    ")
                        print("                                                                       ")
                        print("     存款金额:%s         (活期存款)                                   " % save_money)
                        print("     存款人:%s                                                        " % data[0])
                        print("     可用余额:%s                                                      " % money)
                        print("     存款人账号:%s                                                    " % data[3])
                        print("     日期:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                        print("     开户行:******支行                                                ")
                        print("     编号:", random.randint(10000000000, 99999999999), "              ")
                        print("                                                                       ")
                        print(" -----------------------------------------------------------------------")
                    elif de == 'f' or de == 'F':
                        print("", end="")
                    print("即将返回主界面!")
                    break
                else:
                    cnt += 1
                    if cnt == 3:
                        p = '1'
                        cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                        db.commit()
                        print("您的银行卡已被锁定!")
                        print("即将返回主界面!")
                        break
                    else:
                        print("密码输入错误,请重新输入!")
        elif dec == "d":
            cardnumber = input("请输入您的银行卡号:")
            cursor.execute("select * from card where cardnumber = %s", cardnumber)
            card = cursor.fetchone()
            if card is None:
                print("对不起,您输入的卡号有误!")
                print("即将返回主界面!")
                return -1
            cursor.execute("select * from user where cardnumber = %s", cardnumber)
            data = cursor.fetchone()
            if card[3] == '1':
                print("对不起,您的银行卡已被锁,无法存款!")
                print("即将返回主界面!")
                return -1
            cnt = 0
            date = ""
            save_money = ""
            moneyg = 0
            for i in range(6):
                password = input("请输入您的密码:")
                if password == card[1]:
                    print("尊敬的 ", data[0], " 用户您好!")
                    print("----------------年利率-----------------")
                    print("|    三个月定期:  1.35%     按(1)    |")
                    print("|    半年定期:    1.55%     按(2)    |")
                    print("|    一年定期:    1.75%     按(3)    |")
                    print("|    二年定期:    2.25%     按(4)    |")
                    print("|    三年定期:    2.75%     按(5)    |")
                    print("|    五年定期:    3.00%     按(6)    |")
                    print("|    五年以上定期:3.35%     按(7)    |")
                    print("---------------------------------------")
                    for m in range(6):
                        date = input("请输入存款时间:")
                        if date not in ['1', '2', '3', '4', '5', '6', '7']:
                            print("请输入正确的编号!")
                            continue
                        for j in range(4):
                            save_money = input("请输入您要存入的金额:")
                            if not save_money.isdigit():
                                if j == 3:
                                    return 0
                                print("您输入的不是数字,请输入数字:")
                                continue
                            elif save_money.isdigit():
                                break
                        if float(save_money) < 0:
                            print("对不起,您输入的金额有误!")
                            continue
                        else:
                            break
                    money = float(float(card[2]) + float(save_money))
                    if date == '1':
                        cursor.execute("update card set date = %s where cardnumber = %s", (date, cardnumber))
                        db.commit()
                        moneyg = money * 1.0135
                    elif date == '2':
                        cursor.execute("update card set date = %s where cardnumber = %s", (date, cardnumber))
                        db.commit()
                        moneyg = money * 1.0155
                    elif date == '3':
                        cursor.execute("update card set date = %s where cardnumber = %s", (date, cardnumber))
                        db.commit()
                        moneyg = money * 1.0175
                    elif date == '4':
                        cursor.execute("update card set date = %s where cardnumber = %s", (date, cardnumber))
                        db.commit()
                        moneyg = money * 2.0225
                    elif data == '5':
                        cursor.execute("update card set date = %s where cardnumber = %s", (date, cardnumber))
                        db.commit()
                        moneyg = money * 2.0275
                    elif date == '6':
                        cursor.execute("update card set date = %s where cardnumber = %s", (date, cardnumber))
                        db.commit()
                        moneyg = money * 1.0300
                    elif date == '7':
                        cursor.execute("update card set date = %s where cardnumber = %s", (date, cardnumber))
                        db.commit()
                        moneyg = money * 1.0335
                    moneyg = str(moneyg)
                    cursor.execute("update card set money = %s where cardnumber = %s", (moneyg, cardnumber))
                    db.commit()
                    print("恭喜您!存款成功,当前账户可用余额为:%s 元" % money)
                    de = input("是否打印明细表? 是(y/Y), 否(f/F):")
                    if de == 'y' or de == 'Y':
                        print(" -----------------------------------------------------------------------")
                        print("                      白菜--招商银行 汇款取款凭单                    ")
                        print("                                                                       ")
                        print("     存款金额:%s         (定期存款)                                   " % save_money)
                        print("     存款人:%s                                                        " % data[0])
                        print("     可用余额:%s                                                      " % money)
                        print("     存款人账号:%s                                                    " % data[3])
                        print("     日期:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                        print("     开户行:******支行                                                ")
                        print("     编号:", random.randint(10000000000, 99999999999), "              ")
                        print("                                                                       ")
                        print(" -----------------------------------------------------------------------")
                    elif de == 'f' or de == 'F':
                        print("", end="")
                    print("即将返回主界面!")
                    break
                else:
                    cnt += 1
                    if cnt == 3:
                        p = '1'
                        cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                        db.commit()
                        print("您的银行卡已被锁定!")
                        print("即将返回主界面!")
                        break
                    else:
                        print("密码输入错误,请重新输入!")

    # 取款(3)
    def withdrawal(self):
        print("\n-------------取款(3)-------------")
        dec = input("定期取款按(d),活期取款按(h):")
        if dec == "h":
            cardnumber = input("请输入您的银行卡号:")
            cursor.execute("select * from card where cardnumber = %s", cardnumber)
            card = cursor.fetchone()
            if card is None:
                print("对不起,您输入的卡号有误!")
                print("即将返回主界面!")
                return -1
            cursor.execute("select * from user where cardnumber = %s", cardnumber)
            data = cursor.fetchone()
            if card[3] == '1':
                print("对不起,您的银行卡已被锁,无法取款!")
                print("即将返回主界面!")
                return -1
            cnt = 0
            get_money = ""
            for i in range(6):
                password = input("请输入您的密码:")
                if password == card[1]:
                    print("尊敬的 ", data[0], " 用户您好!")
                    for j in range(4):
                        get_money = input("请输入您要取出的金额:")
                        if not get_money.isdigit():
                            if j == 3:
                                return 0
                            print("您输入的不是数字,请输入数字:")
                            continue
                        elif get_money.isdigit():
                            break
                    if float(get_money) < 0:
                        print("对不起,您输入的金额有误")
                        continue
                    if float(get_money) > float(card[2]):
                        print("对不起,您的余额不足!")
                        continue
                    if float(get_money) == 0:
                        print("您的资金未变动!")
                        print("即将返回主界面!")
                        return 0
                    # 活期存款的利息为 0.35%
                    money = str(float(card[2]) * 1.0035 - float(get_money))
                    cursor.execute("update card set money = %s where cardnumber = %s", (money, cardnumber))
                    db.commit()
                    print("恭喜您!取款成功,当前账户可用余额为:%s 元" % money)
                    de = input("是否打印明细表? 是(y/Y), 否(f/F):")
                    if de == 'y' or de == 'Y':
                        print(" -----------------------------------------------------------------------")
                        print("                      白菜--招商银行 汇款取款凭单                    ")
                        print("                                                                       ")
                        print("     取款金额:%s         (活期取款)                                   " % get_money)
                        print("     取款人:%s                                                        " % data[0])
                        print("     可用余额:%s                                                      " % money)
                        print("     取款人账号:%s                                                    " % data[3])
                        print("     日期:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                        print("     开户行:******支行                                                ")
                        print("     编号:", random.randint(10000000000, 99999999999), "              ")
                        print("                                                                       ")
                        print(" -----------------------------------------------------------------------")
                    elif de == 'f' or de == 'F':
                        print("", end="")
                    print("即将返回主界面!")
                    break
                else:
                    cnt += 1
                    if cnt == 3:
                        p = '1'
                        cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                        db.commit()
                        print("您的银行卡已被锁定!")
                        print("即将返回主界面!")
                        break
                    else:
                        print("密码输入错误,请重新输入!")
        elif dec == "d":
            cardnumber = input("请输入您的银行卡号:")
            cursor.execute("select * from card where cardnumber = %s", cardnumber)
            card = cursor.fetchone()
            if card is None:
                print("对不起,您输入的卡号有误!")
                print("即将返回主界面!")
                return -1
            cursor.execute("select * from user where cardnumber = %s", cardnumber)
            data = cursor.fetchone()
            if card[3] == '1':
                print("对不起,您的银行卡已被锁,无法取款!")
                print("即将返回主界面!")
                return -1
            cnt = 0
            date = ""
            get_money = ""
            moneyg = 0
            bo = input("是否是提前取款,是(y/Y),否(f/F):")
            if bo == 'y' or bo == 'Y':
                for i in range(6):
                    password = input("请输入您的密码:")
                    if password == card[1]:
                        print("尊敬的 ", data[0], " 用户您好!")
                        print("----------------年利率-----------------")
                        print("|    三个月定期:  1.35%     按(1)    |")
                        print("|    半年定期:    1.55%     按(2)    |")
                        print("|    一年定期:    1.75%     按(3)    |")
                        print("|    二年定期:    2.25%     按(4)    |")
                        print("|    三年定期:    2.75%     按(5)    |")
                        print("|    五年定期:    3.00%     按(6)    |")
                        print("|    五年以上定期:3.35%     按(7)    |")
                        print("--注意:提前取款将按活期的0.35%利息计算--")
                        print("----------------------------------------")
                        for m in range(5):
                            date = input("请输入存款时间:")
                            for p in range(3):
                                if date not in ['1', '2', '3', '4', '5', '6', '7']:
                                    print("请输入正确的编号!")
                                    continue
                                else:
                                    break
                            for j in range(4):
                                get_money = input("请输入您要取出的金额:")
                                if not get_money.isdigit():
                                    if j == 3:
                                        return 0
                                    print("您输入的不是数字,请输入数字:")
                                    continue
                                elif get_money.isdigit():
                                    break
                                else:
                                    break
                            if float(get_money) == 0:
                                print("您的资金未变动!")
                                print("即将返回主界面!")
                                return 0
                            if float(get_money) < 0:
                                print("对不起,您输入的金额有误!")
                                continue
                            elif float(get_money) > float(card[2]):
                                print("对不起,您的余额不足!")
                                continue
                            else:
                                break
                        if date == '1':
                            moneyg = float(card[2]) / 1.0135 * 1.0035
                        elif date == '2':
                            moneyg = float(card[2]) / 1.0155 * 1.0035
                        elif date == '3':
                            moneyg = float(card[2]) / 1.0175 * 1.0035
                        elif date == '4':
                            moneyg = float(card[2]) / 2.0225 * 1.0035
                        elif data == '5':
                            moneyg = float(card[2]) / 2.0275 * 1.0035
                        elif date == '6':
                            moneyg = float(card[2]) / 1.0300 * 1.0035
                        elif date == '7':
                            moneyg = float(card[2]) / 1.0335 * 1.0035
                        money = str(moneyg - float(get_money))
                        cursor.execute("update card set money = %s where cardnumber = %s", (money, cardnumber))
                        db.commit()
                        print("恭喜您!取款成功,当前账户可用余额为:%s 元" % money)
                        de = input("是否打印明细表? 是(y/Y), 否(f/F):")
                        if de == 'y' or de == 'Y':
                            print(" -----------------------------------------------------------------------")
                            print("                      白菜--招商银行 汇款取款凭单                    ")
                            print("                                                                       ")
                            print("     取款金额:%s         (定期取款) 提前                              " % get_money)
                            print("     取款人:%s                                                        " % data[0])
                            print("     可用余额:%s                                                      " % money)
                            print("     取款人账号:%s                                                    " % data[3])
                            print("     日期:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                            print("     开户行:******支行                                                ")
                            print("     编号:", random.randint(10000000000, 99999999999), "              ")
                            print("                                                                       ")
                            print(" -----------------------------------------------------------------------")
                        elif de == 'f' or de == 'F':
                            print("", end="")
                        print("即将返回主界面!")
                        return 0
                    else:
                        cnt += 1
                        if cnt == 3:
                            p = '1'
                            cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                            db.commit()
                            print("您的银行卡已被锁定!")
                            print("即将返回主界面!")
                            break
                        else:
                            print("密码输入错误,请重新输入!")
            elif bo == 'F' or bo == 'f':
                for i in range(6):
                    password = input("请输入您的密码:")
                    if password == card[1]:
                        print("尊敬的 ", data[0], " 用户您好!")
                        for j in range(4):
                            get_money = input("请输入您要取出的金额:")
                            if not get_money.isdigit():
                                if j == 3:
                                    return 0
                                print("您输入的不是数字,请输入数字:")
                                continue
                            elif get_money.isdigit():
                                break
                        if float(get_money) < 0:
                            print("对不起,您输入的金额有误")
                            continue
                        if float(get_money) > float(card[2]):
                            print("对不起,您的余额不足!")
                            continue
                        money = str(float(card[2]) - float(get_money))
                        cursor.execute("update card set money = %s where cardnumber = %s", (money, cardnumber))
                        db.commit()
                        print("恭喜您!取款成功,当前账户可用余额为:%s 元" % money)
                        de = input("是否打印明细表? 是(y/Y), 否(f/F):")
                        if de == 'y' or de == 'Y':
                            print(" -----------------------------------------------------------------------")
                            print("                      白菜--招商银行 汇款取款凭单                    ")
                            print("                                                                       ")
                            print("     取款金额:%s         (定期取款)                                   " % get_money)
                            print("     取款人:%s                                                        " % data[0])
                            print("     可用余额:%s                                                      " % money)
                            print("     取款人账号:%s                                                    " % data[3])
                            print("     日期:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                            print("     开户行:******支行                                                ")
                            print("     编号:", random.randint(10000000000, 99999999999), "              ")
                            print("                                                                       ")
                            print(" -----------------------------------------------------------------------")
                        elif de == 'f' or de == 'F':
                            print("", end="")
                        print("即将返回主界面!")
                        break
                    else:
                        cnt += 1
                        if cnt == 3:
                            p = '1'
                            cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                            db.commit()
                            print("您的银行卡已被锁定!")
                            print("即将返回主界面!")
                            break
                        else:
                            print("密码输入错误,请重新输入!")

    # 转账(4)
    def transfer(self):
        print("\n-------------转账(6)-------------")
        mycardnumber = input("请输入您的银行账号:")
        cursor.execute("select * from card where cardnumber = %s", mycardnumber)
        card1 = cursor.fetchone()
        if card1 is None:
            print("对不起,您输入的卡号有误!")
            print("即将返回主界面!")
            return -1
        if card1[3] == '1':
            print("您的银行卡已经被锁定,无法转账!")
            print("即将返回主界面!")
            return 0
        cursor.execute("select * from user where cardnumber = %s", mycardnumber)
        data1 = cursor.fetchone()
        cnt = 0
        for i in range(6):
            password1 = input("请输入您的密码:")
            if password1 == card1[1]:
                print("尊敬的 ", data1[0], " 用户您好!")
                othercardnumber = input("请输入对方的银行账号:")
                cursor.execute("select * from card where cardnumber = %s", othercardnumber)
                card2 = cursor.fetchone()
                if card2 is None:
                    print("对不起,收款人的卡号有误,请重新输入!")
                    continue
                cursor.execute("select * from user where cardnumber = %s", othercardnumber)
                data2 = cursor.fetchone()
                idd = str(int(data2[1]))
                id4 = idd[-1:-5:-1]
                id4 = id4[::-1]
                print("------------------------------")
                print("   收款人的姓名:%s           " % data2[0])
                print("   收款人身份证后四位:%s     " % id4)
                print("------------------------------")
                boo = input("请确认收款人信息,确认(y/Y),取消(f/F):")
                money = ""
                if boo == 'y' or boo == 'Y':
                    for ii in range(6):
                        for j in range(4):
                            money = input("请输入转账金额:")
                            if not money.isdigit():
                                if j == 3:
                                    return 0
                                print("您输入的不是数字,请输入数字:")
                                continue
                            elif money.isdigit():
                                break
                        if float(money) < 0:
                            print("对不起,您输入的金额有误!")
                            continue
                        if float(money) > float(card1[2]):
                            print("对不起,您的余额不足!")
                            continue
                        booo = input("请确认是否转账,确认(y/Y),取消(f/F):")
                        if booo == 'y' or booo == 'Y':
                            transfer_money1 = str(float(card2[2]) + float(money))
                            cursor.execute("update card set money = %s where cardnumber = %s",
                                           (transfer_money1, othercardnumber))
                            db.commit()
                            transfer_money2 = str(float(card1[2]) - float(money))
                            cursor.execute("update card set money = %s where cardnumber = %s",
                                           (transfer_money2, mycardnumber))
                            db.commit()
                            print("恭喜您!转账成功,当前账户可用余额为:%s 元" % transfer_money2)
                            de = input("是否打印明细表? 是(y/Y), 否(f/F):")
                            if de == 'y' or de == 'Y':
                                print(" -----------------------------------------------------------------------")
                                print("                         白菜--招商银行 转账凭单                       ")
                                print("                                                                       ")
                                print("     转账金额:%s                                                     " % money)
                                print("     转账人:%s                                                        " % data1[0])
                                print("     收款人:%s                                                        " % data2[0])
                                print(
                                    "     可用余额:%s                                                      " % transfer_money2)
                                print("     转账人账号:%s                                                    " % card1[0])
                                print("     收款人账号:%s                                                    " % card2[0])
                                print("     日期:", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
                                print("     开户行:******支行                                                ")
                                print("     编号:", random.randint(10000000000, 99999999999), "              ")
                                print("                                                                       ")
                                print(" -----------------------------------------------------------------------")
                            elif de == 'f' or de == 'F':
                                print("", end="")
                            print("即将返回主界面!")
                            return 0
                        elif booo == 'f' or booo == 'F':
                            print("取消成功!")
                            print("即将返回主界面!")
                            return 0
                elif boo == 'f' or boo == 'F':
                    print("取消成功!")
                    return 0
            else:
                cnt += 1
                if cnt == 3:
                    print("对不起,您的银行卡已被锁定!")
                    return -1
                else:
                    print("密码输入错误,请重新输入!")

    # 改密(5)
    def change_password(self):
        print("\n-------------改密(5)-------------")
        cardnumber = input("请输入您的银行卡号:")
        cursor.execute("select * from card where cardnumber = %s", cardnumber)
        card = cursor.fetchone()
        if card is None:
            print("对不起,您输入的卡号有误!")
            print("即将返回主界面!")
            return -1
        cursor.execute("select * from user where cardnumber = %s", cardnumber)
        data = cursor.fetchone()
        if card[3] == '1':
            print("对不起,您的银行卡已被锁,无法修改密码!")
            print("即将返回主界面!")
            return -1
        iidcard = str(input("请输入您的身份证:"))
        if str(data[1]) != iidcard:
            print("对不起,您输入的身份证有误!")
            print("即将返回主界面!")
            return -1
        phone = input("请输入您的手机号码:")
        if data[2] != phone:
            print("对不起,您输入的手机号有误!")
            print("即将返回主界面!")
            return -1
        cnt = 0
        for i in range(6):
            password = input("请输入您的密码:")
            if password == card[1]:
                print("尊敬的 ", data[0], " 用户您好!")
                for j in range(3):
                    password1 = input("请输入您的新密码:")
                    password2 = input("请再次输入您的新密码:")
                    if password1 != password2:
                        print("对不起,您输入的密码不一致,请重新输入:")
                        continue
                    else:
                        cursor.execute("update card set password = %s where cardnumber = %s", (password1, cardnumber))
                        db.commit()
                        print("恭喜您!您的密码修改成功!")
                        print("即将返回主界面!")
                        return 0
            else:
                cnt += 1
                if cnt == 3:
                    p = '1'
                    cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                    db.commit()
                    print("您的银行卡已被锁定!")
                    print("即将返回主界面!")
                    break
                else:
                    print("密码输入错误,请重新输入!")

    # 锁定(6)
    def lock(self):
        print("\n-------------锁定(6)-------------")
        cardnumber = input("请输入您的银行卡号:")
        cursor.execute("select * from card where cardnumber = %s", cardnumber)
        card = cursor.fetchone()
        if card is None:
            print("对不起,您输入的卡号有误!")
            print("即将返回主界面!")
            return -1
        cursor.execute("select * from user where cardnumber = %s", cardnumber)
        data = cursor.fetchone()
        if card[3] == '1':
            print("您的银行卡已经被锁定!")
            print("即将返回主界面!")
            return 0
        idcard = input("请输入您的身份证号:")
        if str(data[1]) != idcard:
            print("您的身份证有误!")
            print("即将返回主界面!")
            return -1
        cnt = 0
        for i in range(6):
            password = input("请输入您的密码:")
            if password == card[1]:
                print("尊敬的 ", data[0], " 用户您好!")
                p = '1'
                cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                db.commit()
                print("恭喜您!银行卡锁定成功!")
                print("即将返回主界面!")
                return 0
            else:
                cnt += 1
                if cnt == 3:
                    print("对不起,银行卡锁定失败!")
                    print("即将返回主界面!")
                    break
                else:
                    print("密码输入错误,请重新输入!")

    # 解锁(7)
    def unlock(self):
        print("\n-------------解锁(7)-------------")
        cardnumber = input("请输入您的银行卡号:")
        cursor.execute("select * from card where cardnumber = %s", cardnumber)
        card = cursor.fetchone()
        if card is None:
            print("对不起,您输入的卡号有误!")
            print("即将返回主界面!")
            return -1
        cursor.execute("select * from user where cardnumber = %s", cardnumber)
        data = cursor.fetchone()
        if card[3] == '0':
            print("您的银行卡没有被锁定!")
            print("即将返回主界面!")
            return -1
        idcard = input("请输入您的身份证号:")
        if str(data[1]) != idcard:
            print("您的身份证有误!")
            print("即将返回主界面!")
            return -1
        cnt = 0
        for i in range(6):
            password = input("请输入您的密码:")
            if password == card[1]:
                print("尊敬的 ", data[0], " 用户您好!")
                p = '0'
                cursor.execute("update card set islock = %s where cardnumber = %s", (p, cardnumber))
                db.commit()
                print("恭喜您!银行卡解锁成功!")
                print("即将返回主界面!")
                return 0
            else:
                cnt += 1
                if cnt == 3:
                    print("对不起,银行卡解锁失败!")
                    print("即将返回主界面!")
                    break
                else:
                    print("密码输入错误,请重新输入!")

    # 补卡(8)
    def reapply(self):
        print("\n-------------补卡(8)-------------")
        idcard1 = input("请输入您的身份证号码:")
        if not idcard1.isdigit():
            print("您输入的为非数字!")
            print("即将返回主界面!")
            return -1
        cursor.execute("select * from user where idcard = %s", idcard1)
        user = cursor.fetchone()
        if user is None:
            print("您输入的身份证有误!")
            print("即将返回主界面!")
            return -1
        cardnumber1 = user[3]
        cursor.execute("select * from card where cardnumber = %s", cardnumber1)
        card = cursor.fetchone()
        phone_peo = input("请输入您的手机号码:")
        if phone_peo != user[2]:
            print("您输入的手机号码有误!")
            print("即将返回主界面!")
            return -1
        money = card[2]
        print("您之前的卡还剩余额:%s 元" % money)
        boo = input("是否执行补卡,确认(y/Y),取消(f/F):")
        password = ""
        if boo == 'y' or boo == 'Y':
            name = input("请输入您的姓名:")
            idCard = int(input("请输入您的身份证号码:"))
            phone = input("请输入您的电话号码:")
            cardnumber = self.create_card_number()
            for j in range(4):
                if j == 3:
                    print("正在返回主界面!")
                    return -1
                password = input("请输入您的密码:")
                password1 = input("您再次输入您的密码:")
                if password != password1:
                    print("两次密码不一致,请重新输入!")
                    continue
                else:
                    break
            # 把原先的账户注销掉
            cursor.execute("delete from card where cardnumber = %s", cardnumber1)
            db.commit()
            cursor.execute("delete from user where cardnumber = %s", cardnumber1)
            db.commit()
            # 插入新的账户
            mysql1 = "insert into user values(%s, %s, %s, %s)"
            cursor.execute(mysql1, (name, idCard, phone, cardnumber))
            db.commit()
            # 0表示卡没有被锁, 1表示卡被锁了
            mysql2 = "insert into card values(%s, %s, %s, %s, %s)"
            cursor.execute(mysql2, (cardnumber, password, money, 0, 0))
            db.commit()
            print("尊敬的 %s 用户,您好!您已补卡成功!您的新卡号是:%s ,您当前的余额为:%s" % (name, cardnumber, card[2]))
            print("您的旧卡已被注销!")
            print("即将返回主界面!")
            return 0
        elif boo == 'f' or boo == 'F':
            print("补卡失败,即将返回主界面!")
            return 0

    # 销户(9)
    def destory(self):
        print("\n-------------销户(9)-------------")
        cardnumber = input("请输入您的银行卡号:")
        cursor.execute("select * from card where cardnumber = %s", cardnumber)
        card = cursor.fetchone()
        if card is None:
            print("对不起,您输入的卡号有误!")
            print("即将返回主界面!")
            return -1
        cursor.execute("select * from user where cardnumber = %s", cardnumber)
        data = cursor.fetchone()
        if card[3] == '1':
            print("您的银行卡已被锁定!")
            print("即将返回主界面!")
            return -1
        idcard = input("请输入您的身份证号:")
        if str(data[1]) != idcard:
            print("您的身份证有误!")
            print("即将返回主界面!")
            return -1
        cnt = 0
        for i in range(6):
            password = input("请输入您的密码:")
            if password == card[1]:
                print("尊敬的 ", data[0], " 用户您好!")
                print("您的账户里还有余额:%s" % card[2])
                aoo = input("是否取出余额,是(y/Y),否(f/F):")
                if aoo == 'y' or aoo == 'Y':
                    coo = input("请输入您的密码:")
                    if coo == card[1]:
                        print("您的余额已取出!")
                        boo = input("是否执行销户,确认(y/Y),取消(f/F):")
                        if boo == 'y' or boo == 'Y':
                            cursor.execute("delete from card where cardnumber = %s", cardnumber)
                            db.commit()
                            cursor.execute("delete from user where cardnumber = %s", cardnumber)
                            db.commit()
                            print("该账户已注销,即将返回主界面!")
                            return 0
                        elif boo == 'f' or boo == 'F':
                            print("注销失败,即将返回主界面!")
                            return 0
                    elif coo != card[1]:
                        print("您输入的密码有误!")
                        continue
                elif aoo == 'f' or aoo == 'F':
                    print("注销失败!")
                    return 0
            else:
                cnt += 1
                if cnt == 3:
                    print("对不起,银行卡销户失败!")
                    print("即将返回主界面!")
                    break
                else:
                    print("密码输入错误,请重新输入!")

3、数据备份

  • 这里需要修改备份文件的存储路径为你自己的路径,当然密码和数据库名称也需要修改
import os
import time

bakup_dir = "E:\\桌面\\Python\\pycharm_bank\\bank_system\\"
current_time = time.strftime('%Y%m%d%H%M%S')
user = 'root'
password = '564445'
database = ['mysql', 'bank_system']
if os.path.exists(bakup_dir):
    print("The path %s exists" % bakup_dir)
else:
    os.makedirs(bakup_dir)
    print("The path %s create sucessful" % bakup_dir)
os.chdir(bakup_dir)
for i in range(len(database)):
    a = database[i]
mysqlbak_cmd = "mysqldump -u%s -p%s --default-character-set=utf8  %s > %s%s.sql" % (user, password, a, current_time, a)
os.system(mysqlbak_cmd)
print("backup sucessful")

如果您觉得对您有帮助,请点赞哦!

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

素履、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值