在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欢迎指正:
# -*- 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()