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. Layui+dtree实现左边分类列表,右边数据列表

    效果如下 代码实现 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  2. 2022-06-15:薯队长最近在参加了一个活动,主办方提供了N个礼物以供挑选, 每个礼物有一个价值,范围在0 ~ 10^9之间, 薯队长可以从中挑选k个礼物。 返回:其中价值最接近的两件礼物之间相差

    2022-06-15:薯队长最近在参加了一个活动,主办方提供了N个礼物以供挑选, 每个礼物有一个价值,范围在0 ~ 10^9之间, 薯队长可以从中挑选k个礼物. 返回:其中价值最接近的两件礼物之间相差 ...

  3. 2021-07-09:股票问题6。给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付

    2021-07-09:股票问题6.给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :整数 fee 代表了交易股票的手续费用.你可以无限次地完成交易,但是你每笔交易都需要付 ...

  4. 2021-07-02:正则表达式匹配。给定一个字符串s和一个匹配串p。“.“匹配单个字符。“*“匹配左边元素的多个字符。判断p是否匹配s。比如s=“ab“,p=“a.“,返回true。比如s=“ab“

    2021-07-02:正则表达式匹配.给定一个字符串s和一个匹配串p."."匹配单个字符.""匹配左边元素的多个字符.判断p是否匹配s.比如s="ab ...

  5. 2021-09-20:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O

    2021-09-20:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度.不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O ...

  6. Visual Studio2019打开电脑摄像头

    #include<iostream> //opencv头文件 #include<opencv2/opencv.hpp> using namespace std; using n ...

  7. WPF入门教程系列二十六——DataGrid使用示例(3)

    WPF入门教程系列目录 WPF入门教程系列二--Application介绍 WPF入门教程系列三--Application介绍(续) WPF入门教程系列四--Dispatcher介绍 WPF入门教程系 ...

  8. Python进行大文件的备份

    Python进行大文件的备份的思路:每次仅从原文件中读取指定字符的内容后写入新文件,然后循环操作. def copy_big_file(): # 接收用户输入的文件名 old_file = input ...

  9. 前后端是怎么交互的呢?(Jvav版)

    一.什么是前端 在网上,我也去找了一些观点,其实都是应用层面的,什么使用一个地址,回车以后就能拿到 .html文件等等 说的也没问题,前端简单点说呢,就是负责展示和美化的页面,大部分在网上我们所看到的 ...

  10. C# 图片转PDF,PDF增加水印文字

    好久没写博客了,今天给大家分享一个图片转PDF的相关操作,也算是一次总结吧. 首先需要准备动态库itextsharp.dll,这个dll去网上下载,都可以下载到,C#对PDF的操作都是基于这个类库来实 ...