问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果
#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;
}