python小程序 atm模拟

包含启动程序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‘] < draw:
      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‘] < sh_total:
      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<=end_date and cu_date>=start_date:
            print line,
#查询历史清单主函数
def history_list(uid):
    print ‘1:查询最近一个月‘
    print ‘2:查询最近3个月‘
    print ‘3:选择时间‘
    input=int(raw_input(‘请选择查询时间:‘))
    sys_time=int(time.strftime(‘%Y%m%d‘,time.localtime(time.time())))
    now_time=datetime.datetime.now()
    thr_mon_ago_time=now_time-datetime.timedelta(days=90)
    one_mon_ago_time=now_time-datetime.timedelta(days=30)
    one_mon_ago=int(one_mon_ago_time.strftime(‘%Y%m%d‘))
    thr_mon_ago=int(thr_mon_ago_time.strftime(‘%Y%m%d‘))
    if input == 1:
        seach_list(uid,one_mon_ago,sys_time)
    elif input == 2:
        seach_list(uid,thr_mon_ago,sys_time)
                                                                                                                                                               55,1          87%
    elif input == 2:
        seach_list(uid,thr_mon_ago,sys_time)
    elif input == 3:
        start_d=int(raw_input(‘输入开始日期(格式:20150301):‘))
        end_d=int(raw_input(‘输入结束日期(格式:20150301):‘))
        seach_list(uid,start_d,end_d)
    else:
        print ‘input error‘   
        
用户数据通过字典序列化存入userdata.pkl
userinfo={‘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  +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

参考信息:http://www.linuxidc.com/Linux/2014-09/107274.htm
时间: 2024-11-28 23:16:17

python小程序 atm模拟的相关文章

python小程序(模拟用户登陆系统)

模拟登陆1.用户输入账号密码进行登陆2.用户信息存在文件内3.用户密码输错三次后锁定用户 知识点:strip().split().while.for循环混用以及布尔值的使用 strip()  方法用于移除字符串头尾指定的字符(默认为空格) 实例1: >> str = "0000000this is string example....wow!!!0000000"; >> print str.strip( '0' ); this is string example

python小程序之一

来个Python小程序 #输入年月日确定这个日期是一年中的第多少天# -*- coding: UTF-8 -*-y=int(raw_input("请输入年:"))m=int(raw_input("请输入月份:"))d=int(raw_input("请输入日期:"))a=(0,31,28,31,30,31,30,31,31,30,31,30,31)if m>12: raise ValueError("输入月份错误")if

Python 小程序,对文件操作及其他

下面是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比如说,从文件中读取一行数据,分别存放于列表中,再对列表进行操作,如去掉里面的重复项,排序等操作. 常见对文件中行进行操作: #这里列出两个常用的方法 方法01: 一次性读取所有行 >>> f = file('1.txt') >>> while 1: lines = f.readlines() if not lines: break for line in lines: print l

Python 小程序,对文件操作及其它

以下是自己写的几个对文件操作的小程序,里面涉及到文件操作,列表(集合,字典)的运用等.比方说,从文件里读取一行数据.分别存放于列表中,再对列表进行操作.如去掉里面的反复项.排序等操作. 常见对文件里行进行操作: #这里列出两个经常使用的方法 方法01: 一次性读取全部行 >>> f = file('1.txt') >>> while 1: lines = f.readlines() if not lines: break for line in lines: print

第一个python小程序,2进制转10进制

#Bin to Dec #my first python programe n = c = itm = 0 a = raw_input('please input Binary number:\n') for n in range(0,len(a)):    b = a[n:n+1] #   print 'n is', n #   print 'b is',b #   print 'len',len(a[n:])       if b == '1':    c = 2**(len(a[n:])-

Python小程序,读取ACCESS数据库,然后list数据

曾经做过的一个Python小程序,读取ACCESS数据库,然后list数据 # -*- coding: cp936 -*-import wximport wx.libimport sys,glob,randomimport win32com.clientreload(sys)sys.setdefaultencoding('utf-8')class DemoFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self,None,-1,u"安

Python小程序练习二之装饰器小例子

Python小程序练习二之装饰器小例子 装饰器: 装饰器实际上就是为了给某程序增添功能,但该程序已经上线或已经被使用,那么就不能大批量的修改源代码,这样是不科学的也是不现实的,因为就产生了装饰器,使得其满足: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 那么根据需求,同时满足了这两点原则,这才是我们的目的. 装饰器的原则组成: < 函数+实参高阶函数+返回值高阶函数+嵌套函数+语法糖 = 装饰器 > 错误例子: 1.1Decorators.py 1 # The aut

一个有意思的Python小程序(全国省会名称随机出题)

最近比较迷Python,仿照<Python编程快速上手>8.5写了一个随机出卷的小程序.程序本身并不难,关键是解决问题的思路,还有就是顺便复习了一下全国地名(缅怀一下周总理). OK其实还是有一个难点的,就是关于Python的中文编码问题,如何把中文字典输入到txt然后再把它读出来,程序中借用了json方法,而且在输出时decode.encode,有一些参考的价值吧.废话不说了,上程序. # *encoding:utf-8 * from __future__ import print_func

每天一个 Python 小程序

@易枭寒 正在 GitHub 写一个 Python 相关的开源项目. 项目地址: https://github.com/Yixiaohan/show-me-the-code (可点击本文最下方的“阅读原文”直接进入) 项目介绍: Python 练习册,每天一个小程序. 当然其中的很多题目对于其他编程语言也是适用的. 想法灵感来源于,学生时代的 100 个 C 语言练习题目. 项目的初衷,旨在让更多的人学习.使用 Python. 而不是像 100 个 C 语言练习题目中某些题目「不实用」,比如说打