admin 管理员组文章数量: 887021
2023年12月19日发(作者:为什么float比long范围大)
第2次综合训练报告
题目:银行ATM模拟程序
目 录
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命名法,程序共189行(含空行),因为时间比较仓促,可能有些地方写的比较乱,有些地方命名也不规范。另外因为对文件的操作不熟练,在网上也没找到太多相关的资料,请多包涵。
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. = cardID
13. D = cardPWD
14. me = userName
15. e = balance
16.
17. class ATM:
18. def deposite(self,card):#存款
19. divide()
20. info = "存款n"
21. print((50))
22. cash=input("提示:存款金额为100的倍数,金额要求在100-10000之间n")
23. if int(cash)%100==0 and int(cash)>0 and int(cash)<=10000:
24. e+=int(cash)
25. info = "存款成功n"
26. print((50))
27. print("nThe balance of the card :%d"%e)
28. else:
29. info = "存款失败n"
30. print((50))
31. divide()
32.
33. def withdraw(self,card):#取款
6
34. divide()
35. info = "取款n"
36. print((50))
37. options={1:'100',2:'200',3:'500',4:'其他金额'}
38. for a in ():
39. print(a[0],a[1])
40. choice=input('请选择:')
41. if (int(choice)==1 or int(choice)==2) and e>=int(choice)*100:
42.
43. e-=int(choice)*100
44. info = "取款成功n"
45. print((50))
46. elif int(choice)==3 and e>=500:
47. e-=500
48. info = "取款成功n"
49. print((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 e>=int(cash):
55. e-=int(cash)
56. info = "取款成功n"
57. print((50))
58. else:
59. print('输入错误或卡内余额不足')
60. else:
61. print('输入错误或卡内余额不足')
62. else:
63. print('输入错误或卡内余额不足')
64.
65.
66. print("nnThe balance of the card :%d"%e)
67. divide()
7
68.
69. def modify(self,card):#修改密码
70. divide()
71. info = "修改密码n"
72. print((50))
73. inStr=input('请输入原密码:')
74. if inStr!=D:
75. info = "密码错误n"
76. print((50))
77. else:
78. newPWD1=input('请输入新密码:')
79. newPWD2=input('请再次输入新密码:')
80. if newPWD1 == newPWD2:
81. D=newPWD1
82. info = "n密码修改成功,请牢记你的新密码n"
83. print((50))
84. else:
85. info = "n密码不一致n"
86. print((50))
87. divide()
88.
89. def query(self,card):#查询
90. divide()
91. info = "查询成功n"
92. print((50))
93. print('银行卡信息'.center(50))
94. print('%-10s%-10s%-10s%-10s'%('卡号','密码','姓名','余额'))
95. print('%-11s%-11s%-11s%-11s'%(str(),D,m
96. e,str(e)))
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:','w')
107. info='''
108. 1001 123456 张大白 1000
109. 1002 123456 张二白 2000
110. 1003 123456 张三白 3000'''
111. (info)
112. ()
113. s=open('D:','r')
114. print('银行卡信息'.center(50))
115. print('%-10s%-10s%-10s%-10s'%('卡号','密码','姓名','余额'))
116. for line in nes():
117. for i in range(0,4):
118. print('%-11s'%()[i],end ='')
119. if i==3:
120. print()
121.
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 你插入了银行卡%sn'%)
141. sum = 0
142. pwd = ''
143. while pwd!=D:
144. pwd=input('n请输入密码:')
145. sum+=1
146. if pwd == D:
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("tt欢迎使用小白白ATM")
160. divide()
161. init()
162. createCard()
163. def menu(XiaoBaiATM,card):
164. options={1:'查询账户信息',2:'存款',3:'取款',4:'修改密码',5:'退卡'}
165. for a in ():
166. print(a[0],a[1])
167. choice = input('n请选择:')
168. if int(choice) == 1:
169. (card)
10
170. menu(XiaoBaiATM,card)
171. elif int(choice) == 2:
172. te(card)
173. menu(XiaoBaiATM,card)
174. elif int(choice) == 3:
175. aw(card)
176. menu(XiaoBaiATM,card)
177. elif int(choice) == 4:
178. (card)
179. menu(XiaoBaiATM,card)
180. elif int(choice) == 5:
181. Card(card)
182. else:
183. print('输入有误')
184. menu(XiaoBaiATM,card)
185. print()
186. def main():
187. start()
188. if __name__ == "__main__":
189. 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
版权声明:本文标题:Python课程设计2-Python程序设计与算法基础教程(第2版)-江红-清华大学 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1702973341h438034.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论