python模拟ATM系统

简介:

一、环境及程序功能说明

      python 2.7.12模拟与银行ATM功能,主要功能如下:

       1,登录查询余额

       2,转账功能

       3,提现功能

       4,流水查询

       5,密码修改

       6,还款功能

       7,退出(切换账号)

       采用pickle存储账号密码相关信息,以账号名为日志文件名存储该账号的流水日志~

为了实现测试,先写一个提供测试文件的小脚本,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#coding:utf-8
import  pickle
import  time
import  os
IOSTIME  =  '%Y-%m-%d %X'
Now  =  time.strftime(IOSTIME,time.localtime())
Counts  =  { '9168' :[ '1234' , '0' , 15000 ,[Now]], '9198' :[ '4567' , '0' , 10000 ,[Now]], '9999' :[ '6789' , '1' , 12000 ,[Now]]}
bank_count  =  open ( "banks_counts.pkl" , 'w' )
pickle.dump(Counts,bank_count)
os.chdir( "." )
for  log  in  Counts.keys():
     os.popen( "rm -rf %s"  % log)
 
print ( "测试数据已经生成:\n:%s"  % Counts)

二、ATM系统实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
#!/usr/bin/env python
#coding=utf8
import  pickle
import  sys
import  time
import  os
IOSTIME  =  '%Y-%m-%d %X'
Now  =  time.strftime(IOSTIME,time.localtime())
reload (sys)
sys.setdefaultencoding( 'utf-8' )
 
##现在时间
def  NOW():
     global  Now
     Now  =  time.strftime(IOSTIME,time.localtime())
     return  Now
 
##读入数据
with  open ( 'banks_counts.pkl' ) as bank_infos:
     UserInfos  =  pickle.load(bank_infos)
     print  UserInfos
 
##完成写入功能
def  Write_DB():
     with  open ( 'banks_counts.pkl' , 'w' ) as New_bank_infos:
         pickle.dump(UserInfos,New_bank_infos)
 
#for userinfo in UserInfos.keys():
#    print UserInfos[userinfo]     
 
##查询金额
def  LookHow(HM):
     print  "现在时间是: %s,银行余额: %s RMB!"  % (NOW(),HM)
#提现功能    
def  TakeCrash(HOW,WHO):
     ShouXuFei  =  HOW  *  0.01                     #手续费为1/100
     if  (HOW  +  ShouXuFei) > WHO:
         print  "余额不足提取!"
     else :
         WHO  =  WHO  -  HOW -  ShouXuFei
         print  "您要提取的金额为:%s,手续费: %s,余额为:%s RMB!"  % (HOW,ShouXuFei,WHO)
         with  open (UserCard, 'a+' ) as f:
             f.write( "%s:%s提款%s\n"  % (NOW(),UserCard,HOW))
     UserInfos[UserCard][ 2 =  WHO
 
####转账功能
def  ZhuangZ(From,TO,How):
     print  From,TO
     if  How > From:
         print  "%s 账号余额不足!"  % How
     else :
        From  =  From  -  How
        TO  =  TO  +  How
        print  "转出金额: %s RMB,余额为: %s RMB"  % (How,From)
 
     UserInfos[UserCard][ 2 =  From
     UserInfos[TO_Card][ 2 =  TO
     with  open (UserCard, "a+" ) as f1:
        f1.write( "%s:%s扣款%s,输出到:%s!\n"  % (NOW(),UserCard,How,TO_Card))
     with  open (TO_Card, "a+" ) as f2:
        f2.write( "%s:%s收到来自%s的%s款!\n"  % (NOW(),TO_Card,UserCard,How))
 
###还款功能
def  AddMoney(HOW,WHO):
     if  HOW >  0 :
         print ( "确定还款:%s"  % HOW)
         UserInfos[WHO][ 2 =  UserInfos[WHO][ 2 +  HOW
         with  open (WHO, "a+" ) as f:
             f.write( "%s:还款%s\n"  % (NOW(),HOW))
 
##流水查询
def  Logs(WHO):
     if  os.path.isfile(os.path.join(os.getcwd(),WHO)):
         with  open (WHO, 'r' ) as f:
             for  line  in  f.readlines():
     else :
         print ( "该账号还没有产生交易流水!" )
 
 
##最后一次访问时间
def  LastAccess(WHO):
     UserInfos[WHO][ 3 =  NOW()
#    Write_DB()
 
##密码修改
def  ChgPwd(WHO,NewPass):
     UserInfos[WHO][ 0 =  NewPass
     print ( "密码修改成功!" )
 
Contex  =  [ "查询余额" , "转账" , "提现" , "流水" , "还款" , "修改密码" , "退出" ]
 
ErrorCount  =  0
while  ErrorCount <  3  :
     for  userinfo  in  UserInfos.keys():
         UserCard  =  raw_input ( "[输入quit|exit退出系统]请输入您的银行卡:" ).strip()
#        if UserCard == 'quit':sys.exit("您选择退出!")
         if  UserCard  = =  '': continue
         elif  UserCard  = =  'quit'  or  UserCard  = =  'exit' :
             sys.exit( "您选择退出!" )
         elif  UserCard  not  in  UserInfos.keys():
             print ( "您输入的银行卡不存在!" )
             continue
#        else:
#           print("您输入的有误!")  
         UserPwd  =  raw_input ( "[输入quit|exit退出系统]请输入您的密码:" ).strip()
         if   UserPwd  = =  'quit'  or  UserPwd  = =  "exit" :
             sys.exit( "您选择退出!" )
         try :
             if   UserInfos[UserCard][ 1 ] ! =  '0' :
                 print  "%s 账号被锁定!"  %  UserCard
                 ErrorCount  + = 1
                 continue
         except  KeyError:
                 print  "%s 账号不存在!"  % UserCard
                 ErrorCount  + = 1
                 continue
         if   len (UserPwd)  = =  0  or  UserPwd ! =   UserInfos[UserCard][ 0 ]:
             print  "密码错误!"
             ErrorCount  + = 1
             continue
         else :
             print  "%s 登录成功!您最后一次访问在: %s"   % (UserCard,UserInfos[UserCard][ 3 ])
             LastAccess(UserCard)    #登录成功,写入访问时间
 
             while  True :
                 print (( "请选择你需要的服务:" ).center( 90 , "+" ))
                 print
                 for  in  range ( len (Contex)):
                     print  i,Contex[i].decode( "utf-8" ), '\t' ,
                 print
                 print ( "+"  *  80  +  '\n' )
                 choice  =  raw_input ( "[按6或输入quit退出系统]请选择您的业务编号:" )
                 if  len (choice)  = =  0 : continue
                 elif  choice  = =  'quit'  or  int (choice)  = =  6  :
                    Write_DB()
                    print ( "您选择退出系统!" )
                    break
 
                 elif  int (choice)  = =  0 :
                     LookHow(UserInfos[UserCard][ 2 ])
                 elif  int (choice)  = =  1 :
                     TO_Card  =  raw_input ( "请输入对方银行卡:" ).strip()
                     if  len (TO_Card)  = =  0  or  TO_Card  = =  UserInfos[UserCard]:
                         print  "账号错误!"
                         continue
                     HowZ  =  raw_input ( "输入转账金额:" ).strip()
                     if  len (HowZ)  = =  0 :
                         print  "转账金额不能为0!"
                     try :
                         UserInfos[TO_Card]
                     except  KeyError:
                          print  "对方账号: %s 不存在!"  %  TO_Card
                          continue
                     else :
                          UserInfos[TO_Card][ 2 =  int (UserInfos[TO_Card][ 2 ])
                          ZhuangZ(UserInfos[UserCard][ 2 ],UserInfos[TO_Card][ 2 ], int (HowZ))
 
                 elif  int (choice)  = =  2 :
                     HowTake  =  raw_input ( "请选择提取金额:" )
                     HowTake  =  int (HowTake)
                     TakeCrash(HowTake,UserInfos[UserCard][ 2 ])
                     Write_DB()
                 elif  int (choice)  = =  4 :
#                    print UserCard
                     HowAdd  =  int ( raw_input ( "请输入您要还款的金额:" ))
                     AddMoney(HowAdd,UserCard)
                     Write_DB()
                 elif  int (choice)  = =  3 :
                     Logs(UserCard)
                 elif  int (choice)  = =  5 :
                     NewPass  =  raw_input ( "请输入新的密码:" )
                     NewPass2  =  raw_input ( "请再输入一次新密码:" )
                     if  NewPass  = =  NewPass2:
                         ChgPwd(UserCard,NewPass)
                         Write_DB()
                     else :
                         sys.exit( "两次输入的密码不一致!退出密码修改!" )
 
else :
     print ( "你的账号已锁,请到柜台解锁!" )
     UserInfos[UserCard][ 1 =  '1'
     UserInfos[UserCard][ 3 =  NOW()
     Write_DB()

三、功能测试如

$python creat_bank.py

wKioL1laFaPzSIytAAIE4DjPGt4003.png

$ python looks_bank.py

wKiom1laFIbAn_ebAAvuN1jbwTI233.png-wh_50

wKioL1laFIzwlAeGAArIeqxBeek607.png-wh_50


四、所有文件如下

$ls -alh

wKiom1laEsOCXzWYAAG2lkVgBwY725.png

写着用来练习,如有错误之处欢迎指正,交流!










本文转自 dyc2005 51CTO博客,原文链接:http://blog.51cto.com/dyc2005/1944150,如需转载请自行联系原作者
目录
相关文章
|
18天前
|
存储 人工智能 搜索推荐
【python】python用户管理系统[简易版](源码+报告)【独一无二】
【python】python用户管理系统[简易版](源码+报告)【独一无二】
|
23天前
|
Python
Python实现简易天气查询系统
Python实现简易天气查询系统
26 4
|
1月前
|
数据库 开发者 Python
用Python代码打造你的私人网页交互系统
用Python代码打造你的私人网页交互系统
27 1
|
2月前
|
存储 算法 计算机视觉
用Python做了个图片识别系统(附源码)
用Python做了个图片识别系统(附源码)
|
2月前
|
前端开发 关系型数据库 MySQL
基于python+mysql的宠物领养网站系统
基于python+mysql的宠物领养网站系统
36 2
|
2月前
|
监控 安全 自动驾驶
基于python的室内老人实时摔倒智能监测系统-跌倒检测系统(康复训练检测+代码)
基于python的室内老人实时摔倒智能监测系统-跌倒检测系统(康复训练检测+代码)
72 1
|
4天前
|
数据采集 NoSQL 搜索推荐
五一假期畅游指南:Python技术构建的热门景点分析系统解读
五一假期畅游指南:Python技术构建的热门景点分析系统解读
|
13天前
|
人工智能 机器人 测试技术
【Python】Python仓储管理系统(源码)【独一无二】
【Python】Python仓储管理系统(源码)【独一无二】
|
18天前
|
人工智能 机器人 测试技术
【Python】Python房屋销售系统(源码)【独一无二】(课程设计)
【Python】Python房屋销售系统(源码)【独一无二】(课程设计)
|
21天前
|
机器学习/深度学习 数据采集 算法
基于Apriori关联规则的电影推荐系统(附python代码)
这是一个基于Apriori算法的电影推荐系统概览。系统通过挖掘用户评分数据来发现关联规则,例如用户观看某部电影后可能感兴趣的其他电影。算法核心是逐层生成频繁项集并设定最小支持度阈值,之后计算规则的置信度。案例中展示了数据预处理、频繁项集生成以及规则提取的过程,具体包括用户评分电影的统计分析,如1-5部电影的评分组合。最后,通过Python代码展示了Apriori算法的实现,生成推荐规则,并给出了一个简单的推荐示例。整个过程旨在提高推荐的精准度,基于用户已评分的电影推测他们可能尚未评分但可能喜欢的电影。
基于Apriori关联规则的电影推荐系统(附python代码)