21xrx.com
2024-11-05 17:28:19 Tuesday
登录
文章检索 我的文章 写文章
C++ 登录界面代码
2023-06-26 22:43:59 深夜i     --     --
C++ 登录界面 代码

C++是一种高级编程语言,由于其强大的功能和灵活的语法规则,已经成为广泛使用的编程语言。在开发过程中,为了保证系统的安全性,在程序中添加登录界面是非常必要的。下面我们来分享一下C++编写的简单登录界面代码。

首先,需要添加头文件,包括iostream、fstream、cstring以及windows.h。其中,iostream用于输入输出,fstream用于读写文件,cstring用于处理字符串,windows.h用于系统设置。

#include

#include

#include

#include

接着,定义一个类LoginSystem,用于定义登录界面的各种属性和函数。

class LoginSystem{

  public:

    LoginSystem(); //构造函数

    ~LoginSystem(); //析构函数

    void LoginForm();  //登录界面

    void RegisterForm();  //注册界面

    void InitialCreate();  //注册新用户

    void NewPassword(); //修改密码

  private:

    bool CheckUser(char* uname,char* pwd); //验证用户是否存在,并判断密码是否正确

    void CreateUserInfo(char* uname,char* pwd);  //创建新用户

    char* GetPwd(char* prompt); //输入密码

    const char* user_info = "user_info.dat"; //存储用户信息的文件名

    char UserNow[30];  //当前用户

};

在LoginSystem中,我们定义了LoginForm()、RegisterForm()、InitialCreate()、NewPassword()、CheckUser()、CreateUserInfo()、GetPwd()这几个函数,每个函数的作用如下:

LoginForm():实现登录页面的布局,同时处理用户输入的账号密码信息,并调用CheckUser()函数验证用户信息;

RegisterForm():实现注册页面的布局,向文件user_info.dat中添加新用户的信息;

InitialCreate():创建注册新用户的信息;

NewPassword():修改密码;

CheckUser():用于验证用户是否存在,并判断密码是否正确;

CreateUserInfo():用于创建新用户;

GetPwd():用于输入密码。

接下来,我们来实现LoginForm()函数。

void LoginSystem::LoginForm(){

    cout<<"******************************************************"<

    cout<<"*      Welcome to Login System!        *"<

    cout<<"******************************************************"< <

    char uname[20]; //保存用户名

    char* pwd; //保存密码

    bool login = false; //判断是否登录成功

    while(!login){

      cout<<"Please input your user name: ";

      cin>>uname;

      pwd = GetPwd("Please input your password: ");

      cout<

      if(CheckUser(uname,pwd))

      {

        strcpy(UserNow,uname);

        login = true;

      }

      else

        cout<<"Your user name or password is incorrect!"< <

    }

    cout<<"Welcome "< <<" to login success!"<

    cout< < <

    //其他操作

}

在LoginForm()函数中,我们首先输出欢迎信息,然后要求用户输入用户名和密码。同时,我们定义了login变量表示是否成功登录。通过循环,不断检查输入的用户名和密码是否正确。若验证成功,将用户名存储在UserNow中,并将login设为true。最后输出登录成功的欢迎信息。

接下来实现CheckUser()函数和CreateUserInfo()函数。

bool LoginSystem::CheckUser(char* uname,char* pwd){

    bool flag = false;

    fstream user_file(user_info,ios::in|ios::binary);

          //二进制读文件方式打开user_info.dat文件,用于检查用户信息

    if(!user_file)return flag;

    int user_num;

    user_file.read(reinterpret_cast (&user_num),sizeof(user_num));

      //将二进制数据转换成int型,表示用户数量

    char temp_uname[20],temp_pwd[20];

    for(int i=0;i

      user_file.read(reinterpret_cast (temp_uname),sizeof(temp_uname));

        //读取包含用户名和密码的字符串数组

      user_file.read(reinterpret_cast (temp_pwd),sizeof(temp_pwd));

      if(strcmp(temp_uname,uname) == 0 && strcmp(temp_pwd,pwd) == 0)

        flag = true;

        break;

    }

    user_file.close();

    return flag;

}

在CheckUser()函数中,我们把打开数据文件、读取数据、对比数据等步骤集中在一起,方便维护。其中,用到了ifstream操作符读取数据,并且使用了二进制数据转换。

接下来是CreateUserInfo()函数的实现。

void LoginSystem::CreateUserInfo(char* uname,char* pwd){

    fstream user_file(user_info,ios::in|ios::out|ios::binary);

      //以二进制读写方式打开user_info.dat文件

    if(!user_file.is_open())return;

    int user_num=0;

    user_file.read(reinterpret_cast (&user_num),sizeof(user_num)); //将二进制数据转换成整形

    user_file.seekg(0,ios::end); //将读写位置移到文件末尾

    int size = user_file.tellg();

    user_file.seekg(size); //在文件末尾写入新用户信息

    user_file.write(reinterpret_cast (uname),sizeof(uname)); //写入用户名

    user_file.write(reinterpret_cast (pwd),sizeof(pwd)); //写入密码

    int new_user_num = ++user_num;

    user_file.seekp(0,ios::beg);

    user_file.write(reinterpret_cast (&new_user_num),sizeof(new_user_num)); //将新的用户数量写入数据文件

    user_file.close();

}

CreateUserInfo()函数的作用是将新用户写入到user_info.dat文件中,同时更新用户数量。

接下来实现InitialCreate()函数和NewPassword()函数。

void LoginSystem::InitialCreate(){

    char uname[20]; //保存用户名

    char* pwd; //保存密码

    cout<<"Please input new user name: ";

    cin>>uname;

    pwd = GetPwd("Please input password: ");

    cout<

    CreateUserInfo(uname,pwd);

    cout<<"Congratulations! You have registered a new user account!"< < <

}

InitialCreate()函数实现创建新用户的功能,使用GetPwd()函数获取密码,并调用CreateUserInfo()函数将新用户信息写入到user_info.dat文件中。

最后一个函数是NewPassword():

void LoginSystem::NewPassword(){

    char* pwd;

    pwd = GetPwd("Please input new password: ");

    CreateUserInfo(UserNow,pwd);

    cout<<"Password changed successfully!"< < <

}

NewPassword()函数能够修改当前登录用户的密码。它使用GetPwd()函数获取新的密码,并将新密码保存到user_info.dat文件中。

此外,还需要实现GetPwd()函数,该函数用来输入密码,为了保证输入的安全性,在屏幕上仅输出‘*’。

char* LoginSystem::GetPwd(char* prompt){

    static char pwd[20]; //申请静态内存

    cout< <<" ";

    HANDLE hinput = GetStdHandle(STD_INPUT_HANDLE);

    DWORD mode=0;

    GetConsoleMode(hinput,&mode);

    SetConsoleMode(hinput,mode & (~ENABLE_LINE_INPUT)); //禁止换行

    char ch;

    int i=0;

    while((ch=getch())!=13) //输入回车终止

    {

      if(ch==8&&i>0){ //Backspace退格键

        cout<<"\b \b";

        --i;

      }else if(ch>=32&&ch<=126){

        cout<<'*'; //屏幕上仅显示‘*’

        *(pwd+i++) = ch;

      }

    }

    SetConsoleMode(hinput,mode);

    *(pwd+i)='\0'; //输入结束后在输入末尾中加上结束标志'\0'

    return pwd;

}

上面就完成了一个简单的C++登录界面的编写。其中,很多功能可以继续扩充和完善,例如实现修改用户名、退出登录等,也可以加入加密功能等。当然,为了确保程序的稳定性、安全性和可维护性,我们在编写时还需要遵循良好的编码风格和规范,注重注释和文档,尽可能地减少错误和漏洞的存在。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复