📄 basiccmd.cpp
字号:
/***
*
*basiccmd.cpp - 基本命令各函数
*
* 编写者:杨金锋
*
* 完成时间:2008年11月13日
*
* 修改时间:2008年11月15日
*
****/
#include "StdAfx.h"
#include "Head.h"
/*
* 函数功能: 输入密码
* 输入参数: char *pwd
* 输出参数: int
* 返 回 值: 0 表示成功
* 1 表示失败
*/
int InputPwd(char *pwd)
{
char pwdch;
int i;
fflush(stdin); //清除输入流
for(pwdch=getch(), i=0; pwdch!=13; pwdch=getch())
{
if(pwdch == 8) //退格键的ASCII码为 8
{
if(i > 0)
{
putchar('\b');
pwd[--i] = '\0';
}
putchar(0);
putchar('\b');
continue;
}
putchar('*');
pwd[i++] = pwdch;
}
pwd[i] = 0;
return 0;
}
/**********登录函数*************/
int Login(char*user_name)
{
int i,n,pos1,pos2;
FILE * pFile;
user_information inform;
if ( (pFile=fopen("userinformation.txt","r")) == NULL)
printf("Error opening file");
for(i=1;;)
{
if(fgets(inform.username , MAX_USERNAME , pFile)==NULL)
{
printf("该用户名不存在\n是否重新输入,(是按y,其它键退出)\n");
switch(getchar())
{
case 'y':
case 'Y':
rewind(pFile);
printf("请再次输入用户名\n");
fflush(stdin);
gets(user_name);
break;
default:
printf("已退出\n");
fclose(pFile);
return 0;
}
fgets(inform.username , MAX_USERNAME , pFile);
}
fgets(inform.password , MAX_PASSWORD , pFile);
pos1 = strlen(inform.username);
if(inform.username[pos1-1] == '\n')
inform.username[pos1-1] = '\0';
pos2 = strlen(inform.password);
if(inform.password[pos2-1] == '\n')
inform.password[pos2-1] = '\0';
n=strcmp(user_name,inform.username);
if(n==0) //如果用户名输入正确,则进入密码输入
{
char password[MAX_PASSWORD];
if (access(user_name,0)!=-1) //判断是否有名称为用户名的文件夹
{
printf("请输入密码\n");
while(InputPwd(password));
while(strcmp(password,inform.password)!=0)
{
printf("密码输入错误\n重新输入按y,按其他键退出\n");
switch(getchar())
{
case 'y':
case 'Y':
printf("请输入密码\n");
while(InputPwd(password));
break;
default:
printf("已退出\n");
fclose(pFile);
return 0;
}
}
printf("\n登录成功\n");
fclose(pFile);
return 1;
}
}
}
}
/****注册函数******************
* 函数功能: 注册
* 输入参数: char *useer_name
* 输出参数: int
* 返 回 值: 1 表示成功
0 表示失败
*******************************/
int Register(char*user_name)
{
//读取已经存在的用户名的信息并与新用户名比较
int i,n,pos,k;
unsigned j;
char a;
FILE * pFile;
user_information inform;
if ( (pFile=fopen("userinformation.txt","at+")) == NULL)
printf("Error opening file");
for(i=1;;)
{
if(fgets(inform.username , MAX_USERNAME , pFile)==NULL)
break;
fgets(inform.password , MAX_PASSWORD , pFile);
pos = strlen(inform.username);
if(inform.username[pos-1] == '\n')
inform.username[pos-1] = '\0';
n=strcmp(user_name,inform.username);
if(n==0)
{
//注册过程中若因用户名冲突可选择退出注册
printf("该用户名已存在\n重新输入注册按y,退出注册按其他键\n");
switch (getchar())
{
case'y':
printf("请重新输入用户名\n");
fflush(stdin);
gets(user_name);
rewind(pFile);
break;
default:
printf("已退出注册\n");
fclose (pFile);
return 0;
}
}
}
//输入密码并验证
char password[2][MAX_PASSWORD];
for(i=1;;)
{
for(i=1;;)
{
printf("\n请输入密码(6到18位)\n"); //第一次输入密码
while(InputPwd(password[0]));
for (j=0;j<strlen(password[0]);j++) //验证密码中是否有不合法字符
{
a=password[0][j];
if (!((a>=48&&a<=57)||(a>=65||a<=90)||(a>=97&&a<=122)))
{
k=1; //表示密码中包含不合法字符
}
}
if(!strcmp(password[0],"")) //限制密码不能为空
printf("\n密码不能为空");
else if (k==1)
{
printf("密码只能包括数字和字母\n");
}
else if (strlen(password[0])<6||strlen(password[0])>18)
{
printf("密码长度为6~18字符!\n");
printf("请重新输入密码.\n");
}
else
break;
}
printf("\n请再次输入密码(6到18位)\n"); //重复输入密码
while(InputPwd(password[1]));
if(strcmp(password[0],password[1])==0)
{
break;
}
else
printf("\n密码输入不正确,请重新输入\n");
}
printf("\n注册成功\n");
// 将新用户信息写入文件
rewind(pFile);
fputs(user_name,pFile);
fputs("\n",pFile);
fputs(password[0],pFile);
fputs("\n",pFile);
fclose (pFile);
return 1;
}
//退出系统
void Quit()
{
exit(1);
}
void Help()
{
}
/***********帮助函数************
*功能:显示相关命令的帮助信息
*输入:char * order
*******************************/
void HelpA(char*order)
{
if (strcmp(order,"login")==0)
{
printf("功能:登录文件服务器\n");
printf("用法:login 用户名\n");
printf("举例:login user\n");
return;
}
if (strcmp(order,"register")==0)
{
printf("功能:在文件服务系统中注册一个新用户\n");
printf("用法:register 新用户名\n");
printf("举例:register user\n");
return;
}
if (strcmp(order,"logout")==0)
{
printf("功能:用于登录文件服务器后退出登录,并未退出程序\n");
printf("用法:logout\n");
printf("举例:logout\n");
return;
}
if (strcmp(order,"quit")==0)
{
printf("功能:退出文件服务器程序\n");
printf("用法:quit\n");
printf("举例:quit\n");
return;
}
if (strcmp(order,"help")==0)
{
printf("功能:调出命令的帮助信息\n");
printf("用法一:help 命令\n此用法即显示相关命令的帮助信息\n");
printf("用法二:help\n此用法即显示当前可用命令的帮助信息\n");
printf("举例:\n");
printf("\t用法一:help order\n");
printf("\t用法二:help\n");
return;
}
if (strcmp(order,"upload")==0)
{
printf("功能:上传文件\n");
printf("用法:upload 源文件路径 目标路径\n");
printf("举例:将D盘根目录下的wenjian.cpp上传到文件服务器根目录的source目录下,命令如下:\n");
printf("\tupload D:\\wenjian.cpp\\source\n");
printf("注意:目标路径中若有同名文件,则会被覆盖\n");
return;
}
if (strcmp(order,"download")==0)
{
printf("功能:下载文件\n");
printf("用法:download 源文件路径 目标路径\n");
printf("举例:将文件服务器上的wenjian.cpp文件下载到D盘根目录下,命令如下:\n");
printf("\tdownload wenjian.cpp D:\\\n");
printf("注意:目标路径中若有同名文件,则会被覆盖\n");
return;
}
if (strcmp(order,"delete")==0)
{
printf("功能:删除文件\n");
printf("用法:delete 文件名\n");
printf("举例:delete wenjian.cpp\n");
printf("注意:若文件不存在,则删除失败\n");
return;
}
if (strcmp(order,"list")==0)
{
printf("功能:罗列该用户在当前目录上的所有文件和目录,包含文件名、文件大小、建立时间\n");
printf("用法一:list\n");
printf("用法二:list -r(递归显示)\n");
printf("举例一:list\n");
printf("举例二:list -r\n");
return;
}
if (strcmp(order,"find")==0)
{
printf("功能:查找文件(根据关键字查找文件服务器的所有文件)\n");
printf("用法:find 关键字\n");
printf("举例:find file\n");
return;
}
if (strcmp(order,"mkdir")==0)
{
printf("功能:建立目录\n");
printf("用法:mkdir 目标目录名\n");
printf("举例:mkdir user\n");
printf("注意:若目标目录名和已有目录名或文件名冲突,则失败\n");
return;
}
if (strcmp(order,"rmdir")==0)
{
printf("功能:删除目录\n");
printf("用法:rmdir 目标目录名\n");
printf("举例:rmdir user\n");
printf("注意:若目标目录不存在,则失败\n");
return;
}
if (strcmp(order,"cd")==0)
{
printf("功能: 进入目录\n");
printf("用法:cd 目标地址\n");
printf("举例:cd sourse\n");
return;
}
if (strcmp(order,"rm")==0)
{
printf("功能: 重命名文件或文件夹\n");
printf("用法:rm 文件名或文件夹名\n");
printf("举例:rm text.txt或rm sourse\n");
return;
}
if (strcmp(order,"cp")==0)
{
printf("功能: 复制文件\n");
printf("用法:cp 文件名 目标地址\n");
printf("举例:cp text.txt sourse\n");
return;
}
if (strcmp(order,"mv")==0)
{
printf("功能: 移动文件\n");
printf("用法:mv 文件名 目标地址\n");
printf("举例:mv text.txt sourse\n");
return;
}
if (strcmp(order,"pwd")==0)
{
printf("功能: 显示当前目录\n");
printf("用法:pwd\n");
printf("举例:pwd\n");
return;
}
if (strcmp(order,"type")==0)
{
printf("功能: 显示文本文件的内容\n");
printf("用法:type 文本文件名\n");
printf("举例:type text.txt\n");
return;
}
if (strcmp(order,"attr")==0)
{
printf("功能: 显示文件或文件夹属性\n");
printf("用法:attr 文件名或文件夹名\n");
printf("举例:cd text.txt或cd sourse\n");
return;
}
if (strcmp(order,"fupload")==0)
{
printf("功能: 上传文件夹\n");
printf("用法:fupload 要上传的文件夹地址 目标地址\n");
printf("举例:fupload D:\\testdir sourse\n");
return;
}
printf("\n不是文件服务器的命令,输入“help”查看可用命令\n");
}
/****************************
* 登录后的帮助函数
*罗列登陆后可用命令的帮助信息
*****************************/
void Help_login()
{
printf("logout\t");
printf("logout用于登录文件服务器后退出登录\n");
printf("upload\t");
printf("上传文件\n");
printf("download\t");
printf("下载文件\n");
printf("delete\t");
printf("删除文件\n");
printf("list\t");
printf("罗列该用户在当前目录上的所有文件和目录\n");
printf("find\t");
printf("查找文件(根据关键字查找文件服务器的所有文件)\n");
printf("mkdir\t");
printf("建立目录\n");
printf("rmdir\t");
printf("删除目录\n");
printf("cd\t");
printf("进入目录\n");
printf("rm\t");
printf(" 重命名文件或文件夹\n");
printf("cp\t");
printf(" 复制文件\n");
printf("mv\t");
printf("移动文件\n");
printf("pwd\n");
printf("功能: 显示当前目录\n");
printf("type\t");
printf("显示文本文件的内容\n");
printf("attr\t");
printf("显示文件或文件夹属性\n");
printf("fupload\t");
printf("上传文件夹\n");
printf("输入“help 命令名称”查看命令的具体用法\n");
}
/*****************************
* 登录前的帮助函数
*罗列登陆前可用命令的帮助信息
*****************************/
void Help_unlogin()
{
printf("login\t");
printf("登录文件服务器\n");
printf("register\t");
printf("在文件服务系统中注册一个新用户\n");
printf("help\t");
printf("调出命令的帮助信息\n");
printf("quit\t");
printf("退出文件服务器程序\n");
printf("输入“help 命令名称”查看命令的具体用法\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -