• 功能要求
  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. 信息收集利器——Nmap

    环境:kali2.0 常用的Nmap命令总结: 1.扫描单个IP地址 nmap 192.168.56.1 2.扫描一个网络中IP地址范围 nmap 192.168.56.1-255 3.扫描目标主机的 ...

  2. LINUX内核分析第四周——扒开系统调用的三层皮

    LINUX内核分析第四周--扒开系统调用的三层皮 李雪琦 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course ...

  3. STL源码分析-deque

    http://note.youdao.com/noteshare?id=66f21dca07c1984f41848700021644fd

  4. 配置:heartbeat+nginx+mysqld+drbd高可用笔记(OK)

    参考资料:http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html   背景需求: 使用heartbeat来做HA高可用,并且把 ...

  5. MSBuild问题积累

    我想要当属性ConfigurationType定义为StaticLibrary时,将其重新定义为StaticLibrary,按照以下来做,实现不了. <ConfigurationType> ...

  6. ZOJ 3777 B - Problem Arrangement 状压DP

    LINK:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 题意:有N(\( N <= 12 \))道题,排顺序 ...

  7. Linux rpm yum 等安装软件

    任何程序都是先写代码,拿到源码去编译得到一个目标程序. 1  编译的过程复杂有需要准备编译的环境,和硬件有关,32位64位,内核的不同等等所以需要编译多次     Java特殊但是他需要安装jvm, ...

  8. MongoDB常用方法

    一.查询 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): se ...

  9. ASP.NET网站伪静态下使用中文URL

    首先解释一下,什么是中文URL呢?它并不是我们常见的把汉字编码为 %CF%EC 这种形式,而是在URL中直接使用汉字 这种形式目前还不是很多见.因为不同的浏览器处理起来可能会有所不同,不过据我测试,I ...

  10. 关于static关键字

    static用于修饰成员(成员变量,成员函数),不能修饰局部变量被修饰的变量和函数是静态的,可被多个对象共享,节省内存可以直接被类名调用++++++++++++++++++++++++++++++++ ...