?? login.cpp.bak
字號:
/*
* File: login.cpp
* --------------
* This file implements the login.h interface.
*/
#include "login.h"
/* Implementation */
Login::Login()
{
numOfUsers=0;
allUserList=new (struct UserInfo);
allUserList->user="autumn";
allUserList->pass="autumn";
allUserList->level=3;
allUserList->next=NULL;
ReadFromFile(USERINFOFILENAME);
}
int Login::LoginSuccess(string user, string pass)
{
struct UserInfo *p;
if (numOfUsers == 0) p=allUserList;
else p=allUserList->next;
while (p != NULL) {
if (p->user == user && p->pass == pass) return (p->level);
p=p->next;
}
return 0;
}
struct UserInfo *Login::FindUser( string name )
{
struct UserInfo *p=allUserList->next;
while (p != NULL && p->user != name) p=p->next;
return p;
}
bool Login::AddUser(string name, string pass, int level)
{
struct UserInfo *p,*newp;
p=allUserList;
while (p->next != NULL) p=p->next;
newp=new (struct UserInfo);
if (newp == NULL) {Error("");return false;}
p->next=newp;
newp->user=name;
newp->pass=pass;
newp->level=level;
newp->next=NULL;
numOfUsers++;
return true;
}
bool Login::DeleteUser( string name )
{
struct UserInfo *p,*pp;
p=allUserList->next;
pp=allUserList;
while (p != NULL && p->user != name) {
pp=p;
p=p->next;
}
if (p == NULL) {Error("User Not Found~");return false;}
pp->next=p->next;
numOfUsers--;
delete p;
return true;
}
void Login::ReadFromFile( const char *fileName )
{
ifstream fin;
fin.open(fileName,ios::in);
if (fin == NULL) {
system("mkdir data");
fin.open(fileName,ios::in);
}
if (fin == NULL) {
Error("User Data File Not Found~");
cout<<"Now creating a new data file.."<<endl;
WriteToFile(fileName);
cout<<"Success.."<<endl;
return ;
}
string temp1,temp2;
int num,lev;
fin>>num;
for (int i=0;i<num;i++)
{
getline(fin,temp1,'\n'); //eat the '\n'..
getline(fin,temp1,'\n');
getline(fin,temp2,'\n');
fin>>lev;
if (!AddUser(Decrypt(temp1),Decrypt(temp2),lev)) exit(1);
}
fin.close();
return;
}
void Login::WriteToFile( const char *fileName )
{
ofstream fout;
fout.open(fileName,ios::out);
if (fout == NULL){
Error("File Not Found~");
exit(2);
}
fout<<numOfUsers<<endl;
struct UserInfo *p=allUserList->next;
while (p != NULL){
fout<< Encrypt(p->user) <<endl;
fout<< Encrypt(p->pass) <<endl;
fout<< p->level <<endl;
p=p->next;
}
fout.close();
return ;
}
void Login::Clean()
{
struct UserInfo *p,*cp;
cp=allUserList->next;
while (cp != NULL){
p=cp->next;
delete cp;
cp=p;
}
numOfUsers=0;
return ;
}
string Login::Encrypt( string str )
{
int i=0;
string temp="";
while ( str[i] != '\0') temp+=char( (str[i++]+CRYPTCODE)%255 );
return temp;
}
string Login::Decrypt( string str )
{
int i=0;
string temp="";
while (str[i] != '\0') temp+=char( (str[i++]+255-CRYPTCODE)%255 );
return temp;
}
Login::~Login()
{
WriteToFile(USERINFOFILENAME);
Clean();
delete allUserList;
}
/*
extern void GetUserInfo( const char *fileName, struct UserInfo &info)
{
struct UserInfo *p1,*p2;
info.user="admin";
info.pass="admin";
info.level=3;
p1=new (struct UserInfo);
info.next=p1;
p1->user="assistant";
p1->pass="assistant";
p1->level=2;
p2=new (struct UserInfo);
p1->next=p2;
p2->user="anyone";
p2->pass="anyone";
p2->level=1;
p2->next=NULL;
return ;
}
*/
void AddUser(Login *login)
{
string temp1;
string temp2;
int t1;
cout<<"=========Start========"<<endl;
cout<<"Please input user name:";
temp1=GetString();
cout<<"Please input the password:";
temp2=GetString();
cout<<"Please input the level:";
t1=GetInt();
if (login->FindUser(temp1)) {Error("User Exists..");return ;}
login->AddUser(temp1,temp2,t1);
cout<<"=========End==========="<<endl;
return ;
}
void DeleteUser(Login *login)
{
string temp;
cout<<"==========Start=========="<<endl;
cout<<"Please input user name:";
temp=GetString();
if (!login->FindUser(temp)) {Error("User Not Found ~");return ;}
if (!login->DeleteUser(temp)){Error("");}
cout<<"===========End============="<<endl;
return ;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -