//textattr(BLACK*16|WHITE);
clrscr();/*clearscreen*/
LoginF();/*userlogin*/
clrscr();
if(loginsuc==1)/*LoginSuccessfully*/
{
while
(1)
{
wgetchar=0;
if(choiceend==1)
printf("\n\nC:
\\%s>",strupr(dirname));
else
printf("Badcommandorfilename.\nC:
\\%s>",strupr(username));
gets(choice);//输入所选择的
strcpy(choice,ltrim(rtrim(strlwr(choice))));//将输入的值赋给choice
if(strcmp(choice,"dir")==0)choice1=1;//依次将输入的值与dir,create等进行比较
elseif(strcmp(choice,"create")==0)choice1=2;//如果输入create将choice1置为2通过switch选择,以下依次类推
elseif(strcmp(choice,"delete")==0)choice1=3;
elseif(strcmp(choice,"attrib")==0)choice1=4;
elseif(strcmp(choice,"open")==0)choice1=5;
elseif(strcmp(choice,"close")==0)choice1=6;
elseif(strcmp(choice,"read")==0)choice1=7;
elseif(strcmp(choice,"write")==0)choice1=8;
elseif(strcmp(choice,"exit")==0)choice1=9;
elseif(strcmp(choice,"cls")==0)choice1=10;
elseif(strcmp(choice,"cd")==0)choice1=11;
elseif(strcmp(choice,"help")==0)choice1=20;
elsechoice1=12;//choice1=12时跳转到default,然后继续循环
switch(choice1)
{
case1:
DirF();choiceend=1;break;
case2:
CreateF();choiceend=1;if(!
wgetchar)getchar();break;
case3:
DeleteF();choiceend=1;if(!
wgetchar)getchar();break;
case4:
ModifyFM();choiceend=1;if(!
wgetchar)getchar();break;
case5:
OpenF();choiceend=1;if(!
wgetchar)getchar();break;
case6:
CloseF();choiceend=1;if(!
wgetchar)getchar();break;
case7:
ReadF();choiceend=1;if(!
wgetchar)getchar();break;
case8:
WriteF();choiceend=1;if(!
wgetchar)getchar();break;
case9:
printf("\nYouhaveexitedthissystem.");
QuitF();exit(0);break;
case10:
clrscr();choiceend=1;break;
case11:
CdF();choiceend=1;break;
case20:
help();choiceend=1;break;
default:
choiceend=0;
}
}
}
else
printf("\nAccessdenied.");//登录成功
}
voidhelp(void)
{
printf("\nTheCommandList\n");
printf("\nCdAttribCreatewriteReadOpenClsDeleteExitClose\n");
}
char*rtrim(char*str)/*除去末尾端的空格指针指向字符串第一个*/
{
intn=strlen(str)-1;//n为字符串长度减1
while(n>=0)
{
if(*(str+n)!
='')//末尾不存在空格
{
*(str+n+1)='\0';//'\n'表示结束符
break;
}
elsen--;//如果存在空格将空格去掉
}
if(n<0)str[0]='\0';
returnstr;
}
char*ltrim(char*str)/*除去前端的空格*/
{
strrev(str);//把字符串str的所有字符的顺序颠倒
rtrim(str);//去掉尾端空格
strrev(str);//再颠倒过来
returnstr;
}
voidLoginF()/*LOGINFileSystem*/
{
charloginame[MAXNAME],loginpw[9],logincpw[9],str[50];
inti,j,flag=1;
chara[25];
intfindout;/*loginusernotexist*/
while
(1)
{
findout=0;
printf("\n\nLoginName:
");
gets(loginame);//输入字符串
ltrim(rtrim(loginame));//去掉前后端的空格
fp_mfd=fopen("c:
\\osfile\\mfd.txt","rb");//打开该文件,返回给一个文件指针
for(i=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!
=0;i++)//检测输入登录名和mfd.txt是否一样
if(strcmp(strupr(ufd_lp.ufdname),strupr(loginame))==0)//若已经注册过
{
findout=1;//表示该用户已注册过
strcpy(logincpw,ufd_lp.ufdpword);
}
fclose(fp_mfd);
if(findout==1)/*userexist*/
{
printf("LoginPassword:
");
InputPW(loginpw);/*inputpassword,use'*'replace*/
if(strcmp(loginpw,logincpw)==0)
{
strcpy(username,strupr(loginame));
strcpy(dirname,username);
fp_mfd=fopen("c:
\\osfile\\mfd.txt","rb");
for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!
=0;j++)
{
strcpy(str,"c:
\\osfile\\");
strcat(str,ufd_lp.ufdname);
strcat(str,".txt");
ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));
strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));
fp_ufd=fopen(str,"rb");
fcount[j]=0;
for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!
=0;i++,fcount[j]++)
{
ifopen[j][i].ifopen=0;
ifopen[j][i].openmode=4;
}
fclose(fp_ufd);
}
fclose(fp_mfd);
ucount=j;
SetPANo(0);
printf("\n\nLoginsuccessful!
WelcometothisFileSystem\n\n");
loginsuc=1;
return;
}
else
{
printf("\n\n");
flag=1;
while(flag)
{
printf("LoginFailed!
PasswordError.TryAgain(Y/N):
");
gets(a);
ltrim(rtrim(a));
if(strcmp(strupr(a),"Y")==0)
{
loginsuc=0;
flag=0;
}
elseif(strcmp(strupr(a),"N")==0)
{
loginsuc=0;
flag=0;
return;
}
}
}
}
else
{
printf("NewPassword(<=8):
");
InputPW(loginpw);/*inputnewpassword,use'*'replace*/
printf("\nConfirmPassword(<=8):
");/*inputnewpassword,use'*'replace*/
InputPW(logincpw);
if(strcmp(loginpw,logincpw)==0)
{
strcpy(ufd_lp.ufdname,strupr(loginame));
strcpy(ufd_lp.ufdpword,loginpw);
fp_mfd=fopen("c:
\\osfile\\mfd.txt","ab");
fwrite(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd);
fclose(fp_mfd);
strcpy(username,strupr(loginame));
strcpy(dirname,loginame);
////////////////////////////////////////////////////////
strcpy(str,"c:
\\osfile\\");
strcat(str,username);
strcat(str,".txt");
if((fp_ufd=fopen(str,"rb"))==NULL)
{
fp_ufd=fopen(str,"wb");
fclose(fp_ufd);
}
fp_mfd=fopen("c:
\\osfile\\mfd.txt","rb");
for(j=0;fread(&ufd_lp,sizeof(OSUFD_LOGIN),1,fp_mfd)!
=0;j++)
{
/////////////////////////////////////
strcpy(str,"c:
\\osfile\\");
strcat(str,ufd_lp.ufdname);
strcat(str,".txt");
ufd[j]=(OSUFD*)malloc(sizeof(OSUFD));
strcpy(ufd[j]->ufdname,strupr(ufd_lp.ufdname));
fp_ufd=fopen(str,"rb");
for(i=0;fread(&ufd[j]->ufdfile[i],sizeof(OSFILE),1,fp_ufd)!
=0;i++,fcount[j]++)
{
ifopen[j][i].ifopen=0;
ifopen[j][i].openmode=4;
}
fclose(fp_ufd);
}
fclose(fp_mfd);
ucount=j;
SetPANo(0);
printf("\n\nLoginSuccessful!
WelcometothisSystem\n\n");
loginsuc=1;
return;
}
else
{
printf("\n\n");
flag=1;
while(flag)
{
printf("LoginFailed!
PasswordError.TryAgain(Y/N):
");
gets(a);
ltrim(rtrim(a));
if(strcmp(strupr(a),"Y")==0)
{
loginsuc=0;
flag=0;
}
elseif(strcmp(strupr(a),"N")==0)
{
loginsuc=0;
flag=0;
return;
}
}
}
}
}
}
voidSetPANo(intRorW)/*Setphysicaladdressnum,0-read,1-write*/
{
inti,j;
if(RorW==0)
{
if((fp_file_p=fopen("c:
\\osfile\\file\\file_p.txt","rb"))==NULL)//如果文件未读成功
{
fp_file_p=fopen("c:
\\osfile\\file\\file_p.txt","wb");//创建该文件
fclose(fp_file_p);
}
fp_file_p=fopen("c:
\\osfile\\file\\file_p.txt","rb");
///////////////////////////////////////////////////////////////////
for(i=0;fread(&j,sizeof(i