您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页python模拟银行ATM程序设计

python模拟银行ATM程序设计

来源:爱玩科技网


第2次综合训练报告

题目:银行ATM模拟程序

*

*****

专 业:安全工程 班 级:通风15-1班 指导教师:***

2016 年 5 月 9 日

目 录

1 摘要................................................................................................................................. 1 2.设计思路.......................................................................................................................... 1 3.源程序.............................................................................................................................. 6 4.代码分析.......................................................................................................................... 2 参考资料............................................................................................................................. 3

银行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命名法,程序共1行(含空行),因为时间比较仓促,可能有些地方写的比较乱,有些地方命名也不规范。另外因为对文件的操作不熟练,在网上也没找到太多相关的资料,请多包涵。

1

图1

2

图2

3

图3

4

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()函数退出程序

5

3 源程序

1. #!/usr/bin/python 2. # -*- coding: utf-8 -*-

3. #author:张也白 PythonVersion:3.4 4. import os 5.

6. class DepositCard: 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. class ATM:

18. def deposite(self,card):#存款 19. divide() 20. info = \"存款\\n\" 21. print(info.center(50))

22. cash=input(\"提示:存款金额为100的倍数,金额要求在100-10000之间\\n\") 23. if int(cash)%100==0 and int(cash)>0 and int(cash)<=10000: 24. card.balance+=int(cash) 25. info = \"存款成功\\n\" 26. print(info.center(50))

27. print(\"\\nThe balance of the card :%d\"%card.balance) 28. else:

29. info = \"存款失败\\n\" 30. print(info.center(50)) 31. divide() 32.

33. def withdraw(self,card):#取款

6

34. divide() 35. info = \"取款\\n\" 36. print(info.center(50))

37. options={1:'100',2:'200',3:'500',4:'其他金额'} 38. for a in options.items(): 39. print(a[0],a[1]) 40. choice=input('请选择:')

41. if (int(choice)==1 or int(choice)==2) and card.balance>=int(choice)*100: 42.

43. card.balance-=int(choice)*100 44. info = \"取款成功\\n\" 45. print(info.center(50))

46. elif int(choice)==3 and card.balance>=500: 47. card.balance-=500 48. info = \"取款成功\\n\" 49. print(info.center(50)) 50. elif int(choice)==4:

51. cash=input(\"\\n提示:取款金额为100的倍数,且总额不超过5000元\\n请 52.输入你要取的金额:\")

53. if int(cash)>=100 and int(cash)<=5000:

54. if int(cash)%100==0 and card.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('输入错误或卡内余额不足') . 65.

66. print(\"\\n\\nThe balance of the card :%d\"%card.balance) 67. divide()

7

68.

69. def modify(self,card):#修改密码 70. divide()

71. info = \"修改密码\\n\" 72. print(info.center(50)) 73. inStr=input('请输入原密码:') 74. if inStr!=card.cardPWD: 75. info = \"密码错误\\n\" 76. print(info.center(50)) 77. else:

78. newPWD1=input('请输入新密码:') 79. newPWD2=input('请再次输入新密码:') 80. if newPWD1 == 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.

. def query(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. def refundCard(self,card):#退卡 99. divide()

100. print('(假装把卡吐出来)')

101. print('谢谢使用,请收好您的卡片')

8

102. divide() 103. def divide():

104. print(\"\\n--------------------------------------------------\\n\") 105. def init():

106. f=open('D:\\\\a.txt','w') 107. info='''\\

108. 1001 123456 张大白 1000 109. 1002 123456 张二白 2000 110. 1003 123456 张三白 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. for line in s.readlines(): 117. for i in range(0,4):

118. print('%-11s'%line.split()[i],end ='') 119. if i==3: 120. print() 121. s.close 122. divide() 123. return 124. def createCard():

125. choice=input('请选择一张银行卡(1~3):'); 126. if int(choice) == 1:

127. newcard = DepositCard(1001,'123456','张大白',1000) 128. login(newcard) 129. elif int(choice) == 2:

130. newcard = DepositCard(1002,'123456','张二白',2000) 131. login(newcard) 132. elif int(choice) == 3:

133. newcard = DepositCard(1003,'123456','张三白',3000) 134. login(newcard) 135. else:

9

136. print('输入有误,退出系统') 137. exit() 138. def login(card): 139. divide()

140. print('\\n 你插入了银行卡%s\\n'%card.cardID) 141. sum = 0 142. pwd = ''

143. while pwd!=card.cardPWD: 144. pwd=input('\\n请输入密码:') 145. sum+=1

146. if pwd == card.cardPWD: 147. break 148. else:

149. print('密码错误次数%d,请重新输入密码'%sum) 150. if sum > 2:

151. print('\\n密码错误次数过多,退出系统') 152. exit()

153. print('\\n密码正确,进入系统') 154. divide()

155. XiaoBaiATM = ATM() 156. menu(XiaoBaiATM,card) 157. def start(): 158. divide()

159. print(\"\\欢迎使用小白白ATM\") 160. divide() 161. init() 162. createCard()

163. def menu(XiaoBaiATM,card):

1. options={1:'查询账户信息',2:'存款',3:'取款',4:'修改密码',5:'退卡'} 165. for a in options.items(): 166. print(a[0],a[1]) 167. choice = input('\\n请选择:') 168. if int(choice) == 1:

169. XiaoBaiATM.query(card)

10

170. menu(XiaoBaiATM,card) 171. elif int(choice) == 2:

172. XiaoBaiATM.deposite(card) 173. menu(XiaoBaiATM,card) 174. elif int(choice) == 3:

175. XiaoBaiATM.withdraw(card) 176. menu(XiaoBaiATM,card) 177. elif int(choice) == 4:

178. XiaoBaiATM.modify(card) 179. menu(XiaoBaiATM,card) 180. elif int(choice) == 5:

181. XiaoBaiATM.refundCard(card) 182. else:

183. print('输入有误') 184. menu(XiaoBaiATM,card) 185. print() 186. def main(): 187. start()

188. if __name__ == \"__main__\": 1. main()

4代码分析

首先执行第X行,进行输入。然后在执行X行时跳转到第X行,运行第一个函数… 然后运行第X行,到第X行时跳转到第X行执行第二个函数… 接下来执行第X行…

参考资料

[1] xxxx(参考资料格式:文章题目+点号+空格+网址+英文冒号+空格+网址) [2] xxxx

11

辽宁工程技术大学 安全科学与工程学院 2015/2016学年 第二学期 综合训练 报告评分表

综合训练题目: 所在班级: 项目内容 满分 10 10 10 10 15 实评 能 能熟练应用所学知识,有一定查阅文献及运用文献资料能力 力 理论依据充分,数据准确,公式推导正确 水 能应用计算机软件进行编程、资料搜集、排版、制图等 平 能体现创造性思维,或有独特见解 模型正确、合理,各项技术指标符合要求。 摘要叙述简练完整,假设合理、问题分析正确、用语准确、成 果 质 量 结论严谨合理;问题处理科学、条理分明、语言流畅、结构严谨、版面清晰 报告主要部分齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合报告要求 正文字数不少于2000字,不超过15000字 总 分 25 15 5 100 小 组 成 员: 指导教师评语: 指导教师签名: 年 月 日 (注:1.此页附在综合训练报告之后;2.综合成绩按百分比计算)

12

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务