📄 login.cpp
字号:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Login.h"
MFD Mfd; //用户链表节点
FILE *Mfp; //用户列表指针
String CurrUser;
extern TTreeNode *CurrNode;
extern DIRECTORY Root;
extern DIRECTORY CurrDir;
extern String FilePath;
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "XPMenu"
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Mfd= new mfd; //初始化用户链表
Mfd->Next=NULL;
if(!FileExists("MFD.txt")) //文件不存在
{
int f=FileCreate("MFD.txt");
FileClose(f);
Mfp=fopen("MFD.txt","r+");
MFD n=new mfd;
n->user="root";
n->password=EnPW("root");
n->Next=NULL;
Mfd->Next=n;
ComboBox1->Items->Add("root");
}
else
{
Mfp=fopen("MFD.txt","r+");
fseek(Mfp,0L,2); //移动文件指针到文件尾
int pos=ftell(Mfp); // 取得文件读写指针位置
if(pos!=0)pos=pos/30+1; //计算注册用户数量
InitMFD(Mfp,pos);
}
ComboBox1->ItemIndex=0;
}
//---------------------------------------------------------------------------
void TForm1::InitMFD(FILE * MFP,int N) //初始化用户列表
{
MFD n;
String userName;
String passwd;
char cuser[15]; //定义文件名和密码长度为15个字符。
char cpasswd[15];
if(N==0){ //文件长度为0
n=new mfd;
n->user="root";
n->password=EnPW("root");
n->Next=NULL;
Mfd->Next=n;
ComboBox1->Items->Add("root");
return;
}
for (int i=0;i<N;i++)
{
for(int j=0;j<15;j++){cpasswd[j]='\0';cuser[15]='\0';}//清空缓冲区
fseek(MFP,i*30,0);
fread(&cuser,15,1,MFP);
fseek(MFP,i*30+15,0);
fread(&cpasswd,15,1,MFP);
userName=cuser;
passwd=cpasswd;
passwd=passwd.SubString(1,15);
n=new mfd;
n->user=userName;
n->password=passwd;
n->Next=NULL;
ComboBox1->Items->Add(userName);
InserMFD(n);
}
}
//---------------------------------------------------------------------------
void TForm1::InserMFD(MFD p)
{ //添加新用户
MFD m;
m=Mfd;
while (m->Next)m=m->Next;
m->Next=p;
}
//--------------------------------------------------------------------------
void __fastcall TForm1::ExitFSClick(TObject *Sender)
{
SaveMFD(Mfp);
Close();
}
//---------------------------------------------------------------------------
int TForm1::Login(String UserName,String UserPassword)
{ //登录
MFD m=Mfd->Next;
while (m){
if (UserName==m->user)
{
if(UserPassword==m->password)
return 0; //用户名、密码正确
else
return 1; //用户名正确、密码不正确
}
m=m->Next;
}
return 2; //用户名不存在
}
void __fastcall TForm1::LoginBnClick(TObject *Sender)
{
if(Edit2->Text=="")
{ShowMessage("密码不能为空!");
Edit2->SetFocus();
return;
}
int s=Login(ComboBox1->Text,EnPW(Edit2->Text));
if(s==0) //合法用户,登录成功
{
Edit2->Clear();
CurrUser=ComboBox1->Text;
if(CurrUser=="root"){ //超级用户
Form2->ToolButton20->Visible=true;
Form2->Caption="欢迎你的光临: "+CurrUser+" 你是超级用户";
}
else {
Form2->Caption="欢迎你的光临: "+CurrUser+" 你是普通用户";
Form2->ToolButton20->Visible=false;
}
//=================================
CurrDir=Root;
Form2->TreeView1->Items->Clear();
Form2->ListTree(Root,NULL,0);
FilePath="Root\\";
Form2->ComboBox1->Clear();
Form2->ComboBox1->Text=FilePath;
Form2->ShowDir(Root);
//===================================
Form1->Hide();
Form2->Show();
CurrNode=Form2->TreeView1->TopItem;
CurrNode->Expand(false);
}
else if(s==1)
{ShowMessage("密码错误!请检查~");
Edit2->SetFocus();
return;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RegisterClick(TObject *Sender)
{
Edit1->Clear();
Edit3->Clear();
Edit4->Clear();
GroupBox1->Show();
Edit1->SetFocus();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CancelReClick(TObject *Sender)
{
GroupBox1->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OKReClick(TObject *Sender)
{ //新用户注册
if(Edit1->Text=="")
{ShowMessage("用户名不能为空!");
Edit1->SetFocus();
return;
}
MFD m=Mfd,n;
while (m->Next){
if (Edit1->Text==m->Next->user){
ShowMessage("该用户名已经存在!");
Edit1->SetFocus();return;
}
m=m->Next;
}
if(Edit3->Text=="")
{ShowMessage("密码不能为空!");
Edit3->SetFocus();
return;
}
if(Edit3->Text!=Edit4->Text){
ShowMessage("确认密码不同,请检查!");
Edit3->SetFocus();
return;
}
n=new mfd;
n->user=Edit1->Text;
n->password=EnPW(Edit3->Text);
n->Next=NULL;
m->Next=n;
ShowMessage("注册成功!请登陆!");
GroupBox1->Hide();
ComboBox1->ItemIndex=ComboBox1->Items->Add(n->user);
Edit2->Clear();
Edit2->SetFocus();
}
//---------------------------------------------------------------------------
void TForm1::SaveMFD(FILE * File) //保存用户列表
{
fclose(File);
DeleteFile("MFD.txt"); //删除老MFD文件
int f=FileCreate("MFD.txt"); //创建新的MFD文件
FileClose(f);
File=fopen("MFD.txt","r+");
MFD m=Mfd->Next;
char cuser[15];
char cpass[15];
int i=0;
while(m)
{
StrPCopy(cuser,m->user);
StrPCopy(cpass,m->password);
fseek(File,i*30,0);
fwrite(cuser,m->user.Length(),1,File);
fseek(File,i*30+15,0);
fwrite(cpass,m->password.Length(),1,File);
m=m->Next;
i++;
}
fclose(File);
}
//--------------------------------------------------------------------------
String TForm1::EnPW(String passwd)
{ //简单的密码加密
String enpass;
char buf[15];
StrPCopy(buf,passwd);
for(int i=0;i<passwd.Length();i++)buf[i]+=i+1;
enpass=buf;
return enpass;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ChangBnClick(TObject *Sender)
{ //更改密码
Sname->Caption=ComboBox1->Text;
OldPw->Clear();
NewPw1->Clear();
NewPw2->Clear();
GroupBox2->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CancelChangeClick(TObject *Sender)
{
GroupBox2->Hide();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ClearPw(TObject *Sender)
{
Edit2->Clear();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OKChangeClick(TObject *Sender)
{ //修改密码
MFD m=Mfd->Next;
while (Sname->Caption!=m->user)m=m->Next;
if(OldPw->Text=="")
{ShowMessage("旧密码不能为空!");
OldPw->SetFocus();
return;
}
if(NewPw1->Text=="")
{ShowMessage("新密码不能为空!");
NewPw1->SetFocus();
return;
}
if(NewPw1->Text!=NewPw2->Text){
ShowMessage("确认新密码不同,请检查!");
NewPw1->SetFocus();
return;
}
if(m->password!=EnPW(OldPw->Text)){
ShowMessage("旧密码不正确");
OldPw->SetFocus();
return;
}
m->password=EnPW(NewPw1->Text);
ShowMessage("密码修改!请登陆!");
GroupBox2->Hide();
Edit2->Clear();
Edit2->SetFocus();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -