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写其工作原理 是不是很简单就小试牛刀了下大佬们勿喷纯属小弟个人理解 首先来看看地铁上显示的站牌如下: 就想这 ...
随机推荐
- Mybatis笔记五:Mybatis的全局配置文件Configuration.xml讲解
从 XML 中构建 SqlSessionFactory 每个基于Mybatis应用都是以一个SqlSessionFactory实例为中心.SqlSessionFactory实例可以由SqlSessio ...
- window上安装elasticserach
提供一个百度云链接下载elasticsearch (链接:https://pan.baidu.com/s/1sk8PYjV 密码:l586) 测试达到目的:安装elasticsearch后再安装hea ...
- 【JQuery】数据
一.前言 接着前一章的内容,继续本章的学习 二.内容 queue 显示或操作在匹配元素上执行的函数队列 .queue(queueName) 操作在匹配元素上执行的函数队列 .queue( ...
- 谷哥的小弟学前端(01)——HTML常用标签(1)
探索Android软键盘的疑难杂症 深入探讨Android异步精髓Handler 详解Android主流框架不可或缺的基石 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架 ...
- 常用Transformation算子
map 产生的键值对是tupple, split分隔出来的是数组 一.常用Transformation算子 (map .flatMap .filter .groupByKey .reduc ...
- 图像处理之均值滤波介绍及C算法实现
1 均值滤波介绍 滤波是滤波是将信号中特定波段频率滤除的操作,是从含有干扰的接收信号中提取有用信号的一种技术. 均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临 ...
- libevent学习文档(三)working with event
Events have similar lifecycles. Once you call a Libevent function to set up an event and associate i ...
- RabbitMQ消息分发轮询和Message Acknowledgment
一.消息分发 RabbitMQ中的消息都只能存储在Queue中,生产者(下图中的P)生产消息并最终投递到Queue中,消费者(下图中的C)可以从Queue中获取消息并消费. 多个消费者可以订阅同一个Q ...
- #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) ) 的意思就 ...
- 莫队+分块 BZOJ 3809
3809: Gty的二逼妹子序列 Time Limit: 80 Sec Memory Limit: 28 MBSubmit: 1634 Solved: 482[Submit][Status][Di ...