在一个文件里存多个人的个人信息,如以下

1.输入用户名密码,正确后登录系统 ,打印

  1. 1. 修改个人信息
  2. 2. 打印个人信息
  3. 3. 修改密码

2.每个选项写一个方法

3.登录时输错3次退出程序

  1. def change_user_info(p_user):
  2. """
  3. 修改用户信息
  4. :param p_user: 用户名
  5. :return:
  6. """
  7. user_info = STAFF_INFO[p_user]
  8. for ind, val in enumerate(user_info):
  9. if ind > 1:
  10. msg = '%s, %s, %s'%(ind, COLUMN_NAME[ind], val)
  11. print_log(msg)
  12. while True:
  13. choice = input("输入要修改的列的序号").strip()
  14. if choice.isdigit():
  15. choice = int(choice)
  16. # if choice > len(user_info) and choice < 2:
  17. if 2 < choice < len(user_info):
  18. print_log('输入要的序号不存在', 'error')
  19. else:
  20. curr_val = user_info[choice]
  21. print_log('当前值为'+curr_val)
  22. new_val = input('input new_value->').strip()
  23. user_info[choice] = new_val
  24. STAFF_INFO[p_user] = user_info
  25. save_db()
  26. msg = '%s修改成功'%COLUMN_NAME[choice]
  27. print_log(msg)
  28. break
  29.  
  30. else:
  31. print_log('输入错误,请输入2-6的数字', 'error')

 

  1. def print_user_info(p_user):
  2. """
  3. 打印用户信息
  4. :param user: 用户名
  5. :return:
  6. """
  7. person_data = STAFF_INFO[p_user]
  8. # 使用切片把username,Password过滤掉
  9. # 相当于深拷贝,如果数据量大,会占用大量内存空间
  10. # person_data = person_data[COLUMN_NAME.index('Name'):]
  11. for i in range (0, COLUMN_NAME.index('Name')):
  12. person_data.pop(0)
  13. # print(person_data)
  14. info = '''
  15. ------------------
  16. Name: {}
  17. Age : {}
  18. Job : {}
  19. Dept: {}
  20. Phone: {}
  21. ------------------
  22. ''' .format(*person_data)
  23. print_log(info)
  1. def change_user_pwd(p_user):
  2. """
  3. 修改密码
  4. :param p_user:
  5. :return:
  6. """
  7. while True:
  8. pwd1 = input("输入新密码->").strip()
  9. pwd2 = input("再输一次新密码->").strip()
  10. if pwd1 == pwd2:
  11. pwd_ind = COLUMN_NAME.index('Password') # 得到密码索引
  12. STAFF_INFO[user][pwd_ind] = pwd2
  13. save_db()
  14. print_log('密码修改成功')
  15. break
  16. else:
  17. print_log('密码两次输入不一致','error')

 

  1. def login_auth(username, pwd):
  2. """
  3. 用户名密码验证
  4. :param username:
  5. :param pwd:
  6. :return:
  7. """
  8. if username in STAFF_INFO:
  9. if pwd == STAFF_INFO[username][1]:
  10. return True
  11. else:
  12. print_log('用户名与密码不一致','error')
  13. return False
  14. else:
  15. print_log('用户名不存在','error')
  16. return False

 

  1. def save_db():
  2. """
  3. 保存到文件中
  4. :return:
  5. """
  6. f = open(DB_FILE, "r+", encoding='utf-8')
  7. f.seek(0)
  8. f.truncate() # 清空文件
  9. for v_data in STAFF_INFO.values():
  10. row_data = ','.join(v_data)
  11. f.write('%s\n'% row_data)
  12. f.close()

 

  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. # @Time : 2018/3/21 10:33
  4. # @Author : hyang
  5. # @File : Person_manage.py
  6. # @Software: PyCharm
  7. DB_FILE = 'account.txt'
  8. COLUMN_NAME =['Username','Password','Name','Age','Job','Dept','Phone']
  9. MENU = '''
  10. 1. 打印个人信息
  11. 2. 修改个人信息
  12. 3. 修改密码
  13. '''
  14.  
  15.  
  16. # 打印信息
  17. def print_log(msg, log_type="info"):
  18. if log_type == 'info':
  19. print("\033[32;1m%s\033[0m" %msg)
  20. elif log_type == 'error':
  21. print("\033[31;1m%s\033[0m" %msg)
  22. def load_db():
  23. """
  24. 载入人员信息
  25. :return:
  26. """
  27. staff_data = {}
  28. # 构建字典空列表
  29. #{'Username': ['username','Password','Name','Age','Job','Dept','Phone'}
  30. # for d in COLUMN_NAME:
  31. # staff_data[d] = []
  32. with open(DB_FILE, 'r', encoding='utf-8') as f:
  33. for line in f:
  34. datas = line.split(",")
  35. # 构建员工信息字典
  36. datas[-1] = datas[-1].strip() # 去掉回车
  37. staff_data[datas[0]] = datas
  38. return staff_data
  39. def print_user_info(p_user):
  40. """
  41. 打印用户信息
  42. :param user: 用户名
  43. :return:
  44. """
  45. person_data = STAFF_INFO[p_user]
  46. # 使用切片把username,Password过滤掉
  47. # 相当于深拷贝,如果数据量大,会占用大量内存空间
  48. # person_data = person_data[COLUMN_NAME.index('Name'):]
  49. for i in range (0, COLUMN_NAME.index('Name')):
  50. person_data.pop(0)
  51. # print(person_data)
  52. info = '''
  53. ------------------
  54. Name: {}
  55. Age : {}
  56. Job : {}
  57. Dept: {}
  58. Phone: {}
  59. ------------------
  60. ''' .format(*person_data)
  61. print_log(info)
  62. def save_db():
  63. """
  64. 保存到文件中
  65. :return:
  66. """
  67. f = open(DB_FILE, "r+", encoding='utf-8')
  68. f.seek(0)
  69. f.truncate() # 清空文件
  70. for v_data in STAFF_INFO.values():
  71. row_data = ','.join(v_data)
  72. f.write('%s\n'% row_data)
  73. f.close()
  74. def change_user_info(p_user):
  75. """
  76. 修改用户信息
  77. :param p_user: 用户名
  78. :return:
  79. """
  80. user_info = STAFF_INFO[p_user]
  81. for ind, val in enumerate(user_info):
  82. if ind > 1:
  83. msg = '%s, %s, %s'%(ind, COLUMN_NAME[ind], val)
  84. print_log(msg)
  85. while True:
  86. choice = input("输入要修改的列的序号").strip()
  87. if choice.isdigit():
  88. choice = int(choice)
  89. # if choice > len(user_info) and choice < 2:
  90. if 2 < choice < len(user_info):
  91. print_log('输入要的序号不存在', 'error')
  92. else:
  93. curr_val = user_info[choice]
  94. print_log('当前值为'+curr_val)
  95. new_val = input('input new_value->').strip()
  96. user_info[choice] = new_val
  97. STAFF_INFO[p_user] = user_info
  98. save_db()
  99. msg = '%s修改成功'%COLUMN_NAME[choice]
  100. print_log(msg)
  101. break
  102.  
  103. else:
  104. print_log('输入错误,请输入2-6的数字', 'error')
  105. def change_user_pwd(p_user):
  106. """
  107. 修改密码
  108. :param p_user:
  109. :return:
  110. """
  111. while True:
  112. pwd1 = input("输入新密码->").strip()
  113. pwd2 = input("再输一次新密码->").strip()
  114. if pwd1 == pwd2:
  115. pwd_ind = COLUMN_NAME.index('Password') # 得到密码索引
  116. STAFF_INFO[user][pwd_ind] = pwd2
  117. save_db()
  118. print_log('密码修改成功')
  119. break
  120. else:
  121. print_log('密码两次输入不一致','error')
  122. def login_auth(username, pwd):
  123. """
  124. 用户名密码验证
  125. :param username:
  126. :param pwd:
  127. :return:
  128. """
  129. if username in STAFF_INFO:
  130. if pwd == STAFF_INFO[username][1]:
  131. return True
  132. else:
  133. print_log('用户名与密码不一致','error')
  134. return False
  135. else:
  136. print_log('用户名不存在','error')
  137. return False
  138. if __name__ == '__main__':
  139. STAFF_INFO = load_db()
  140. # print(STAFF_INFO)
  141. count = 0
  142. while count < 3:
  143. user = input('用户名:->')
  144. pwd = input('密码:->')
  145. if login_auth(user, pwd):
  146. print('welcome %s'.center(50,'-') % user)
  147. while True: # 用户停留这一层
  148. print(MENU)
  149. user_choice = input(">>>").strip()
  150. if user_choice.isdigit():
  151. user_choice = int(user_choice)
  152. if user_choice == 1:
  153. # 用户登录成功打印用户信息
  154. print_user_info(user)
  155. elif user_choice == 2:
  156. change_user_info(user)
  157. elif user_choice == 3:
  158. change_user_pwd(user)
  159. elif user_choice == 'q':
  160. break
  161.  
  162. else:
  163. count += 1
  164. else:
  165. print_log("Too many attempts.", 'error')

详细代码

 

版权声明:本文为xiao-apple36原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/xiao-apple36/p/8624143.html