#include
#include
#include
#include
using namespace std;
class Account
{
public:
Account();
Account(int);
friend void Regiser();
friend int SameAccount(char []) ;
friend void Login();
friend int SamePassword(char []);
friend void ChangePassword();
private:
char Password[50];
char Name[50];
char Problem[3];
char *ProblemAnswer[3];
char Address;
char account[50];
int mark;
};
Account::Account()
{
mark=1;
Address=new char[50];
Address="d:\";
for(int i=0;i
{
Problem[i]=new char[50];
ProblemAnswer[i]=new char[50];
}
}
Account::Account(int i)
{
mark=0;
Address=new char[50];
for(int i=0;i
{
Problem[i]=new char[50];
ProblemAnswer[i]=new char[50];
}
}
void Regiser()
{
Account *a1=new Account;
char TempPassword [50];
cout
cin>>a1->account;
while(SameAccount(a1->account))
{
cout<<"你输入的账户名已经被注册,请输入另一个账户名"<
cin>>a1->account;
}
strcpy(a1->Address,a1->account);
strcat_s(a1->Address,4,".dat");
cout<<"(监测)a1->Address"<<a1->Address<<endl;
cout<<"a1->account (监测)"<<a1->account<<endl;
cout<<"请输入你的名字"<<endl;
cin>>a1->Name;
cout<<"请输入你的登录密码"<<endl;
cin>>a1->Password;
cout<<"请再次输入你的登录密码"<<endl;
cin>>TempPassword;
while(strcmp(a1->Password,TempPassword)!=0) //若前后两次输入密码不一致
{
cout<<"前后两次输入的密码不一致,请重新设置密码"<<endl;
cout<<"请输入你的登录密码"<<endl;
cin>>a1->Password;
cout<<"请再次输入你的登录密码"<<endl;
cin>>TempPassword;
}
cout<<"&&&&&————密码设置成功,接下来请设置你的密保————*****"<<endl;
cout<<"请输入第一个密保问题"<<endl;
cin>>a1->Problem[0];
cout<<"请输入第一个密保问题的答案"<<endl;
cin>>a1->ProblemAnswer[0];
cout<<"请输入第二个密保问题"<<endl;
cin>>a1->Problem[1];
cout<<"请输入第二个密保问题的答案"<<endl;
cin>>a1->ProblemAnswer[1];
cout<<"请输入第三个密保问题"<<endl;
cin>>a1->Problem[2];
cout<<"请输入第三个密保问题的答案"<<endl;
cin>>a1->ProblemAnswer[2];
fstream FileAddress(a1->Address,ios::out|ios::binary); //用 用户账号建立一个文件
if(!FileAddress)
{
cout<<"注册时新文件没有正常建立"<<endl;
abort();
}
FileAddress.close();
fstream File("d:\\C++File.dat",ios::out|ios::binary|ios::in); //打开储存所有账户的文件
if(!File)
{
cout<<"注册时总文件未能正常打开"<<endl;
abort();
}
Account *a2=new Account;
File.seekg(0,ios::beg);
do{
File.read((char*)&(*a2),sizeof(Account));
}while(File&&a2->mark!=0);
delete a2;
File.seekp(-long(sizeof(Account)),ios::cur);
File.write((char*)&(*a1),sizeof(Account));
delete a1;
Account *mark=new Account(1);
File.write((char*)&mark,sizeof(Account)); //在文件末 写入 空标志;
delete mark;
File.close();
cout<<"密保设置成功,注册完成!"<<endl;
a1=NULL;
a2=NULL;
}
int SameAccount(char account[])
{
Account *a11=new Account;
fstream File("d:\C++File.dat",ios::in|ios::binary);
if(!File)
{
cerr<<"在调用检查帐户名是否一致时的函数中文件没有正常打开"<
abort();
}
File.seekg(0,ios::beg); //流指针指向文件头
do
{
File.read((char *)&(a11),sizeof(Account));
if(strcmp(a11->account,account)==0)
return 1;
}while(File&&a11->mark!=0);
File.close();
delete a11;
a11=NULL;
return 0;
}
部分代码如上,在我调用Regiser()函数,里面调用SameAccount()函数判断我输入的账号在文件中是否已存在,然后当执行到 if(strcmp(a11->account,account)==0)语句时,就发生访问冲突
怎么破,究竟哪里出问题了!!