import os
import pandas as pd
def md5(string:str=''):
    import hashlib
    md5 = hashlib.md5()
    md5.update(string.encode('utf-8'))
    return md5.hexdigest()
# In [1]: def md5(string:str=''):^M
#    ...:     import hashlib^M
#    ...:     md5 = hashlib.md5()^M
#    ...:     md5.update(string.encode('utf-8'))^M
#    ...:     return md5.hexdigest()^M
#    ...: md5('Hello World')^M
# Out[1]: 'b10a8db164e0754105b7a99be72e3fe5'
class Admin():
    def init():
        if os.path.exists('admin.csv'):
            os.remove('admin.csv')
    def __init__(self,
        admin_username:str='',
        admin_name:str='',
        admin_idcard:str='',
        admin_telephone:str='',
        admin_email:str='',
        admin_job:str='',
        admin_banknum:str='',
        admin_password:str=''):
        self.admin_username = admin_username
        self.admin_password = admin_password
        df = pd.read_csv('admin.csv',dtype=str)
        admin_password = list(df[df['admin_username']==admin_username]['admin_password'])[0]
        if md5(self.admin_password) == admin_password:    
            self.admin_name = admin_name
            self.admin_idcard = admin_idcard
            self.admin_telephone = admin_telephone
            self.admin_email = admin_email
            self.admin_job = admin_job
            self.admin_banknum = admin_banknum
        else:
            print('用户名或密码输入有误!')
            exit()
    def add_admin(self,
        admin_username:str='',
        admin_name:str='',
        admin_idcard:str='',
        admin_telephone:str='',
        admin_email:str='',
        admin_job:str='',
        admin_banknum:str='',
        admin_password:str=''):
        df = pd.read_csv('admin.csv',dtype=str)
        if admin_username not in list(df['admin_username']):
            dfi = pd.DataFrame({
                'admin_username':[admin_username],
                'admin_name':[admin_name],
                'admin_idcard':[admin_idcard],
                'admin_telephone':[admin_telephone],
                'admin_email':[admin_email],
                'admin_job':[admin_job],
                'admin_banknum':[admin_banknum],
                'admin_password':[md5(admin_password)]},
                dtype=str)
            df = pd.concat([df,dfi])
            df.to_csv('admin.csv',encoding='utf-8',index=None)
        else:
            input('账户已存在,回车取消添加。')
    def set_admin(self,column,value):
        df = pd.read_csv('admin.csv',dtype=str)
        index = df.index[df['admin_username']==self.admin_username]
        df.loc[index,[column]] = value
        df.to_csv('admin.csv',encoding='utf-8',index=None)
    def del_admin(self):
        df = pd.read_csv('admin.csv',dtype=str)
        index = df.index[df['admin_username']!=self.admin_username]
        df = df.loc[index,:]
        df.to_csv('admin.csv',encoding='utf-8',index=None)
    def cat_admin(self):
        df = pd.read_csv('admin.csv',dtype=str)
        df = df[df['admin_username'] == self.admin_username]
        print(df)
def test():
    admin = Admin(admin_username='0000',admin_password='123456')
    admin.cat_admin()
    admin.set_admin('admin_name','毛麟')
    admin.add_admin(admin_username='0001',admin_password='123456')
    admin = Admin(admin_username='0002',admin_password='123456')
    admin.del_admin()
def admin_login():
    print('欢迎进入毛子哥银行管理员系统登录页面:')
    for i in range(3):
        admin_username = input('请输入管理员登录账户:')
        admin_password = input('请输入管理员登录密码:')
        df = pd.read_csv('admin.csv',encoding='utf-8',dtype=str)
        password = list(df[df['admin_username']==admin_username]['admin_password'])[0]
        if md5(admin_password) == password:
            admin = Admin(admin_username=admin_username,admin_password=admin_password)
            os.system('cls')
            return admin
        else:
            os.system('cls')
            print('哦豁,密码输错了进不去,难受!!!')
            continue
    os.system('cls')
    print('密码这种东西都会忘,干脆把名字也一起忘了吧。')
    exit()
def admin_main():
    if not os.path.exists('admin.csv'):
        df = pd.DataFrame({
            'admin_username':['0000'],
            'admin_name':[''],
            'admin_idcard':[''],
            'admin_telephone':[''],
            'admin_email':[''],
            'admin_job':[''],
            'admin_banknum':[''],
            'admin_password':[md5('123456')]},
            dtype=str)
        df.to_csv('admin.csv',encoding='utf-8',index=None)
    admin = admin_login()
    while True:
        os.system('cls')
        print('''欢迎进入毛子哥银行管理员系统:
本系统提供以下功能:
    1.添加用户;2.查看用户;3.修改用户;
    4.切换用户;5.删除用户;6.退出系统。''')
        menu = input('请输入你想要操作的功能编号:')
        if menu == '1':
            os.system('cls')
            print('欢迎使用毛子哥银行管理员系统添加用户功能:')
            admin_username = input('请输入登陆账号:')
            admin_password = input('请输入登录密码:')
            admin.add_admin(admin_username=admin_username,admin_password=admin_password)
        elif menu == '2':
            os.system('cls')
            print('欢迎使用毛子哥银行管理员系统查看用户功能:')
            admin.cat_admin()
            input('回车取消查看。')
        elif menu == '3':
            os.system('cls')
            print('欢迎使用毛子哥银行管理员系统修改用户功能:')
            column = input('请输入当前用户需要修改的字段名字:')
            value = input('请输入当前用户需要修改的字段数据:')
            admin.set_admin(column,value)
        elif menu == '4':
            os.system('cls')
            condition = input('即将切换毛子哥银行管理员系统账户(y/n):')
            if condition == 'y':
                admin = admin_login()
        elif menu == '5':
            os.system('cls')
            condition = input('即将删除毛子哥银行管理员系统账户(y/n):')
            if condition == 'y':
                admin.del_admin()
                continue
        elif menu == '6':
            os.system('cls')
            condition = input('即将离开毛子哥银行管理员系统(y/n):')
            break
def main():
    admin_main()
if __name__ == '__main__':
    main()

基于md5加密的模拟管理员登录系统的更多相关文章

  1. Spring-Security (学习记录五)--配置登录时,密码采用md5加密,以及获取登录信息属性监听同步自己想要的登录信息

    目录 1. PasswordEncoder 采用密码加密 2. 获取当前的用户信息 1. PasswordEncoder 采用密码加密 使用前面的例子.可以看出我们数据库密码是采用明文的,我们在登录的 ...

  2. 基于Java SE的模拟双色球彩票系统

    1.双色球规则: ①双色球分为红球和蓝球,红球选择的范围为1-33,而且红球选择6个数字:蓝球选择的范围为1-16,而且只能选择1个数字. ②选择方式为随机选择号码和手动输入选择号码. ③生成号码的顺 ...

  3. app逆向万能的md5加密hook破解入参方法(其他加密用通用方法原理差不多,小白推荐)

    一.原理 安卓开发调用md5加密时候都会调用到系统类java.security.MessageDigest 加密时候会会调用里面2个关键方法update以及digest 根据这个原理我们开始写代码吧 ...

  4. Python用户名密码登录系统(MD5加密并存入文件,三次输入错误将被锁定)及对字符串进行凯撒密码加解密操作

    # -*- coding: gb2312 -*- #用户名密码登录系统(MD5加密并存入文件)及对字符串进行凯撒密码加解密操作 #作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.co ...

  5. 模拟登录神器之PHP基于cURL实现自动模拟登录类

    一.构思 从Firefox浏览器拷贝cURL命令(初始页.提交.提交后) 自动分析curl形成模拟登录代码 默认参数:ssl/302/gzip 二.实现 接口 (一)根据curl信息执行并解析结果 p ...

  6. SpringSecurity 登录 - 以及Md5加密

    我们现在开放一个链接给其他系统,来访问我们的系统 http://localhost:8080/hulk-teller-web/haihui!init.jspa?loginId=teller01& ...

  7. WebUtils【MD5加密(基于MessageDigest)】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 用于MD5加密,主要场景是在调用登录接口时对密码进行MD5加密处理. 效果图 暂不需要 代码分析 基于Java.security.M ...

  8. 单点登录系统实现基于SpringBoot

    今天的干货有点湿,里面夹杂着我的泪水.可能也只有代码才能让我暂时的平静.通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClie ...

  9. 一个简单的后台与数据库交互的登录与注册[sql注入处理,以及MD5加密]

    一.工具: vs2013[因为我现在用的也是2013,版本随便你自己开心] sql2008[准备过久升级] 二.用到的语言: HTML+CSS+Jquery+Ajax+sqlserver HTML[相 ...

  10. ASP.NET会员注册登录模块(MD5加密,Parameters防止SQL注入,判断是否注册)

    MD5加密,Parameters防止SQL注入: protected void btnLog_Click(object sender, EventArgs e)     {         //获取验 ...

随机推荐

  1. #PowerBI 1分钟学会,利用format函数,自定义格式显示

    PowerBI是一款强大的数据分析和可视化工具,它可以帮助我们快速地创建各种报表和仪表盘,展示数据的洞察和价值. 在PowerBI中,有许多内置的函数可以帮助我们处理和转换数据,其中一个常用的函数就是 ...

  2. 文心一言 VS chatgpt (11)-- 算法导论2.3 7题 3.1 4~5题

    四.2 ^ (n+1)=O(2 ^ n)成立吗? 2^(2n)=O(2 ^ n)成立吗? 文心一言: chatgpt: 第一个式子不成立,第二个式子成立. 2 ^ (n+1) = O(2 ^ n) 该 ...

  3. 2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs[i]和strs[j]所有的字符随意去排列能组成回文串, 那么说(i,j)叫做一个互补

    2023-04-13:给定一个字符串数组strs,其中每个字符串都是小写字母组成的, 如果i < j,并且strs[i]和strs[j]所有的字符随意去排列能组成回文串, 那么说(i,j)叫做一 ...

  4. 解决:django.db.utils.OperationalError: no such table: auth_user

    解决:django.db.utils.OperationalError: no such table: auth_user 我们在创建Django项目的时候已经创建这个表了,表一般都保存在轻量级数据库 ...

  5. go语言中实现生产者-消费者模式有哪些方法呢

    1. 简介 本文将介绍在 Go 语言中实现生产者消费者模式的多种方法,并重点探讨了通道.条件变量的适用场景和优缺点.我们将深入讨论这些方法的特点,以帮助开发者根据应用程序需求选择最适合的方式.通过灵活 ...

  6. Java配置线程池

    一.Java配置线程池 1.线程池分类.其他 1.1.分类 IO密集型 和 CPU密集型 任务的特点不同,因此针对不同类型的任务,选择不同类型的线程池可以获得更好的性能表现. 1.1. IO密集型任务 ...

  7. Galaxy生物信息分析平台的数据集对象清理

    由于微信不允许外部链接,你需要点击文章尾部左下角的 "阅读原文",才能访问文中链接. Galaxy Project 是在云计算背景下诞生的一个生物信息学可视化分析开源项目.该项目由 ...

  8. STP生成树实验

    实验拓扑 实验需求 所有设备都运行STP 改变阻塞端口 实验步骤 1.所有设备都运行STP ,等到收敛完毕,观察状态 [SW1]stp mode stp [SW2]stp mode stp [SW3] ...

  9. 全球开源 AI 游戏开发挑战赛,只等你来!

    我们在之前的文章中 预告过 (*划重点,IP 属地法国):7 月初,我们将举办一次与 AI 游戏相关的黑客松活动,这是有史以来的首次开源游戏开发挑战赛,借助人工智能工具释放你的创造力,一起打破游戏开发 ...

  10. C#语言async, await 简单介绍与实例(入门级)

    本文介绍异步编程的基本思想和语法.在程序处理里,程序基本上有两种处理方式:同步和异步.对于有些新手,甚至认为"同步"是同时进行的意思,这显然是错误的. 同步的基本意思是:程序一个个 ...