• 功能要求
  1. 登录系统用户认证通过后才能列出下一级菜单员工信息表
  2. 登录系统要有用户登录、注册账号、删除账号、修改密码、退出
  3. 登录密码要有加密功能
  4. 从info.txt文件读取员工及工资信息,最后通过增加,修改员工信息写入原info.txt文件
  • 开发环境
  1. python 3.6.1
  2. PyCharm 2016.2.3
  • 目录结构
 project
|--day2
|--login.py
|--PayrollStstem.py
|--log.txt
|--info.txt
  • 程序设计
 #!/usr/bin/env python
#coding=utf-8
__author__ = 'yinjia' import hashlib
import sys
from project.day2 import PayrollSystem #存储文件
filename = 'log.txt'
#账号信息表
result = {} def md5(arg):
"""
密码进行md5加密
:param arg: 用户的密码
:return: 返回进行加密后的密码
"""
result = hashlib.md5(bytes("k1:1a2 k2:688",encoding='utf-8'))
result.update(bytes(arg,encoding='utf-8'))
return result.hexdigest() def login(username,password):
"""
用于验证用户密码
:param username:用户名
:param password:密码
:return: True,用户名验证成功;False,用户验证失败
""" with open(filename,"r") as f:
for line in f:
u,p = line.strip().split(":")
if username == u and md5(password) == p:
return True
return False def register(username,password):
"""
用户注册
:param username: 用户名
:param password: 密码
:return: True,用户注册成功;
""" with open(filename,"a") as f:
temp = "\n" + username + ":" + md5(password)
f.write(temp)
return True def user_exist(username):
"""
检查用户名是否存在
:param username: 用户名
:return: True,用户名存在; False,用户名不存在
"""
with open(filename,"r") as f:
for line in f:
line = line.strip()
line_list = line.split(":")
if username == line_list[0]:
return True
return False def delete(username):
"""
删除用户名
:param username: 用户名
:return: True,删除成功; False,删除失败
"""
info()
del result[username]
with open(filename,'w') as f:
for key,value in result.items():
f.write("%s%s%s\n" % (key,":",value))
return True def edit(username,old_password,new_password):
"""
修改密码
:param username:用户名
:param old_password:旧密码
:param new_password:新密码
:return:True,修改成功;False,修改失败
"""
info()
ret = result[username]
if ret == md5(old_password):
result[username] = md5(new_password)
with open(filename, 'w') as f:
for key, value in result.items():
f.write("%s%s%s\n" % (key, ":", value))
return True def info():
"""
提取账号信息
:return: 返回账号信息表
"""
with open(filename,'r') as f:
for line in f:
line = line.strip()
result[line.split(":")[0]] = line.split(":")[1]
return result def main():
info_msg = """
1、登录系统
2、注册账号
3、删除账号
4、修改密码
""" print('\033[32;1m')
print('*' * 50)
print('\t\t\t\t欢迎登录工资管理系统')
print('*' * 50)
print('\033[0m')
print(info_msg)
pingtai = str(input("\033[1;34;1m请选择操作(退出请输入q|Q):\033[0m")).strip()
if pingtai == "":
user = input("请输入用户名:")
pwd = input("请输入密码:")
ret = login(user,pwd)
if ret:
print("\033[1;31;1m<<<<<<<<登录成功>>>>>>>>>\033[0m")
info = PayrollSystem.salary()
info.comm()
else:
print("\033[1;31;1m<<<<<<<<登录失败>>>>>>>>>\033[0m")
elif pingtai == "":
user = input("请输入用户名:")
pwd = input("请输入密码:")
ret = user_exist(user)
if ret:
print("\033[1;31;1m用户名已存在,不能注册!\033[0m")
else:
add_user = register(user,pwd)
if add_user:
print("注册成功")
else:
print("注册失败")
elif pingtai == "":
user = input("请输入用户名:")
del_user1 = user_exist(user)
if del_user1:
del_user2 = delete(user)
if del_user2:
print("删除成功!")
else:
print("删除失败!")
else:
print("\033[1;31;1m用户名不存在,无法删除!\033[0m") elif pingtai == "":
user = input("请输入用户名:")
pas1 = input('请输入旧密码:')
pas2 = input('请输入新密码:')
del_user = user_exist(user)
if del_user:
edit_user = edit(user,pas1,pas2)
if edit_user:
print("修改密码成功!")
else:
print("\033[1;31;1m旧密码错误,修改密码失败!\033[0m")
else:
print("\033[1;31;1m用户名不存在,无法修改!\033[0m")
elif str(pingtai).lower() == "q":
print("GoodBye!")
sys.exit()
else:
print("\033[1;31;1m非法输入!\033[0m") if __name__ == "__main__":
main()

系统登录

 #!/usr/bin/env python
# _*_ coding:utf-8 _*_
__author__ = 'Yin Jia' import sys # 员工存储文件
filename = "info.txt"
#提取姓名信息表
info_dict = {} class salary: def Query(self):
"""
查询员工
:return:输出员工的工资
"""
while True:
self.info()
user = input("请输入要查询的员工姓名(例如:Jon)").strip()
if user in info_dict.keys():
print('%s的工资:%s' % (user,info_dict[user]))
break
else:
print('用户不存在!') def Insert(self):
while True:
self.info()
user = input("请输入要增加的员工姓名和工资,共空格分割(例如:Eric 100000):").strip()
# 转换成列表
u, p = user.split(" ")
if u not in info_dict.keys():
info_dict[u] = p
with open(filename, 'w') as f:
# 循环读取字典信息并写入文件
for key, value in info_dict.items():
f.write("%s%s%s\n\n" % (key, " ", value))
print('%s 新增成功!' % u)
break
else:
print('用户已存在,不能增加!') def Update(self):
while True:
self.info()
user = input("请输入要修改的员工姓名和工资,用空格分隔(例如:Jon 100):").strip()
#转换成列表
u,p = user.split(" ")
if u in info_dict.keys():
info_dict[u] = p
with open(filename,'w') as f:
# 循环读取字典信息并写入文件
for key,value in info_dict.items():
f.write("%s%s%s\n\n" % (key," ",value))
print('%s 修改成功!' % u)
break
else:
print('用户不存在!') def Delete(self):
while True:
self.info()
user = input("请输入要删除的员工姓名(例如:Jon):").strip()
if user in info_dict.keys():
del info_dict[user]
with open(filename, 'w') as f:
# 循环读取字典信息并写入文件
for key, value in info_dict.items():
f.write("%s%s%s\n\n" % (key, " ", value))
print('%s 删除成功!' % user)
break
else:
print('用户不存在!') def info(self):
"""
读取员工信息表
:return: 返回员工信息表
"""
with open(filename,'r',encoding='utf-8') as f:
for i in f:
if not i.startswith("\n"):
u,p = i.strip().split(" ")
info_dict[u] = p
return info_dict def Exit(self):
print('GoodBye!')
sys.exit()
def comm(self):
info_msg = """
1. 查询员工工资
2. 修改员工工资
3. 增加新员工记录
4、删除员工记录
5、退出
"""
payroll = salary() info_payroll = {
'': payroll.Query,
'': payroll.Update,
'': payroll.Insert,
'': payroll.Delete,
'': payroll.Exit
} while True:
print('\033[32;1m')
print('*' * 50)
print('\t\t\t\t员工工资信息表')
print('*' * 50)
print('\033[0m')
print(info_msg)
choose = input('\033[1;31;1m请输入操作选项>>>:\033[0m').strip()
if choose not in info_payroll.keys():
print("不合法,请重新录入!")
continue
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. SpringBoot多数据源配置事务

    除了消费降级,这将会是娱乐继续下沉的一年. 36氪从多个信源处获悉,资讯阅读应用趣头条已经完成了腾讯领投的Pre-IPO轮融资,交易金额预计达上亿美元,本轮融资估值在13-15亿美金之间:完成此轮融资 ...

  2. Mybatis笔记一:java.lang.NoClassDefFoundError: org/apache/ibatis/mapping/DatabaseIdProvider

    异常错误:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSess ...

  3. 连接Mysql数据库

    JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.la ...

  4. Unity3D for VR 学习(3): 暴风魔镜PC Input小改造–自己动手、丰衣足食

    在做手游的时候,80%时间是在PC调试的,例如业务逻辑.AI算法.核心玩法等. 拿到魔镜提供的demo,晕了,必须得安装到Android机器上,才能调试,究其原因,有三: 需要用到手机陀螺仪 需要用到 ...

  5. OpenCV图像变换(仿射变换与透视变换)

    仿射变换(affine transform)与透视变换(perspective transform)在图像还原.图像局部变化处理方面有重要意义.通常,在2D平面中,仿射变换的应用较多,而在3D平面中, ...

  6. 04-树4. Root of AVL Tree-平衡查找树AVL树的实现

    对于一棵普通的二叉查找树而言,在进行多次的插入或删除后,容易让树失去平衡,导致树的深度不是O(logN),而接近O(N),这样将大大减少对树的查找效率.一种解决办法就是要有一个称为平衡的附加的结构条件 ...

  7. 洛谷P1199 三国游戏

    题目描述 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏. 在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不小于 4),任意两个武将之 ...

  8. poppo大根堆的原理与实现。

    大根堆的定义:1 大根堆是一个大根树 2 大根堆是一个完全二叉树 所以大根堆用数组表示是连续的,不会出现空白字段. 对于大根堆的插入 对于大根堆的插入,可以在排序前确定大根堆的形状,可以确定元素5从位 ...

  9. JAVA Thread Dumps 三部曲

    一.windows环境下方法 1:cmd下找到运行服务器容器的PID jps -v 例: C:\Users\Administrator>jps -v4856 Bootstrap -Djdk.tl ...

  10. Flex布局(伸缩盒布局)

    Flexible Box是什么?Flexible意为可伸缩的,Box意为盒子,可以理解为一种新式的盒模型——伸缩盒模型.由CSS3规范提出,这是在原有的大家非常熟悉的block, inline-blo ...