python連接mysql數據庫實例demo(銀行管理系統數據庫版)


 

主函數:

import adminView
import os
import pickle
from bankFunction import BankFunction
import time

def main():
    # pass
    # 歡迎界面
    adminView.welcomeView()
    if adminView.loginView() == 1:
        pass
    adminView.functionView()

    bank = BankFunction({})

    while True:
        number = input("請輸入您要選擇的功能編號: ")
        if number == "1":
            bank.createUser()
        elif number == "2":  # 查詢
            bank.questUser()
        elif number == "3":  # 存款
            bank.saveMoney()
        elif number == "4":  # 取款
            bank.getMoney()
        elif number == "5":  # 轉賬
            bank.transferMoney()
        elif number == "6":  # 改密碼
            bank.editPasswd()
        elif number == "7":  # 鎖卡
            bank.lockCard()
        elif number == "8":  # 解鎖
            bank.unlockCard()
        elif number == "9":  # 補卡
            bank.fillCard()
        elif number == "0":  # 銷戶
            bank.killCard()
        elif number == "q":
            print("正在推出系統,請稍后......")
            time.sleep(2)
            print("退出成功")
            break
        else:
            print("您輸入的數字有誤,請重新輸入")


def test():
    adminView.welcomeView()
    adminView.loginView()
    adminView.functionView()


if __name__ == '__main__':
    main()
    # test()

 

調用數據庫的部分:

 

"""
類:bankFunction 銀行對象
屬性:銀行功能
"""
import random
import adminView
import pymysql

global db
db = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='caiyishuai',
    db='bank',
    charset='utf8mb4'
)
global cursor
cursor = db.cursor()


class BankFunction(object):
    def __init__(self, dictUser):
        self.dictUser = dictUser

    # 開戶
    def createUser(self):
        # 請輸入您的姓名
        name = input("請輸入您的姓名: ")
        # 請輸入您的身份證號碼
        idCard = input("請輸入您的身份證號碼: ")
        # 請輸入您的電話號碼
        phone = input("請輸入您的電話號碼: ")
        cardNumber = self.createCardNumber()
        passwd = self.setPasswd()
        if passwd == -1:
            print("創建失敗")
            return -1
        # 設置金額:錢
        money = float(input("請輸入您想存入的金額: "))
        # 目的:創建一個user,並且保存字典(數據庫)
        sql = "INSERT INTO user VALUES(%s,%s,%s,%s)"
        cursor.execute(sql, (name, idCard, phone, cardNumber))
        db.commit()  # 提交數據
        sql = "INSERT INTO card VALUES(%s,%s,%s,%s)"
        cursor.execute(sql, (cardNumber, passwd, money, 1))
        db.commit()  # 提交數據
        print("%s,你好,你的卡號是 %s" % (name, cardNumber))

    # 設置密碼
    def setPasswd(self):
        for i in range(3):
            passwd1 = input("請輸入您的密碼: ")
            passwd2 = input("請再次輸入您的密碼: ")
            if passwd1 == passwd2:
                return passwd1
            if i == 2:
                return -1
            print("對不起,您兩次輸入的密碼不相同,請重新輸入")

    # 隨機生成卡號
    def createCardNumber(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()
            print("card", card)
            if card is None:
                return cardNumber
        print(cardNumber)

    # 查詢
    def questUser(self):
        cardNumber = input("請輸入您的卡號: ")
        # 使用execute()方法執行SQL語句
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        # 使用fetall()獲取全部數據
        card = cursor.fetchone()
        # 打印獲取到的數據
        # print(card)

        if card is None:
            print("對不起,您輸入的卡號不存在!")
        elif card[3]=='0':
            print("對不起,您的卡已被鎖定")
        else:
            cursor.execute("SELECT * FROM user where cardNumber='%s' " % cardNumber)
            data = cursor.fetchall()[0]
            print(data[0], "您好!")
            for i in range(3):
                pswd = input("請輸入您的密碼: ")
                if pswd == card[1]:
                    print("您有金額: ", card[2])
                    break
                else:
                    print("對不起,您輸入的密碼錯誤")
                if i == 2:
                    print("非法用戶!強制退出!")

    # 存款
    def saveMoney(self):
        print('輸入賬號')
        cardNumber = input("請輸入您的卡號:")
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        if card is None:
            print("您輸入的卡號有誤,請重新輸入:")
            return -1
        # 獲得卡
        cursor.execute("SELECT * FROM user where cardNumber='%s' " % cardNumber)
        data = cursor.fetchall()[0]
        print(data[0], "您好!")
        if card[3] == '0':
            print("你的卡被鎖了,不能存款")
            return -1
        res = self.checkPwd(cardNumber)
        if res == -1:  # 密碼輸入錯誤次數過多
            card[3] = '0'
            return -1
        savemoney = float(input("請輸入您要存入的金額:"))
        money = str(float(card[2]) + savemoney)
        cursor.execute("UPDATE card SET money = '%s' WHERE cardNumber = '%s' " % (money,cardNumber))
        db.commit()
        # 提示消息
        print("存款成功,您當前用戶可用余額為:%s元" % (money))

    # 取款
    def getMoney(self):
        # 輸入賬號
        cardNumber = input("請輸入您的卡號:")
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        if card is None:
            print("您輸入的卡號有誤,請重新輸入:")
            return -1
        # 獲得卡
        cursor.execute("SELECT * FROM user where cardNumber='%s' " % cardNumber)
        data = cursor.fetchall()[0]
        print(data[0], "您好!")
        if card[3] == '0':
            print("你的卡被鎖了,不能存款")
            return -1
        res = self.checkPwd(cardNumber)
        if res == -1:  # 密碼輸入錯誤次數過多
            card[3] = '0'
            return -1
        
        getmoney = float(input("請輸入您要取出的金額:"))
        if getmoney > float(card[2]):
            print("對不起,您的余額當前余額為%s元,余額不足!!!" % float(card[2]))
            return -1
        else:
            card_money = str(float(card[2]) - getmoney)
            cursor.execute("UPDATE card SET money = '%s' WHERE cardNumber = '%s' " % (card_money,cardNumber))
            db.commit()
            print("取款成功,您當前用戶可用余額為:%s元" % (card_money))

    # 轉賬
    def transferMoney(self):
        cardNumber = input("請輸入您的卡號:")
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        if card is None:
            print("您輸入的卡號有誤,請重新輸入:")
            return -1
        elif card[3] == '0':
            print("你的卡被鎖了,不能存款")
            return -1
        else:
            cursor.execute("SELECT * FROM user where cardNumber='%s' " % cardNumber)
            data = cursor.fetchall()[0]
            print(data[0], "您好!")
            for i in range(3):
                pswd = input("請輸入您的密碼: ")
                # 密碼輸入正確
                if pswd == card[1]:
                    # 你有的錢
                    have_money = float(card[2])
                    print("您有金額: ", have_money)
                    cardNumber2 = input("請輸入您要轉賬的卡號: ")
                    cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber2)
                    card2 = cursor.fetchone()
                    if card2 is None:
                        print("對不起,您輸入的卡號不存在!")
                    elif card2[3] == '0':
                        print("此人的卡被鎖了,不能轉賬")
                    else:
                        while True:
                            turn_money = float(input("請輸入您要轉的金額: "))
                            if turn_money > have_money:
                                print("對不起,您沒有那么多錢,請重新輸入")
                            else:
                                your_card_money =str( float(card[2])-turn_money)
                                his_card_money =str( float( card2[2])+turn_money)
                                cursor.execute("UPDATE card SET money = '%s' WHERE cardNumber = '%s' " % (your_card_money,cardNumber))
                                db.commit()
                                cursor.execute("UPDATE card SET money = '%s' WHERE cardNumber = '%s' " % (his_card_money,cardNumber2))
                                db.commit()
                                print("恭喜你轉賬成功,你還有", your_card_money, "")
                                break
                    break
                else:
                    print("對不起,您輸入的密碼錯誤")
                if i == 2:
                    print("非法用戶!強制退出!")

    def checkPwd(self, cardNumber):
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        card_p = card[1]
        for i in range(3):  # 最多驗證3次
            Pwd = input("請輸入您的密碼:")
            if Pwd == card_p:
                return 0  # 表示密碼輸入正確
            if i == 2:
                return -1  # 3次輸入密碼錯誤
            print("您的密碼輸入不正確,請重新輸入:")

    # 改密
    def editPasswd(self):
        cardNumber = input("請輸入您的卡號:")
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        if card is None:
            print("您輸入的卡號有誤,請重新輸入:")
        else:
            cursor.execute("SELECT * FROM user where cardNumber='%s' " % cardNumber)
            data = cursor.fetchall()[0]
            print(data[0], "您好!")
            for i in range(3):
                pswd = input("請輸入您的密碼: ")
                if pswd == card[1]:
                    print("您有金額: ", card[2])
                    while True:
                        new_passwd1 = input("請輸入您新密碼: ")
                        new_passwd2 = input("請再次輸入您新密碼: ")
                        if new_passwd1 != new_passwd2:
                            print("對不起,您兩次輸入的新密碼不同,請重新輸入!")
                        else:
                            cursor.execute("UPDATE card SET passwd = '%s' WHERE cardNumber = '%s' " % (new_passwd1,cardNumber))
                            db.commit()
                            print("恭喜你!改密成功!")
                            break
                    break
                else:
                    print("對不起,您輸入的密碼錯誤")
                if i == 2:
                    print("非法用戶!強制退出!")

    # 鎖卡
    def lockCard(self):
        cardNumber = input("請輸入您的卡號:")
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        if card is None:
            print("您輸入的卡號有誤,請重新輸入:")
            return -1
        res = self.checkPwd(cardNumber)
        if res == -1:  # 密碼輸入錯誤次數過多
            card[3] = '0'
            return -1
        flag = input("請問您確認鎖卡嗎?(YSE/NO)")
        if flag == "YES":
            cursor.execute("UPDATE card SET isLock = '%s' WHERE cardNumber = '%s' " % ('0',cardNumber))
            db.commit()
            print("您的賬號已成功鎖定")
        else:
            return

    # 解鎖
    def unlockCard(self):
        cardNumber = input("請輸入您的卡號:")
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        if card is None:
            print("您輸入的卡號有誤,請重新輸入:")
            return -1
        res = self.checkPwd(cardNumber)
        if res == -1:  # 密碼輸入錯誤次數過多
            card[3] = '0'
            return -1
        cursor.execute("UPDATE card SET isLock = '%s' WHERE cardNumber = '%s' " % ('1',cardNumber))
        db.commit()
        print("您的賬號已成功解鎖")

    # 補卡
    def fillCard(self):
        cardNumber = input("請輸入您的卡號:")
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        if card is None:
            print("您輸入的卡號有誤,請重新輸入:")
            return -1
        res = self.checkPwd(cardNumber)
        if res == -1:  # 密碼輸入錯誤次數過多
            card[3] = '0'
            return -1
        if input("是否確認補卡號為:%s的賬戶(y/n)" % cardNumber) == "y":
            new = self.createCardNumber()
            cursor.execute("UPDATE card SET cardNumber = '%s' WHERE cardNumber = '%s' " % (new,cardNumber))
            db.commit()
            cursor.execute("UPDATE user SET cardNumber = '%s' WHERE cardNumber = '%s' " % (new,cardNumber))
            db.commit()
            print("補卡成功,新卡號為%s,即將返回功能選擇頁面" % new)
            return 0  # 表示補卡成功

    # 銷戶
    def killCard(self):
        cardNumber = input("請輸入您的卡號:")
        cursor.execute("SELECT * FROM card where cardNumber=  '%s' " % cardNumber)
        card = cursor.fetchone()
        if card is None:
            print("您輸入的卡號有誤,請重新輸入:")
            return -1
        res = self.checkPwd(cardNumber)
        if res == -1:  # 密碼輸入錯誤次數過多
            card[3] = '0'
            return -1
        if input("是否確認注銷卡號為:%s的賬戶(y/n)" % cardNumber) == "y":
            sql = "DELETE FROM card WHERE cardNumber = %s"
            cursor.execute(sql, (cardNumber))
            db.commit()  # 提交數據
            sql = "DELETE FROM user WHERE cardNumber = %s"
            cursor.execute(sql, (cardNumber))
            db.commit()  # 提交數據
            print("銷戶成功,已注銷賬戶:%s,即將返回功能選擇頁面" % cardNumber)
            return 0  # 表示銷戶成功
View Code

 

 

"""
模塊:adminView.py
歡迎頁界面-----登錄------主功能

"""
import time


def welcomeView():
    print("*****************************")
    print("*******               *******")
    print("******   浙江帥帥銀行   ******")
    print("******      V4.1.1     ******")
    print("*******               *******")
    print("*****************************")

    # 讓用戶多看會兒廣告/logo
    #time.sleep(1)


# 登錄界面
# 模擬銀行賬號和密碼

dictUser = {"cys": "1", "ss": "11"}


def loginView():
    userNameInput = input("請輸入您的管理員賬號: ")
    passwdInput = input("請輸入您的管理員密碼: ")

    # 驗證
    # 判斷用戶名存不存在
    if userNameInput not in dictUser:  # 判斷它不存在
        print("您輸入的賬號不存在")
        return -1  # 表示不存在

    # 先根據用戶名來獲取密碼
    passwd = dictUser[userNameInput]

    # 判斷密碼是否正確
    if passwd != passwdInput:
        print("您輸入的密碼不正確...算了,讓你進吧")
        return -1

    # 登錄成功
    print("恭喜你登錄成功,系統正在加載中......")
    #time.sleep(3)


# 主功能界面
def functionView():
    print("********************************")
    print("*******       主功能      *******")
    print("******  開戶(1)   查詢(2)  ******")
    print("******  存款(3)   取款(4)  ******")
    print("******  轉賬(5)   改密(6)  ******")
    print("******  鎖卡(7)   解鎖(8)  ******")
    print("******  補卡(9)   銷戶(0)  ******")
    print("*******      退出(q)     *******")
    print("********************************")

 

數據庫部分:

設計思路(部分):

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM