Python练习项目——模拟ATM机登录系统

一、题目要求:

通过Python编程完成一个银行ATM机模拟系统,具备如下功能:

(1)登陆验证:用户输入用户名密码登陆,检测用户名是否存在以及用户名密码是否匹配;用户名密码各有三次输入机会,超过三次系统退出。
(2)菜单界面:登陆成功后显示功能操作界面,输入序号选择对应功能。
(3)用户注册:用户可以输入用户名和密码创建自己的账号,并输入电话号码等信息,如果用户名存在则让用户重新输入用户名。注册后免费赠送5000元余额。
(4)账户管理:用户可以随时查看自己的账户余额。用户可以输入其他账户用户名,实现转账功能;用户名必须存在。用户也可以模拟实现存取款功能。
(5)用户名和密码以及账户信息等必须永久保存。且基于命令行完成,不需要开发GUI界面。

二、实现过程:

1.连接MySQL数据库、建立数据表、给数据表中插入数据:

如果事先没有建立数据表,则需在程序中加上这一部分代码,但运行一次后需删除这部分内容,因为二次运行后会导致之前存放的数据丢失;如果数据表事先已经建立好,则不需再编写这部分内容

#coding=utf-8
import MySQLdb

conn = MySQLdb.connect(host='127.0.0.1',port=3306,user='root',passwd='971012',db='test',charset="utf8") #连接mysql数据库
cursor = conn.cursor() #获取游标来进行查询

##########创建数据表用来存放用户信息###########
sql = '''CREATE TABLE IF NOT EXISTS userinfoes (
         user  VARCHAR(20),
         password  VARCHAR(6),
         age VARCHAR(3),  
         sex VARCHAR(5),
         mobile VARCHAR(11),
         balance FLOAT(12,2))'''
cursor.execute(sql)
sql = '''INSERT INTO userinfoes(user,
         password,age,sex,mobile,balance)
         VALUES ('luu','123456','19','woman','12345678900',10000)'''
cursor.execute(sql)

2.实现登录验证

def login():
    ##########判断用户名##########    
    print u'请输入你的用户名:'
    k=3 #记录输错次数
    while k:
        global username
        username = raw_input()
        userinfoes = "SELECT * FROM userinfoes WHERE user='%s'"%username #查询该用户是否存在
        j = cursor.execute(userinfoes) #满足该条件的数据条数

        if username == '':
            print u'用户名不能为空!'
        elif j == 0:
            k-=1
            if k!=0:
                print u'用户名错误,请重新输入:'
            else:
                print u'你已输错三次!'
                conn.close()
                cursor.close()
                exit()
        else:
            break
        
    ##########判断密码##########
    print u'请输入你的密码:'
    k = 3
    while k:
        password = raw_input()
        userinfoes = "SELECT * FROM userinfoes WHERE user='%s' and password='%s'"%(username,password) #查询输入的密码是否与用户匹配
        j = cursor.execute(userinfoes)
        
        if password == '':
            print u'密码不能为空!'
        elif j == 0:
            k-=1
            if k!=0:
                print u'密码错误,请重新输入:'
            else:
                print u'你已输错三次!'
                conn.close()
                cursor.close()
                exit()
        else:
            print u'恭喜你,登录成功!'
            break


3.实现用户注册

##########注册##########
def enroll():
    print u'请输入用户名(长度<=20):' #用户名
    while 1:
        username = raw_input()
        userinfoes = "SELECT * FROM userinfoes WHERE user='%s'"%username #查询该用户是否存在
        j = cursor.execute(userinfoes) #满足此条件的数据条数
        if j==1:
            print u'该用户名已经存在,请重新输入!'
        elif username=='':
            print u'用户名不能为空!'
        else:
            break
        
    def judge():
        while(1):
            password = raw_input()
            if len(password)!=6:
                print u'长度不正确,请重新输入:'
            else:
                break
        return password    
                
    while 1:
        print u'请输入密码(长度=6):'
        p = judge()
        print u'请再次确认密码:'
        q = judge()
        if p!=q:
            print u'两次输入的密码不相等,请重新输入!'
        else:
            break
    
    print u'请输入你的年龄:'
    while 1:
        age = raw_input()
        if age=='':
            print u'年龄不能为空,请重新输入!'
        elif len(age)>3:
            print u'请输入有效年龄!'
        else:
            break
    
    print u'请输入你的性别(man/woman):'
    while 1:
        sex = raw_input()
        if sex!='man' and sex!='woman':
            print u'请输入正确信息!'
        else:
            break
    
    print u'请输入你的电话号码:'
    while 1:
        mobile = raw_input()
        j=0
        for i in mobile:
            if i<'0' or i>'9':
                j+=1
        if len(mobile)!=11 or j!=0:
            print u'请输入有效信息!'
        else:
            break
        
    sql = "INSERT INTO userinfoes(user,password,age,sex,mobile,balance)VALUES('%s','%s','%s','%s','%s','%f')" % (username,p,age,sex,mobile,5000.00)
    try:
        cursor.execute(sql)
        conn.commit()
        print u'注册成功,获得5000元余额!'
        judge1()
        
    except:
        conn.rollback()


4.系统退出(数据库用完后一定要记得断开数据库连接)


conn.close()
cursor.close()


5.主菜单界面


def Home_page():
    print u'''======欢迎使用蜗牛ATM无限制存取款系统======
====请输入你的选项,1:登录 2:注册 3:退出===
==========================================='''

##########主菜单##########
def judge1():
    Home_page()
    while 1:
        judge_1 = raw_input()
    
        if judge_1=='1': #登录
            login()
            judge2()
        elif judge_1 == '2': #注册
            enroll()
        elif judge_1=='3': #退出
            print u'感谢你的使用!'
            conn.close()
            cursor.close()
            exit()
        else:
            print u'请输入有效数字!'


6.登陆后副菜单界面(实现余额查询、转账、取款、存款等)


def Home_page_2():
    print u'''====================请输入你的选项=====================
==1:查询余额 2:转账 3:取款 4:存款 5:返回主菜单 6:退出==
======================================================='''
##########副菜单##########
def judge2():
    while 1:
        Home_page_2()
        judge_2 = raw_input()
        
        if judge_2=='1':#余额
            print u'你的余额为:%0.2f'%user_balance(username) 
            continue
        
        elif judge_2=='2': #转账
            print u'请输入对方用户名:'
            while 1:
                other_username = raw_input()
                userinfoes = "SELECT * FROM userinfoes WHERE user='%s'"%other_username #查询该用户是否存在
                j = cursor.execute(userinfoes) #满足该条件的数据条数
            
                if other_username == '':
                    print u'用户名不能为空!'
                elif j==0:
                    print u'用户名不存在,请输入有效用户名;'
                else:
                    print u'请输入转账金额:'
                    sum = float(raw_input())
                    M_balance = user_balance(username)
                    O_balance = user_balance(other_username)
                    if M_balance-sum >= 0:
                        sq1 = "UPDATE userinfoes SET balance=%0.2f WHERE user='%s'" % (M_balance-sum, username)
                        sq2 = "UPDATE userinfoes SET balance=%0.2f WHERE user='%s'" % (O_balance+sum, other_username)
                        try:
                            cursor.execute(sq1)
                            cursor.execute(sq2)
                            conn.commit()
                            print u'转账成功!'
                        except:
                            conn.rollback()
                            print u'转账失败'
                    else:
                        print u'转账失败,你余额不足!'
                break   
            continue
                    
        elif judge_2=='3': #取款
            print u'请输入你的取款金额:'
            sum = float(raw_input())
            M_balance = user_balance(username)
            if M_balance-sum >= 0:
                sq1 = "UPDATE userinfoes SET balance='%0.2f' WHERE user='%s'"%(M_balance-sum, username)
                try:
                    cursor.execute(sq1)
                    conn.commit()
                    print u'取款成功!'
                except:
                    conn.rollback()
            else:
                print u'你的余额不足!'
            continue
        
        elif judge_2=='4': #存款
            print u'请输入你的存款金额(金额<100,000,000.00):'
            sum = raw_input()
            if ',' in sum:
                sum = sum.replace(',','')
            sum = float(sum)
            sq1 = "UPDATE userinfoes SET balance=balance+'%0.2f' WHERE user='%s'"%(sum, username)
            try:
                cursor.execute(sq1)
                conn.commit()
                print u'存款成功!'
            except:
                conn.rollback()
                print u'存款失败!'
            continue
        
        elif judge_2=='5': #返回主菜单
            judge1()
            
        elif judge_2=='6': #退出
            print u'感谢你的使用!'
            conn.close()
            cursor.close()
            exit()
        else:
            print u'请输入有效数字!'
            continue
        break
##########余额###########
def user_balance(h):
    userinfoes = "SELECT * FROM userinfoes WHERE user='%s'"%h
    j = cursor.execute(userinfoes)
    k = cursor.fetchmany(j)
    for i in k:
        return i[5]


7.基本功能都已经实现,最后再调用主菜单就大功告成了!


judge1() 


三、运行结果部分截图

Python练习项目——模拟ATM机登录系统_第1张图片

Python练习项目——模拟ATM机登录系统_第2张图片




你可能感兴趣的:(mysql,python)