楼主: cwjcw81
932 0

[原创博文] 一个有登录验证的查询通讯录的小程序 [推广有奖]

  • 1关注
  • 2粉丝

已卖:527份资源

博士生

6%

还不是VIP/贵宾

-

威望
0
论坛币
8055 个
通用积分
43.5535
学术水平
4 点
热心指数
7 点
信用等级
5 点
经验
9915 点
帖子
123
精华
0
在线时间
297 小时
注册时间
2014-12-1
最后登录
2025-12-19

楼主
cwjcw81 在职认证  发表于 2019-8-29 22:00:22 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

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

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

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

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

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

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

  66. bigdata={}
  67. index_name = []
  68. info = []
  69. def db(index_name,info):
  70.     for i in range(hang):
  71.         name = sheet1.cell_value(i,0)
  72.         index_name= index_name + [name]
  73.         company = '本部/公司: ' + str(sheet1.cell_value(i,1))
  74.         benbu = '部门: ' + str(sheet1.cell_value(i,2))
  75.         zhiwu = '职务: ' + str(sheet1.cell_value(i,3))
  76.         cellphone = '手机: ' + str(sheet1.cell_value(i,4))
  77.         phone = '座机: ' + str(sheet1.cell_value(i,5))
  78.         info = info + [[company] + [benbu] + [zhiwu] + [cellphone] + [phone]]
  79.         bigdata[index_name[i]] = info[i]
  80.     return bigdata
  81. finaldata = db(index_name,info)

  82. # 以下是查询的主程序

  83. while True:

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

  96.             print('您所查询的同事所属部门及联系方式为:')
  97.             print(str(finaldata.get(see,0)) + '\n')
  98.             print('如果还需要继续查询,请继续输入名字,退出请回车:'+'\n')
  99.             break
复制代码
其中,关于登录那一段的代码,可以试试替代如下:
  1.       if loginname in login and login[loginname] == password:
  2.           print('登录成功!')
  3.           break
  4.       else:
  5.            print("用户名密码不匹配,请重新输入")
复制代码



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 17:37