• 常用功能函数-密码登陆函数


    密码登陆-功能函数

    #include "stdafx.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h> //包含getch(); 从控制台读取一个字符,但不显示在屏幕上
    
    #pragma warning(disable:4996) //IDE默认禁止这种容易产生漏洞的旧函数,例如fopen(),现在需要使用fopen_s,要想使用旧函数,要加上这句
    
    //检查是否是第一次进入系统
    int checkFirst()
    {
        int i;
        char pwd_first[9]; //新系统,第一次输入的密码数组
        char pwd_second[9]; //新系统,第二次输入的密码数组
        char password_input[9]; //正式输入的密码数组
        char password[9]; //正式输入的密码数组
    
        FILE *fp_read,*fp_write;
        fp_read = fopen("password.dat", "rb");
        if(!fp_read) //如果不存在password.dat,则进入if
        {
            printf("
    新系统,请输入相应的初始化操作!
    ");
            //getchar();
            do 
            {
                printf("
    设置密码,请不要超过8位:");
                //getch() - 从控制台读取一个字符,但不显示在屏幕上    
                //CR用符号'
    '表示, 十进制ASCII代码是13, 十六进制代码为0x0D;
                //LF使用'
    '符号表示, ASCII代码是10, 十六制为0x0A.
                for (i = 0; i < 8 && (pwd_first[i] = getch()) != '
    ';i++) 
                {
                    putchar('*');
                }
                pwd_first[i] = ''; //不加'',只是字符数组,不能使用strcmp进行比较
    
                printf("
    请再次设置密码,请不要超过8位:");
                for (i = 0; i < 8 && (pwd_second[i] = getch()) != '
    '; i++)
                {
                    putchar('*');
                }
                pwd_second[i] = '';
    
                if ( strcmp(pwd_first,pwd_second) == 0 )
                {
                    printf("
    密码输入成功! 
    ");
                    break; //跳出循环
                }
                else
                {
                    printf("
    2次密码不一致,请重新输入!
    ");
                    system("PAUSE"); //暂停
                    system("CLS"); //清屏
                }
    
            } while (1);
    
            //fclose(fp_read); //error,不能先关闭,否则后面打开password.dat会失败
    
            //将密码写入到密码文件中
            fp_write = fopen("password.dat", "wb");
            if (!fp_write)
            {
                printf("
    密码文件打开失败,则系统创建失败!
    ");
                return -1;
            }
    
            i = 0;
            while (pwd_first[i])
            {
                putw(pwd_first[i], fp_write); //putw为写入单个字符的函数
                i++;
            }
            fclose(fp_write);
            printf("
    系统初始化成功,按任意键退出后,再重新进入!
    ");
            exit(0);
        }
        else
        {
            i = 0;
            while ( !feof(fp_read) && i<8 ) //判断是否读完密码文件
            {
                pwd_first[i] = getw(fp_read); //从文件流中读出字符赋值给pwd_first数组
                i++;
            }
            pwd_first[i-1] = ''; //使用feof()读取文件内容,总是会多读取一次,假如字符个数为3,则会读取4次,i==4,所以i要减1
    
            int n = 0;
            do 
            {
                printf("
    请输入密码,请不要超过8位:");
                for (i = 0; i < 8 && (password[i] = getch()) != '
    '; i++)
                {
                    putchar('*');
                }
                password[i] = '';
    
                if (strcmp(password, pwd_first) != 0)
                {
                    printf("
    密码错误,请重新输入!
    ");
                    n++;
                    system("PAUSE"); //暂停
                    system("CLS"); //清屏
                }
                else
                {
                    system("CLS"); //清屏
                    printf("密码正确!
    ");
                    system("PAUSE"); //暂停
                    system("CLS"); //清屏
                    break; //密码正确,退出函数,继续向下执行
                }
    
            } while(n<3);
    
            if(n >= 3)
            {
                printf("请退出,你已经输入三次错误密码!
    ");
                exit(1);
            }
    
        }
    
        return 0;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        checkFirst();    //检查是否是第一次进入系统
    
        printf("
    成功进入系统!
    ");
        return 0;
    }

    第一次进入新系统:

     第二次进入系统,输入密码,密码正确:

  • 相关阅读:
    JDBC的PreparedStatement是什么?
    Jquery的基本使用方式
    ArrayList,LinkedList,Vector的区别
    数据库连接池的原理。为什么要使用连接池
    .java.util.Date和java.sql.Date有什么区别?
    JDBC的PreparedStatement是什么?
    .Spring Boot 有哪些优点?
    Redis中的常用命令哪些?
    【mybatis-plus】分页、逻辑删除
    MySQL全面瓦解15:视图
  • 原文地址:https://www.cnblogs.com/linuxAndMcu/p/9742058.html
Copyright © 2020-2023  润新知