项目1:登录接口

目录:

1、程序功能

2、程序流程图

3、程序思路

4、程序源代码

5、程序不足

 

1、程序功能

1.1 注册功能
    用户可进行注册,每个注册成功的用户会自动添加一个lock_flag,这个参数初始为0,每登录密码错误一次加1,
    当lock_flag=3时,锁定该用户。把用户名、密码与对应的lock_flag存于 userdata.txt 中。
1.2 登录功能
    用户在注册之后可进行登录
    情况1:登录名不存在。显示“找不到该用户,请重新输入”
    情况2:登录名与登录密码正确,则显示“登录成功!”,然后把用户lock_flag清零
    情况3:登录名正确,密码错误,显示“第 n 次密码输入错误,连续输入密码错误超过3次该用户将被锁定”(n =                lock_flag),同时该用户lock_flag+1
    情况4:若lock_flag已经等于3,则直接显示“抱歉,该用户已被锁定”
1.3 锁定功能

    登录的时候,先查询用户对应的lock_flag值,若已经等于3,则锁定用户,即使此时输入密码正确也不允许登录。

 

2、程序流程图

 

 

3、程序思路

3.1 注册功能
    新建一个 userdata.txt 文件,按“用户名,密码,lock_flag”的格式存储,一行即是一个用户信息
3.2 登录功能
    先把userdata.txt信息读入内存,然后查询是否有对应用户名存在,若无,则是情况1;
    若存在则先查询用户名对应 lock_flag 是否为3,为3则是情况4;
    若lock_flag小于3则继续查询对应密码与用户输入密码是否一致,若一致,则是情况2
    若密码不一致,则是情况3.
3.3 锁定功能
    准确来说,这是一个用来更新lock_flag的功能,把userdata.txt读入data列表中,查询对应的用户名与对应的lock_flag,

 

    更新lock_flag参数后,把整个data列表重新写入userdata.txt。

 

 

4、程序源代码

# Author:李捷豪
# Time:2018.3.25
# Version:Python3.6
# Tools :Pycharm 2017.3.2


# 注册函数
def sign_up():
    userdata = open("userdata.txt",'a+')
    username = input("请设定您的用户名:")
    password = input("请设定您的密码:")
    userdata.writelines(username+','+password+',0\n')       # 这里的0就是lock_flag
    userdata.close()
    print(username,password)
    print("恭喜你完成了注册!\n")


# 锁定函数(更新lock_flag函数)
def lock(username,lock_flag):
    f = open("userdata.txt","r")
    lines = f.readlines()                 # 先把数据文件用自读形式读入内存,存于 lines 列表中
    f.close()
    f_w = open("userdata.txt","w")        # 把数据文件用只写形式打开,这样子等一下写入时会先清空原文件再重新写入
    n = 0                                 # 索引变量
    for line in lines:                    # 查找出对应的用户名在lines列表中的索引
        dataline = line.split(",")
        if username == dataline[0]:
            n = lines.index(line)
            break
    name = dataline[0]
    password = dataline[1]
    flag = lock_flag
    new = name+","+password+","+str(flag)+"\n"
    lines[n] = new                         #把该元素更新
    for i in lines:
        f_w.writelines(i)                 #把lines列表重新写入userdata.txt文件中
    f_w.close()


# 登录验证 函数
def sign_in(name, password):
    userdata = []
    f = open("userdata.txt",'r')
    readlines = f.readlines()
    for userline in readlines:
        userdata = userline.split(",")
        username = userdata[0]
        userpassword = userdata[1]
        lock_flag = int(userdata[2].strip("\n"))
        if name == username:                          # 情况4:用户已被锁定
            if lock_flag >= 3:
                return [-1,lock_flag]
            if password == userpassword:              # 情况2:登录成功
                lock_flag = 0
                lock(name, lock_flag)
                return [1,lock_flag]
            elif password != userpassword:            # 情况3:密码输入错误
                lock_flag += 1
                lock(name,lock_flag)
                return [2,lock_flag]
    else:                                             # 情况1:找不到该用户
        return [0]
    f.close()


# 主程序
while True:
    print("程序选项如下")
    print("1.注册   2.登录   3.退出程序")
    i = input("请输入想做的事情对应的序号:")
    if i == '1':                                  # 程序选项1:注册
        sign_up()
    elif i == '2':                                # 程序选项2:登录
        username = input("请输入您的用户名:")
        password = input("请输入您的密码:")
        flag = sign_in(username, password)
        if flag[0] == 0:
            print("找不到该用户,请重新输入\n")
        elif flag[0] == 1:
            print("恭喜你,登录成功!\n")
        elif flag[0] == 2:
            print("第"+ str(flag[1])+"次密码输入错误,连续输入密码错误超过3次该用户将被锁定\n")
        elif flag[0] == -1:
            print("抱歉,该用户已被锁定\n")
    elif i == '3':                               # 程序选项3:退出程序
        print("已退出程序,谢谢\n")
        exit()
    else:
        print("输入错误,请重新输入\n")


github : https://github.com/better-king/sign_in-interface

5、程序不足

5.1 可注册同名用户
5.2 锁定功能因为是每一次都完全重新写全部信息,因此若数据量很大,则效率会很低
5.3 注册时没有让用户再次输入密码确定,存在用户设定密码时误输入的风险
5.4 没有制作GUI

 

 

 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值