您的位置:首页 > 编程语言 > Python开发

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欢迎指正:

# -*- 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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: