專案1 登入介面

2021-08-17 13:44:34 字數 4166 閱讀 7357

目錄:

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的描述語...