热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python收银小程序_python小程序atm模拟

包含启动程序start.py和atm.py模块用户数据通过字典序列化存入userdata.pkl用户操作记录文件userid.record(为每个用户保存一个记录文件)商品价格文件

包含启动程序start.py和atm.py模块

用户数据通过字典序列化存入userdata.pkl

用户操作记录文件userid.record(为每个用户保存一个记录文件)

商品价格文件goods_list

功能包含:取现 存钱 转账 购物 打印清单

其他说明:没有包含管理端程序(用于添加用户账号,商品上下架),密码验证用户可以自己开发。

start.py如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import sys

import getpass

import pickle

from atm import *

#获取用户数据

f1=file(‘userdata.pkl‘,‘rb‘)

userinfo=pickle.load(f1)

f1.close()

#主程序

while True:

userid = str(raw_input("\033[1;32;40myour id:\033[0m"))

if userinfo.has_key(userid):

while True:

password = int(getpass.getpass(‘\033[1;32;40mEnter password:\033[0m‘))

if password != userinfo[userid][‘passwd‘]:

print "\033[1;32;40mThe password is incorrect\033[0m"

continue

else:

print "\033[1;31;40mwenlcome %s.\033[0m" % userinfo[userid][‘name‘]

show_menu()

while True:

input=int(raw_input(‘请选择:‘))

if input == 1:

money = int(userinfo[userid][‘youhave‘])

show_balance(money)

elif input == 2:

withdraw(userid,**userinfo)

elif input == 3:

save_money(userid,**userinfo)

elif input == 4:

transfer(userid,**userinfo)

elif input == 5:

shopping(userid,**userinfo)

elif input == 6:

history_list(userid)

elif input == 7:

sys.exit(0)

else : print ‘输入错误‘

else:

print "\033[1;31;40mThe userid is not vaild, please re-input:\033[0m"

continue

atm.py如下:

#!/usr/bin/python

# -*- coding: utf-8 -*-

import sys

import pickle

import re

import time

import datetime

#打印菜单

def show_menu():

print ‘1:Balance inquiry‘

print ‘2:withdraw money‘

print ‘3:save money‘

print ‘4:transfer‘

print ‘5:shopping‘

print ‘6:history list‘

print ‘7:退出‘

#显示余额

def show_balance(money):

print ‘账户余额:%d‘ % money

#取现

def withdraw(uid,**uinfo):

draw=int(raw_input(‘请输入取现金额:‘))

draw_str=‘-%d‘ % draw

if uinfo[uid][‘youhave‘] 

print ‘余额不足‘

else:

uinfo[uid][‘youhave‘] -= draw

rest=uinfo[uid][‘youhave‘]

with file(‘userdata.pkl‘,‘wb‘) as f1:

pickle.dump(uinfo,f1)

write_oper(uid,‘withdraw‘,draw_str,rest)

#存钱

def save_money(uid,**uinfo):

save = int(raw_input(‘请输入存款金额:‘))

save_str=‘+%d‘ % save

uinfo[uid][‘youhave‘] += save

rest=uinfo[uid][‘youhave‘]

write_oper(uid,‘savemoney‘,save_str,rest)

#转账

def transfer(uid,**uinfo):

tran_id = raw_input(‘请输入行内账号:‘)

if uinfo.has_key(tran_id):

tran_money = int(raw_input(‘请输入转账金额:‘))

uinfo[uid][‘youhave‘] -= tran_money

uinfo[tran_id][‘youhave‘] += tran_money

tran_money_str=‘-%d‘ % tran_money

rest=uinfo[uid][‘youhave‘]

write_oper(uid,‘transfer‘,tran_money_str,rest)

#记录操作

def write_oper(uid,o1,m1,r1):

t1=time.strftime(‘%Y%m%d %H:%M:%S‘,time.localtime(time.time()))

with file(‘%s.record‘ % uid,‘a‘) as f1:

f1.write(‘%s  %s  %s  therest:%d\n‘ % (t1,o1,m1,r1))

#购物

def shopping(uid,**uinfo):

"atm.py" 118L, 3853C                                                                                                                                           48,7         顶端

#购物

def shopping(uid,**uinfo):

goods_dict={}

goods = file(‘goods_list‘,‘r+‘)

print ‘商品名称  价格‘

#打印可购买商品清单

for line in goods.readlines():

print line,

key = line.split()[0]

value = int(line.split()[1])

goods_dict[key] = value

#购物车购物

ok=‘yes‘

sh_total=0

while ok==‘yes‘:

sh_cart=[]

sh_choose=raw_input(‘选择商品:‘)

if goods_dict.has_key(sh_choose):

sh_cart.append(sh_choose)

sh_total+=goods_dict[sh_choose]

ok = raw_input(‘是否继续 yes/no?:‘)

else :print "无此商品,请重新输入"

print ‘您选择商品:%s 总计:%d‘ % (sh_cart,sh_total)

if uinfo[uid][‘youhave‘] 

print ‘余额不足‘

else:

uinfo[uid][‘youhave‘] -= sh_total

with file(‘userdata.pkl‘,‘wb‘) as f1:

pickle.dump(uinfo,f1)

sh_total_str=‘-%d‘ % sh_total

rest=uinfo[uid][‘youhave‘]

write_oper(uid,‘shopping‘,sh_total_str,rest)

goods.close()

#查询历史清单

def seach_list(uid,start_date,end_date):

f1=file(‘%s.record‘ % uid)

for line in f1.readlines():

cu_date=int(line.split()[0])

if cu_date<&#61;end_date and cu_date>&#61;start_date:

print line,

#查询历史清单主函数

def history_list(uid):

print ‘1:查询最近一个月‘

print ‘2:查询最近3个月‘

print ‘3:选择时间‘

input&#61;int(raw_input(‘请选择查询时间:‘))

sys_time&#61;int(time.strftime(‘%Y%m%d‘,time.localtime(time.time())))

now_time&#61;datetime.datetime.now()

thr_mon_ago_time&#61;now_time-datetime.timedelta(days&#61;90)

one_mon_ago_time&#61;now_time-datetime.timedelta(days&#61;30)

one_mon_ago&#61;int(one_mon_ago_time.strftime(‘%Y%m%d‘))

thr_mon_ago&#61;int(thr_mon_ago_time.strftime(‘%Y%m%d‘))

if input &#61;&#61; 1:

seach_list(uid,one_mon_ago,sys_time)

elif input &#61;&#61; 2:

seach_list(uid,thr_mon_ago,sys_time)

55,1          87%

elif input &#61;&#61; 2:

seach_list(uid,thr_mon_ago,sys_time)

elif input &#61;&#61; 3:

start_d&#61;int(raw_input(‘输入开始日期(格式&#xff1a;20150301):‘))

end_d&#61;int(raw_input(‘输入结束日期(格式&#xff1a;20150301):‘))

seach_list(uid,start_d,end_d)

else:

print ‘input error‘

用户数据通过字典序列化存入userdata.pkl

userinfo&#61;{‘10001‘:{‘passwd‘:123456,‘name‘:‘li‘,‘youhave‘:10000},

‘10002‘:{‘passwd‘:234567,‘name‘:‘skipper‘,‘youhave‘:20000}}

用户操作记录文件10001.record

20150401 18:03:46  withdraw  -221  therest:6034

20150401 18:07:39  savemoney  &#43;1001  therest:7035

20150401 18:18:09  transfer  -123  therest:5911

20150401 18:18:27  shopping  -199  therest:5712

商品价格文件goods_list

Car  250000

Clothes  399

Shoes  199

Iphone5s  4999

Coffee  35

Foods    68

Bicycle  1688

参考信息&#xff1a;http://www.linuxidc.com/Linux/2014-09/107274.htm



推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 树莓派Linux基础(一):查看文件系统的命令行操作
    本文介绍了在树莓派上通过SSH服务使用命令行查看文件系统的操作,包括cd命令用于变更目录、pwd命令用于显示当前目录位置、ls命令用于显示文件和目录列表。详细讲解了这些命令的使用方法和注意事项。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
author-avatar
手机用户2502884057
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有