Python账户管理Mini代码练习

客户端代码

# acc_manage_cli.py
# 账户管理系统客户端
'''
数据格式
查询:
    请求:
        query::all   查询全部信息
        query::62223450001  指定账户查询
    响应:
        账号:62223450001 ,户名:Harry ,余额:10000
新增:
    请求:
        new::62234500002::Tom::1::10.00
    响应:
        执行一笔操作
'''

from socket import *
client = None
host = '127.0.0.1'
port = 9999

def print_menu():
    menu = ''' 
   ---------账户管理系统-----------
           1 - 查询账户
           2 - 新建账户 
           3 - 修改账户 
           4 - 删除账户 
           5 - 退出'''
    print(menu)

def open_conn():# 连接到后台服务器
    try:
        global client
        client = socket()
        client.connect((host,port))
        print('连接成功')
        return 0
    except:
        print('连接服务器失败')
        return -1

def new_acct(): # 新增账户
    try:
        acct_no = input('帐号:')
        acct_name = input('户名:')
        acct_type = input('账户类型:')
        balance = float(input('开户金额:'))
        assert balance >=10.0000
    except:
        print('输入有误')
    else:
        msg = 'new::%s::%s::%s::%.f'%(acct_no,acct_name,acct_type,balance)
        print(msg)
        if send_msg(msg) <0:
            print('发送失败')
            return
        data = recv_msg()
        if not data:
            print('接收失败')
        else:
            print(data.decode())


def send_msg(msg):# 向服务器端发送数据
    if not client: # Socket 没有初始化
        return -1
    n = client.send(msg.encode())# 调用Socket发送
    return n

def recv_msg():
    if not client:
        return None
    data = client.recv(2048) #接收2K
    return data

def query_acct():# 查询账户
    acct_no = input('请输入要查询的帐号:')
    if not acct_no: # 非空
        msg = 'query::'+acct_no
    else:
        msg = 'query::all' # 查询所有

    if send_msg(msg) < 0: # 调用函数发送请求
        print('发送失败')
        return

    data = recv_msg() # 接收查询结果
    if not data:
        print('查询失败')
    else:
        print(data.decode()) # 打印查询结果


def main(): # 主函数
    open_conn() # 连接服务器
    while True:
        print_menu()
        oper = input('请输入要执行的操作')
        if not oper:
            continue
        if oper == '1': # 查询
            query_acct()
        if oper == '2': # 新增
            new_acct()
        if oper == '3': # 修改
            pass
        if oper == '4': # 删除
            pass
        if oper == '5': # 退出
            break
        else:
            print('请输入正确的值')

main()


服务器端

# acc_manage_svr.py
# 账户管理系统服务端

from socket import *
import pymysql
# 数据库
db_host = '127.0.0.1'
db_user = 'root'
db_passwd = '123456'
db_name = 'test'
db_conn = None # 数据库连接对象
# 服务器
address = ('127.0.0.1',9999)

# 连接数据库
def conn_database():
    global db_conn
    db_conn = pymysql.connect(db_host,db_user,db_passwd,db_name)
    if not db_conn:
        print('连接失败')
        return -1
    else:
        return 1

def close_data(): # 关闭数据库连接
    if not db_conn:
        return
    else:
        db_conn.close()

def query(msgs):
    global db_conn
    cursor = db_conn.cursor()
    if msgs[1] == 'all':
        sql = 'select * from acct'
    else:
        sql = 'select * from acct where acct_no = %s'%msgs[1]
    print(sql)
    try:
        cursor.execute(sql)
        result = cursor.fetchall()
        for row in result:
            acct_no = row[0]
            acct_na = row[1]
            balance = row[4]
            acc_info = '帐号:%s,户名:%s,余额:%.2f\n'%(acct_no,acct_na,balance)

    except:
        print('查询错误')
    return acc_info


def new_acct(msgs):
    result = 0
    global  db_conn
    cursor = db_conn.cursor() # 获取游标
    acc_no = msgs[1] # 获取帐号
    acc_name = msgs[2] # 获取户名
    acc_type = msgs[3] # 获取类型
    balance = msgs[4] # 获取金额
    sql = "insert into acct values('%s','%s',now(),%s,%s)"%(acc_no,acc_name,acc_type,balance)
    print(sql)
    try:
        result = cursor.execute(sql)
        db_conn.commit() # 提交事物
    except:
        db_conn.rollback()
    re = '操作结果影响%d行' % result
    return re



def main(): # 服务器主程序
    if conn_database():# 添加数据库长连接
        return  '数据库连接失败'
    # Socket服务
    server = socket()
    server.bind(address)
    server.listen(5)
    print('服务已经启动')
    sockfd,addr = server.accept()
    # 循环接收
    while True:
        data = sockfd.recv(2048)
        if not data:
            print('客户端已经关闭')
            break
        # 解析 分发
        print(data.decode())
        msgs = data.decode().split('::') # 按::分割接收的数据
        if msgs[0] == 'query':
            result = query(msgs)
        elif msgs[0] == 'new':
            result = new_acct(msgs)
        elif msgs[0] == 'update':
            pass
        elif msgs[0] == 'delete':
            pass
        else:
            print('非法请求操作')
        sockfd.send(result.encode()) # 发送处理结果
    close_data() # 循环退出关闭数据库
    server.close() # 关闭Socket监听
main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值