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


本文标签: 密码 输入 实现 合理 存款