目錄:
1、程式功能
2、程式流程圖
3、程式思路
4、程式源**
5、程式不足
1、程式功能
1.1 註冊功能
使用者可進行註冊,每個註冊成功的使用者會自動新增乙個lock_flag,這個引數初始為0,每登入密碼錯誤一次加1,
當lock_flag=3時,鎖定該使用者。把使用者名稱、密碼與對應的lock_flag存於 userdata.txt 中。
1.2 登入功能
使用者在註冊之後可進行登入
情況1:登入名不存在。顯示「找不到該使用者,請重新輸入」
情況2:登入名與登入密碼正確,則顯示「登入成功!」,然後把使用者lock_flag清零
情況3:登入名正確,密碼錯誤,顯示「第 n 次密碼輸入錯誤,連續輸入密碼錯誤超過3次該使用者將被鎖定」(n = lock_flag),同時該使用者lock_flag+1
情況4:若lock_flag已經等於3,則直接顯示「抱歉,該使用者已被鎖定」
1.3 鎖定功能
登入的時候,先查詢使用者對應的lock_flag值,若已經等於3,則鎖定使用者,即使此時輸入密碼正確也不允許登入。
2、程式流程圖
3、程式思路
3.1 註冊功能
新建乙個 userdata.txt 檔案,按「使用者名稱,密碼,lock_flag」的格式儲存,一行即是乙個使用者資訊
3.2 登入功能
先把userdata.txt資訊讀入記憶體,然後查詢是否有對應使用者名稱存在,若無,則是情況1;
若存在則先查詢使用者名稱對應 lock_flag 是否為3,為3則是情況4;
若lock_flag小於3則繼續查詢對應密碼與使用者輸入密碼是否一致,若一致,則是情況2
若密碼不一致,則是情況3.
3.3 鎖定功能
準確來說,這是乙個用來更新lock_flag的功能,把userdata.txt讀入data列表中,查詢對應的使用者名稱與對應的lock_flag,
更新lock_flag引數後,把整個data列表重新寫入userdata.txt。
4、程式源**
# author:李捷豪
# time:2018.3.25
# version:python3.6
# tools :pycharm 2017.3.2
# 註冊函式
def sign_up():
userdata = open("userdata.txt",'a+')
username = input("請設定您的使用者名稱:")
password = input("請設定您的密碼:")
userdata.writelines(username+','+password+',0\n') # 這裡的0就是lock_flag
userdata.close()
print(username,password)
print("恭喜你完成了註冊!\n")
# 鎖定函式(更新lock_flag函式)
def lock(username,lock_flag):
f = open("userdata.txt","r")
lines = f.readlines() # 先把資料檔案用自讀形式讀入記憶體,存於 lines 列表中
f.close()
f_w = open("userdata.txt","w") # 把資料檔案用只寫形式開啟,這樣子等一下寫入時會先清空原檔案再重新寫入
n = 0 # 索引變數
for line in lines: # 查詢出對應的使用者名稱在lines列表中的索引
dataline = line.split(",")
if username == dataline[0]:
n = lines.index(line)
break
name = dataline[0]
password = dataline[1]
flag = lock_flag
new = name+","+password+","+str(flag)+"\n"
lines[n] = new #把該元素更新
for i in lines:
f_w.writelines(i) #把lines列表重新寫入userdata.txt檔案中
f_w.close()
# 登入驗證 函式
def sign_in(name, password):
userdata =
f = open("userdata.txt",'r')
readlines = f.readlines()
for userline in readlines:
userdata = userline.split(",")
username = userdata[0]
userpassword = userdata[1]
lock_flag = int(userdata[2].strip("\n"))
if name == username: # 情況4:使用者已被鎖定
if lock_flag >= 3:
return [-1,lock_flag]
if password == userpassword: # 情況2:登入成功
lock_flag = 0
lock(name, lock_flag)
return [1,lock_flag]
elif password != userpassword: # 情況3:密碼輸入錯誤
lock_flag += 1
lock(name,lock_flag)
return [2,lock_flag]
else: # 情況1:找不到該使用者
return [0]
f.close()
# 主程式
while true:
print("程式選項如下")
print("1.註冊 2.登入 3.退出程式")
i = input("請輸入想做的事情對應的序號:")
if i == '1': # 程式選項1:註冊
sign_up()
elif i == '2': # 程式選項2:登入
username = input("請輸入您的使用者名稱:")
password = input("請輸入您的密碼:")
flag = sign_in(username, password)
if flag[0] == 0:
print("找不到該使用者,請重新輸入\n")
elif flag[0] == 1:
print("恭喜你,登入成功!\n")
elif flag[0] == 2:
print("第"+ str(flag[1])+"次密碼輸入錯誤,連續輸入密碼錯誤超過3次該使用者將被鎖定\n")
elif flag[0] == -1:
print("抱歉,該使用者已被鎖定\n")
elif i == '3': # 程式選項3:退出程式
print("已退出程式,謝謝\n")
exit()
else:
print("輸入錯誤,請重新輸入\n")
github :
5、程式不足
5.1 可註冊同名使用者
5.2 鎖定功能因為是每一次都完全重新寫全部資訊,因此若資料量很大,則效率會很低
5.3 註冊時沒有讓使用者再次輸入密碼確定,存在使用者設定密碼時誤輸入的風險
5.4 沒有製作gui
1 簡單的登入介面(1)
1 從左邊的 工具箱 中向設計窗體拖放1個label控制項,然後在縱向複製1個label控制項,接著依次對2個label控制項的 text 屬性進行修改,分別修改為 使用者名稱 密碼 2 從 工具箱 中拖放兩個textbox控制項將它們分別放在對應的label控制項的右邊,textbox2 密碼 的...
ubuntu 登入介面迴圈登入
用ubuntu安裝盤 usb 進入 選擇ubuntu試用模式 修改原ubuntu相關配置檔案。網上也有按照各種命令修改,但是我進入tty模式,始終不能正確執行,所以我才想到了這個辦法。昨天,我的ubuntu16.04在登入介面輸入密碼後,一直迴圈。後來用這個方法,進入之後,在試用ubuntu介面,輸...
android開發 1 登入介面的布局演示
android開發真的是讓人覺得很有樂趣的事情呢。比起windows mobile好玩多了。雖然哪個所見即所得的檢視設計環境糟糕的可以。不過這樣用類似描述語言 xml,html 等設計檢視似乎成為了各個技術陣營的首選,wpf也是採用了這樣的方式,描述性文字語言讀起來還是比較舒服的。不過wpf的描述語...