python【项目】:工资管理(简易版)
- 功能要求:
- 登录系统用户认证通过后才能列出下一级菜单员工信息表
- 登录系统要有用户登录、注册账号、删除账号、修改密码、退出
- 登录密码要有加密功能
- 从info.txt文件读取员工及工资信息,最后通过增加,修改员工信息写入原info.txt文件
- 开发环境:
- python 3.6.1
- 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【项目】:工资管理(简易版)的更多相关文章
- python项目依赖管理分享迁移后重建开发环境(一)virtualenv 和 pip
作者:Panda Fang 出处:http://www.cnblogs.com/lonkiss/p/rebuild-development-environment-with-virtualenv-an ...
- MVC5+EF6 简易版CMS(非接口) 第一章:新建项目
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- Jenkins 为Jenkins添加Windows Slave远程执行python项目脚本
为Jenkins添加Windows Slave远程执行python项目脚本 by:授客 QQ:1033553122 测试环境 JAVA JDK 1.7.0_13 (jdk-7u13-windows ...
- MVC5+EF6 简易版CMS(非接口) 第四章:使用业务层方法,以及关联表解决方案
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- MVC5+EF6 简易版CMS(非接口) 第三章:数据存储和业务处理
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- 简易版CMS后台管理系统开发流程
目录 简易版CMS后台管理系统开发流程 MVC5+EF6 简易版CMS(非接口) 第一章:新建项目 MVC5+EF6 简易版CMS(非接口) 第二章:建数据模型 MVC5+EF6 简易版CMS(非接口 ...
- Python编程:从入门到项目实践高清版附PDF百度网盘免费下载|Python入门编程免费领取
百度网盘:Python编程:从入门到项目实践高清版附PDF免费下载 提取码:oh2g 第一部分 基础知识第1章 起步 21.1 搭建编程环境 21.1.1 Python 2和Python 3 21 ...
- Python写地铁的到站的原理简易版
Python地铁的到站流程及原理(个人理解) 今天坐地铁看着站牌就莫名的想如果用Python写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
随机推荐
- TCP/IP协议详解---概述
工作之后,才发现以前在学校里学的东西忘得太快太干净了,现在需要一点点地捡起来了,要不然写几行程序会闹很多笑话会出现很多bug的.从今天开始,翻一翻<TCP/IP协议详解 卷1>这本 ...
- [CEOI2004]锯木厂选址
link 试题分析 做这种题就应该去先写个暴力代码 #include<iostream> #include<cstring> #include<cstdio> #i ...
- day4-python基础
- webstorm 激活破解方法大全
webstorm 作为最近最火的前端开发工具,也确实对得起那个价格,但是秉着勤俭节约的传统美德,我们肯定是能省则省啊. 方法一:(更新时间:2018/1/23)v3.3 注册时,在打开的License ...
- 生存分析/Weibull Distribution韦布尔分布
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频教程) https://study.163.com/course/introduction.htm?courseId=1005269003&am ...
- Bootstrap 排版 文本
小一点浅一点(设置文本为父文本大小的 85%)<small> .small 大一点粗一点 行高高一点 .lead 粗 <strong> 斜体 <em> 添加背景色 ...
- Tensorboard教程:监控指标可视化
Tensorflow监控指标可视化 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 强烈推荐Tensorflow实战Google深度学习框架 实验平台: Tensorflow1.4. ...
- Intellij IDEA 快捷键整理(转)
Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “!”键 Ctrl+E,最近的文件 Ctrl+Shift+E,最近更改的文件 Shift+Click,可以关闭文件 C ...
- DHTML中window的使用
window对象是对浏览器窗口进行操作的对象.以下列出一些常用的对象(三级为对象的方法.属性) |-navigator:是对浏览器信息进行操作的对象 |-history:包含用户浏览过的url信息 | ...
- 关于Java泛型深入理解小总结
1.何为泛型 首先泛型的本质便是类型参数化,通俗的说就是用一个变量来表示类型,这个类型可以是String,Integer等等不确定,表明可接受的类型,原理类似如下代码 int pattern; //声 ...