python模拟银行ATM程序设计.docx
《python模拟银行ATM程序设计.docx》由会员分享,可在线阅读,更多相关《python模拟银行ATM程序设计.docx(14页珍藏版)》请在冰豆网上搜索。
python模拟银行ATM程序设计
第2次综合训练报告
题目:
银行ATM模拟程序
******
专业:
安全工程
班级:
通风15-1班
指导教师:
***
2016年5月9日
银行ATM模拟程序
1摘要
自动柜员机,即ATM,是指银行在不同地点设置一种小型机器,利用一张信用卡大小的胶卡上的磁带记录客户的基本户口资料(通常就是银行卡),让客户可以透过机器进行提款、存款、转账等银行柜台服务,大多数客户都把这种自助机器称为自动提款机。
本文正是通过设计一个ATM模拟模拟程序来实现ATM机系统的基本功能,充分运用自己所学的Python知识进行设计编程。
实现的主要功能有:
账户信息查询、存款操作、取款操作、修改密码功能、退出系统功能。
用户任意选择1张银行卡(输入1位1~3的数字),输入初始密码123456即可进入ATM操作系统菜单(如图1所示),若输入密码连续错误三次则锁卡自动退出系统(如图2所示),系统菜单各功能(如图3所示)。
编写程序时的环境是Python3.4,所以代码中print及input函数可能与python2.X版本有一些差别。
参考了教材中第八章面向对象程序设计,编写了两个类包括ATM机类和银行卡Card类,编写了若干个函数以实现整个程序模拟ATM机的各种功能。
变量和函数的命名主要使用了Camel命名法,类的命名主要使用了Pascal命名法,程序共189行(含空行),因为时间比较仓促,可能有些地方写的比较乱,有些地方命名也不规范。
另外因为对文件的操作不熟练,在网上也没找到太多相关的资料,请多包涵。
图1
图2
图3
2设计思路
程序设计灵感来自银行ATM机,在这里将ATM机的各种功能抽象与简化,设计了银行ATM模拟程序。
根据我们日常的生活经验,我们要使用ATM机就需要一张银行卡。
运用面向对象的编程方法,把ATM机和银行卡简化并抽象为两个类:
1)银行卡类,主要用来存储账户信息,包括卡号、密码、用户名、余额四个属性,另外写了一个构造方法。
2)ATM机类,主要用来查询和修改银行卡的信息,写了五个方法,以银行卡类的对象作为参数,实现银行卡查询(包括卡号、密码、用户名、余额)、存款(银行卡余额增加)、取款(银行卡余额减少)、修改银行卡密码、退卡(退出程序)等功能。
写好了类后,我们开始模拟ATM机的操作过程。
首先,使用ATM机我们需要插卡,从文件中读取银行卡信息(想法并没有能很好的实现),我们预设三张银行卡,用户选择(1~3号银行卡),根据银行卡信息创建一个对应的银行卡对象,以及ATM机对象。
插卡后,我们需要用户输入密码。
如果输入密码与银行卡密码匹配就进入ATM系统,如果输入密码错误打到三次就锁卡退出。
进入ATM系统,用户可以选择ATM的五个功能:
1)银行卡查询,实现的方法就是使用print函数输出银行卡的卡号、密码、用户名、余额。
2)存款,实现的方法就是把银行卡的余额+X×100,(X为正整数),约束条件为存款金额大于100小于10000。
3)取款,实现的方法就是把银行卡的余额-X×100,(X为正整数),约束条件为取款金额不大于存款金额且不大于5000。
4)密码修改,实现的方法就是把银行卡的密码修改。
首先要输入原密码,如果原密码输入错误,则修改密码失败,成功后需要用户输入新密码两次,如果两次密码一致则修改成功,否则密码修改失败。
5)退卡,使用exit()函数退出程序
3源程序
1.#!
/usr/bin/python
2.#-*-coding:
utf-8-*-
3.#author:
张也白PythonVersion:
3.4
4.importos
5.
6.classDepositCard:
7.cardID=0
8.cardPWD='123456'
9.balance=0
10.userName='0000'
11.def__init__(self,cardID,cardPWD,userName,balance):
12.self.cardID=cardID
13.self.cardPWD=cardPWD
14.self.userName=userName
15.self.balance=balance
16.
17.classATM:
18.defdeposite(self,card):
#存款
19.divide()
20.info="存款\n"
21.print(info.center(50))
22.cash=input("提示:
存款金额为100的倍数,金额要求在100-10000之间\n")
23.ifint(cash)%100==0andint(cash)>0andint(cash)<=10000:
24.card.balance+=int(cash)
25.info="存款成功\n"
26.print(info.center(50))
27.print("\nThebalanceofthecard:
%d"%card.balance)
28.else:
29.info="存款失败\n"
30.print(info.center(50))
31.divide()
32.
33.defwithdraw(self,card):
#取款
34.divide()
35.info="取款\n"
36.print(info.center(50))
37.options={1:
'100',2:
'200',3:
'500',4:
'其他金额'}
38.forainoptions.items():
39.print(a[0],a[1])
40.choice=input('请选择:
')
41.if(int(choice)==1orint(choice)==2)andcard.balance>=int(choice)*100:
42.
43.card.balance-=int(choice)*100
44.info="取款成功\n"
45.print(info.center(50))
46.elifint(choice)==3andcard.balance>=500:
47.card.balance-=500
48.info="取款成功\n"
49.print(info.center(50))
50.elifint(choice)==4:
51.cash=input("\n提示:
取款金额为100的倍数,且总额不超过5000元\n请
52.输入你要取的金额:
")
53.ifint(cash)>=100andint(cash)<=5000:
54.ifint(cash)%100==0andcard.balance>=int(cash):
55.card.balance-=int(cash)
56.info="取款成功\n"
57.print(info.center(50))
58.else:
59.print('输入错误或卡内余额不足')
60.else:
61.print('输入错误或卡内余额不足')
62.else:
63.print('输入错误或卡内余额不足')
64.
65.
66.print("\n\nThebalanceofthecard:
%d"%card.balance)
67.divide()
68.
69.defmodify(self,card):
#修改密码
70.divide()
71.info="修改密码\n"
72.print(info.center(50))
73.inStr=input('请输入原密码:
')
74.ifinStr!
=card.cardPWD:
75.info="密码错误\n"
76.print(info.center(50))
77.else:
78.newPWD1=input('请输入新密码:
')
79.newPWD2=input('请再次输入新密码:
')
80.ifnewPWD1==newPWD2:
81.card.cardPWD=newPWD1
82.info="\n密码修改成功,请牢记你的新密码\n"
83.print(info.center(50))
84.else:
85.info="\n密码不一致\n"
86.print(info.center(50))
87.divide()
88.
89.defquery(self,card):
#查询
90.divide()
91.info="查询成功\n"
92.print(info.center(50))
93.print('银行卡信息'.center(50))
94.print('%-10s%-10s%-10s%-10s'%('卡号','密码','姓名','余额'))
95.print('%-11s%-11s%-11s%-11s'%(str(card.cardID),card.cardPWD,card.userNam
96.e,str(card.balance)))
97.divide()
98.defrefundCard(self,card):
#退卡
99.divide()
100.print('(假装把卡吐出来)')
101.print('谢谢使用,请收好您的卡片')
102.divide()
103.defdivide():
104.print("\n--------------------------------------------------\n")
105.definit():
106.f=open('D:
\\a.txt','w')
107.info='''\
108.1001123456张大白1000
109.1002123456张二白2000
110.1003123456张三白3000'''
111.f.write(info)
112.f.close()
113.s=open('D:
\\a.txt','r')
114.print('银行卡信息'.center(50))
115.print('%-10s%-10s%-10s%-10s'%('卡号','密码','姓名','余额'))
116.forlineins.readlines():
117.foriinrange(0,4):
118.print('%-11s'%line.split()[i],end='')
119.ifi==3:
120.print()
121.s.close
122.divide()
123.return
124.defcreateCard():
125.choice=input('请选择一张银行卡(1~3):
');
126.ifint(choice)==1:
127.newcard=DepositCard(1001,'123456','张大白',1000)
128.login(newcard)
129.elifint(choice)==2:
130.newcard=DepositCard(1002,'123456','张二白',2000)
131.login(newcard)
132.elifint(choice)==3:
133.newcard=DepositCard(1003,'123456','张三白',3000)
134.login(newcard)
135.else:
136.print('输入有误,退出系统')
137.exit()
138.deflogin(card):
139.divide()
140.print('\n你插入了银行卡%s\n'%card.cardID)
141.sum=0
142.pwd=''
143.whilepwd!
=card.cardPWD:
144.pwd=input('\n请输入密码:
')
145.sum+=1
146.ifpwd==card.cardPWD:
147.break
148.else:
149.print('密码错误次数%d,请重新输入密码'%sum)
150.ifsum>2:
151.print('\n密码错误次数过多,退出系统')
152.exit()
153.print('\n密码正确,进入系统')
154.divide()
155.XiaoBaiATM=ATM()
156.menu(XiaoBaiATM,card)
157.defstart():
158.divide()
159.print("\t\t欢迎使用小白白ATM")
160.divide()
161.init()
162.createCard()
163.defmenu(XiaoBaiATM,card):
164.options={1:
'查询账户信息',2:
'存款',3:
'取款',4:
'修改密码',5:
'退卡'}
165.forainoptions.items():
166.print(a[0],a[1])
167.choice=input('\n请选择:
')
168.ifint(choice)==1:
169.XiaoBaiATM.query(card)
170.menu(XiaoBaiATM,card)
171.elifint(choice)==2:
172.XiaoBaiATM.deposite(card)
173.menu(XiaoBaiATM,card)
174.elifint(choice)==3:
175.XiaoBaiATM.withdraw(card)
176.menu(XiaoBaiATM,card)
177.elifint(choice)==4:
178.XiaoBaiATM.modify(card)
179.menu(XiaoBaiATM,card)
180.elifint(choice)==5:
181.XiaoBaiATM.refundCard(card)
182.else:
183.print('输入有误')
184.menu(XiaoBaiATM,card)
185.print()
186.defmain():
187.start()
188.if__name__=="__main__":
189.main()
4代码分析
首先执行第X行,进行输入。
然后在执行X行时跳转到第X行,运行第一个函数…
然后运行第X行,到第X行时跳转到第X行执行第二个函数…
接下来执行第X行…
参考资料
[1]xxxx(参考资料格式:
文章题目+点号+空格+网址+英文冒号+空格+网址)
[2]xxxx
辽宁工程技术大学安全科学与工程学院
2015/2016学年第二学期综合训练报告评分表
综合训练题目:
所在班级:
项目内容
满分
实评
能
力
水
平
能熟练应用所学知识,有一定查阅文献及运用文献资料能力
10
理论依据充分,数据准确,公式推导正确
10
能应用计算机软件进行编程、资料搜集、排版、制图等
10
能体现创造性思维,或有独特见解
10
成
果
质
量
模型正确、合理,各项技术指标符合要求。
15
摘要叙述简练完整,假设合理、问题分析正确、用语准确、结论严谨合理;问题处理科学、条理分明、语言流畅、结构严谨、版面清晰
25
报告主要部分齐全、合理,符号统一、编号齐全。
格式、绘图、表格、插图等规范准确,符合报告要求
15
正文字数不少于2000字,不超过15000字
5
总分
100
小组成员:
指导教师评语:
指导教师签名:
年月日
(注:
1.此页附在综合训练报告之后;2.综合成绩按百分比计算)