• 功能要求
  1. 登录系统用户认证通过后才能列出下一级菜单员工信息表
  2. 登录系统要有用户登录、注册账号、删除账号、修改密码、退出
  3. 登录密码要有加密功能
  4. 从info.txt文件读取员工及工资信息,最后通过增加,修改员工信息写入原info.txt文件
  • 开发环境
  1. python 3.6.1
  2. PyCharm 2016.2.3
  • 目录结构
  1. project
  2. |--day2
  3. |--login.py
  4. |--PayrollStstem.py
  5. |--log.txt
  6. |--info.txt
  • 程序设计
  1. #!/usr/bin/env python
  2. #coding=utf-8
  3. __author__ = 'yinjia'
  4.  
  5. import hashlib
  6. import sys
  7. from project.day2 import PayrollSystem
  8.  
  9. #存储文件
  10. filename = 'log.txt'
  11. #账号信息表
  12. result = {}
  13.  
  14. def md5(arg):
  15. """
  16. 密码进行md5加密
  17. :param arg: 用户的密码
  18. :return: 返回进行加密后的密码
  19. """
  20. result = hashlib.md5(bytes("k1:1a2 k2:688",encoding='utf-8'))
  21. result.update(bytes(arg,encoding='utf-8'))
  22. return result.hexdigest()
  23.  
  24. def login(username,password):
  25. """
  26. 用于验证用户密码
  27. :param username:用户名
  28. :param password:密码
  29. :return: True,用户名验证成功;False,用户验证失败
  30. """
  31.  
  32. with open(filename,"r") as f:
  33. for line in f:
  34. u,p = line.strip().split(":")
  35. if username == u and md5(password) == p:
  36. return True
  37. return False
  38.  
  39. def register(username,password):
  40. """
  41. 用户注册
  42. :param username: 用户名
  43. :param password: 密码
  44. :return: True,用户注册成功;
  45. """
  46.  
  47. with open(filename,"a") as f:
  48. temp = "\n" + username + ":" + md5(password)
  49. f.write(temp)
  50. return True
  51.  
  52. def user_exist(username):
  53. """
  54. 检查用户名是否存在
  55. :param username: 用户名
  56. :return: True,用户名存在; False,用户名不存在
  57. """
  58. with open(filename,"r") as f:
  59. for line in f:
  60. line = line.strip()
  61. line_list = line.split(":")
  62. if username == line_list[0]:
  63. return True
  64. return False
  65.  
  66. def delete(username):
  67. """
  68. 删除用户名
  69. :param username: 用户名
  70. :return: True,删除成功; False,删除失败
  71. """
  72. info()
  73. del result[username]
  74. with open(filename,'w') as f:
  75. for key,value in result.items():
  76. f.write("%s%s%s\n" % (key,":",value))
  77. return True
  78.  
  79. def edit(username,old_password,new_password):
  80. """
  81. 修改密码
  82. :param username:用户名
  83. :param old_password:旧密码
  84. :param new_password:新密码
  85. :return:True,修改成功;False,修改失败
  86. """
  87. info()
  88. ret = result[username]
  89. if ret == md5(old_password):
  90. result[username] = md5(new_password)
  91. with open(filename, 'w') as f:
  92. for key, value in result.items():
  93. f.write("%s%s%s\n" % (key, ":", value))
  94. return True
  95.  
  96. def info():
  97. """
  98. 提取账号信息
  99. :return: 返回账号信息表
  100. """
  101. with open(filename,'r') as f:
  102. for line in f:
  103. line = line.strip()
  104. result[line.split(":")[0]] = line.split(":")[1]
  105. return result
  106.  
  107. def main():
  108. info_msg = """
  109. 1、登录系统
  110. 2、注册账号
  111. 3、删除账号
  112. 4、修改密码
  113. """
  114.  
  115. print('\033[32;1m')
  116. print('*' * 50)
  117. print('\t\t\t\t欢迎登录工资管理系统')
  118. print('*' * 50)
  119. print('\033[0m')
  120. print(info_msg)
  121. pingtai = str(input("\033[1;34;1m请选择操作(退出请输入q|Q):\033[0m")).strip()
  122. if pingtai == "":
  123. user = input("请输入用户名:")
  124. pwd = input("请输入密码:")
  125. ret = login(user,pwd)
  126. if ret:
  127. print("\033[1;31;1m<<<<<<<<登录成功>>>>>>>>>\033[0m")
  128. info = PayrollSystem.salary()
  129. info.comm()
  130. else:
  131. print("\033[1;31;1m<<<<<<<<登录失败>>>>>>>>>\033[0m")
  132. elif pingtai == "":
  133. user = input("请输入用户名:")
  134. pwd = input("请输入密码:")
  135. ret = user_exist(user)
  136. if ret:
  137. print("\033[1;31;1m用户名已存在,不能注册!\033[0m")
  138. else:
  139. add_user = register(user,pwd)
  140. if add_user:
  141. print("注册成功")
  142. else:
  143. print("注册失败")
  144. elif pingtai == "":
  145. user = input("请输入用户名:")
  146. del_user1 = user_exist(user)
  147. if del_user1:
  148. del_user2 = delete(user)
  149. if del_user2:
  150. print("删除成功!")
  151. else:
  152. print("删除失败!")
  153. else:
  154. print("\033[1;31;1m用户名不存在,无法删除!\033[0m")
  155.  
  156. elif pingtai == "":
  157. user = input("请输入用户名:")
  158. pas1 = input('请输入旧密码:')
  159. pas2 = input('请输入新密码:')
  160. del_user = user_exist(user)
  161. if del_user:
  162. edit_user = edit(user,pas1,pas2)
  163. if edit_user:
  164. print("修改密码成功!")
  165. else:
  166. print("\033[1;31;1m旧密码错误,修改密码失败!\033[0m")
  167. else:
  168. print("\033[1;31;1m用户名不存在,无法修改!\033[0m")
  169. elif str(pingtai).lower() == "q":
  170. print("GoodBye!")
  171. sys.exit()
  172. else:
  173. print("\033[1;31;1m非法输入!\033[0m")
  174.  
  175. if __name__ == "__main__":
  176. main()

系统登录

  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_
  3. __author__ = 'Yin Jia'
  4.  
  5. import sys
  6.  
  7. # 员工存储文件
  8. filename = "info.txt"
  9. #提取姓名信息表
  10. info_dict = {}
  11.  
  12. class salary:
  13.  
  14. def Query(self):
  15. """
  16. 查询员工
  17. :return:输出员工的工资
  18. """
  19. while True:
  20. self.info()
  21. user = input("请输入要查询的员工姓名(例如:Jon)").strip()
  22. if user in info_dict.keys():
  23. print('%s的工资:%s' % (user,info_dict[user]))
  24. break
  25. else:
  26. print('用户不存在!')
  27.  
  28. def Insert(self):
  29. while True:
  30. self.info()
  31. user = input("请输入要增加的员工姓名和工资,共空格分割(例如:Eric 100000):").strip()
  32. # 转换成列表
  33. u, p = user.split(" ")
  34. if u not in info_dict.keys():
  35. info_dict[u] = p
  36. with open(filename, 'w') as f:
  37. # 循环读取字典信息并写入文件
  38. for key, value in info_dict.items():
  39. f.write("%s%s%s\n\n" % (key, " ", value))
  40. print('%s 新增成功!' % u)
  41. break
  42. else:
  43. print('用户已存在,不能增加!')
  44.  
  45. def Update(self):
  46. while True:
  47. self.info()
  48. user = input("请输入要修改的员工姓名和工资,用空格分隔(例如:Jon 100):").strip()
  49. #转换成列表
  50. u,p = user.split(" ")
  51. if u in info_dict.keys():
  52. info_dict[u] = p
  53. with open(filename,'w') as f:
  54. # 循环读取字典信息并写入文件
  55. for key,value in info_dict.items():
  56. f.write("%s%s%s\n\n" % (key," ",value))
  57. print('%s 修改成功!' % u)
  58. break
  59. else:
  60. print('用户不存在!')
  61.  
  62. def Delete(self):
  63. while True:
  64. self.info()
  65. user = input("请输入要删除的员工姓名(例如:Jon):").strip()
  66. if user in info_dict.keys():
  67. del info_dict[user]
  68. with open(filename, 'w') as f:
  69. # 循环读取字典信息并写入文件
  70. for key, value in info_dict.items():
  71. f.write("%s%s%s\n\n" % (key, " ", value))
  72. print('%s 删除成功!' % user)
  73. break
  74. else:
  75. print('用户不存在!')
  76.  
  77. def info(self):
  78. """
  79. 读取员工信息表
  80. :return: 返回员工信息表
  81. """
  82. with open(filename,'r',encoding='utf-8') as f:
  83. for i in f:
  84. if not i.startswith("\n"):
  85. u,p = i.strip().split(" ")
  86. info_dict[u] = p
  87. return info_dict
  88.  
  89. def Exit(self):
  90. print('GoodBye!')
  91. sys.exit()
  92. def comm(self):
  93. info_msg = """
  94. 1. 查询员工工资
  95. 2. 修改员工工资
  96. 3. 增加新员工记录
  97. 4、删除员工记录
  98. 5、退出
  99. """
  100. payroll = salary()
  101.  
  102. info_payroll = {
  103. '': payroll.Query,
  104. '': payroll.Update,
  105. '': payroll.Insert,
  106. '': payroll.Delete,
  107. '': payroll.Exit
  108. }
  109.  
  110. while True:
  111. print('\033[32;1m')
  112. print('*' * 50)
  113. print('\t\t\t\t员工工资信息表')
  114. print('*' * 50)
  115. print('\033[0m')
  116. print(info_msg)
  117. choose = input('\033[1;31;1m请输入操作选项>>>:\033[0m').strip()
  118. if choose not in info_payroll.keys():
  119. print("不合法,请重新录入!")
  120. continue
  121. info_payroll[choose]()

工资信息表

  • 效果演示

部分效果截图展示:

python【项目】:工资管理(简易版)的更多相关文章

  1. python项目依赖管理分享迁移后重建开发环境(一)virtualenv 和 pip

    作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/rebuild-development-environment-with-virtualenv-an ...

  2. MVC5+EF6 简易版CMS(非接口) 第一章:新建项目

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  3. Jenkins 为Jenkins添加Windows Slave远程执行python项目脚本

    为Jenkins添加Windows Slave远程执行python项目脚本   by:授客 QQ:1033553122 测试环境 JAVA JDK 1.7.0_13 (jdk-7u13-windows ...

  4. MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  5. MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  6. MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  7. 简易版CMS后台管理系统开发流程

    目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...

  8. Python编程:从入门到项目实践高清版附PDF百度网盘免费下载|Python入门编程免费领取

    百度网盘:Python编程:从入门到项目实践高清版附PDF免费下载 提取码:oh2g   第一部分 基础知识第1章 起步 21.1 搭建编程环境 21.1.1 Python 2和Python 3 21 ...

  9. Python写地铁的到站的原理简易版

    Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...

随机推荐

  1. Mybatis笔记五:Mybatis的全局配置文件Configuration.xml讲解

    从 XML 中构建 SqlSessionFactory 每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心.SqlSessionFactory实例可以由SqlSessio ...

  2. window上安装elasticserach

    提供一个百度云链接下载elasticsearch (链接:https://pan.baidu.com/s/1sk8PYjV 密码:l586) 测试达到目的:安装elasticsearch后再安装hea ...

  3. 【JQuery】数据

    一.前言        接着前一章的内容,继续本章的学习 二.内容 queue 显示或操作在匹配元素上执行的函数队列 .queue(queueName) 操作在匹配元素上执行的函数队列 .queue( ...

  4. 谷哥的小弟学前端(01)——HTML常用标签(1)

    探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架 ...

  5. 常用Transformation算子

    map 产生的键值对是tupple,      split分隔出来的是数组 一.常用Transformation算子 (map  .flatMap .filter .groupByKey .reduc ...

  6. 图像处理之均值滤波介绍及C算法实现

    1 均值滤波介绍 滤波是滤波是将信号中特定波段频率滤除的操作,是从含有干扰的接收信号中提取有用信号的一种技术. 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临 ...

  7. libevent学习文档(三)working with event

    Events have similar lifecycles. Once you call a Libevent function to set up an event and associate i ...

  8. RabbitMQ消息分发轮询和Message Acknowledgment

    一.消息分发 RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费. 多个消费者可以订阅同一个Q ...

  9. #define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )

    原文 功能: 首先,sizeof(int)肯定是2的次方数,比如32位是4,64位是8 ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) ) 的意思就 ...

  10. 莫队+分块 BZOJ 3809

    3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1634  Solved: 482[Submit][Status][Di ...