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,如需转载请自行联系原作者
目录
相关文章
|
7天前
|
机器学习/深度学习 人工智能 算法
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
海洋生物识别系统。以Python作为主要编程语言,通过TensorFlow搭建ResNet50卷积神经网络算法,通过对22种常见的海洋生物('蛤蜊', '珊瑚', '螃蟹', '海豚', '鳗鱼', '水母', '龙虾', '海蛞蝓', '章鱼', '水獭', '企鹅', '河豚', '魔鬼鱼', '海胆', '海马', '海豹', '鲨鱼', '虾', '鱿鱼', '海星', '海龟', '鲸鱼')数据集进行训练,得到一个识别精度较高的模型文件,然后使用Django开发一个Web网页平台操作界面,实现用户上传一张海洋生物图片识别其名称。
86 7
海洋生物识别系统+图像识别+Python+人工智能课设+深度学习+卷积神经网络算法+TensorFlow
|
7天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
130 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
8天前
|
机器学习/深度学习 人工智能 算法
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
球类识别系统,本系统使用Python作为主要编程语言,基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集 '美式足球', '棒球', '篮球', '台球', '保龄球', '板球', '足球', '高尔夫球', '曲棍球', '冰球', '橄榄球', '羽毛球', '乒乓球', '网球', '排球'等15种常见的球类图像作为数据集,然后进行训练,最终得到一个识别精度较高的模型文件。再使用Django开发Web网页端可视化界面平台,实现用户上传一张球类图片识别其名称。
101 7
【球类识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+TensorFlow
|
17天前
|
机器学习/深度学习 传感器 算法
基于Mediapipe深度学习算法的手势识别系统【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目
基于Mediapipe深度学习算法的手势识别系统【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目
|
17天前
|
机器学习/深度学习 存储 编解码
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计(2)
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计
|
17天前
|
机器学习/深度学习 存储 计算机视觉
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
基于YOLOv8深度学习的PCB板缺陷检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测
|
17天前
|
机器学习/深度学习 算法 安全
基于YOLOv8深度学习的危险区域人员闯入检测与报警系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、区域闯入
基于YOLOv8深度学习的危险区域人员闯入检测与报警系统【python源码+Pyqt5界面+数据集+训练代码】YOLOv8、ByteTrack、目标追踪、区域闯入
|
17天前
|
机器学习/深度学习 算法 计算机视觉
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计(3)
基于YOLOv8与ByteTrack的车辆检测追踪与流量计数系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标追踪、车辆检测追踪、过线计数、流量统计
|
2天前
|
机器学习/深度学习 人工智能 数据挖掘
如何系统地自学 Python?
如何系统地自学 Python?
6 0
|
3天前
|
Linux 编译器 C语言
Python的系统路径
Python的系统路径
5 0