明远湖之鱼 2021-11-23 22:48 采纳率: 50%
浏览 13
已结题

大家可以帮我看看我这个想用C++实现简单的登录和注册吗?为什么注册和登录功能实现不了啊?无法保存在txt文件中

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
#include <iostream> 
#include <string.h> 
#include <string> 
#include <conio.h>
#include <fstream> 
using namespace std; 
#define SIZE 100//宏定义最大用户容量
int count = 0;//用作储存当前已注册用户数
//用户类 
class User{
    private:
        string id;//账号 
        char pw[];//密码
    public:
        User(){};//默认构造函数 
        void save();//保存
        void read();//读取 
        void Hello();//登录界面 
        void Register();//注册
        void Login();//登录
}us; 
User user[SIZE];//用户类数组 
//保存
void User::save()
{
    ofstream ofile;//从内存到硬盘
    ofile.open("用户信息.txt", ios::out);//打开文件并保存数据 
    for (int i = 0; i < count; i++)//将账号密码存储到文件 
    {
        ofile<<user[i].id<<" ";
        ofile<<user[i].pw<<endl;
    }
    ofile.close();//关闭文件 
}
//读取
void User::read()
{
    ifstream ifile;//从硬盘到内存
    ifile.open("用户信息.txt", ios::in);//打开文件并读取数据 
    count = 0; 
    if (!ifile.is_open())//fin.is_open()打开成功返回1,打开失败返回0 
    {
        cout << "文件打开失败!" << endl;
        return;
    }
    for (int i = 0; !ifile.eof(); i++)//遍历文件,当文件指针到达文件尾时eof()函数就返回为true,否则返回false
    {
        ifile >> user[i].id;
        ifile >> user[i].pw;
        count++;//没有这个就会错,不知道为什么 
    }
    count--;
    ifile.close();//关闭文件 
}
//登录界面 
void User:: Hello()
{
    int se;
    cout<<"\n\n\n";
    cout<<"\t\t\t\t ******   ** *     * **      * * *      * * *   *     *\n";
    cout<<"\t\t\t\t   **    ******   ******    *     *   *         *     *\n";
    cout<<"\t\t\t\t   **   ******** ********     *      *          *     *\n";
     cout<<"\t\t\t\t   **    ***************        *    *          *     *\n";
    cout<<"\t\t\t\t   **      ***********      *     *   *         *     *\n";
    cout<<"\t\t\t\t ******       *****          * * *      * * *    * * * \n\n\n";
    cout<<"\t\t\t\t\t       【欢迎使用超市货物管理系统】\n\n";
    cout<<"\t\t\t\t\t                1.登录账号 \n\n"; 
    cout<<"\t\t\t\t\t                2.注册账号 \n\n";
    cout<<"\t\t\t\t\t                3.退出界面 \n\n";
    cout<<"\t\t\t\t\t                请选择:"; 
    cin>>se; 
    switch (se)
    {
    case 1:
        Login();        
        break;
    case 2:
        Register();
        break;
    case 3:
        cout<<"\n\t\t\t\t\t               【成功退出】\n";
        exit(0);
        system("pause");
        break;
    default:
        cout<<"\n没有这个选项,请重新选择!\n";
        break;
    }
}
//注册
void User::Register()
{
    us.read();//读取已储存用户数据
    string ID;
    char pw1[6],pw2[6];
    int    i,a=count+1;
    cout<<"\n\t\t\t\t\t               【注册帐号】\n";
    cout<<"\n                        请输入用户账号和密码(账号、密码可以为数字,英文字母,符号,用户账号最多20位,密码必须6位)\n\n";
    cout<<"\t\t\t\t\t\t   请你输入账号:";
    cin>>ID;
    if(ID.length()>20)
    {
        cout<<"\n\n\t\t\t\t\t\t  用户账号最多20位,请重新注册账号!\n";
        return;
    }
    else
    {
    user[a].id=ID;
    cout<<"\n\t\t\t\t\t\t   请你输入密码:";
    for (i = 0; i<6; i++)
    {
        pw1[i] = _getch();//从控制台读取一个字符,但不显示在屏幕上 
        cout<<"*";
        user[a].pw[i] = pw1[i];
        if (pw1[i] == '\r')//密码不够6位数就按回车 
        {
            cout<<"\n\n\t\t\t\t\t\t  密码必须6位,请重新注册账号!\n";
            return;
        }
    }
    cout<<"\n\n\t\t\t\t\t\t   再次确认密码:";
    for (i = 0; i<6; i++)
    {
        pw2[i] = _getch();
        cout<<"*";
        if (user[a].pw[i] != pw2[i])
        {
            cout<<"\n\n\t\t\t\t\t\t 密码不对,请重新注册账号!\n";
            return;
        }
    }
    cout<<"\n\n\t\t\t\t\t\t         注册成功!!!\n";
    count++;//已注册用户加1
    us.save();//保存用户数据
    system("pause");
    system("cls");
    }
}
//登录账号功能 
void User::Login()
{
    us.read();//读取已储存用户数据
    string ID;
    char pw3[6];
    int    i, j, a ;
    int    flag = 0;
    cout<<"\n\t\t\t\t\t               【登录帐号】\n";
    for (i = 0; i<3; i++)//允许三次登录机会
    {
        cout<<"\n\t\t\t\t\t\t   请输入账号:";
        cin>>ID;
        cout<<"\n\t\t\t\t\t\t   请输入密码:";
        for (j = 0; j<6; j++)
        {
            pw3[j] = _getch();
            cout<<"*";
        }
        for ( a = 0; a < count; a++) 
        {
            if (ID == user[a].id && pw3 == user[a].pw)
            {
                flag = 1;
            }
        }
        if (flag == 1)
        {
            cout<<"\n\n\t\t\t\t\t\t         登录成功!";
            cout<<"\n\t\t\t\t\t       按任意键进入超市货物管理系统!\n";
            system("pause");
            system("cls");
        }
        else 
        {
            cout<<"\n账号或者密码输入错误,你还有"<<2 - i<<"次机会,请重新输入:\n";
        }
    }
    if (i == 3)
    {
        cout<<"\n\n\t\t\t\t\t\t\t登录失败!\n";
        return;
    }
}
int main()
{
    system("color 30"); 
    User user;
    while(1)
    {
        user.Hello();
        system("pause");
        system("cls");
    }
    return 0; 
}




  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月1日
    • 创建了问题 11月23日

    悬赏问题

    • ¥15 在不同的执行界面调用同一个页面
    • ¥20 基于51单片机的数字频率计
    • ¥50 M3T长焦相机如何标定以及正射影像拼接问题
    • ¥15 keepalived的虚拟VIP地址 ping -s 发包测试,只能通过1472字节以下的数据包(相关搜索:静态路由)
    • ¥20 关于#stm32#的问题:STM32串口发送问题,偶校验(even),发送5A 41 FB 20.烧录程序后发现串口助手读到的是5A 41 7B A0
    • ¥15 C++map释放不掉
    • ¥15 Mabatis查询数据
    • ¥15 想知道lingo目标函数中求和公式上标是变量情况如何求解
    • ¥15 关于E22-400T22S的LORA模块的通信问题
    • ¥15 求用二阶有源低通滤波将3khz方波转为正弦波的电路