编写登陆接口

                  用任意一种语言实现登陆接口

                                      作者:尹正杰

版权声明:

  本篇博客仅仅用于交流学习使用,对一些小功能的实现,来练习对代码的熟练度。同时,本篇博客允许转载,用于互相交流学习,转载必须在博客声明原链接!

 

 

练习一:

功能需求:

      1>.输入用户名密码;

      2>.认证成功后显示欢迎信息;

      3>.输错三次后锁定;

 

1 yinzhengjie
lock.info内容戳这里
 1 yinzhengjie 123
 2 bingan  123
 3 mazhixing   123
 4 xulei   123
 5 baoge   123
 6 xiaoran 123
 7 wuchuanfang 123
 8 luojiyin    123
 9 songjiang   123
10 wangsheng   123
11 wangzhiqiang    123
12 chenchao    123
13 chenkun     123
14 zhaoyuanhai 123
15 xuezhaomeng 123
16 zhenyansheng    123
17 fangheyi    123
18 wudonghang  123
student.info内容戳这里

golang代码实现效果如下:

  1 /*
  2 #!/usr/bin/env gorun
  3 @author :yinzhengjie
  4 Blog:http://www.cnblogs.com/yinzhengjie
  5 EMAIL:y1053419035@qq.com
  6 */
  7 
  8 package main
  9 
 10 import (
 11     "fmt"
 12     "bufio"
 13     "os"
 14     "strings"
 15     "log"
 16     "io"
 17 )
 18 
 19 var   (
 20     user string
 21     passwd string
 22     line string
 23     filepath string
 24     lockpath string
 25     retry int
 26     user_locked bool = false
 27     user_presence bool  = false
 28     validation_success bool = false
 29 )
 30 
 31 func GetLoginInfo() (user,passwd string) {
 32     f := bufio.NewReader(os.Stdin)
 33     for  {
 34         fmt.Print("请输入用户名:")
 35         line,_ = f.ReadString('\n')
 36         if len(line) == 1 {
 37             continue
 38         }
 39         line = strings.TrimSpace(line)
 40         fmt.Sscan(line,&user)
 41         fmt.Print("请输入密  码:")
 42         line,_ = f.ReadString('\n')
 43         if len(line) == 1 {
 44             continue
 45         }
 46         line = strings.TrimSpace(line)
 47         fmt.Sscan(line,&passwd)
 48         //fmt.Printf("用户名是:%s,密码是%s\n",user,passwd)
 49         return user,passwd
 50     }
 51 }
 52 
 53 func GetFileInfo(filepath string)(res []string){
 54     var fileds []string
 55     f,err := os.Open(filepath)
 56     defer f.Close()
 57     if err != nil {
 58         log.Fatal(err)
 59     }
 60     r := bufio.NewReader(f)
 61     for  {
 62         line,err := r.ReadString('\n')
 63         if err == io.EOF {
 64             break
 65         }
 66         line = strings.TrimSpace(line)
 67         fileds = append(fileds, line)
 68         //fmt.Println(line)
 69     }
 70     return fileds
 71 }
 72 
 73 func UserCounts(user string) map[string]int {
 74     var res map[string]int
 75     res = make(map[string]int)
 76     res[user] = retry + 1
 77     return res
 78 }
 79 
 80 func main() {
 81     var res map[string]int
 82     lockpath = "E:\\Code\\Golang\\Golang环境\\yinzhengjie\\Golang作业\\Day1\\lock.info"
 83     filepath = "E:\\Code\\Golang\\Golang环境\\yinzhengjie\\Golang作业\\Day1\\student.info"
 84     user,passwd = GetLoginInfo()
 85     res = UserCounts(user)
 86     for  {
 87         lock_res := GetFileInfo(lockpath)
 88         for _,member := range lock_res{   //判断用户是否被锁!
 89             if user == member{
 90                 user_locked = true
 91             }
 92         }
 93         if user_locked == true {
 94             fmt.Println("该用户已经被锁定!")
 95             break
 96         }
 97 
 98         login_res := GetFileInfo(filepath)  //验证用户密码是否正确
 99         for _,v := range login_res{
100             if user == strings.Fields(v)[0] {
101                 user_presence = true
102                 if passwd == strings.Fields(v)[1] {
103                     validation_success = true
104                     break
105                 }
106             }
107         }
108         if user_presence == true  && validation_success == true{
109             fmt.Println("恭喜你,登陆成功哟!")
110             break
111         }
112         if user_presence == true && validation_success == false{
113             res[user] += 1
114             fmt.Println("用户名或密码错误!")
115             user,passwd = GetLoginInfo()
116             if res[user] > 2 {
117                 fmt.Printf("重试次数上限!该用户`%v`已被锁定\n",user)
118                 break
119             }
120         }
121         if user_presence == false && validation_success == false {
122             fmt.Println("输入的用户不存在!")
123             user,passwd = GetLoginInfo()
124         }
125     }
126 }

python代码实现效果如下:

1 yinzhengjie|123|3
2 yzj|666|2
UserAuthenticationFile.txt 文件内容戳这里
 1 #!/usr/bin/env python
 2 #_*_coding:utf-8_*_
 3 #@author :yinzhengjie
 4 #blog:http://www.cnblogs.com/yinzhengjie/tag/python%E8%87%AA%E5%8A%A8%E5%8C%96%E8%BF%90%E7%BB%B4%E4%B9%8B%E8%B7%AF/
 5 #EMAIL:y1053419035@qq.com
 6 
 7 f1 = open('UserAuthenticationFile.txt','r')            #以只读的方式打开文件
 8 data = f1.read()                                        #读取文件的内容
 9 f1.close()                                              #关闭文件句柄
10 
11 user_info_list = []
12 user_str_list = data.split('\n')                        #按照换行符将读取出来的数据进行第一次切割
13 for item in user_str_list:
14     temp = item.split('|')                              #将第一次切割后的每个元素再次进行切割
15     info = {
16         'name' : temp[0].strip(),                           #将切割后的每一个元素分别赋值
17         'passwd': temp[1].strip(),
18         'retry':temp[2].strip()
19     }
20     user_info_list.append(info)
21 
22 VerifySuccess = False                                 #用于判断是否验证成功的标志位,默认为false。
23 UserLocked = False                                    #用于判断用户是否被锁定,默认为false。
24 retry = 1                                              #定义用户尝试登陆的次数。
25 
26 while retry < 4:                                       #用来确定循环次数
27     username = input("请输入您的用户名>>>")
28     password = input("请输入您的密  码>>>")
29     for user_info in user_info_list:
30         if  username == user_info["name"] and password == user_info["passwd"]:
31           if int(user_info["retry"]) < 3:
32               print("登陆成功!")
33               VerifySuccess = True                    #我这里定义了一个标志位,当验证登陆成功后,将flag的值改为Ture并终止当前的for循环。
34               user_info["retry"] = 0                  #验证登陆成功之后,需要把尝试登陆成次数清空。
35               break
36           else:
37               print("您的账户已经被冻结,请联系管理员解封!")
38               UserLocked = True
39               break
40     if  VerifySuccess == True:
41         break
42     elif UserLocked == True:
43         UserLocked == False
44         retry += 1
45         continue
46     else:
47         print("用户名或密码错误!")
48         retry += 1
49 
50 print(user_info_list)
51 f2 = open('UserAuthenticationFile.txt',"w")               #这种方式是以清空的方式打开。
52 for i in user_info_list:
53     f2.write(i["name"]+"|"+i["passwd"]+"|"+str(i["retry"]))
54     f2.write("\n")
55 f2.close()

shell代码实现效果如下:

 

 

 

c++代码实现效果如下:

 

 

JAVA代码实现效果如下:

 

 

JS代码实现效果如下:

 

PHP代码实现效果如下:

 

转载于:https://www.cnblogs.com/yinzhengjie/p/7519812.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php基础教程 第十步 阶段性知识补充

简 在php教程中前九步已经了解了php的一些基础知识。大多数人在了解完以上知识后脑子还是迷茫的&#xff0c;最多懂的一些我所讲解过的知识如何实现&#xff08;对象为零基础读者&#xff09;&#xff0c;如何搭建一个网站还是不知晓。没关系&#xff0c;接下来我们即将进入ph…

ArcGIS实验教程——实验十三:栅格空间插值分析

ArcGIS实验视频教程合集:《ArcGIS实验教程从入门到精通》(附配套实验数据) >>> 实验前必读:《完美解决ArcGIS10.x栅格空间插值报错无法进行和导出插值栅格结果出错的问题》 一、实验描述 一般情况下采集到的数据都是以离散点的形式存在的,只有在这些采样点上才有…

ARM路线的投机性和欺骗性

过去十年里&#xff0c;在自主CPU取得了长足进步的同时&#xff0c;一批企业积极引进英特尔、AMD、VIA、IBM、ARM、高通等公司的技术&#xff0c;或是成立合资公司&#xff0c;相对于X86、Power等处理器很容易被识别为技术引进CPU&#xff0c;ARM的欺骗性则要强很多&#xff0c…

营业执照在线一键生成_如何在线制作证件照?证件照一键生成的方法

如何在线制作证件照&#xff1f;每一年的毕业季也是就业季&#xff0c;几百多万的大学生都面临着找工作&#xff0c;而在工作之前必须准备好证件照&#xff0c;这样方便参加面试和入职。随着市场需求的逐步扩大&#xff0c;很多便捷的软件和网站都被设计出来了&#xff0c;比如…

php基础教程 第十一步 面向对象

面相对象 面向对象程序设计简称OOP&#xff08;Object-oriented programming&#xff09;。是一种类型的抽象&#xff0c;或者说是一种类型以编码的方式进行描述。概念上理解并不能直观的说明问题&#xff0c;以下将会有示例为读者直观的感受面向对象。 类代表一个类别&#…

Android NDK开发Crash错误定位[转]

使用 ndk-stack 的时候需要你的 lib 编译为 debug版的&#xff0c;通常需要下面的修改&#xff1a; 1. 修改 android.mk&#xff0c;增加&#xff0c;为 LOCAL_CFLAGS 增加 -g 选项 2. 修改 application.mk&#xff0c;增加 APP_OPTIM : debug 3. nkd-build -B 4. 从 obj/local…

实验报告类与对象水井问题_物业设施设备巡检检查对象、周期和频次

点击上方“物业精英俱乐部”&#xff0c;关注公众号,中国物业管理行业精英联盟&#xff0c;中国百强物业企业精英学习平台。来源&#xff1a;百度文库版权归原创作者所有一巡检对象、周期和频次所谓巡检&#xff0c;并不是说将大大小小的所有物业设施都列入巡检范围&#xff0c…

龙芯2K1000LA处理器流片成功,龙芯业务全面转向LoongArch架构

2022年4月底&#xff0c;龙芯2K1000处理器完成了改版芯片&#xff08;代号龙芯2K1000LA&#xff09;的功能和性能测试&#xff0c;正在开展用户试用。龙芯2K1000LA在实现与原有版本2K1000引脚和接口兼容的基础上&#xff0c;处理器核更新为基于龙芯自主指令系统架构LoongArch&a…

php基础教程 第十一步 面向对象补充

继承 上一节中学习了php类&#xff0c;以及类方法、类成员变量相关的一些知识&#xff0c;接下来开始学习php类中的继承。本节是上一节的补充。&#xff08;其实也就是为了保持日更随便发的一篇文&#xff09; 开始 php继承是继承与父类的所有属性&#xff0c;就像你继承了你…

【Ubuntu】ubuntu物理机安装方法:wubi

在之前的文章里我们曾经详细介绍了如何在虚拟机里安装ubuntu操作系统&#xff0c;但是一些小伙伴希望在自己的电脑里安装一个ubuntu&#xff0c;来感受一下ubuntu的硬体验。下面给大家介绍一种通过wubi的安装方法。 wubi是 Windows Ubuntu-Based Installer 缩写&#xff0c;是一…

server如何调用 thrift_Thrift总结(二)如何快速创建自己的RPC服务

前面介绍了thrift 基础的东西&#xff0c;怎么写thrift 语法规范编写脚本&#xff0c;如何生成相关的语言的接口。不清楚的可以看这个《Thrift总结(一)介绍》。做好之前的准备工作以后&#xff0c;下面就开始如何用Thrift写RPC接口。如何用Thrift写RPC接口1. 打开之前下载的thr…

Hello Playwright:(2)简化部署方式

前言上次的文章Hello Playwright&#xff1a;(1)从开发到部署发表后&#xff0c;有网友留言问&#xff0c;有不有简化部署的方式&#xff1a;下面&#xff0c;提供 2 种可行的方案。方案 1. Copy其实 Playwright 默认是到C:\Users\用户名\AppData\Local\ms-playwright文件夹下查…

C++入门指南及实战 第一步 概述及经典HelloWorld

本系列文章环境及学习门槛 编程基础&#xff1a;无年龄&#xff1a;具有一定的逻辑思维英文&#xff1a;不要求数学&#xff1a;不要求学习时长&#xff1a;每天一篇&#xff0c;一周4-5篇即可&#xff0c;每篇最多1小时死记硬背&#xff1a;不需要&#xff0c;理解至上本机环…

为什么云服务器没西南的_去年“双11“我买的那台云服务器

一、为什么会买云服务器为什么初学者需要一台云服务器&#xff1f;从我自己那仅有的一点经验来看&#xff0c;重点无非这一个词&#xff1a;实践。细数一下初学者拥有一台云服务器的好处&#xff1a;学习操作系统、熟悉环境大部分初学者在本地使用的是windows系统&#xff0c;在…

Java线程安全以及线程安全的实现方式和内存模型(JMM)

一、了解几个概念 1&#xff09;临界区&#xff1a; 临界区指的是一个访问共用资源&#xff08;例如&#xff1a;共用设备或是共用存储器&#xff09;的程序片段&#xff0c;而这些共用资源又无法同时被多个线程访问的特性。当有线程进入临界区段时&#xff0c;其他线程或是进…

animate 实现滑动切换效果

今天和大家分享一下用 animate 实现滑动切换效果的小例子 ------- 来自<一只有梦想的前端小白> 大家都知道jQuery 提供的有一下几种方法能够实现滑动效果&#xff1a; slideDown()slideUp()slideToggle()但是以上的滑动不太方便控制其滑动的方向&#xff0c;所以我们还是…

C++入门指南及实战 第二步 HelloWorld及扩展详解

回顾 在上一节中&#xff0c;我们编写了如下代码&#xff0c;完成了 HelloWorld程序的编写&#xff1a; #include<iostream> using namespace std;int main(){cout <<"Hello World";return 0; }本小节将会对该代码进行讲解&#xff0c;并且解释一下专业…

2560x1600分辨率高吗_做设计还弄不清分辨率和像素之间的关系,来了解下他们是怎么换算...

许多同学都在问我关于像素的问题&#xff0c;为什么印刷时要300分辨率以上&#xff1f;网页为什么72就够了&#xff1f;做户外喷绘30&#xff0c;甚至巨幅画面20就上了。关于这些还是很多人不知道的&#xff0c;要不也不会被卖手机的忽悠&#xff0c;各大手机推销员拿着手机大声…

使用 fixture 机制重构 appium_helloworld

一、前置说明 在 pytest 基础讲解 章节,介绍了 pytest 的特性和基本用法,现在我们可以使用 pytest 的一些机制,来重构 appium_helloworld 。 appium_helloworld 链接: 编写第一个APP自动化脚本 appium_helloworld ,将脚本跑起来 代码目录结构: pytest.ini 设置: [pyt…

Tomcat相关 -- 内存设置

java内存溢出详解 一、常见的java内存溢出 1、java.lang.OutOfMemmoryError : Java heap space -- JVM Heap &#xff08;jvm 堆溢出&#xff09; JVM启动时自动设置JVM Heap的值&#xff0c;其初始空间(即 -Xms)是物理内存的1/64&#xff0c;最大空间(-Xms)不可超过物理内存。…