python企业发放奖金的通报,Python培训_Python奖金管理案例

Python培训_Python奖金管理案例  1.实验介绍

1.1. 关于本实验

使用Python实现一个资金管理系统,功能包括:存款、取款、转账、秘密管理和凭证打印。数据存储在MySql数据库中。

1.2. 实验目的

对于Python基础语法和高级语法部分的综合应用,实现一个功能简单的资金管理系统。

2. 实验代码

2.1. 实验思路

使用PyMySql连接操作数据库,根据数据库内的信息进行登录判断。成功登陆后进入系统欢迎界面,同时为成功登录的用户创建一个用户对象,根据用户作出的操作执行相应的方法,并同步到数据库中。在操作结束后将此次操作打印出来(写入本地文件)。

2.2. 实验实现

步骤 1、创建数据库和数据表

创建数据库:

create database money;

创建数据表:

CREATE TABLE user(

username varchar(30) PRIMARY KEY,

pwd VARCHAR(100) NOT NULL,

start_time DATETIME NOT NULL,

end_time DATETIME NOT NULL,

balance FLOAT NOT NULL

)ENGINE=InnoDB DEFAULT CHARSET=utf8;

**数据:

INSERT INTO user (username, pwd, start_time, end_time, balance)

VALUES ('admin','123456','2019.04.23', '2019.04.23',100.0);

INSERT INTO user (username, pwd, start_time, end_time, balance)

VALUES ('root','admin','2019.01.01', '2019.02.02',100.0);

步骤 2导入所需的库,定义操作字典

安装pymysql:pip install pymysql

import time

import sys

import pymysql

import getpass

action_dict = {1:"存款", 2:"取款", 3:"转账", 4:"修改密码", 5:'退出'}

步骤 3、数据库连接

考虑到系统中多次连接数据库,而连接数据库的语句相似性较高,所以将其封装成为一个方法。

# 定义连接数据库方法,sql为每次需要执行的数据库操作语句,

def con_mysql(sql):

try:

db = pymysql.connect("localhost", "root", "root", "money", charset='utf8' )

# 使用cursor()方法获取操作游标

cursor = db.cursor()

# 使用execute方法执行SQL语句

cursor.execute(sql)

results = cursor.fetchone()# 查询一条数据

print(results)

db.commit()    # 提交至数据库

except Exception as e:

db.rollback()

print("系统异常")

sys.exit()

db.close() # 关闭数据库

return results

# 测试方法:

sql = "select * from user"

con_mysql(sql)

输出结果:

9398b3265c0e2f339da67e33a0223e0e.png

图3-1数据库连接测试结果

步骤 4、定义用户类

class Account(object):

def __init__(self, username, money, number=0):

self.money = money  # 账户金额

self.username = username  # 用户名

# 上次登录时间

self.start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

self.number = number

# 存款

def save(self):

self.money += self.number

print("已存入%f元" % (self.number))

# 取钱

def take(self):

if self.number > self.money:

print("余额不足")

self.money -= self.number

print("以取出%f元" % (self.number))

# 修改密码

def update(self):

pwd = getpass.getpass("请输入新密码:")

sql = "update user set pwd=%s where username=%s" % (pwd, self.username)

return sql

# 转账

def transfer(self):

user = input("请输入转账用户:")

if self.number > self.money:

print("余额不足")

return

else:

sql = "select username from user where username='%s'" % (user)

result = con_mysql(sql)

if result == None:

print("转账用户不存在")

self.number = 0

else:

return user

#  执行用户所选的操作

def implement(self, action):

if action == 5:

sys.exit()

elif action == 1:

try:

self.number = float(input("请输入存入得金额:"))

except Exception as e:

print("请输入正确的金额")

self.save()

elif action == 2:

try:

self.number = float(input("请输入取出的金额:"))

except Exception as e:

print("请输入正确的金额")

self.take()

sql = "update user set balance=%f where username=%s" % (self.number, self.username)

con_mysql(sql)

elif action == 3:

try:

self.number = float(input("请输入转账的金额:"))

except Exception as e:

print("请输入正确的金额")

User = self.transfer()

if User:

sql = "update user set balance=%f where username=%s" % (self.number, User)

con_mysql(sql)

else:

self.update()

# 打印操作后的凭证

def voucher(self, end_time, action):

str_action = """用户:%s \n操作:%s\n操作金额:%s\n登录时间:

%s\n结束时间:%s""" % (self.username, action_dict[action], self.number, self.start_time, end_time)

with open("%s.txt" % (self.username), 'w') as f:

try:

f.write(str_action)

except Exception as e:

print("凭证打印失败,请联系管理员")

print("打印成功,请收好您的凭证")

步骤5、登陆功能

def login():

"""

用户登录检测

:param username: 用户账号

:param pwd: 用户密码

:return:

"""

username = input("请输入您的账号:")

# pwd = getpass.getpass("请输入您的密码:")# 隐藏输入的密码

pwd = input("请输入您的密码:")

# 编写SQL语句从数据库获取账号信息

sql = "select * from user where username='%s'"%(username)

result = con_mysql(sql)

if result:

if result[1] == pwd:

user_account = Account(result[0], result[4])

return user_account

else:

print("账号或密码错误")

else:

print("账号不存在")

# 测试登录功能

user_account = login()

步骤6、欢迎界面

def welcome():

print(' *'*15)

print(" %s%30s"%("*","*"))

print(" %s     欢迎进入资金管理系统 %5s"%("*","*"))

print(" %s%30s"%("*","*"))

print(' *'*15)

try:

action = input("请选择操作:1.存款 2.取款 3.转账 4.修改密码 5.退出:\n")

action = int(action)

except Exception as e:

print("warn:请输入正确的操作指令!")

return -1

if action not in action_dict:

print("warn:请执行正确的操作!")

return -1

return action

测试welcome方法:

action = welcome()

action

输出结果:

194abeff7440ba14eb447016dee37f60.png

图3-3系统欢迎界面

步骤 7、定义系统启动函数

设置启动函数:

def run():

action = welcome()

user_account.implement(action)

end_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

sql = """

update user set balance=%f,start_time='%s',end_time='%s' where username='%s'

"""%(user_account.money, user_account.start_time,end_time,user_account.username)

con_mysql(sql)

user_account.voucher(end_time, action)

步骤8、使用装饰器为系统添加计时功能

#定义装饰器:

def consume_time(func, *args, **kwargs):

def inner(*args, **kwargs):

start_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

print("本次登录时间%s" % (start_time))

func()

end_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

print("登出时间%s" % (end_time))

return (start_time, end_time)

return inner

#给系统启动函数添加功能:

@consume_time

def run():

action = welcome()

user_account.implement(action)

end_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

sql = """

update user set balance=%f,start_time='%s',end_time='%s' where username='%s'

""" % (user_account.money, user_account.start_time, end_time, user_account.username)

con_mysql(sql)

user_account.voucher(end_time, action)

步骤 9、启动系统

if __name__ == "__main__":

while True:

if isinstance(user_account, Account):

break

while True:

run()

输出结果:

ab05f250e2304f84ed97df1d89648d2d.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值