1. 程式人生 > >Python練習專案——模擬ATM機登入系統

Python練習專案——模擬ATM機登入系統

一、題目要求:

通過Python程式設計完成一個銀行ATM機模擬系統,具備如下功能:

(1)登陸驗證:使用者輸入使用者名稱密碼登陸,檢測使用者名稱是否存在以及使用者名稱密碼是否匹配;使用者名稱密碼各有三次輸入機會,超過三次系統退出。
(2)選單介面:登陸成功後顯示功能操作介面,輸入序號選擇對應功能。
(3)使用者註冊:使用者可以輸入使用者名稱和密碼建立自己的賬號,並輸入電話號碼等資訊,如果使用者名稱存在則讓使用者重新輸入使用者名稱。註冊後免費贈送5000元餘額。
(4)賬戶管理:使用者可以隨時檢視自己的賬戶餘額。使用者可以輸入其他賬戶使用者名稱,實現轉賬功能;使用者名稱必須存在。使用者也可以模擬實現存取款功能。
(5)使用者名稱和密碼以及賬戶資訊等必須永久儲存。且基於命令列完成,不需要開發GUI介面。

二、實現過程:

1.連線MySQL資料庫、建立資料表、給資料表中插入資料:

如果事先沒有建立資料表,則需在程式中加上這一部分程式碼,但執行一次後需刪除這部分內容,因為二次執行後會導致之前存放的資料丟失;如果資料表事先已經建立好,則不需再編寫這部分內容

#coding=utf-8
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1',port=3306,user='root',passwd='971012',db='test',charset="utf8") #連線mysql資料庫
cursor = conn.cursor() #獲取遊標來進行查詢

##########建立資料表用來存放使用者資訊###########
sql = '''CREATE TABLE IF NOT EXISTS userinfoes (
         user  VARCHAR(20),
         password  VARCHAR(6),
         age VARCHAR(3),  
         sex VARCHAR(5),
         mobile VARCHAR(11),
         balance FLOAT(12,2))'''
cursor.execute(sql)
sql = '''INSERT INTO userinfoes(user,
         password,age,sex,mobile,balance)
         VALUES ('luu','123456','19','woman','12345678900',10000)'''
cursor.execute(sql)

2.實現登入驗證
def login():
    ##########判斷使用者名稱##########    
    print u'請輸入你的使用者名稱:'
    k=3 #記錄輸錯次數
    while k:
        global username
        username = raw_input()
        userinfoes = "SELECT * FROM userinfoes WHERE user='%s'"%username #查詢該使用者是否存在
        j = cursor.execute(userinfoes) #滿足該條件的資料條數

        if username == '':
            print u'使用者名稱不能為空!'
        elif j == 0:
            k-=1
            if k!=0:
                print u'使用者名稱錯誤,請重新輸入:'
            else:
                print u'你已輸錯三次!'
                conn.close()
                cursor.close()
                exit()
        else:
            break
        
    ##########判斷密碼##########
    print u'請輸入你的密碼:'
    k = 3
    while k:
        password = raw_input()
        userinfoes = "SELECT * FROM userinfoes WHERE user='%s' and password='%s'"%(username,password) #查詢輸入的密碼是否與使用者匹配
        j = cursor.execute(userinfoes)
        
        if password == '':
            print u'密碼不能為空!'
        elif j == 0:
            k-=1
            if k!=0:
                print u'密碼錯誤,請重新輸入:'
            else:
                print u'你已輸錯三次!'
                conn.close()
                cursor.close()
                exit()
        else:
            print u'恭喜你,登入成功!'
            break

3.實現使用者註冊

##########註冊##########
def enroll():
    print u'請輸入使用者名稱(長度<=20):' #使用者名稱
    while 1:
        username = raw_input()
        userinfoes = "SELECT * FROM userinfoes WHERE user='%s'"%username #查詢該使用者是否存在
        j = cursor.execute(userinfoes) #滿足此條件的資料條數
        if j==1:
            print u'該使用者名稱已經存在,請重新輸入!'
        elif username=='':
            print u'使用者名稱不能為空!'
        else:
            break
        
    def judge():
        while(1):
            password = raw_input()
            if len(password)!=6:
                print u'長度不正確,請重新輸入:'
            else:
                break
        return password    
                
    while 1:
        print u'請輸入密碼(長度=6):'
        p = judge()
        print u'請再次確認密碼:'
        q = judge()
        if p!=q:
            print u'兩次輸入的密碼不相等,請重新輸入!'
        else:
            break
    
    print u'請輸入你的年齡:'
    while 1:
        age = raw_input()
        if age=='':
            print u'年齡不能為空,請重新輸入!'
        elif len(age)>3:
            print u'請輸入有效年齡!'
        else:
            break
    
    print u'請輸入你的性別(man/woman):'
    while 1:
        sex = raw_input()
        if sex!='man' and sex!='woman':
            print u'請輸入正確資訊!'
        else:
            break
    
    print u'請輸入你的電話號碼:'
    while 1:
        mobile = raw_input()
        j=0
        for i in mobile:
            if i<'0' or i>'9':
                j+=1
        if len(mobile)!=11 or j!=0:
            print u'請輸入有效資訊!'
        else:
            break
        
    sql = "INSERT INTO userinfoes(user,password,age,sex,mobile,balance)VALUES('%s','%s','%s','%s','%s','%f')" % (username,p,age,sex,mobile,5000.00)
    try:
        cursor.execute(sql)
        conn.commit()
        print u'註冊成功,獲得5000元餘額!'
        judge1()
        
    except:
        conn.rollback()

4.系統退出(資料庫用完後一定要記得斷開資料庫連線)

conn.close()
cursor.close()

5.主選單介面

def Home_page():
    print u'''======歡迎使用蝸牛ATM無限制存取款系統======
====請輸入你的選項,1:登入 2:註冊 3:退出===
==========================================='''

##########主選單##########
def judge1():
    Home_page()
    while 1:
        judge_1 = raw_input()
    
        if judge_1=='1': #登入
            login()
            judge2()
        elif judge_1 == '2': #註冊
            enroll()
        elif judge_1=='3': #退出
            print u'感謝你的使用!'
            conn.close()
            cursor.close()
            exit()
        else:
            print u'請輸入有效數字!'

6.登陸後副選單介面(實現餘額查詢、轉賬、取款、存款等)

def Home_page_2():
    print u'''====================請輸入你的選項=====================
==1:查詢餘額 2:轉賬 3:取款 4:存款 5:返回主選單 6:退出==
======================================================='''
##########副選單##########
def judge2():
    while 1:
        Home_page_2()
        judge_2 = raw_input()
        
        if judge_2=='1':#餘額
            print u'你的餘額為:%0.2f'%user_balance(username) 
            continue
        
        elif judge_2=='2': #轉賬
            print u'請輸入對方使用者名稱:'
            while 1:
                other_username = raw_input()
                userinfoes = "SELECT * FROM userinfoes WHERE user='%s'"%other_username #查詢該使用者是否存在
                j = cursor.execute(userinfoes) #滿足該條件的資料條數
            
                if other_username == '':
                    print u'使用者名稱不能為空!'
                elif j==0:
                    print u'使用者名稱不存在,請輸入有效使用者名稱;'
                else:
                    print u'請輸入轉賬金額:'
                    sum = float(raw_input())
                    M_balance = user_balance(username)
                    O_balance = user_balance(other_username)
                    if M_balance-sum >= 0:
                        sq1 = "UPDATE userinfoes SET balance=%0.2f WHERE user='%s'" % (M_balance-sum, username)
                        sq2 = "UPDATE userinfoes SET balance=%0.2f WHERE user='%s'" % (O_balance+sum, other_username)
                        try:
                            cursor.execute(sq1)
                            cursor.execute(sq2)
                            conn.commit()
                            print u'轉賬成功!'
                        except:
                            conn.rollback()
                            print u'轉賬失敗'
                    else:
                        print u'轉賬失敗,你餘額不足!'
                break   
            continue
                    
        elif judge_2=='3': #取款
            print u'請輸入你的取款金額:'
            sum = float(raw_input())
            M_balance = user_balance(username)
            if M_balance-sum >= 0:
                sq1 = "UPDATE userinfoes SET balance='%0.2f' WHERE user='%s'"%(M_balance-sum, username)
                try:
                    cursor.execute(sq1)
                    conn.commit()
                    print u'取款成功!'
                except:
                    conn.rollback()
            else:
                print u'你的餘額不足!'
            continue
        
        elif judge_2=='4': #存款
            print u'請輸入你的存款金額(金額<100,000,000.00):'
            sum = raw_input()
            if ',' in sum:
                sum = sum.replace(',','')
            sum = float(sum)
            sq1 = "UPDATE userinfoes SET balance=balance+'%0.2f' WHERE user='%s'"%(sum, username)
            try:
                cursor.execute(sq1)
                conn.commit()
                print u'存款成功!'
            except:
                conn.rollback()
                print u'存款失敗!'
            continue
        
        elif judge_2=='5': #返回主選單
            judge1()
            
        elif judge_2=='6': #退出
            print u'感謝你的使用!'
            conn.close()
            cursor.close()
            exit()
        else:
            print u'請輸入有效數字!'
            continue
        break
##########餘額###########
def user_balance(h):
    userinfoes = "SELECT * FROM userinfoes WHERE user='%s'"%h
    j = cursor.execute(userinfoes)
    k = cursor.fetchmany(j)
    for i in k:
        return i[5]

7.基本功能都已經實現,最後再呼叫主選單就大功告成了!

judge1() 
三、執行結果部分截圖