Python实现的一个有登录验证的带查询功能的小程序

学习python也有几天了,今天突发奇想,要写一个查询通讯录的小程序,因为我司对通讯录一直有管控,有没有一个好用的系统查询,找个电话号码简直比登天还难,有了这个小程序,就可以在PC上点对点查询,比较方便。

在转化为exe的过程中,还出现一个有意思的事情,用pyinstaller转为exe后,一输入字符就立刻闪退,都不知道到底怎么回事。在网上找到一个办法,在cmd窗口中,把exe文件拖入再运行,果然出现了提示“UnicodeDecodeError:: ‘utf-8’ codec can’t decode byte 0xc8 in position 0: invalid contin”,果断搜索之,然后发现在打开txt文件的open()函数里,把’r’替换成encoding="unicode_escape"即可

import xlrd
import sys
from time import sleep
import os
data = xlrd.open_workbook('E:/Documnet/工作/Contact/login.xlsx')
# 以下是对sheet的操控
sheet1 = data.sheet_by_index(0) # 定义sheet的办法,与下方sheet2的定义方法等价

# 以下是对行,列的操控
hang = sheet1.nrows
lie = sheet1.ncols
# 定义1个空字典和2个空列表
loginin={}
list_name = []
id_card = []
# 从Excel里取数得到字典,作为存储登录用户名和密码的工具
def db(list_name,id_card):
    for i in range(hang):
        name = sheet1.cell_value(i,0)
        list_name= list_name + [name]
        card = str(sheet1.cell_value(i,1))
        id_card = id_card + [card]
        loginin[list_name[i]] = id_card[i]
    return loginin
login = db(list_name,id_card)
# print(loginin)
print('欢迎使用“员工联系方式查询系统V1.0”,如有任何问题,请发邮件至XXX\n输入后请按“回车键”继续\n')
# 该部分代码为登录部分,其中登录时会对登录人用户名密码进行校验,且能记录出错超过3次账户
for i in range(3):      
      loginname = input("请输入用户名(您的姓名):")
      with open('E:/Documnet/工作//锁定账户.txt', 'r') as lock_name:
            for count in lock_name.readlines():
                  if loginname in count:
                        print("该账号已被锁定,如需解锁,请发送邮件到xxx申请解锁")
                        sleep(60)
                        sys.exit()
            password = str(input("请输入密码(身份证号码后四位):"))
      while loginname not in login.keys():
          print('用户名密码不匹配,请重输' + '\n')
          break
 # 文章结尾有一段代码,似乎可以替代以下这段(以下这段来自其他人的代码)
      with open('E:/Documnet/工作/登录数据存储.txt', 'rb') as count_sum:
          for count in count_sum.readlines():
              if loginname in login.keys() and password == login[loginname]:
                  print("登录成功!")
                  i = 3
                  break
              print('用户名密码不匹配,请重新输入' + '\n')
              break
      if i == 3:
          break
# 可替代代码结束
# 以下代码控制:如果错误次数太多,会锁定帐号,且记录黑名单,申请后方能解锁
      if i == 2:
            print("输错3次,该账号已被锁定,如需解锁,请发送邮件到xxx申请解锁")

            # print(loginname)
            with open("E:/Documnet/工作/锁定账户.txt", 'a') as lock_name:
                  lock_name.write("\n" + loginname)
            sleep(60)
            sys.exit()

# 以下是从Excel里面取Keys和Values组成查询主数据库的字典
data1 = xlrd.open_workbook('E:/Documnet/工作/Contact/contact.xlsx')
# 以下是对Excel的操控
sheet1 = data1.sheet_by_index(0) # 定义sheet的办法,与下方sheet2的定义方法等价
hang = sheet1.nrows
lie = sheet1.ncols

bigdata={}
index_name = []
info = []
def db(index_name,info):
    for i in range(hang):
        name = sheet1.cell_value(i, 0)
        index_name = index_name + [name]
        company = '本部/公司:' + str(sheet1.cell_value(i, 1))
        benbu = '\n部门:' + str(sheet1.cell_value(i, 2))
        zhiwu = '\n职务: ' + str(sheet1.cell_value(i, 3))
        cellphone = '\n手机: ' + str(sheet1.cell_value(i, 4))
        phone = '\n座机: ' + str(sheet1.cell_value(i, 5))
        info = info + [company + benbu + zhiwu + cellphone + phone]
        bigdata[index_name[i]] = info[i]
    return bigdata
finaldata = db(index_name,info)

# 以下是查询的主程序

while True:

      for i in range(5):
            if i == 4:
                print('您输入的错误次数太多,自动退出')
                sleep(2)
                exit()
            print('请输入您需要查询的姓名:')
            see = input()
            if see == '':
                  sys.exit()
            elif see not in finaldata:
               print('您输入的姓名不正确,请重输: ' + '\n')
               continue # 如果输入不正确,就会回到for的循环,如果错误5次,就会直接退出

            print('您所查询的同事所属部门及联系方式为:')
            print(str(finaldata.get(see,0)) + '\n')
            print('如果还需要继续查询,请继续输入名字,退出请回车:'+'\n')
            break

其中,关于登录那一段的代码,可以试试替代如下:

      if loginname in login and login[loginname] == password:
          print('登录成功!')
          break
      else:
           print("用户名密码不匹配,请重新输入")
发布了8 篇原创文章 · 获赞 3 · 访问量 5580

猜你喜欢

转载自blog.csdn.net/cwjcw81/article/details/100143916