python模拟银行ATM程序设计.docx

上传人:b****8 文档编号:30285833 上传时间:2023-08-13 格式:DOCX 页数:14 大小:135.13KB
下载 相关 举报
python模拟银行ATM程序设计.docx_第1页
第1页 / 共14页
python模拟银行ATM程序设计.docx_第2页
第2页 / 共14页
python模拟银行ATM程序设计.docx_第3页
第3页 / 共14页
python模拟银行ATM程序设计.docx_第4页
第4页 / 共14页
python模拟银行ATM程序设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

python模拟银行ATM程序设计.docx

《python模拟银行ATM程序设计.docx》由会员分享,可在线阅读,更多相关《python模拟银行ATM程序设计.docx(14页珍藏版)》请在冰豆网上搜索。

python模拟银行ATM程序设计.docx

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.综合成绩按百分比计算)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1