⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 login.cpp.bak

📁 命令行模式下的简单宾馆管理系统..各种基本功能齐全..属于新人练习作品..hotel manager..
💻 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 + -