04-注册登录系统_类实现

  • 阅读: 743
  • 更新: 2022-06-11

难度:

1. 题目描述

2. 关键点

  • 字符串操作
  • json 与 dict 转换
  • class 类概念

3. 代码实现

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import os
import json

db = './db.json'


class XiTong():
    def __init__(self):
        """初始读取密码文件"""
        self.data = self.get_db()

    def save_db(self):
        """保存账号密码"""
        if not self.data:
            return
        with open(db, 'w') as f:
            f.write(json.dumps(self.data))

    def get_db(self):
        """读取账号密码"""
        if not os.path.isfile(db):
            with open(db, 'w') as f:
                f.write('')
            # os.mknod(db)
        with open(db) as f:
            data = f.read()
            if data:
                data = json.loads(data)
            else:
                data = {}
        return data

    def login(self, username, password):
        """登录"""
        if username not in self.data:
            print('账号尚未注册,请重新输入')
            return False
        if password != self.data[username]:
            print('账号不正确,请重新输入')
            return False
        print('登录成功')
        return True

    def register(self, username, password):
        """注册"""
        if self.check_username(username) and self.check_password(password):
            self.data[username] = password
            print('注册成功')
            return True
        return False

    def exit(self):
        """退出"""
        print('欢迎下次光临')

    def check_username(self, username):
        """检测用户名
        1. 长度检测
        2. 手机号必须 1 开头
        3. 组成检测
        """
        if len(username) != 11:
            print('长度不对,请输入正确的11位手机号')
            return False
        if username[0] != '1':
            print('只能1开头,请输入正确的11位手机号')
            return False
        # for c in username[1:]:
        #     if c not in range(10):
        #         print('非数字,请输入正确的11位手机号')
        #         break
        if not username.isdigit():
            print('非数字,请输入正确的11位手机号')
            return False
        return True

    def check_password(self, password):
        """检测密码
        1. 长度检测
        2. 组成检测
        """
        if not (6 <= len(password) <= 12):
            print('密码长度必须在 6~12 之间')
            return False
        if not password.isalnum():
            print('密码只能是数字或字母')
            return False
        return True

    def run(self):
        help_text = [
            '1. 我要注册',
            '2. 我要登录',
            '3. 我要退出',
        ]
        while True:
            action = input('{}\n请输入序号选择你需要的操作:'.format('\n'.join(help_text)))
            action = int(action)
            if action == 1:
                while True:
                    username = input('请输入手机号:')
                    password = input('请输入密码:')
                    res = self.register(username, password)
                    if res is True:
                        break
            elif action == 2:
                while True:
                    username = input('请输入手机号:')
                    password = input('请输入密码:')
                    res = self.login(username, password)
                    if res is True:
                        break
            elif action == 3:
                self.exit()
                break
        self.save_db()


if __name__ == '__main__':
    xt = XiTong()
    xt.run()

4. 运行示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
1. 我要注册
2. 我要登录
3. 我要退出
请输入序号选择你需要的操作:1
请输入手机号:18101052222
请输入密码:python123
注册成功
1. 我要注册
2. 我要登录
3. 我要退出
请输入序号选择你需要的操作:2
请输入手机号:18101052222
请输入密码:python-abc
账号不正确,请重新输入
请输入手机号:18101052222
请输入密码:python123
登录成功
1. 我要注册
2. 我要登录
3. 我要退出
请输入序号选择你需要的操作:3
欢迎下次光临

5. 进阶思考

  1. 添加其它功能,比如查询注册人数
  2. 添加其它信息,比如邮箱、姓名等等
  3. 密码加密保存到文件

=== 全文完 ===


欢迎加入QQ群:855013471

京公网安备 11011302003970号 京ICP备2022012301号-1