編寫可供用戶查詢的員工信息表(二)

編寫可供用戶查詢的員工信息表html

要求:python

1.須要用戶認證app

2.員工信息表文件內容:函數

  ID  Name  Department  Phone字體

3.認證成功後查詢正確信息 編碼

上一篇內容:https://www.cnblogs.com/easypython/p/9080561.htmlspa

〇上一篇已經實現基本要求,但代碼還有所欠缺,好比登陸成功後輸入回車或空格會把文件信息做一次性讀取出操做,而此篇內容爲對上一篇的修改補充;可實現功能:code

〇1.編寫登陸接口,輸入用戶名和密碼orm

〇2.用戶驗證成功登陸後顯示登陸歡迎信息htm

〇3.用戶輸錯密碼超限後鎖定

〇4 不一樣的錯誤鎖定方式能夠有所區別

〇解決一次性輸出文件全部信息的BUG

代碼分享以下: 

 1 #!/usr/bin/env/python                                                            #聲明解釋器
 2 # -*- coding: utf-8 -*-                                                           #聲明使用utf-8編碼,此行Python3不須要
 3 import sys                                                                         #導入sys模塊
 4 import time                                                                                                                 #導入time模塊                              
 5 
 6 dic_account = {}                                                                                                            #定義一個空字典
 7 normoal_file = "G:\python\exsise\\file\whitelist.txt"                                                                       #白名單文件,存放用戶名與密碼的本地文件,注意路徑前'\\'
 8 lock_file = "G:\python\exsise\\file\lock.txt"                                                                               #黑名單文件,我用的是個人本地文件存放的絕對路徑
 9 with open(normoal_file) as norm_f:                                                                                          #打開白名單文件
10     for line in norm_f.readlines():                                                                                         #for循環,readlines()一次性讀取全部行
11         usr,pawd = line.strip().split()                                                                                     #每行去除空格分割後分別賦予兩個變量
12         dic_usr_pawd = {usr:pawd}                                                                                           #以每一行獲得的兩個變量爲鍵值對就生成一個字典
13         dic_account.update(dic_usr_pawd)                                                                                    #循環更新擴展字典
14 
15 def deny_accout(usrname):                                                                                                   #定義了黑名單的函數
16     print('\033[1;31;40m')                                                                                                  #下一目標輸出背景爲黑色,顏色紅色高亮顯示
17     print('*' * 50)                                                                                                         #輸出打印信息
18     print('\033[7;31m錯誤次數超限,用戶已被永久鎖定,請聯繫管理員!\033[1;31;40m')                                                 #字體顏色紅色反白處理
19     print('*' * 50)                                                                                                         #打印50個*號
20     print('\033[0m')                                                                                                        #屏幕輸出顏色恢復默認值
21     with open(lock_file,'a') as deny_f:                                                                                     #以追加模式打開黑名單文件
22         deny_f.write('\n')                                                                                                  #換行
23         deny_f.write(usrname)                                                                                               #黑名單中寫入鎖定用戶
24      sys.exit()                                                              #執行sys模塊退出方法
25 def main():                                                                                                                 #定義主函數
26     NumOfInput = 1                                                                                                          #定義輸入次數變量NumOfInput初始值爲1
27     usr_list = []                                                                                                           #定義一個空列表
28     while True:                                                                                                             #while 循環
29         usrname = input('\033[1;32m請輸入您的用戶名:\033[0m')                                                                 #用戶交互第一步:請輸入用戶名
30         if list(dic_account.keys()).count(usrname) == 0:                                                                    #計算輸入的用戶名在字典裏對應鍵個數是否爲零
31             if len(usrname.strip()) == 0:                                                                                   #若是輸入爲空
32                 print('\033[1;31m用戶名不能爲空,請從新輸入')                                                                   #打印相應提示信息
33             else:                                                                                                           #不然(既輸入不爲空)
34                 with open(lock_file) as lock_f:                                                                             #打開黑名單文件進行後一步操做
35                     for line in lock_f.readlines():                                                                         #對於line在黑名單文件中的其中一行,readlines()一次性讀取全部行
36                         if usrname == line.strip():                                                                         #若是輸入用戶名等於黑名單其中一員
37                             sys.exit('\033[1;41m用戶%s已鎖定,請聯繫管理員。\033[0m' % usrname)                                 #退出並提示用戶帳戶已鎖定
38                 usr_list.append(usrname)                                                                                    #對列表進行附加元素操做
39                 redo_num = usr_list.count(usrname)                                                                          #計算列表裏元素存在的爲usrname個數並賦值變量,usrname引用輸入的用戶名變量
40                 if redo_num == 3:                                                                                           #若是列表計算的用戶名個數小於3(這裏的意思爲若是嘗試輸入的同一個用戶名應小於3次)
41                     deny_accout(usrname)                                                                                   #調用deny_accout()函數,既同一用戶名輸入次數超過3次加入黑名單
42                 elif NumOfInput < 5 :                                                                                       #若是循環輸入次數不超過5次
43                     NumOfInput += 1                                                                                         #變量每次循環自增1
44                     print("\033[1;31m出錯了,用戶名:%s沒有找到,請從新輸入:" % usrname)                                       #打印相應的錯誤提示信息
45                 else:                                                                                                       #不然(輸入次數超過5次)
46                     print('\033[1;33m用戶名錯誤次數超限,請5分鐘後再試')                                                         #打印錯誤提示
47                     time.sleep(300)                                                                                         #調取time模塊方法,5分鐘內沒法操做
48         else:                                                                                                              #不然(既輸入的用戶名在白名單中存在)
49             NumOfInput = 0                                                                                                  #一樣賦予輸入次數變量NumOfInput初始值爲0
50             while NumOfInput < 3:                                                                                           #進入while循環,輸入次數不超過3
51                 passwd = input('\033[1;32m請輸入用戶%s密碼:\033[0m' % usrname)                                               #輸入用戶名密碼
52                 if passwd == str(dic_account[usrname]):                                                                     #若是密碼與字典裏對應輸入用戶名的鍵值相同
53                     print('\033[1;36m登錄成功。您的全部操做有可能會被記錄!')                                                    #打印登陸成功信息
54                     while True:                                                                                             #while循環
55                         match_yes = 0                                                                                       #定義一個變量初始值與後面的賦值對應,具備特殊意義
56                         sch_input = input("\033[1;34;42mPlease enter what the information you need to search: ")            #請輸入你想查找的信息
57                         InfoOfEmTab_file = open("TheInfoOfEmployeeTable.txt")                                               #對文件進行操做,打開員工信息表文件
58                         while True:                                                                                         #嵌套while循環,目的是讀取文件每一行
59                             line = InfoOfEmTab_file.readline()                                                              #讀取文件的一行,readline()每次讀取一行
60                             if len(line) == 0: break                                                                        #讀取到文件結尾後結束退出
61                             if sch_input.strip() in line:                                                                   #假如輸入內容在讀取文件的其中一行
62                                 if sch_input.strip() == '':                                                                 #假如輸入空格或者回車
63                                     match_yes = 1                                                                           #知足條件後給變量賦予新值(注:變量賦值不輸出任何信息)
64                                 else:                                                                                       #不然
65                                     print("\033[1;31mMarch Item: \033[1;36m%s" % line)                                      #打印匹配信息
66                                     match_yes = 2                                                                           #知足條件後給變量賦予新值,與初始變量值不一樣,因此不打印當變量值爲初始值的提示信息
67                         if match_yes == 0:                                                                                  #變量值若是等於初始值(能夠理解爲輸入不爲空或者回車,且用戶輸入的查找內容不在信息表的任一行)
68                             print("\033[1;31mNo match items had found!Please check it and try again.\n")                    #打印變量等於初始值須要輸出的提示信息
69                         if match_yes == 1:                                                                                  #對應以前賦值'match_yes = 1'
70                             print("\033[1;31mThere was no character input, please check if the input was corrected!\n ")   #打印賦值爲1須要輸出的提示信
71                 if len(passwd.strip()) == 0:                                                                               #若是輸入密碼爲空
72                     print('\033[1;33m密碼不能爲空,請從新輸入,您還有%d次機會。'% (2-NumOfInput))                                  #打印錯誤提示信息
73                     NumOfInput += 1                                                                                       #輸入次數增長1
74                 else:                                                                                                    #不然(密碼不爲空並且密碼不正確)
75                     print('\033[1;33m密碼錯誤,請從新輸入,您還有%d次機會。'% (2-NumOfInput))                                    #打印密碼錯誤提示
76                     NumOfInput += 1                                                                                         #輸入錯誤次數增長1
77             else:                                                                                                           #不然(輸入次數超過3)
78                 print('\033[1;31m輸入次數超限,請2小時後再試')                                                                  #打印錯誤提示
79                 time.sleep(7200)                                                                                           #調取time模塊方法,2小時內沒法操做
80 
81 if __name__ == '__main__':                                                                                                  #當模塊被直接運行時,如下代碼塊將被運行,當模塊是被導入時,則不運行
82     main()                                                                                                                  #執行main()函數

 執行效果圖:

 1.輸入空格或回車不計算次數,其餘不一樣用戶超過5次凍結5分鐘沒法操做

 

 2.輸入黑名單成員直接鎖定退出

 

  3.輸入同一用戶名錯誤累計3次加入黑名單

 

 4.輸入正確用戶名,密碼錯誤3次凍結2小時沒法操做

 

 5.登錄成功後查詢員工信息表,輸入空格和回車提示錯誤信息,輸入查詢內容,匹配打印相關信息

 

相關文章
相關標籤/搜索