Python練習專案——模擬ATM機登入系統
阿新 • • 發佈:2019-01-28
一、題目要求:
通過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()
三、執行結果部分截圖