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写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
随机推荐
- window上安装elasticserach
提供一个百度云链接下载elasticsearch (链接:https://pan.baidu.com/s/1sk8PYjV 密码:l586) 测试达到目的:安装elasticsearch后再安装hea ...
- 【BZOJ1562】【NOI2009】变换序列(二分图匹配)
[BZOJ1562][NOI2009]变换序列 题面 BZOJ 洛谷 这题面写的是真的丑,还是先手动翻译成人话. 让你构造一个\(0..N-1\)的排列\(T\) 使得\(Dis(i,T_i)\)为给 ...
- 【BZOJ1566】【NOI2009】管道取珠(动态规划)
[BZOJ1566][NOI2009]管道取珠(动态规划) 题面 BZOJ 题解 蛤?只有两档部分分.一脸不爽.jpg 第一档?爆搜,这么显然,爆搜+状压最后统计一下就好了 #include<i ...
- 《Linux内核设计与实现》第5章读书笔记
第五章 系统调用 一.系统调用概述 系统调用在Linux中称为syscall,返回的值是long型变量:如果出错,C库会将错误代码写入errno全局变量(通过调用perror()函数可以把该变量翻译成 ...
- Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python
作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区 ...
- Python之数据库导入(py3.5)
数据库版本:MySQL Python版本:3.5 之前用想用MySQLdb来着,后来发现py3.5版本不支持,现选择pymysql 现在想将数据库adidas中的表jd_comment读取至pytho ...
- sqlserver 2008连接
初次安装使用SQL server 2008时,可能会遇到无法连接到(local)的情况.那么,如何解决此问题? 工具/原料 SQL server 2008 方法/步骤 1 打开SQL se ...
- Ajax-更新
ajax是与服务器进行(异步/同步)交互的技术之一交互就是对服务器一种访问ajax对服务器进行交互时页面不刷新ajax的语言载体是JS 比如我在百度输入个东西 自动弹出信息像和一些搜索字体相关的页面标 ...
- 不平衡分类学习方法 --Imbalaced_learn
最近在进行一个产品推荐课题时,由于产品的特性导致正负样本严重失衡,远远大于3:1的比例(个人认为3:1是建模时正负样本的一个临界点),这样的样本不适合直接用来建模,例如正负样本的比例达到了50:1,就 ...
- 重构改善既有代码设计--重构手法16:Introduce Foreign Method (引入外加函数)&& 重构手法17:Introduce Local Extension (引入本地扩展)
重构手法16:Introduce Foreign Method (引入外加函数)你需要为提供服务的类增加一个函数,但你无法修改这个类.在客户类中建立一个函数,并以第一参数形式传入一个服务类实例. 动机 ...