首先我們要做的就是登陸的方法了。
因?yàn)樯婕暗綇臄?shù)據(jù)庫中查找用戶的操作娄琉,所以我們需要用到前面的 DBHelper 類壹士,因?yàn)槊恳粋€(gè)方法都要使用數(shù)據(jù)庫,所以我把 db 作為 class 的一個(gè)屬性羔砾。
from User import User
from Item import Item
from DBHelper import DBHelper
class ATM:
"""定義ATM機(jī)的類"""
def __init__(self):
self._current_user = None
self._db = DBHelper()
# ------------登錄--------------------------
def _login(self):
while True:
print("登錄ATM")
number = input("請(qǐng)輸入卡號(hào):\n")
db_user = self._db.get_user(number)
if db_user:
password = input("請(qǐng)輸入密碼:\n")
if db_user.get_password() == password:
user = User(db_user.get_name(), db_user.get_number(),
password,
db_user.get_balance())
self._current_user = user
print("歡迎",user,"登錄")
return number
print("賬戶或密碼錯(cuò)誤")
經(jīng)過調(diào)試,最終實(shí)現(xiàn)了初步的登錄功能:
用的是我室友名
正常來說偶妖,用戶登錄也是應(yīng)該做記錄的姜凄,不過這里我就不寫這么多了。
簡單實(shí)現(xiàn)就好趾访。
在用戶進(jìn)行登錄之后态秧,系統(tǒng)應(yīng)該提供菜單選項(xiàng),用來給用戶選擇操作選項(xiàng)扼鞋。
后來想想之前的記錄的問題申鱼,填寫信息的時(shí)候好像要求的是真實(shí)姓名,所以姓名是不能改的所以那個(gè)問題也就沒有了云头。
在線注冊(cè)功能:
是實(shí)現(xiàn)用戶直接注冊(cè)一個(gè)新的賬戶的功能润讥。用戶的卡號(hào)現(xiàn)在是由用戶自己輸入,而不是有系統(tǒng)自動(dòng)分配盘寡,所以還有待改進(jìn)楚殿。
def open_an_account(self):
"""在線開戶功能"""
while True:
name = input("請(qǐng)輸入用戶名:")
if name == "quit":
return False
password = input("請(qǐng)輸入密碼")
re_password = input("請(qǐng)?jiān)俅屋斎朊艽a")
number = input("請(qǐng)輸入卡號(hào)")
# TODO 先讓用戶輸入卡號(hào), 正常來講應(yīng)該由系統(tǒng)分配
if re_password == password:
user = User(name, number, password, 0)
self._db.insert_user(user)
return True
else:
print("兩次輸入的密碼不符!請(qǐng)重新注冊(cè)")
這里倒是還沒出什么大問題竿痰。
現(xiàn)在有一點(diǎn)遺憾就是輸入密碼的那一塊脆粥,現(xiàn)在把密碼輸入變成*號(hào),那樣會(huì)更有安全性影涉,現(xiàn)在輸入密碼基本上是不會(huì)錯(cuò)的变隔。
在線銷戶
有了開戶功能,就有銷戶功能蟹倾。
銷戶是有個(gè)重要的事匣缘,所以需要再三確認(rèn):
于是就有了下面的代碼:
def closing_an_account(self):
"""在線銷戶功能猖闪,刪除user表中額數(shù)據(jù)和log中的日志"""
n = 3
while n:
password = input("請(qǐng)輸入密碼")
if self._current_user.get_password() == password:
confirm = input("請(qǐng)輸入“注銷賬戶”")
if confirm == "注銷賬戶":
self._db.del_user(self._current_user.get_number())
return True
else:
print("輸入錯(cuò)誤!/")
else:
print("密碼錯(cuò)誤肌厨,請(qǐng)重新輸入")
n -= 1
從數(shù)據(jù)庫把室友的號(hào)刪了培慌,,
你號(hào)沒了柑爸!
接下來就是更改用戶摩瑪?shù)姆椒耍盒姨澁?dāng)時(shí)寫好了更改數(shù)據(jù)庫的方法吵护,現(xiàn)在寫起來事半功倍。
def change_password(self):
"""在ATM機(jī)上一般是改不了密碼的表鳍,其他的幾個(gè)屬性也是改不了的馅而,但是
我在DBHelper里寫的相關(guān)方法卻可以更改所有的屬性。"""
n = 3
while n:
old_password = input("請(qǐng)輸入舊密碼")
new_password = input("請(qǐng)輸入新密碼")
re_new_password = input("請(qǐng)?jiān)俅屋斎胄旅艽a")
if old_password == self._current_user.get_password():
if new_password == re_new_password:
self._db.update_user(self._current_user, "password",
new_password)
return True
else:
print("新密碼不一致")
else:
print("密碼不正確")
n = n-1
接下來是存款的功能:
中間有點(diǎn)小插曲譬圣,不過還是完成了瓮恭,本來不想實(shí)現(xiàn)日志添加的,但是還是實(shí)現(xiàn)了厘熟,為了試一試屯蹦,為了給室友加點(diǎn)存款,就先寫個(gè)循環(huán)盯漂。
def deposit(self):
"""存款余額"""
money = input("請(qǐng)輸入金額:")
if self._db.update_user(self._current_user, "balance", int(money) +
self._current_user.get_balance()):
status = "成功"
print("存款成功")
else:
status = "失敗"
print("存款失敗")
item = Item(self._current_user, "存款", 1000, status)
if self._db.insert_log(item):
return True
。笨农。就缆。。谒亦。竭宰。emmmmm不對(duì),為什么都是1000
奧原來是前面記錄寫的有問題份招,我都寫1000切揭,,锁摔,但是也不對(duì)啊廓旬,余額都沒變呀。谐腰。孕豹。。但是
user表中的數(shù)據(jù)卻變了十气。励背。。
這是怎么回事砸西、叶眉、址儒、、衅疙、莲趣、
奧!~~~我明白了炼蛤,因?yàn)槲腋淖兞藬?shù)據(jù)庫中的數(shù)據(jù)妖爷,但是當(dāng)前的程序運(yùn)行時(shí),我的用戶的信息是么變的所以理朋。絮识。。
嗽上。所以我在改變用戶數(shù)據(jù)的時(shí)候就把ATM機(jī)的當(dāng)前用戶的屬性改變次舌。于是就有了下面的代碼:
def deposit(self):
"""存款"""
money = input("請(qǐng)輸入金額:")
if self._db.update_user(self._current_user, "balance", int(money) +
self._current_user.get_balance()):
self._current_user.set_balance(int(money) +
self._current_user.get_balance())
status = "成功"
print("存款成功")
else:
status = "失敗"
print("存款失敗")
item = Item(self._current_user, "存款", int(money), status)
if self._db.insert_log(item):
return True
現(xiàn)在好了。兽愤。睡覺了.