Python实现HIT软件学院Java第一次实验(模拟ATM过程)
2012-01-23 22:36
1091 查看
在python学的半入门不入门的时候,决定写个东西把python的最基本的东西巩固一下。python也是一个既支持OO又支持面向过程结构化编程的脚本语言,前者思想类似Java,后者思想类似C,因此比较容易上手,上手后你会发现python确实非常强大,也非常有用。
记得第一次有想学python是刚去lab时,当时第一个任务是从网页上把数据扒下来。当时cliff强烈建议我用python实现从网页上获取数据,但是当时确实一点python的基础都没有,我还是用Java的网络编程的相关内容+Java的正则表达式实现了数据的获取。后来那个Web Service的测试对方给的测试脚本也是用python写的,当时因为不懂python受尽了同僚师兄的鄙视,所以趁着有时间赶紧补补python,有个基础就行。
个人感觉python让我眼前一亮的特点就是变量从来不用声明,其实严格来说也不叫不用声明,就是赋值时即为声明,而且赋值时不用显示说明变量是什么类型。而且,python里面代码组不用“{ }”,而是靠严格的缩进来判断代码组。注意这个缩进是非常严格的,可能因为你的代码多了一个空格编译就报错,python的这个特点也建议我们们在写python代码时最好不用Tab键而多敲几次空格键,因为不同的文本编辑器对Tab等于几个空格的设置是不一样的。
在写这个东西时,感触很大的就是不要因为python声明变量时不显示指明类型而在你的代码中就可以随意混淆类型,普通整形永远都是普通整形,字符串类型永远是字符串类型,必要的时候必须转换一下,下面上代码,有bug欢迎指正:
记得第一次有想学python是刚去lab时,当时第一个任务是从网页上把数据扒下来。当时cliff强烈建议我用python实现从网页上获取数据,但是当时确实一点python的基础都没有,我还是用Java的网络编程的相关内容+Java的正则表达式实现了数据的获取。后来那个Web Service的测试对方给的测试脚本也是用python写的,当时因为不懂python受尽了同僚师兄的鄙视,所以趁着有时间赶紧补补python,有个基础就行。
个人感觉python让我眼前一亮的特点就是变量从来不用声明,其实严格来说也不叫不用声明,就是赋值时即为声明,而且赋值时不用显示说明变量是什么类型。而且,python里面代码组不用“{ }”,而是靠严格的缩进来判断代码组。注意这个缩进是非常严格的,可能因为你的代码多了一个空格编译就报错,python的这个特点也建议我们们在写python代码时最好不用Tab键而多敲几次空格键,因为不同的文本编辑器对Tab等于几个空格的设置是不一样的。
在写这个东西时,感触很大的就是不要因为python声明变量时不显示指明类型而在你的代码中就可以随意混淆类型,普通整形永远都是普通整形,字符串类型永远是字符串类型,必要的时候必须转换一下,下面上代码,有bug欢迎指正:
# -*- coding: cp936 -*- class Person(object) : '''用户和管理员的基类''' def __init__(self,ID,password,startDate) : self.ID = ID self.oldPassword = self.password = password self.startDate = startDate #self.shouldSave = False def changePassword(self) : '''修改密码''' while True : old_password = raw_input("请输入旧密码:") if old_password == self.password : break else : print "旧密码不正确!" return None if self.checkPassword() == True : print "密码修改成功!" return None def checkPassword(self) : while True : while True : new_password = raw_input("请输入新密码:") if len(new_password) < 6 : print "密码长度至少为6位,请重新输入!" continue flag = False for c in new_password : if c != new_password[0] : flag = True break if not flag : print "密码不能各位全相同,请重新输入!" else : break new_password_again = raw_input("请再次输入新密码:") if new_password == new_password_again : self.password = new_password return True else : print "两次输入密码不一致,请重新输入新密码!"
# -*- coding: cp936 -*- import sys,time from PersonPackage import Person class Admin(Person) : '''管理员类,继承自Person类''' def __init__(self,ID,password,startDate) : Person.__init__(self,ID,password,startDate) def inquireHq(self) : info_file = open(r"D:/UserInfo.txt","r+") find_flag = False for eachLine in info_file : info_list = eachLine.strip().split("#") if len(info_list) < 5 : # 每次写入文件都会加上换行符,因此最后一行是一个回车,加一个判断判断是不是回车即可 break if info_list[3] == "HQ" : find_flag = True print "用户ID:" + info_list[0] + "\t", print "账户余额:" + info_list[2] + "\t", print "开户时间:" + info_list[4] if find_flag == False : print "没有找到任何用户的信息!" info_file.close() def createNewUser(self) : newID = raw_input("请输入新账号:") while True : while True : new_password = raw_input("请输入新密码:") if len(new_password) < 6 : print "密码长度至少为6位,请重新输入!" continue flag = False for c in new_password : if c != new_password[0] : flag = True break if not flag : print "密码不能各位全相同,请重新输入!" else : break new_password_again = raw_input("请再次输入新密码:") if new_password == new_password_again : newPassword = new_password break else : print "两次输入密码不一致,请重新输入新密码!" while True : newRemains = int(raw_input("请输入初始金额:")) if newRemains % 100 != 0 : print "账户金额必须为100的整数倍!" else : break newInfo = newID + "#" + new_password + "#" + str(newRemains) + "#" + "HQ" + "#" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + "\n" info_file = info_file = open(r"D:/UserInfo.txt","a") info_file.write(newInfo) info_file.close() print "新账户创建完毕!" def inquireATMRemains(self) : info_file = open(r"D:/UserInfo.txt","r+") Sum = 0 for eachLine in info_file : info_list = eachLine.strip().split("#") Sum += int(info_list[2]) print "当前ATM的余额为" + str(Sum) + "元." info_file.close() def savePersonFile(self) : '''把个人信息保存到信息文件中''' #if shouldSave == True : info_file = open(r"D://UserInfo.txt","r+") info_file_all = [] for eachLine in info_file : info_list = eachLine.strip().split("#") if self.ID == info_list[0] and self.oldPassword == info_list[1] : newInfo = self.ID + "#" + self.password + "#" + "0" + "#" + "ADMIN" + "#" + self.startDate info_file_all.append(newInfo+"\n") else : info_file_all.append(eachLine) info_file.close() info_file = open(r"D://UserInfo.txt","w") for eachItem in info_file_all : info_file.write(eachItem) info_file.close()
# -*- coding: cp936 -*- import time from PersonPackage import Person class User(Person) : '''活期用户类,继承自Person类''' def __init__(self,ID,password,remains,startDate) : Person.__init__(self,ID,password,startDate) self.remains = int(remains) #self.startDate = startDate def inquireRemains(self) : '''当前用户查询余额''' print "您的余额为"+str(self.remains)+"元~" def putMoney(self) : '''存款''' while True : toPut = int(raw_input("请输入您的存款金额:")) if (toPut % 100) != 0 : print "每次存款金额必须为100的整数倍!" continue if (toPut > 2000) : print "每次存款的金额最多为2000元!" continue break self.remains += toPut self.shouldSave = True record = self.ID + "#" + str(toPut) + "#" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + "\n" record_file = open(r"D://Record.txt","a") record_file.write(record) record_file.close() print "存款成功!" def getMoney(self) : '''取款''' while True : toGet = int(raw_input("请输入您的取款金额:")) if toGet > self.remains : print "您的账户余额不足!" continue if (toGet % 100) != 0 : print "每次取款金额必须为100的整数倍!" continue if (toGet > 2000) : print "每次取款的金额最多为2000元!" continue break self.remains -= toGet self.shouldSave = True record = self.ID + "#" + "-" + str(toGet) + "#" + time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + "\n" record_file = open(r"D://Record.txt","a") record_file.write(record) record_file.close() print "取款成功!" def inquireDealingDetails(self) : '''查询交易明细''' record_file = open(r"D://Record.txt","r+") find_flag = False for eachLine in record_file : record_list = eachLine.strip().split("#") if self.ID == record_list[0] : find_flag = True if int(record_list[1]) < 0 : print "支出",abs(int(record_list[1])),"元", print "\t日期:"+record_list[2] else : print "存入",int(record_list[1]),"元", print "\t日期:"+record_list[2] if find_flag == False : print "未找到与您相关的交易记录!" record_file.close() def savePersonFile(self) : '''把个人信息保存到信息文件中''' #if shouldSave == True : #self.displayInfo() info_file = open(r"D://UserInfo.txt","r+") info_file_all = [] for eachLine in info_file : info_list = eachLine.strip().split("#") if self.ID == info_list[0] and self.oldPassword == info_list[1] : newInfo = self.ID + "#" + self.password + "#" + str(self.remains) + "#" + "HQ" + "#" + self.startDate info_file_all.append(newInfo+"\n") else : info_file_all.append(eachLine) info_file.close() info_file = open(r"D://UserInfo.txt","w") for eachItem in info_file_all : info_file.write(eachItem) info_file.close() def displayInfo(self) : print "-"*80 print "self.ID",self.ID print "self.password",self.password print "self.remains",self.remains print "self.startDate",self.startDate print "-"*80
# -*- coding: cp936 -*- '''这个模块作为主模块执行''' import sys from AdminPackage import Admin from UserPackage import User while True: print "请输入您的卡号和密码,如果账号和密码其一为\"0000\",则程序退出~" temp_ID = raw_input("请输入卡号:") if temp_ID == "0000": sys.exit() temp_password = raw_input("请输入密码:") if temp_password == "0000": sys.exit() fp = open(r"D:/UserInfo.txt","r+") find_flag = 0 #初值为0 for eachLine in fp : info_list = eachLine.strip().split("#") if temp_ID == info_list[0] and temp_password == info_list[1]: if info_list[3] == "HQ": find_flag = 1 #说明找到的是活期用户 currentUser = User(info_list[0],info_list[1],info_list[2],info_list[4]) fp.close() break elif info_list[3] == "ADMIN": find_flag = 2 #说明找到的是管理员 currentUser = Admin(info_list[0],info_list[1],info_list[4]) fp.close() break if find_flag == 0: fp.close() print "*" * 50 print "未找到您的信息,请重新输入~" print "*" * 50 else: break while True : if find_flag == 1: print "欢迎你,用户!" print "*" * 20 print "1.查询余额" print "2.存款" print "3.取款" print "4.查询存取款明细" print "5.修改密码" print "0.退出" print "*" * 20 choice = raw_input("请输入您的选择:") if choice == "1" : currentUser.inquireRemains() elif choice == "2" : currentUser.putMoney() currentUser.savePersonFile() elif choice == "3" : currentUser.getMoney() currentUser.savePersonFile() elif choice == "4" : currentUser.inquireDealingDetails() elif choice == "5" : currentUser.changePassword() currentUser.savePersonFile() else : currentUser.savePersonFile() break elif find_flag == 2: print "欢迎你,管理员!" print "*" * 20 print "1.查询所有活期用户信息" print "2.创建活期账号(开新卡)" print "3.查询当前ATM资金余额" print "4.修改密码" print "0.退出" print "*" * 20 choice = raw_input("请输入您的选择:") if choice == "1" : currentUser.inquireHq() elif choice == "2" : currentUser.createNewUser() elif choice == "3" : currentUser.inquireATMRemains() elif choice == "4" : currentUser.changePassword() currentUser.savePersonFile() else : currentUser.savePersonFile() break else : print "系统出现错误~~" sys.exit()
相关文章推荐
- 第一次尝试用python来编程实现“helloworld”,顺利成功,过程中遇到几个小问题
- c++第一次实验-4模拟ATM
- JAVA第一次实验 ——凯撒密码的实现
- 金融IT——模拟银行ATM系统Java实现
- python实现mapreduce(1)——模拟MR过程
- Java模拟ATM运行过程(第一版)
- 基于JAVA语言实现银行简单ATM应用,通过console输入输出的行式模拟
- 用Java实现的文件分割器(HIT软件学院Java第三次实验)
- 计算机网络实验,JAVA实现一个简单GBN协议,模拟引入数据包的丢失,验证协议的有效性
- Java实验一---模拟ATM
- Python 实现腾讯微博模拟登录 (附源码)
- JPype实现在python中调用JAVA的实例
- Java PHP Python实现短信验证码和国际短信群发功能
- (转)Java实现Web Service过程中处理SOAP Header的问题
- JAVA实验七 图形用户界面的设计与实现
- JAVA和PYTHON同时实现AES的加密解密操作---且生成的BASE62编码一致
- 利用Java异常机制实现模拟借书系统
- python实现数独游戏 java简单实现数独游戏
- python之模拟鼠标键盘动作具体实现
- java模拟登录qq网站,实现一键签到等等功能